12장
소프트웨어 공학
소프트웨어 공학의 정의
• 소프트웨어의 개발, 운용, 유지보수 등의 생명 주기 전반 을 체계적이고 서술적이며 정량적으로 다루는 학문
• 소프트웨어 개발 생명 주기
(Software Development Life Cycle)
• 프로그램의 개발, 테스트, 설치, 그리고 유지 관리 등에 걸친 모든 단계들을 포함하는 응용의 주기
컴퓨터배움터
2
소프트웨어 개발 프로세스 모델
• Build and fix 모델
• Waterfall 모델
• 각 개발 단계의 결과가 다음 단계의 입력으로 이용
• Prototyping 모델
• Incremental 모델
• 큰 시스템을 기능별로 나누어 점진적으로 개발
• Spiral 모델 컴퓨터배움터
설계 문서의 개발
• 설계 문서- 응용의 모든 설계 이슈들에 대한 자세한 사항 기술
• 화면 배치, 색상, 보고서, 보안, 파일 경로, 온라인 도움말, 사 용자 문서, 향후 계획 등이 포함
• 시스템의 청사진과 같은 역할 컴퓨터배움터
4
컴퓨터배움터
소스 코드를 작성하기 이전에 시각적인 다이어그램 생성
Flowchart, Pseudo codes
프로그램 내에서 사용될 데이터 항목들에 대한 정보
컴퓨터배움터
6 open = {START}
closed = Ø
while (open ≠ Ø)
remove leftmost state from open X if (X is GOAL) return (success)
elsegenerate children of X put X into closed
eliminate child if it is in open or closed
put remaining children into left of open(stack) return (fail)
Psuedo Code의 예
일반적인 문제점들
• 사용자 기피증
• 최종 사용자가 설계에 참여하면 응용이 실패하게 될 것이라 생각하는 일종의 두려움
• 해결방법: 대화를 개방적으로 지속하라
• 과도한 작업
• “작업 부풀리기” 신드롬
• 해결방법: 관리자에게 정직하고 단호하게 설명하라 컴퓨터배움터
프로젝트 개발 팀
• 프로젝트 관리자(PM)
• 적임자를 적재적소에 배치하는 책임을 맡은 사람
• 프로젝트의 위험부담과 비용, 작업 스케줄을 결정
• 설계 문서 통합
• 데이터베이스 관리자 (administrator)
• 데이터베이스 구조를 생성하고 관리하는 역할을 맡은 사람
• 개발자 (프로그래머)
• 최종 사용자의 기능적인 요구사항을 만족시키기 위하여 소 스코드를 작성하는 책임을 맡은 사람
• 고객 (End user)
• 프로젝트의 보이지 않는 추진 세력
컴퓨터배움터
8
프로젝트 개발 팀 (계속)
• 테스터
• 프로그램의 기능들이 정확한지, 그리고 설계 문서에서 명시 된 기능적인 요구사항들을 모두 충족시키는지를 확인하는 책임을 맡은 사람
• 모든 가능한 상황에 대해 검사하고 발생한 에러들에 대해 로그 기록을 남겨라
• 고객 관계 담당자
컴퓨터배움터
맺는 말
• 좋은 설계가 좋은 프로그램을 낳는다
• 일부 단계를 생략하는 것은 낮은 성능이나 고객의 불만을 야기시키거나 프로젝트가 예산이나 시간을 초과하게 만든다
• 프로젝트 관리자의 주된 임무
• 협조가 잘될 수 있는 팀을 구성하는 것
• 프로젝트를 주어진 시간과 예산의 범위에서 완수하는 것
• 완전한 테스트 과정을 포함시켜라 컴퓨터배움터
10