'Architect'에 해당되는 글 6건

  1. 2008/10/19 네오-밝은세상 [TDD] 테스트 주도 개발에서 단위 테스트의 개체 발생 - 애자일 김창준
  2. 2008/10/12 네오-밝은세상 [세미나]- 아키텍트의 논리와 직관 - 장승원 (2008.10.11)
  3. 2007/11/14 네오-밝은세상 폭포수모델 프로토타이핑모델 과 용어설명
  4. 2007/11/14 네오-밝은세상 소프트웨어 개발 패러다임 요약
  5. 2007/11/14 네오-밝은세상 UML 기초

분석하면서 학습하는 것이 중요

 컴퓨터의 세계에서는, 새로운 기술이 차례차례로 등장한다. 개발에 종사하는 사람은, 자신이 필요한 기술을 계속 학습하지 않으면 안 된다. 또, 세상의 최신 기술이 아니어도, 자신에게 있어서 새로운 기술을 습득할 기회는 자주 있다. 기술 혁신이 격렬한 만큼, 습득에 걸리는 시간을 짧게 하는 것이 요구되고 있다.

 모르는 기술을 배울 때는, 자신이 가지고 있는 기존의 지식을 최대한으로 이용해야 한다. 그러면, 학습의 효율이 향상할 뿐만 아니라, 습득 기술을 높은 레벨로 살릴 수 있는 기초가 완성된다. 깊게 생각하지 않고 공부한 것은 우선 사용할 수 있는 레벨 밖에 되지 않고, 그러면 설계의 질을 향상할 수 없다.

 학습 시에 생각해야 할 것은, 그 기술을 이용하고 시스템을 만들 때, 어떠한 설계 룰을 적용시키면 좋은가다. 시스템 전체로의“파악성, 유연성, 신뢰성”를 향상시키기 위해서 필요한, 설계 가이드 라인의 규정을 최종 목적으로 한다. 이러한 목적이 있으면, 학습으로의 집중력은 꽤 높아진다. 또, 완성된 가이드 라인은, 실제로 설계할 경우에 역립 해, 학습이 끝나자 마자 이용하기 시작할 수 있다. 반대로, 기술을 단지 기억하는 것 만으로는 안된다. 그 기술이 가지는 기능을 분석해, 어떻게 설계해야 하는가 생각하면서 학습하는 편이 좋다.

 학습의 교재로서 기술의 개발원이 제공하고 있는 자료를 이용하는 것이 많다. 그 내용이지만, 기술의 사양을 기술한 것으로부터, 사용법을 설명한 것까지 있다. 여기서 주의하고 싶은 것은, 사용법을 설명한 자료의 내용이, 좋은 설계에만큼 먼 것 바보 리나점이다. 소개되고 있는 샘플에서는, 시스템의“파악성, 유연성, 신뢰성” 등, 전혀 생각하지 않았다. 이해하기 위한 예이며, 설계의 예가 아닌 점을 인식해 두자. 설계로서는 나쁜 예가 거의이므로 참고로 하지 않고, 스스로 좋은 설계를 요구할 필요가 있다. 유명한 대기업 메이커라고, 자료가 좋은 것은 우선 없다. 기대하는 것은 금물이다.

 

