E D R , A S I H C RSS

NSIS Ide

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시간에 할 수 있는 양 정도로 계산. (아.. 여전히 이거 계산법이 모호하다. 좀 더 제대로 공부해야겠다.)
  • .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

Second Iteration :
  • CInnerProcess Class 0.5
  • Output Window 0.5 - 1 * 2 = 2

Last Iteration :
  • Script 로부터 Output 이 될 Target 화일의 분석 & 이름 가져오기 - 0.7
  • Load / Save MDI Framework 와의 연결 - 0.7 - 1.4 * 2 = 2.8


6. 진행

6.1. Iteration 1 (1:00 ~ 3:00)

추가 Task : Load / Save MDI Framework 와의 연결

현재 완료된 Task
MDI Framework
Rich Edit Control CView 에 붙이기. 0.5
화일 Save / Load 0.8
= 1.3

중간 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 완료.
추가사항:
고려할 사항
- NsisProcess 는 어디에 속해 있는 녀석인가? -_-a
-> Singleton 으로 있어야 할 녀석임.
-> AppClass 에 있으면 자동으로 Singleton 이 되겠군. ^-^;

- NsisProcess 이벤트 발생시엔 누가 어떻게 통지받아서 Output에 찍어주나?
-> 어차피 Execute Process 는 Blocking Call 임.
-> Nsis Execute 뒤에 바로 Output 을 뿌려주면 됨.

오후 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)

8. 실행 화면

9. 고쳐야 할 버그

  • 화면의 에디터와 실제 데이터 저장되는 부분이 update가 제대로 안된다.
  • 화일크기 관련 8kb 미만의 데이터만 처리가능.

10. 평가

  • MFC 와 연결되는 부분에 대한 TestFirstProgramming 을 제대로 지키지 못했다. (아.. GUI 부분은 애매하다. --;) 애매한 부분에 대해서 예전에 하던 방식이 섞이다 보니까 리듬이 깨졌다. 차라리 철저하게 TFP로 가는게 나았었을텐데 하는 생각이 들었다.
    • 하지만, View/Document 구조가 한편으로는 방해물이.. 이미 디자인이 되어버린 Framework 의 경우 어떻게 적용을 시켜나가야 할까. 일단 주로 알고리즘과 관련된 부분에 대해 Test Code를 만들게 되었다. 계속 생각해봐야 할 문제일 것이다.
  • AcceptanceTest 를 중간에 짤 시간을 할당하지 못했다. (솔직히 GUI 부분이 들어가는 부분에 대해 감이 오질 않았다. 전에 Web Programming 때에는 직접 HTTP Protocol을 이용, 웹서버로부터 받아온 HTML 문서를 Parsing 한 뒤 그 결과에 대해 Test Code를 작성하는 식이였는데.. (그래도 Manual Test 목록이라도 작성해 두었어야 했는데 이건 계획단계의 실수라 생각)
    • 아이디어 떠오른 것중 하나 - 마우스 매크로 프로그램과 연동해서 쓰는건 어떨까. -_-a 아니면 Message 를 보내는 식으로 하는 방법, DLL을 삽입하는 방법.. 이건 좀 더 구체적으로 생각을 해봐야 할 것 같다.
  • PairProgramming 이 아닌 Solo 인 경우엔 주위의 유혹이 많다. -_-; 의식적으로 휴식시간을 10분정도 배당을 했지만, Iteration 3 때 확실히 집중도가 떨어졌다.
  • UserStory 의 작성과 EngineeringTask 부분 작성시에 애매모호하게 쓴 부분과 잊어먹고 고려하지 않은 부분이 있었다. (이는 훗날 뒤통수를 친다. -_-;) 너무 복잡해서도 안되겠지만, 중요한 사항들에 대해 잊어서도 안될것이다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.5026 sec