최은만
지은이:최은만현재동국대학교컴퓨터공학과교수로재직중이며,소프트웨어공학에서다루는여러가지이론과방법,도구중에서첨단기술이면서개발현장에서사용되는필수적인내용을전파하는데힘쓰고있다.연구분야는객체지향및컴포넌트소프트웨어공학,소프트웨어테스트,소프트웨어품질메트릭,관점지향프로그래밍이고,저서로『새로쓴소프트웨어공학』(정익사,2014),『UML을활용한시스템분석설계』(생능출판사,2010)가있다.-동국대학교전산학과졸업(학사,1982)-한국과학기술원전산학과졸업(공학석사,1985)-미국IllinoisInstituteofTechnology전산학과졸업(전산학박사,1993)-한국표준연구소연구원(1985)-충남대,목원대,대전산업대강사(1986~1988)-시카고주립대전산학과강사(1992)-한국정보과학회소프트웨어공학연구회운영위원(1997~2004)-한국정보처리학회학회지편집위원(2001~2005)-콜로라도주립대(포트콜린스)전산학과방문교수(2000,2007)-카네기멜론대학소프트웨어공학단기과정연수(2002)
Chapter01소개1.1소프트웨어1.1.1소프트웨어의유형1.1.2소프트웨어와시스템1.2소프트웨어공학의필요성1.2.1고비용1.2.2개발지연과낮은신뢰도1.2.3유지보수와재작업1.3소프트웨어공학이란?1.3.1규모1.3.2품질과생산성1.3.3일관성과재현성1.3.4변경1.4소프트웨어공학의접근방법1.4.1단계적개발프로세스1.4.2품질보증1.4.3프로젝트관리1.5소프트웨어공학지식체계1.5.1다른분야와의관계연습문제Chapter02프로세스와방법론2.1소프트웨어공학의접근방법2.1.1프로세스와프로세스모델2.1.2프로세스의종류2.2바람직한프로세스의특성2.2.1예측가능성2.2.2테스팅과유지보수편이성2.2.3변경용이성2.2.4결함제거용이성2.3소프트웨어개발프로세스2.3.1폭포수모델2.3.2프로토타이핑모델2.3.3진화적모델2.3.4나선형모델2.3.5V모델2.3.6Unified프로세스2.3.7애자일프로세스2.4지원프로세스2.4.1관리프로세스2.4.2품질보증프로세스2.4.3형상관리프로세스2.5방법론2.5.1구조적방법론2.5.2객체지향방법론2.5.3애자일방법론연습문제Chapter03프로젝트관리와계획3.1프로젝트범위3.2노력추정3.2.1노력추정의불확실3.2.2규모기반모델3.2.3COCOMOII모델3.2.4기능점수3.3일정계획3.3.1작업분해3.3.2CPM네트워크3.3.3간트차트3.3.4애자일계획3.4조직계획3.4.1책임프로그래머팀구성3.4.2에고레스팀3.4.3계층적팀구성3.5위험관리3.5.1위험파악3.5.2위험분석과우선순위정하기3.5.3위험해결과모니터링3.6계획서작성과도구3.6.1계획서작성3.6.2도구연습문제Chapter04요구분석4.1요구4.1.1요구의종류4.1.2요구추출의어려움4.2요구추출4.2.1요구정보출처4.2.2요구추출방법4.2.3요구와제한의정의4.3도메인분석4.3.1도메인정의4.3.2도메인분석4.4사용사례4.4.1사용사례의소개4.4.2사용사례다이어그램4.4.3액터찾기4.4.4사용사례찾기4.4.5사용사례관계찾기4.5요구분석명세서4.5.1명세서작성4.5.2명세서검토4.6요구관리도구연습문제Chapter05모델링5.1객체지향개념5.1.1객체지향의장점5.1.2객체지향과절차적방법의비교5.1.3클래스와객체5.1.4객체와속성5.1.5캡슐화5.1.6연관5.1.7집합5.1.8상속5.1.9다형성5.2UML5.2.1배경과역사5.2.2UML다이어그램5.2.3UML모델링과정5.3정적모델링5.3.1클래스의표현5.3.2관계의표현5.3.3클래스다이어그램작성과정5.3.4클래스찾기5.3.5연관찾기5.3.6속성추가5.4동적모델링5.4.1시퀀스다이어그램의요소5.4.2시퀀스다이어그램작성5.4.3상태다이어그램5.4.4액티비티다이어그램5.5모델링도구연습문제Chapter06아키텍처설계6.1아키텍처설계란?6.1.1아키텍처설계의정의6.1.2아키텍처설계의중요성6.1.3아키텍처와비기능적요구6.1.4아키텍처의표현6.2설계원리6.2.1단계적분할6.2.2추상화6.2.3모듈화6.3아키텍처설계과정6.3.1설계목표설정6.3.2시스템의타입6.3.3아키텍처표현6.4아키텍처스타일6.4.1계층구조스타일6.4.2클라이언트서버스타일6.4.3트랜잭션처리스타일6.4.4MVC스타일6.4.5이벤트중심스타일6.4.6객체영속스타일6.5미들웨어아키텍처6.5.1미들웨어기술의분류6.5.2분산객체6.5.3메시지중심미들웨어6.5.4애플리케이션서버6.6설계문서화연습문제Chapter07상세설계7.1디자인패턴7.1.1팩토리메소드패턴7.1.2추상팩토리패턴7.1.3어뎁터패턴7.1.4싱글톤패턴7.1.5컴포지트패턴7.1.6반복자패턴7.1.7옵서버패턴7.1.8상태패턴7.1.9퍼싸드패턴7.2클래스설계7.2.1클래스인터페이스의정의7.2.2클래스상태모델링7.2.3클래스재사용7.3사용자인터페이스설계7.3.1사용자인터페이스유형7.3.2사용자인터페이스설계원리7.3.3화면설계7.3.4출력물설계7.4데이터설계7.4.1데이터베이스설계단계7.4.2객체와테이블연습문제Chapter08코딩8.1코딩원리8.1.1코딩과정8.1.2코딩오류8.1.3구조적프로그래밍8.1.4정보은닉8.1.5중복회피8.1.6디메테르의법칙8.2코딩스타일8.2.1명명규칙8.2.2포인터와레퍼런스8.2.3자료형8.2.4문장과수식8.2.5오류처리8.2.6코드문서화8.3UML과코딩8.3.1클래스와인터페이스의구현8.3.2연관의구현8.3.3시퀀스다이어그램의구현8.3.4상태다이어그램의구현8.4리팩토링8.4.1기본개념8.4.2리팩토링의사례8.4.3리팩토링과정8.4.4코드스멜8.5코드품질향상기법8.5.1코드인스펙션8.5.2정적분석8.5.3페어프로그래밍8.5코드품질향상기법연습문제Chapter09테스팅9.1테스팅기초9.1.1오류,결함,고장9.1.2테스팅원리9.1.3테스트작업과정9.1.4테스트케이스9.2블랙박스테스팅9.2.1동치클래스분해9.2.2경계값분석9.2.3원인과결과그래프9.3화이트박스테스팅9.3.1논리흐름의표현9.3.2기본경로테스팅9.3.3싸이클로매틱복잡도9.3.4테스트커버리지9.3.5반복문의테스팅9.4객체지향테스팅9.4.1사용사례기반테스팅9.4.2상태기반테스팅9.5통합테스팅9.5.1빅뱅통합9.5.2하향식통합9.5.3상향식통합9.5.4연쇄식통합9.6시스템및인수테스트9.6.1기능테스트9.6.2성능테스트9.6.3보안테스트9.6.4사용자인터페이스테스트9.6.5인수테스트9.7테스트도구9.7.1코드분석도구9.7.2테스트케이스생성도구9.7.3테스트케이스실행도구9.7.4단위테스트도구연습문제Chapter10유지보수10.1유지보수의소개10.1.1변경해야하는이유10.1.2Lehman의법칙10.1.3유지보수의종류10.2유지보수작업과정10.2.1유지보수프로세스모델10.2.2프로그램의이해10.2.3변경파악과분석10.2.4형상변경관리10.2.5변경구현,테스팅,배포10.3형상관리10.3.1베이스라인10.3.2형상관리의필요성10.3.3형상관리절차10.4역공학10.4.1역공학작업순서10.4.2역공학의용도10.4.3재문서화10.4.4설계복구10.5리엔지니어링10.5.1리엔지니어링목적10.5.2리엔지니어링과정10.6유지보수도구연습문제Chapter11품질보증11.1소프트웨어품질11.1.1품질의의미11.1.2품질속성11.1.3소프트웨어유형과품질11.2품질측정방법11.2.1품질측정과메트릭의유용성11.2.2전통적인품질메트릭11.2.3객체지향소프트웨어의품질메트릭11.3품질보증활동11.3.1품질보증조직11.3.2프로세스와표준정의11.3.3품질관리11.4확인및검증기법11.4.1인스펙션11.4.2워크스루11.4.3동료검토11.5프로세스개선11.5.1CMM11.5.2ISO900111.6품질보증도구연습문제Chapter12부록AppendixA도구A.1StarUMLA.2JUnitA.3CloverA.4SubversionA.5BugzillaAppendixB용어사전참고문헌INDEX