---
# System prepended metadata

title: Post Mortem 삼성전자무선 HM520 장비 NPE에서 조명값 0 되는 문제

---

---
title: Post Mortem 삼성전자무선 HM520 장비 NPE에서 조명값 0 되는 문제 
---
# 삼성전자무선 HM520 장비 NPE에서 조명값 0 되는 문제 사후 분석 (Post Mortem) 


참고
- https://devocean.sk.com/vlog/seminar/Postmortem.pdf

## 사후 분석 진행 
2023.5.9 RM101 15:30~17:00 
참석자 : 한석원 팀장, 구자현 수석, 박형근 수석, 최태원 수석, 박상지 책임, 유승민 연구원

### 1.  결함 식별
-   결함 내용
    1. **부품을 더블클릭하여 NPE를 열면 조명값이 0으로 바뀌어져 있다.**
    2. **부품을 더블클릭하여 NPE를 열면 'Chip부품을 FlipChip부품그룹으로 변환하겠습니까?' 라는 메시지 뜬다.**
-   결함이 발견된 시기와 장소: 
    -   결함 생성 : 
        -   4.23 r61416에 커밋
    -   결함 배포 :
        -   T-Solution NPE 4.600.000.017, HM520 MMI V1.480.E22.029_SP2
    -   결함 발견 :
        -   2023.5.4 목 13:00 구미 삼성전자 무선 (공동연차날) 나승춘 과장이 적용후 문제 발견하여 한상현 책임통해 유승민 연구원에게 전달됨.
-   결함이 발견된 시스템/모듈/기능: 
    -   HM520장비의 NPE에서 발견
    -   T-Sol NPE에도 동일 문제 (4.6.000.017버전)
-   결함의 유형:
    - **생산은 가능하나 부품 편집 불가하고, 조명 0인 채로 저장할 경우 데이터 날라가는 심각한 결함**

### 2.  결함 분석

-   결함 발생 원인:
    -   커밋 내용
    ```
    Revision: 61416
    Author: seungmin.you
    Date: 2023년 4월 24일 월요일 오후 5:09:06
    Message:
    [review_최태원][artf119974]: [한양디지텍][NPE] 설정된 Pitch 값이 자동화 추천 데이터와 다를 때, 자동화 버튼 적색 표기
     - Pitch 값에 대한 자동화 데이터를 AutomationData 모듈으로부터 받아올 때, SetAutoFeederPitch 플래그만 올려서 받아온다.
     - 표준 칩 부품의 경우, 부품 그룹이 변경되면 Pitch 값이 자동으로 변경되는데 이때 자동화 Pitch 데이터를 새로 받아온다.
    ----
    Modified : /trunk/src/NPE/NewPartEditor/NewUPE/ViewModels/CommonData/CommonDataViewModel.cs
    Modified : /trunk/src/NPE/NewPartEditor/NewUPE/ViewModels/EssentialViewModel.cs
    Modified : /trunk/src/NPE/NewPartEditor/NewUPE/ViewModels/Menu/TitleAndNavigationviewModel.cs
    Modified : /trunk/src/NPE/NewPartEditor/NewUPE/ViewModels/Menu/VisionAndShapeViewModel.cs
    ```


    -   EssentialViewModel.cs 아래 코드 추가로 발생
    ```C#
    // Added by Seungmin You [2023-04-24]
    // [artf119974]: [한양디지텍][NPE] 설정된 Pitch 값이 자동화 추천 데이터와 다를 때, 자동화 버튼 적색 표기
    // 표준 칩 부품의 경우, 부품 그룹이 변경되면 Pitch 값이 자동으로 변경되는데 이때 자동화 데이터 새로 받아온다.
    var commonDataVM = ServiceLocator.Current.GetInstance<CommonDataViewModel> ();

    if (titleVM != null && commonDataVM != null)
    {
        if (UPEUtility.IsCurrentPartTypeAllowCheckDiffAutomationData ())
        {
            titleVM.UpdateAutomationData (true);
            commonDataVM.ChangeAutomationPitchButtonStyle ();
        }
    }
    ```
-   결함이 발견되지 않았던 이유:
	- 유: 그룹변경 메세지 현상은 검증시 발생하지 않았음.
	- 유: 피치관련 내용 변경이여서 조명 데이터가 변경되었는지는 확인하지 않았다.
-   리뷰는 했는가? 
	- 유: 코드리뷰 하지 않았다. VOC가 많아서 급해서 커밋은 해두고 릴리즈 전에 리뷰하려고 했는데 리뷰하지 못했다.
	- 최: 리뷰해도 못잡았을 수도.
	- 구: 이제까지 리뷰 못했던 경우가 얼마나 되나?
	    - 유 : 30% 정도
		
-   결함이 야기한 영향:
    -   SW 다운그레이드로 고객사에 품질이슈 발생
    -   해외고객사에 T-Sol 새버전 설치되어 ini 수정하도록 가이드함. (이길우 대리)
    -   코리아EMS에 T-Sol 새버전 설치되어 ini 수정하도록 가이드함. (김영진 과장)

