\[artf122322\]\[JABIL\]\[XM520F\] NPE 그룹핑 하는데 예외 발생 --------------------------------------------------- ### 0\. 결함 현상 - 이형부품 등록도중 리드들을 그루핑/언그루핑 하는 도중에 예외 발생하여 에러창이 뜨고, 일부 리드들 리드정보가 안보이는 문제 ### 1\. 결함 식별 - 결함이 발견된 시기와 장소: - \[2024\. 2월29일 09시45분\] JABIL고객사 발생 - 3월 4일 메일 받음 (3/1휴일 및 3/2~3 주말) - 통화하고 자료 요청함. - 3월 5일 재연시나리오 및 동영상 받음 - 결함이 발견된 시스템/모듈/기능: - NPE - Edit Shape 탭 - 결함의 유형: - 예외발생 - 결함이 야기한 영향: - 부품 등록이 잘 안되어 출장 인력들이 당황하고 고생하였음. 다시 여러번 등록하여 성공해서 생산에는 문제 없었음. ### 2\. 결함 분석 - 결함 발생 원인: - 1. 상하/좌우 리드는 그루핑안되어야 하는데 체크 누락되어서 그루핑되었고, - 1. 다른 탭 갔다 오면 그룹 ID를 새로 매기는데 이 부분에도 오류가 있어서 ID가 잘못 들어간다. 나중에 언그루핑하면 그룹ID를 못찾아서 예외발생 - 결함 생성 : - **1번 문제는** **2020년이전**부터 있었음 - **2번 문제는 2023-07-06** 오후 1:20:16 r62154: 탭 이동시 부품데이터 새로 만들던 것을 시간단축을 위해 ID만 새로 매핑하도록 개선하면서 버그 발생 - 결함 배포 : - Revision: 62393 Author: hg98_park Date: **2023년 7월 27일** 2.6.13.0 (V4.600.000.020) - 결함이 발견되지 않았던 이유: - 발생 조건이 복잡해서 - 1. 리드그룹과 개별리드가 혼재된 부품에서 - 1. 다른 탭 이동후에 다시 왔다가 - 1. 언그루핑해야 발생한다. - **어떻게 하면 더 빨리 발견되었을까?** - ‌ - 리뷰는 했는가? - 했다. 수정부분 이전에 이미 ID가 잘못지정되는데 - 결함 수정에 필요한 자원: - 부품 파트 인력(공수 3MD) ### 3\. 결함 수정 - 수정된 코드/패치: ```Revision: 65321 Author: hg98_park Date: 2024년 3월 6일 수요일 오후 6:33:55 Message: \[artf122322\]\[review_최태원\]: \[JABIL\]\[XM520F\] NPE 언그룹핑 하면 예외 발생 및 파라미터 표시 안됨 \[현상\] : \[JABIL\]\[XM520F\] NPE 언그룹핑 하면 예외 발생 및 파라미터 표시 안됨 \[원인\] : 리드언그루핑하면 내부 ID 꼬임 \[대책\]: ID 꼬이는 버그 수정 - 리드방향이 상하인 경우와 좌우인 경우는 그루핑하면 안되는데 그루핑되는 문제가 있어서 못하도록 수정 - ID 재매핑시 중복ID때문에 매핑 안되는 문제가 있어서 무조건 다 매핑 새로 하도록 수정 - 객체 비교시 null check 누락부분 수정 (문제와는 무관) \[검토\]: LGTM --- Modified : /trunk/src/NPE/NewPartEditor/NewUPE/Utility/CommonUtility.cs Modified : /trunk/src/NPE/NewPartEditor/ShapeDrawingModule/Models/GenericCopier.cs Modified : /trunk/src/NPE/NewPartEditor/ShapeDrawingModule/Models/ShapeDrawingData.cs ``` - 수정된 코드/패치의 효과: - 자체 검증 완료. - 3/8 고객사 전달 예정 - 수정 작업에 사용된 자원: - 박형근 3MD - 최태원 ?MD - 수정 작업의 기간: 4일 - **어떻게 하면 더 빨리 해결할 수 있었을까?** - 기존 코드 구조 및 동작 내용을 이해하고 있었으면 더 빨랐겠다. - 코드가 복잡하고 가독성이 떨어져서 시간 걸린다. 어디가 문제인지 잘 안보인다. ### 4\. 결함 예방 - 이러한 결함이 다시 발생하지 않도록 하는 방법: - 비전데이터를 NPE용 데이터로 변환하는 과정에서 그룹을 자동 생성하는데 이로 인해 불일치가 발생하기 쉬운 구조이다. - 앞으로 만들때는 안정적인 구조로 설계하자. - 일반적인 컨셉을 벗어나는 코딩하지 말자. ID가 중복되게 들어간다던지. - ‌ - 결함 예방을 위해 변경된 프로세스/절차: - ‌ - 추가적인 QA/QC 검증: - ‌ KPTA ---- - Keep (잘한점) - ‌ - Problem (개선할점) - ‌ - Try (시도할것) - ‌First()쓰지말고 FirstOrDefault()를 사용하도록 하자. - Action (할일) - ㅁㄴㅇㄹ