파악성등을 고려해 설계 가이드 라인을 이끈다

 여기까지의 이야기라고, 꽤 추상적 지나 이해 받을 수 없다고 생각한다. 간단한 예를 들어 설명하자. 많은 사람에게 관계가 있는 대상이 좋기 때문에, 새로운 프로그램 언어의 습득을 생각한다. 프로그램 언어(이어)여도, 고려해야 할 중심은“파악성, 유연성, 신뢰성”의 3. 이러한 종합점이 높아지도록(듯이), 설계 가이드 라인을 규정해야 한다.

 우선은 최초의「파악성」로, 원시 코드를 본 것만으로 처리 내용을 알 수 있도록(듯이) 한다. 우선 생각해 떠오르는 것은, 세세하게 코멘트를 붙일 것이다. 그러나, 코멘트를 자세하게 붙이는 것 만으로는 불충분하고, 효과는 작다. 처리 내용이나 제어의 흐름을 알 수 있도록(듯이) 프로그래밍 하는 것이 중요하다. 예를 들어, 중심이 되는 제어 구조를 나타내도록(듯이) 메인 루틴을 만든다, 라고 하는 룰이다. 포함되는 분기 부분에서는, 어느 값이 관계하고 있는지를 명확하게 나타내 보인다. 같이 써브루틴의 제어 구조도 알기 쉽게 만든다. 해선 안 되는 것이, 루틴을 부르는 계층을 깊게 하는 것. 몇 겹이나 불리면, 처리를 파악하기 어려워지기 때문이다. 더하고, 다수 있는 분기 명령중에서, 가장 보기 쉬운 것을 선택한다.

 변수나 루틴의 명명 룰을, 파악하기 쉽게 규정하는 일도 도움이 된다. 예를 들어, 함수나 메소드등의 이름은「처리+목적어: 동사+명사」로, 변수나 오브젝트의 이름은「목적어: 명사」라고 한다든가다. 목적어에는, 복수의 단어를 조합하기도 하므로, 말의 줄 순서도 결정해 둔다. 파악성을 향상하는 궁리는 아직도 있지만, 이 근처에 멈추어 두자.

 2번째의「유연성」에서는, 기능의 변경이 가능한 한 하기 쉽게 고려한다. 무엇보다 중요한 것은, 기능적인 단락으로 루틴을 나누는 것이다. 게다가, 서로에의 영향이 최소한이 되도록(듯이), 변수의 주고 받는 방법 등을 규정한다. 프로그램중의 변경할 것 같은 값은, 루틴의 밖에 내 정의해, 자세한 코멘트를 붙이는 것이 중요. 값의 의미 뿐만이 아니라, 적정한 범위등도 기술하도록(듯이), 룰을 결정한다.

 3번째의「신뢰성」에서는, 버그가 나오기 어렵게 만드는 것으로, 엄격한 환경에서의 안정성을 향상시키는 것의 2점을 고려한다. 버그를 줄이려면 , 우선「파악성」이 매우 중요하다. 예를 들어, 글로벌 변수의 이름이라면, 절대로 중복 하지 않는 듯한 명명 룰을 규정한다. 그 밖에, 문제가 일어나기 어려운 제어 구조를 만드는 방법, 이용해서는 안되는 명령이나 표기 방법등도 규정한다. 엄격한 환경에의 고려에서는, 메모리 부족등에의 처리 방법을, 미리 결정하는 것으로 대응한다. 생각할 수 있는 상황은 지금까지의 경험으로부터 생각나므로, 우선 전부를 들어 본다. 그 중에 중요한 것을 선택해, 구체적인 프로그래밍 방법을 규정하면 좋다.

 이상과 같이 해 모은 룰을 정리해, 최종적인 가이드 라인으로서 통합한다. 경우에 따라서는, 일부의 룰이 서로 모순되기도 할 것이다. 그 때에는, 제1에「신뢰성」을, 다음에「파악성」을 중시해 선택한다. 다만, 어떤 것을 중시해야할 것인가는, 대상이 되는 기술에 따라서 다르므로, 스스로 판단해 상관없다.

 

설계 가이드 라인을 사양으로 해 정리한다

 가이드 라인의 내용이 정해지면, 이용하기 쉽게 사양으로 해 정리하는 것이 중요하다. 항목 마다 분류하고 룰을 늘어놓는다. 가이드 라인을 적용한 샘플을, 몇개나 첨부하는 일도 잊지 않고. 만약 여유가 있다면, 설계 시에 호출해 사용하는 템플릿도 작성하고 싶다. 목적 마다 최적인 형태로 준비하는 것으로, 상당한 효율화를 실현할 수 있다.

 가이드 라인을 정리해 버리면, 그 기술을 이용하는 것이 라크가 되고, 곧바로 실천으로 사용하기 시작할 수 있다. 학습의 개시부터 응용까지의 시간은, 가장 짧아질 것이다. 템플릿을 능숙하게 만들면, 세세한 것을 기억하지 않아도, 그 기술을 사용할 수 있다. 반대로 말한다면, 그것이 가능하게 되도록(듯이) 템플릿을 만들어야 한다. 기술 혁신이 빠른 상황에서는, 암기 하는 것을 최소한으로 억제하는 일도 중요라고 할 수 있다.

 가이드 라인을 최초로 만드는 것은, 꽤 큰 일이다. 그러나, 비슷한 기술이면, 전의 가이드 라인을 이용할 수 있으므로, 그만큼 귀찮지 않다. 예를 들어, 1개의 프로그램 언어의 가이드 라인이 있으면, 다른 언어의 가이드 라인을 만드는 것이 용이하게 된다. 재산이라고 생각해 만들면 좋을 것이다.


 이상이, 모르는 기술의 높은 수준의 습득 방법이다. 이러한 방법은, 지금까지 가지고 있는 기술력을 이용하기 위해(때문에), 그것이 어느 정도 없으면 어렵다. 그러나, 별로 가지고 있지 않은 사람이라도, 이러한 생각으로 공부하는 것은 중요하다. 또, 가이드 라인을 만든 사람은, 그것을 동료에게 공개하고 싶다. 모두가 이용하는 것으로, 설계의 질을 전체적으로 향상할 수 있기 때문이다.