### 3.  결함 수정

-   수정된 코드/패치: 
    -   하기와 같이 수정 (UPEUtility.IsInitializedNPE 체크 추가)
```
Index: EssentialViewModel.cs
===================================================================
--- EssentialViewModel.cs	(revision 61562)
+++ EssentialViewModel.cs	(revision 61563)
@@ -652,7 +652,14 @@
 
     if (titleVM != null && commonDataVM != null)
     {
-        if (UPEUtility.IsCurrentPartTypeAllowCheckDiffAutomationData ())
+        if (UPEUtility.IsCurrentPartTypeAllowCheckDiffAutomationData () && UPEUtility.IsInitializedNPE)
         {
             titleVM.UpdateAutomationData (true);
             commonDataVM.ChangeAutomationPitchButtonStyle ();
```                                    
-   수정된 코드/패치의 효과:
	- 내부검증 확인완료. 패치 적용은 안되었다. 
	- 장비 SP3에 적용되었고 내부 검증 확인 완료.

### 관련 논의
- 한 : 근본적으로 해결할 방법은 없는가? 추후에라도 또 발생할 여지는 없는가? 신입사원이나 아무나 수정하더라고 이런 문제가 없도록 하자. assert를 넣자.
- 최 : 자동화 값은 임시로 저장되어야 하는데 왜 실제 데이터에 엎어 써 졌는가? 
	- 유승민 : 좀 더 확인 필요하다.
		- 한석원 : 의문이 없을때까지 파고들어가야 한다.
			- 유 : 자동화 데이터는 그 안에서 저장된다.
- 구 : 그룹 변경 메세지에 대해서는 아직 확인 안된거 같다. 재연시키고 원인 확인 해야 한다.
- 한 : SelectedPartgroupID의 set에 기능이 들어있는데 분리하는게 어떨까?
- 한 : 수동으로 피치값 변경시에는 적색표시가 안되는거 아닌가? 
	- 유 : 변경부분에도 적색표시 한다. 부품 Y값 바뀔때에도 적색표시 한다.
		- 한 : 공급각도 따라서도 달라질수 있으니 여기도 확인해야 한다. 
			- 유 : 확인해 보겠습니다.
- 최 : 표준 칩 때문에 넣은거라면 안 넣어도 되었을듯. 피치 변경 부분에 이미 넣어져서.
	- 유 : 확인해 보겠습니다.
- 박 : 초기화 확인해야 하는것을 그당시 알았는가?
	- 유 : 몰랐다.
		- 박 : 초기화 되어야만 동작되는 부분을 근본적으로 수정은 안될지?
			- 최 : 대대적인 수정 필요할듯. 여러 군데에서 현재 사용하고 있다.


### 4.  결함 예방

-   이러한 결함이 다시 발생하지 않도록 하는 방법:
	 박형근 : titleVM.UpdateAutomationData (true, IsInitializedNPE) 이렇게 내부에서 체크하도록 하면 어떨까?
	- 한 : 부품 저장시 변경 내용 보여주는 창을 띄워주면 어떨까. 디버깅 모드에서라도. 자주 검증시 발견되도록.

-   결함 예방을 위해 변경된 프로세스/절차:
	- 검증시 부품 새로 저장해서 생각치않은 변경이 있는지 꼭 확인하자. (변경내용 보여주는 창 필요)
	- 코드리뷰를 반드시 할 수 있게 절차 변경 고민 : 한팀장님이 고민해보기로함.
	- 한 : 코드리뷰시 문제발생할 가능성 있는지 새로운 관점으로 보려 노력하는것 필요.
	- 박 : 교차검증을 하면 좋겠다.
-   추가적인 QA/QC 검증: 


## KPTA
- Keep (잘한점) 
	- 자료가 신속하게 왔다. 로그, PCB 1시간후에 왔다.
		- 구 : 왜 실험실에서 재연 안되었나?
			- 유 : 실험실에서 ini 설정 안되어 있어서.
	- 로그가 있어서 쉬고있던 최수석이 발견 할 수 있었다.
	- 공동연차였는데 유승민 출근하여서 다행히 빨리 되었다.
- Problem (개선할점)
	- 코드리뷰 안했다
	- 검증에서 발견 안되었다.
	- 검증할때 연관된 기능도 사이드이펙트 없는지 확인하였으면 좋겠다.
	- 유 : 코드리뷰가 제일 아쉽다.
	- 한 : 승민에게 일이 많이 몰려서 문제. 업무 부하량 조정 필요.
- Try (시도할것)
	- 최 : 승민에게 술 사주기
- Action (할일) 
	- **데이터 변경 확인 창 만들기** 
	- **assert 넣기**
	- **아직 물음표인 부분 빨리 확인하기 : 그룹변경 메시지 왜 뜨나? 조명값 왜 반영되었는가? 공급각도 부분도 확인하기**
	- **코드 리뷰 꼭 하기**
    
## 기타
