1. 소개 ¶
- 주제 : NSIS IDE
- 참여 : 강석천 (99, 1002)
- 기간 : 2002.2.3 (뭐.. 어쩌면 2.9 일까지 할 수도.^^;)
- 목표 : NSIS 와 연동하여 간단한 NSIS Script 작성과 관련한 IDE 환경을 구축한다.
2. Opening Statement ¶
특별한 녀석은 아니고. -_-; NSIS 스크립트를 작성하다가 에디터 에서 스크립트 작성하고 command 창에서 스크립트 컴파일 하고 만들어진 인스톨러 실행하다가 갑자기 생각이 나서라는. --;
그냥 Editplus 에서 makensis 을 연결해서 써도 상관없지만, 만일 직접 만든다면 어떻게 해야 할까 하는 생각에.. 그냥 하루 날잡아서 날림 플밍 해봤다는. --; (이 프로젝트는 NSIS_Start 의 subproject로, NSIS_Start 가 끝나면 자동소멸시킵니다. ^^;)
Solo Programming 으로 진행. XP 공부한거 소폭 적용해봄.
3. User Story ¶
- .nsi 스크립트를 load/save 할 수 있다.
- .nsi 스크립트를 읽어서 편집할 수 있다.
- .nsi 스크립트를 직접 컴파일해서 실행화일로 만들 수 있다. 컴파일 과정이 output 창에 표시된다.
- 컴파일 된 화일을 테스트하여 실행해볼 수 있다.
- MDI 기반.
4. Engineering Task ¶
한 Iteration 을 2시간으로 잡음. 1 Task Point는 Ideal Hour(?)로 1시간에 할 수 있는 양 정도로 계산. (아.. 여전히 이거 계산법이 모호하다. 좀 더 제대로 공부해야겠다.)
0.4 + 0.4 + 0.5 + 0.5 + 0.5 + 0.5 + 0.7 = 3.5 (전체 3.5 Task Point)
3.5 * 2 (실제로는 1.5배~2배정도 시간이 걸릴것임) = 7 시간
Planning & 중간 휴식시간 포함 1시간 추가 = 8 시간
- .nsi 스크립트를 load/save 할 수 있다.
화일 읽어서 자료구조에 저장. | 0.4 |
자료구조에 있는 데이터를 화일로 저장. | 0.4 |
- .nsi 스크립트를 읽어서 편집할 수 있다.
Rich Edit Control 의 이용. 편집. 자료구조와 sink. | 0.5 |
- .nsi 스크립트를 직접 컴파일해서 실행화일로 만들 수 있다. 컴파일 과정이 output 창에 표시된다.
CInnerProcess Class 의 이용. 약간 수정. makensis 이용. | 0.5 |
Output Windows 의 생성 | 0.5 |
Compile 동작 연결 | 0.5 |
- 컴파일 된 화일을 테스트하여 실행해볼 수 있다.
음.. script 에서 실제 Output이 될 화일을 분석 & 가져오기. | 0.7 |
- MDI 기반.
MFC의 MDI Framework 이용 | none |
0.4 + 0.4 + 0.5 + 0.5 + 0.5 + 0.5 + 0.7 = 3.5 (전체 3.5 Task Point)
3.5 * 2 (실제로는 1.5배~2배정도 시간이 걸릴것임) = 7 시간
Planning & 중간 휴식시간 포함 1시간 추가 = 8 시간
5. Iteration 계획 ¶
First Iteration :
- MDI Framework
- Rich Edit Control 의 이용. 0.5
- 화일 Save / Load 0.4 + 0.4 = 0.8 - 1.3 * 2 = 2.6
- CInnerProcess Class 0.5
- Output Window 0.5 - 1 * 2 = 2
- Script 로부터 Output 이 될 Target 화일의 분석 & 이름 가져오기 - 0.7
- Load / Save MDI Framework 와의 연결 - 0.7 - 1.4 * 2 = 2.8
6.1. Iteration 1 (1:00 ~ 3:00) ¶
추가 Task : Load / Save MDI Framework 와의 연결
현재 완료된 Task
중간 10분 휴식.
현재 완료된 Task
중간 10분 휴식.
- velocity : 1.3 task point
6.2. Iteration 2 (3:20 ~ 5:40) ¶
CInnerProcess Class 이용, Nsis 연결하기 - 0.5
Output Window 0.5 - 1 * 2 = 2
오후 4:34 완료.
추가사항:
오후 5:05 - 10분 휴식. Iteration 3 에 있는 녀석을 마저 하자.~
Script 로부터 Output 이 될 Target 화일의 분석 & 이름 가져오기 - 0.7
Output Window 0.5 - 1 * 2 = 2
오후 4:34 완료.
추가사항:
고려할 사항
오후 5:05 - 10분 휴식. Iteration 3 에 있는 녀석을 마저 하자.~
Script 로부터 Output 이 될 Target 화일의 분석 & 이름 가져오기 - 0.7
- velocity : 1.7 task point
- average : 1.5 task point
6.3. Iteration 3 (5:50 ~ 8:10) ¶
- Load / Save MDI Framework 와의 연결 - 0.7
- velocity : 0.7 task point.
- average : 2.2 / 3 = 0.73 task point / Iteration (2 hours)
7. 중간 공부 ¶
- Save/Load 와 관련한 메세지의 함수 호출 순서 (Function Call 따라가기)
~cpp * CWinApp::OnFileNew -> CDocManager::OnFileNew -> CMultiDocTemplate::OpenDocumentFile -> CNIDoc::OnNewDocument .. -> CNIView::OnInitialUpdate () * CWinApp::OnFileOpen -> CDocManager::OnFileOpen -> CMultiDocTemplate::OpenDocumentFile -> CNIDoc::OnOpenDocument .. -> CNIView::OnInitialUpdate () * CDocument::OnFileSave -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CDocument::OnFileSaveAs -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CFrameWnd::OnClose -> CWndApp::SaveAllModified -> CDocManager::SaveAllModified -> CDocTemplate::SaveAllModified -> CDocument::SaveModified -> CDocument::DoFileSave -> CDocument::DoSave -> CNIDoc::OnSaveDocument * CDocument::SaveModified -> DoFileSave
- 프로그램 실행중 다른 Process 띄우고 결과 스트링 얻어오기 (Console Util)
10. 평가 ¶
- MFC 와 연결되는 부분에 대한 TestFirstProgramming 을 제대로 지키지 못했다. (아.. GUI 부분은 애매하다. --;) 애매한 부분에 대해서 예전에 하던 방식이 섞이다 보니까 리듬이 깨졌다. 차라리 철저하게 TFP로 가는게 나았었을텐데 하는 생각이 들었다.
- 하지만, View/Document 구조가 한편으로는 방해물이.. 이미 디자인이 되어버린 Framework 의 경우 어떻게 적용을 시켜나가야 할까. 일단 주로 알고리즘과 관련된 부분에 대해 Test Code를 만들게 되었다. 계속 생각해봐야 할 문제일 것이다.
- 하지만, View/Document 구조가 한편으로는 방해물이.. 이미 디자인이 되어버린 Framework 의 경우 어떻게 적용을 시켜나가야 할까. 일단 주로 알고리즘과 관련된 부분에 대해 Test Code를 만들게 되었다. 계속 생각해봐야 할 문제일 것이다.
- AcceptanceTest 를 중간에 짤 시간을 할당하지 못했다. (솔직히 GUI 부분이 들어가는 부분에 대해 감이 오질 않았다. 전에 Web Programming 때에는 직접 HTTP Protocol을 이용, 웹서버로부터 받아온 HTML 문서를 Parsing 한 뒤 그 결과에 대해 Test Code를 작성하는 식이였는데.. (그래도 Manual Test 목록이라도 작성해 두었어야 했는데 이건 계획단계의 실수라 생각)
- 아이디어 떠오른 것중 하나 - 마우스 매크로 프로그램과 연동해서 쓰는건 어떨까. -_-a 아니면 Message 를 보내는 식으로 하는 방법, DLL을 삽입하는 방법.. 이건 좀 더 구체적으로 생각을 해봐야 할 것 같다.
- 아이디어 떠오른 것중 하나 - 마우스 매크로 프로그램과 연동해서 쓰는건 어떨까. -_-a 아니면 Message 를 보내는 식으로 하는 방법, DLL을 삽입하는 방법.. 이건 좀 더 구체적으로 생각을 해봐야 할 것 같다.
- PairProgramming 이 아닌 Solo 인 경우엔 주위의 유혹이 많다. -_-; 의식적으로 휴식시간을 10분정도 배당을 했지만, Iteration 3 때 확실히 집중도가 떨어졌다.
- UserStory 의 작성과 EngineeringTask 부분 작성시에 애매모호하게 쓴 부분과 잊어먹고 고려하지 않은 부분이 있었다. (이는 훗날 뒤통수를 친다. -_-;) 너무 복잡해서도 안되겠지만, 중요한 사항들에 대해 잊어서도 안될것이다.