출처 : 데브피아 컬럼 게시판
http://www.devpia.com/maeul/contents/de ··· page%3D1

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/01/12 10:31 2009/01/12 10:31
국내 애자일방법론 대가 김창준씨의 글 보다가 TDD의 관련된 내용이 있어 링크 걸어둡니다.
제가 이분을 처음 본건 올해 초 자바컨퍼런스에서  "애자일에 대한 7가지 교훈" 이란 주제로 강의 할때 봤습니다. 제 친구랑 같이 가서 맨 앞에 쭈구려 앉아 보고 있는데 10분 지나도 강사가 도착 않한겁니다.
"뭐여~ 이사람..." 근데 좀 지나니까 왠 누더기 입은 도사가 한명 올라와서 마이크를 잡더라구요. "헉..~교주다"  친구랑 저랑 이구동성으로 첫인상은 "사이비 교주" 인줄 알았습니다.
그리고 준비한 자료는 몇장 안되고 말로 하시는데

오~~~~~~~ 역시 내공이 강한 분이셨습니다.
시간이 지나 기억은 가물가물 하지만 애자일, 테스트 주도개발 등 큰 그림 위주로 설명했던것 같습니다.
그 당시 자료가 여기 있네요~
http://www.jco.or.kr/conference/data/9th/4_5.zip


아참 이 얘기를 할려는게 아니라 김창준님 블러그 보다 팀원 tetris (http://tetris.tistory.com) 님께서 테스트 주도 개발에 빠지신걸 보고 저도 참고삼아 링크 걸어 둡니다.
"TDD는 썰기와 해체하기다~"



애자일 컨설팅 김창준님 (http://agile.egloos.com/)
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/10/19 03:47 2008/10/19 03:47
금일 에바팀 주최로 "아키텍트의 논리와 직관"이라는 세미나를 듣게 되었습니다.
1. 논리와 생존본능
2. 메가트랜드
3. iceberg

아키텍쳐 분야를 공부한지 몇달 안되서 인지 긍정과 비평할 내용이 없내용~
강의 내용 마인드 맵으로 정리했습니다.
사용자 삽입 이미지
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/10/12 01:29 2008/10/12 01:29
1. 폭포수 모델

*폭포수에서 한번 떨어진 물이 거슬러 올라갈 수 없듯이 소프트웨어 개볼도 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하며, 이전 단계로 넘어 갈 수 없는 방식을 폭포수 모델이라고 한다.


*가장 오랫동안 사용되어 온 모델로 적용 사례가 많다.


*단계별 정의가 분명하며, 각 단계별로 산출물이 명확히 나온다.


*새로운 요구 사항을 시스템에 반영하기가 어렵다.


(개발순서) : 타당성 조사 -> 계획 -> 요구 사항 분석 -> 기본설계(개략 설계) -> 상세설계

              구현(coding) -> 통합 시험 -> 시스템 실행 -> 유지보수


타당성조사 = 시스템의 정의와 가능성 조사 및 다른 방법과 비교조사 하는 단계

계획 = 사용자 문제의 정의, 전체 시스템 차원의 기본 목표와 요구 사항 결정, 추진 방안의

      제시를 통해 시스템 개발 비용 및 소요 기간, 인력 등의 개발 계획을 수립하는 단계

요구사항분석 = 소프트웨어에 요구되는 기능, 성능, 그리고 인터페이스 등 사용자의 요구

                 사항을 구체적으로 이해하는 단계

기본설계(개략 설계) = 개발될 소프트웨어에 대한 전체적인 하드웨어 및 소프트웨어 구조,

                          제어 구조, 자료 구조의 개략적인 설계를 작성하는 단계

상세 설계 = 각 단위 프로그램에 대한 사항을 상세히 기술하는 단계

구현(coding) = 설계 단계에서 만들어진 설계 사양서를 바탕으로 프로그램을 작성하는 단계

                  로, 코딩과 디버깅, 단위 테스팅을 수행하는 단계

통합 시험 = 단위 프로그램별로 구현도니 것을 통합시키며 시험하는 단계

시스템 실행 =  전체 시스템이 정확하게 실행하는가를 확인하는 단계

유지보수 = 시스템의 사용 중에 발생하는 여러 변경 사항에 대해 적응하고, 변화에 대비하는

             과정

프로토타이핑(Prototype) 모델

정의
-   시스템 개발시 고객이 목표를 정의하였으나 요구되는 속성을 어떻게 만족시킬 수 있을지 모르는 경우가 자주 있다.
-   사용자 자신이 원하는 것이 무엇인지 구체적으로 모르거나 그들의 요구가 어떻게 변경될 지 잘 알지 못하는 때도 있다.
-   엔지니어들이 고객의 요구를 불완전하게 이해하고 있는 경우도 흔히 있을 수 있다.
-   이런 경우를 대비해 간단한 시제품(prototype)을 만들어 보여주는 것이 프로토타이핑 모델이다.
-   프로토타입모델은 폭포수 모델의 단점을 보완하기 위해 점진적으로 시스템을 개발하여 나가는 접근 방법이다.

특징
-   프로토타입(prototype)은 고객의 요구사항을 식별하기 위해 만든 실제 실행이 되는 시스템 이다.
-   실제 만들고자 하는 시스템의 기능을 모두 구현할 필요가 없다.
-   성능, 보안, 견고함 및 신뢰도와 같은 소프트웨어 특성을 무시한다.
-   변경이 체계적으로 이루어지지 않으므로 유지보수가 힘들다.
-    요구사항 명세서를 추출하는 기반으로 사용된다.

요구사항분석
  -사용자의 요구사항을 정리하고 명세화 하는 단계
  -명세화의 방법을 프로토타입을 사용하여 진행
        프로토타입 설계
  - 프로토타입에 대한 방향과 내용을 정리하여 명세화
  - 명세화된 설계내용은 폭포수 모델의 입력으로 사용 가능

프로토타입의 개발
-      예비로 작동되는 시범모델에서 사전 구축하여 결함을 발견
-      프로토타입를 검증하면서 설계방향과 내용을 제시
   프로토타입의 평가
-      사용자에 의해서 프로토타입에 대한 평가를 수행
-      사용자의 평가에 따라 프로젝트 승인 및 취소까지 고려
       프로토타입 정제
-      프로토타입 승인에 따라서 실제 시스템을 구현하는 단계
-      완전한 시스템의 프로덕트 전체를 구현하여 진행
       완제품 생산
-      구현된 시스템을 인수하고, 설치하여 시스템을 가동
-      수행절차에 따라 유지보수 단계로 진행
-      유지보수 활동에 따라 요구, 명세, 설계, 구현단계로 재진입

장단점

장점 : -    사용자 요구사항이 불명확할 때 사용하는 것이 용이
-    제품의 추적성, 시험 가능성 확보
-    개발자와 사용자의 의사소통 원활
-    소프트웨어 기능을 나누어 점증적으로 발전 시켜 최종 소프트웨어에 도달하는 개발 방법
-    시스템의 이해와 품질향상에 기여

단점 : -   프로토타입의 결과를 최종의 프로젝트 결과물로 오해할 수 있음
-   프로토타입 폐기 시 비경제적임
-   소프트웨어 개발에 많은 시간이 소요되며,보고서 등 출력이 많아짐
-   중간과정을 점검할 수 있는 일정표와 산출물이 없기 때문에 관리 통제 어려움


시스템 엔지니어

컴퓨터의 보급으로 기업에선 전산 시스템이 일반화되었다.
특히 방대한 업무를 처리해야 하는 대기업에선 전산시스템의 기술적 지원이 필수적인데
이를 담당하는 사람이 시스템 엔지니어(System Engineer) 다.
실제 컴퓨터를 운영하는 모든 조직에 필요한 인력으로서 앞으로 엔지니어에 대한 수요는
대폭적으로 증가할 것이다.

시스템 엔지니어는 역할에 따라 하는 업무가 구분되어 있다.
4가지로 나뉘어져 있는데 필드 시스템 엔지니어(Field S.E)/ 기술 담당 시스템 엔지니어
(Technical S.E)/ 프로젝트 시스템 엔지니어(Project S.E)/ 산업 시스템 엔지니어
(Industry S.E)이다.

필드 시스템 엔지니어는 영업 담당자가 마케팅을 할 때 필요한 H/W, S/W 등을 지원한다.
기술 담당 시스템 엔지니어는 기술적 부분에 지원을 하며 프로젝트 시스템 엔지니어는 업무의
방향을 설정하고 프로그램을 추진시킨다.

마지막으로 산업 시스템 엔지니어는 업체가 속한 산업 전반에 관한 이상적인 업무 방향을
제시하고 상담 자문을 한다.
위와 같이 크기와 기능이 다양한 컴퓨터들을 업무의 성격과 양에 따라 적절하게 선택하고
연결시켜 기술적으로 문제점이 없도록 만들어주는 일이 시스템 엔지니어의 역할이다.

시스템 분석가


현재 컴퓨터의 보급율은 기하급수적으로 증가하고 있고 컴퓨터를 이용한 업무의 전산화,
자동화는 일반적 추세이다.

이와 더불어 인기직종으로 부상하고 있는 직종 중의 하나가 시스템 분석가 (System Analyst)이다. 시스템 분석가는 컴퓨터에 기초한 정보처리 시스템을 개발할 때 시스템
분석과 설계를 행하는 사람으로서 구미의 경우 보편화된 직업이나 우리 나라의 경우는 최근 각광을 받기 시작했다.
2000년대 정보화사회에서는 컴퓨터 이용 증가로 보아 많은 인원의 시스템 분석가가
국내에서도 필요 할 것이다.

시스템 분석가는 사용자에게 도움을 주는 시스템을 만들기 위해 사용자와 협의 후에 다양한 시스템 구성 요소들을 한 곳에 집중시킨다.
컴퓨터 프로그램의 작성 요건을 결정하기 위해 공학, 과학, 사무 자료를 수집 분석하여 현재 업무 흐름 시스템을 조사한 후에 현행 시스템이 갖는 문제점을 파악하여 개선시킬 목표를
설정한다.
이후엔 컴퓨터 장비 선정에서부터 시스템의 사용자, 시스템의 운영 절차, 파일과 데이터
베이스 구성 운영에 대한 모든 책임을 수반한다.

프로젝트 책임자

PM은 발주처의 요구에 맞는 Project를 만들기 위하여 협력 업체와 이에 소속된 구성원을 운용하여 Project를 수행하는 사람이다

이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/11/14 12:25 2007/11/14 12:25


  1. Elements of Software Development
  2. Software Quality Factors
  3. Software Life Cycle
  4. Software Development Process
  5. Software Quality and Software Development Cost
  6. The Defect Effects on Software Life Cycle
  7. Software Development Process for Efficient Detection and Removal of Defects

1. Elements of Software Development

2. Software Quality Factors

Product system의 성격을 갖는 소프트웨어의 개발 시 고려되어야 하는 소프트웨어 품질 요소들은 아래와 같다.

3. Software Life Cycle

소프트웨어는 다음과 같은 생명 주기의 단계를 거친다.

1. Requirements Phase
  • 문제 정의(Problem Definition)
  • 요구 분석(Requirements Analysis)
  • 요구 명세(Requirements Specification)
2. Development Phase
  • 설계(Design)
  • 구현(Implementation)
  • 통합(Integration)
  • 시험(Testing)
3. Maintenance Phase
  • 운영(Operation)
  • 유지보수(Maintenance)

각 단계는 다음과 같은 요소들로 정의된다.

  • 목적: goals, objectives
  • 작업: activities, tasks
  • 자원(resources): 기간(time), 투입인원(personnel), 비용(budget), 도구(tools)
  • Inputs
  • 산출물(deliverables, work products)
  • Phase Testing (verification, 검증)
  • 완료 기준: quality control measures, milestone

3.1 문제 정의 (Problem Statement) 단계

Objectives

  • Software solution이 필요한 이유를 규명한다.
  • 사용자가 갖고 있는 문제를 정확히 이해한다.
  • 사용자가 자신의 문제에 대해 더 잘 이해하도록 한다.

Activities

  • 문제를 사용자의 관점과 용어로 정의한다.
  • 문제를 기술한다.(Formulate a problem statement.)
  • 기술된 문제를 평가한다.(Evaluate a problem statement.)

Inputs

  • 사용자로부터의 요구 사항
  • 마케팅 담당자(marketing representatives)로부터의 요구 사항

산출물

  • Problem definition statement
  • 제안서(Proposal)
  • 주요 제약 사항(기간, 비용, 성능, 실행 환경 등)

3.2 요구 분석 단계

Objectives

  • 개발될 소프트웨어의 요구 사항에 대하여 사용자와 개발자 사이의 합의
  • 개발 계획의 수립

Activities

  • 요구되는 기능들과 이에 파생되는 필요 기능들을 분석한다.
  • 기능들에 대한 요구 및 제약 조건(성능, 신뢰성, usability 등)들을 분석한다.
  • 개발에 필요한 자원을 산정하고 개발 계획을 수립한다.
  • 요구 분석 명세에 대한 검증을 한다. (Phase testing)

Inputs

  • Problem statement
  • 사용자로부터의 추가 정보

산출물

  • 요구 명세(Requirement specification)
  • 개발 계획서

3.3 설계 (Design) 단계

Objectives

  • 소프트웨어의 구현을 위한 blueprint

Activities

  • 소프트웨어의 구조와 구성 요소들을 결정한다.
  • 구성 요소들간의 상호 관계들을 결정한다.
  • 자료 구조와 알고리즘들을 결정한다.

Inputs

  • 요구 명세

산출물

  • 구조 설계 명세 (Architecture Design Specification)
  • 상세 설계 명세 (Detailed Design Specification)

4. Software Development Process

위의 소프트웨어 프로세스 요소들을 서로 연결하여 일련의 소프트웨어 개발 프로세스를 정의할 수 있는데 이를 프로세스 모델이라고 부른다. 소프트웨어 프로세스 모델에는 다음과 같은 유형이 있다.

  • 폭포수 모델(Waterfall model): 요구분석, 설계, 구현, 통합 및 시험의 각 단계를 순차적으로 수행하여 최종 단계의 산출물이 완성된 소프트웨어 제품이 되도록 하는 고전적인 프로세스 모델
  • Rapid prototype model: 요구된 기능, 성능 등에 대한 핵심적인 사항들을 먼저 프로토타입으로 모형화하고 이를 분석한 결과를 토대로 소프트웨어를 개발하는 모델
  • 점증적 모델(Incremental model): 소프트웨어를 두개 이상의 build, version, 또는release들로 나누어 이들을 하나씩 점차적으로 개발해 나감으로써 최종 release가 완성된 소프트웨어가 되도록 하는 모델
  • 나선형 모델(Spiral model): 요구분석, 설계, 구현, 통합, 시험 등의 각 작업을 리스크의 분석과 해소 방안을 수립하여 수행하는 모델
  • 혼합형 모델(Hybrid model): 두가지 이상의 프로세스 모델들을 혼합한 모델
  • 프로토타이핑(Prototype) 모델
    정의
    -시스템 개발시 고객이 목표를 정의하였으나 요구되는 속성을 어떻게 만족시킬 수 있을지 모르는 경우가 자주 있다.
    -사용자 자신이 원하는 것이 무엇인지 구체적으로 모르거나 그들의 요구가 어떻게 변경될 지 잘 알지 못하는 때도 있다.
    -엔지니어들이 고객의 요구를 불완전하게 이해하고 있는 경우도 흔히 있을 수 있다.
    -이런 경우를 대비해 간단한 시제품(prototype)을 만들어 보여주는 것이 프로토타이핑 모델이다.
    -프로토타입모델은 폭포수 모델의 단점을 보완하기 위해 점진적으로 시스템을 개발하여 나가는 접근 방법이다.
    특징
    -프로토타입(prototype)은 고객의 요구사항을 식별하기 위해 만든 실제 실행이 되는 시스템 이다.
    -실제 만들고자 하는 시스템의 기능을 모두 구현할 필요가 없다.
    -성능, 보안, 견고함 및 신뢰도와 같은 소프트웨어 특성을 무시한다.
    -변경이 체계적으로 이루어지지 않으므로 유지보수가 힘들다.
    -요구사항 명세서를 추출하는 기반으로 사용된다.

4.1 Unstructured process model (Build and Fix Model)

  • 프로그램에 요구되는 기능이나 구조에 대한 명세(specification)가 없이 구현(implementation) 작업이 행해진다.
  • 프로그램의 완성도나 완료 여부를 알 수 없다.
  • 유지보수 작업이 대부분을 차지한다.
  • 프로그램에 요구된 기능이나 실제로 구현된 기능들의 파악이 어렵다.
  • 아주 작은 규모의 프로그램에만 적용될 수 있다.

4.2 폭포수 모델(Waterfall or Linear Sequential Model)

소프트웨어의 개발 과정을 요구분석(requirements analysis), 설계(design), 구현(implementation), 통합(integration), 운영 및 유지보수(operation and maintenance)의 단계들로 구분하여 이들을 순차적으로 진행하는 프로세스 모델이다.

특징

  • 다음 단계가 시작되기 전에 이전 단계가 완료되어야 한다.
  • 각 단계의 산출물들은 엄격한 검증 작업을 거친다.(phase testing)
  • Phase testing을 거친 산출물들은 정식의 변경 절차에 의해서만 변경 가능하다.(frozen deliverables)
  • document-driven development process

장점

  • 프로젝트의 관리가 용이하다.

단점

  • 대부분의 실제 프로젝트들에서는 엄격한 순차적인 진행이 어렵다.
  • 이전 단계를 수행 완료하여야만 후속 단계의 수행이 가능
  • too late working version (user feedback을 반영하기 어렵다)

4.3 Rapid Prototyping Model (Throw-away Prototyping Model)

소프트웨어에 요구되는 핵심적인 요구 사항들을 프로토타입으로 구현하여 타당성과 구현 가능성을 확인한 후 이를 토대로 하여 분석, 설계, 구현, 시험 과정을 밟아나가는 모델

4.4 점증적 모델(Incremental Model: Multiple releases)

소프트웨어에 요구되는 기능이나 성능 조건들을 우선 순위, 난이도, 상관 관계 등을 고려하여 몇 개의 그룹으로 나누어 이들을 incremental build들로 점차적으로 구현, 추가해가는 모델이다.

5. Software Quality and Development Cost

실제 산업체에서 개발되고 있는 소프트웨어들의 라이프 사이클에서 각 프로세스 요소에 소요되는 비용의 통계적 분포는 다음과 같다.

  • 유지보수에 소요되는 비용이 소프트웨어 라이프 사이클 전체 비용의 대부분을 차지한다.
  • 프로젝트가 진행됨에 따라서 개발에 소요되는 비용과 기간은 분석, 설계, 구현, 및 시험 작업 순으로 증가한다.
  • 분석, 설계, 구현 및 시험의 각 단계가 명확하게 구분되지 않고 서로 병행하여 진행되는 경우가 많다. 즉, 한 단계가 완료되기 이전에 다음 단계가 착수된다.

6. The Defect Effects on Software Life Cycle

소프트웨어의 결함을 유발하는 에러 행위는 분석, 설계, 구현, 시험 및 유지보수의 전 과정을 통하여 행하여질 수 있다. 각 단계에서 소프트웨어 결함을 발견, 제거하는데 소요되는 비용은 아래와 같은 분포를 갖는다.

  • 결함의 발견 시점이 늦어질수록 그러한 결함을 발견하여 제거하는데 소요되는 비용이 급격하게 증대한다.
  • 특히, 소프트웨어의 결함이 유지보수 단계에서 발견되어 제거할 경우 그러한 작업에 소요되는 비용은 그 이전의 개발 단계에서 발견, 제거할 경우에 비해 훨씬 많아진다.

위의 현상은 소프트웨어 개발이 진행됨에 따라 소프트웨어 결함이 아래와 같은 누적된 파급 효과를 가져오기 때문이다.

7. Software Development Process for Efficient Detection and Removal of Defects

시험(testing)을 소프트웨어 라이프사이클의 특정 단계에 국한하지 않고 모든 단계에 걸쳐서 가능한 한 조기에 수행한다.

  • 개발 단계 별 시험(Phase testing)
  • 점증적인 시험(Incremental testing)
  • 조직적인 시험(Planned and Systematic testing)


Top

이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/11/14 12:21 2007/11/14 12:21