1-2. 요구사항 확인
20. 소프트웨어 개발 방법론
•
소프트웨어 개발, 유지보수 등에 필요한 여러가지 일들의 수행 방법과 이러한 일들을 효율적으로 수행하려는 과정에서 필요한 각종 기법 및 도구를 체계적으로 정리하여 표현한 것
•
목적 - 소프트웨어의 생산성과 품질 향상
•
주요 소프트웨어 개발 방법론
◦
구조적 방법론
◦
정보공학 방법론
◦
객체지향 방법론
◦
컴포넌트 기반(CBD) 방법론
◦
제품 계열 방법론
◦
애자일 방법론
구조적 방법론
•
정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 처리(Process) 중심의 방법론
•
60년대까지 가장 많이 사용!
•
분할과 정복(Divide and Conquer) 원리 적용
정보공학 방법론
•
정보 시스템의 개발을 위해 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합 및 적용하는 자료(Data) 중심의 방법론
•
정보 시스템 개발 주기를 이용하여 대규모 정보 시스템을 구축하는데 적합
객체지향 방법론
•
현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 소프트웨어를 개발할 때 기계의 부품을 조립하듯이 객체들을 조립해서 소프트웨어를 구현하는 방법론
•
구성요소
◦
객체(Object) : 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈
◦
클래스(Class) : 공통된 속성과 연산을 갖는 객체의 집합으로 객체의 일반적인 타입
◦
메시지(Message) : 객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항
•
기본 원칙
◦
캡슐화(Encapsulation) : 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈
◦
정보 은닉(Information Hiding) : 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
◦
추상화(Abstraction) : 불필요한 부분을 생략하고, 객체의 속성 중 가장 중요한 것에 중점을 두어 개략화하는 것
◦
상속성(Inferitance) : 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
◦
다형성(Polymorphism) : 메시지에 의해 객체가 연산을 수행하게 될 때, 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
컴포넌트 기반 (CBD) 방법론
•
기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조합하여 하나의 새로운 애플리케이션을 만드는 방법론
•
컴포넌트의 재사용! → 시간 노력 절약!
•
확장성 보장, 유지보수 비용 최소화, 생산성 품질 향상
21. SW 공학의 발전적 추세
소프트웨어 재사용(SW Reuse)
•
이미 갭라되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것
•
소프트웨어 개발의 품질과 생산성을 높이기 위한 방법
•
합성 중심(Composition-Based)
◦
즉 블록을 만들어서 끼워 맞춰 소프트웨어를 완성시키는 방법
◦
블록 구성 방법
•
생성 중심 (Generation-Based)
◦
추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법
◦
패턴 구성 방법
소프트웨어 재공학 (SW Reenineering)
•
새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것
•
유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하기 때문에 유지보수의 생산성을 향상을 통해 소프트웨어 위기를 해결하는 방법
•
기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시킨다.
•
이점
◦
소프트웨어의 품질 향상, 생산성 증가, 수명 연장, 오류 감소
CASE (Computer Aided Software Engineering)
•
소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화 하는 것
•
객체지향 시스템, 구조적 시스템 등 다양한 시스템에서 활용되는 자동화 도구 (CASE Tool)
•
주요 기능
◦
소프트웨어 생명 주기 전 단계의 연결
◦
다양한 소프트웨어 개발 모형 지원, 그래픽 지원
22. 비용 산정 기법
소프트웨어 비용 산정
너무 높게 사정할 경우 - 예산 낭비, 일의 효율성 저하
너무 낮게 산정할 경우 - 개발자의 부담 가중, 품질 문제 발생 가능성
•
기법
◦
하향식 비용 산정 기법
◦
상향식 비용 산정 기법
23. 비용 산정 기법 - 하향식
하양식 비용 산정 기법
•
과거의 유사한 경험을 바탕으로 전문 지식이 많은 개발자들이 참여한 회의를 통해 비용을 산정하는 비과학적인 방법
•
전문가 감정 기법, 델파이 기법
전문가 감정 기법
•
조직 내에 있는 경험이 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법
•
가장 편리하고 신속하게 비용 산정 가능
•
개인적이고 주관적
델파이 기법
•
전문가 감정 기법의 주관적인 편견을 보완하기 위해 많은 전문가의 의견을 종합하여 산정하는 기법
24. 비용 산정 기법 - 상향식
상향식 비용 산정 기법
•
프로젝트의 세부적인 작업 단위별로 비용을 집계하여 전체 비용을 산정하는 방법
•
LOC(원시 코드 라인 수) 기법, 개발 단계별 인월수 기법, 수학적 산정 기법
LOC(원시 코드 라인 수) 기법
•
소프트웨어 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 방법
◦
비관치 : 가장 많이 측정된 코드 라인 수
◦
낙관치 : 가장 적게 측정된 코드 라인 수
◦
기대치 : 측정된 모든 코드 라인 수의 평균
•
측정 용이, 이해 쉬움
•
예측치를 이용하여 생산성, 노력, 개발 기간 등의 비용 산정
25. 수학적 산정 기법
•
상향식 비용 산정 기법
•
경험적 추정 모형, 실험적 추정 모형
•
COMOMO 모형, Putnam 모형, 기능점수(FP) 모형
COMOMO 모형
•
원시 프로그램의 규모인 LOC(원시 코드 라인 수)에 의한 비용 산정 기법
•
비용 산정 결과는 프로젝트를 완성하는데 필요한 노력(Man-Month)으로 나타낸다.
•
보헴 (Boehm)에 제안하였다.
Putnam 모형
•
소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 예상하는 모형
•
시간에 따른 함수로 표현되는 Rayleigh-Norden 곡선의 노력 분포도를 기초로 한다.
•
대형 프로젝트의 노력 분포 산정에 이용
•
개발 기간이 늘어날수록 프로젝트 적용 인원의 노력이 감소
기능 점수(FP) 모형
•
소프트웨어의 기능을 증대시키는 요인별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능 점수를 산출하며, 총 기능 점수와 영향도를 이용하여 기능 점수(FP)를 구한 후, 이를 이용해서 비용을 산정하는 기법
◦
총 기능 점수 : 소프트웨어 개발의 규모, 복잡도, 난이도 등을 하나의 수치로 집약시킨 것
•
알브레히트(Albrecht)가 제안
비용 산정 자동화 추정 도구
•
SLIM
◦
Rayleigh-Norden 곡선과 Putnam 예측 모델을 기초로하여 개발된 자동화 추정 도구
•
ESTIMACS
◦
다양한 프로젝트와 개인별 요소를 수용하도록 FP 모형을 기초로 하여 개발된 자동화 추정 도구
26. 프로젝트 일정 계획
PERT (프로그램 평가 및 검토 기술)
•
프로젝트에 필요한 전체 작업의 상호관계를 표시하는 네트워크
•
각 직업별로 다음과 같이 단계를 나누어 종료시기를 결정한다.
◦
낙관적인 경우
◦
가능성이 있는 경우
◦
비관적인 경우
•
개발 경험이 없어 소요 기간 예측이 어려운 프로젝트 일정 계획에 사용
•
노드와 간선으로 구성
•
결정 경로, 작업에 대한 경계 시간, 작업 간의 상호 관련성 등을 알 수 있다.
CPM (임계 경로 기법)
•
프로젝트 완성에 필요한 작업을 나열하고, 작업에 필요한 소요 기간을 예측하는데 사용하는 기법
•
노드와 간선으로 구성
◦
노드 : 작업
◦
간선 : 작업 사이의 전후 의존관계
간트 차트
•
프로젝트의 각 작업들이 언제 시작하고 언제 종료되는지에 대한 작업 일정을 막대 도표를 이용하여 표시하는 프로젝트 일정표
•
수평 막대의 길이는 각 작업의 기간을 나타낸다.
28. 소프트웨어 개발 표준
소프트웨어 개발 표준
•
소프트웨어 개발 단계에서 수행하는 품질 관리에 사용되는 국제 표준
•
주요 소프트웨어 개발 표준
◦
ISO/IEC 12207
◦
CMMI (능력 성숙도 통합 모델)
◦
SPICE (소프트웨어 처리 개선 및 능력 평가 기준)
ISO/IECC 12207
•
ISO에서 만든 표준 소프트웨어 생명 주기 프로세스
CMMI (Capability Maturity Model Integration)
•
소프트웨어 개발 조직의 업무 능력 및 조직의 성숙도를 평가하는 모델
•
미국 소프트웨어 공학연구소에서 개발
•
초기, 관리, 정의, 정략적 관리, 최적화
SPICE (SW Process Improvement and Capability dEtermination)
•
정보 시스템 분야에서 소프트웨어의 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가 및 개선하는 국제 표준
•
공식 명칭 : ISO/IEC 15504
29. 소프트웨어 개발 방법론 테일러링
소프트웨어 개발 방법론 테일러링
•
프로젝트 상황 및 특성에 맞도록 정의된 소프트웨어 개발 방법론의 절차, 사용기법 등 수정 및 보완하는 작업
30. 소프트웨어 개발 프레임워크
•
소프트웨어 개발에 공통적으로 사용되는 구성요소와 아키텍쳐를 일반화하여 손쉽게 구현할 수 있도록 여러가지 기능들을 제공해주는 반 제품 형태의 소프트웨어 시스템
•
종류
◦
스프링 프레임워크
◦
전자정부 프레임워크
◦
닷넷 프레임워크
스프링 프레임워크
•
자바 플랫폼을 위한 오픈소스 경량형 애플리케이션 프레임워크
•
동적인 웹 사이트의 개발을 위해 다양한 서비스를 제공한다.
•
전자정부 표준 프레임워크의 기반 기술로 사용되고 있다.
전자정부 프레임워크
•
대한민국 공공부문 정보화 사업 시 효율적인 정보 시스템의 구축을 지원하기 위해 필요한 기능 및 아키텍쳐를 제공하는 프레임워크 이다.
•
개발 프레임워크의 표준 정립으로 응용 소프트웨어의 표준화, 품질 및 재사용성의 향상을 목적으로 한다.
•
오픈소스 기반의 범용화를 이룰 수 있다.
•
공개된 기술을 활용함으로써 특정 업체의 종속성을 배제하고, 사업별 공통 컴포넌트의 중복 개발을 방지한다.
닷넷 프레임워크
•
Windows 프로그램의 개발 및 실행 환경을 제공하는 프레임워크
•
마이크로소프트사에서 통합 인터넷 전략을 위해 개발하였다.
•
코드 실행을 관리하는 CLR(Common Language Runtime, 공용언어런타임)이라는 이름의 가상머신 상에서 작동한다.
소프트웨어 개발 프레임워크의 특성
모듈화 (Modularity)
•
프레임워크는 캡슐화를 통해 모듈화를 강화하고, 설계 및 구현의 변경에 따른 영향을 최소화 함으로써 소프트웨어의 품질을 향상시킨다.
•
프레임워크는 개발 표준에 의한 모듈화로 인해 유지 보수가 용이하다.
재사용성 (Reusablility)
•
프레임워크는 재사용 가능한 모듈들을 제공함으로써 예산절감, 생산성 향상, 품질 보증이 가능
확장성 (Extensibility)
•
프레임워크는 다형성(Polymorphism)을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능하다.
제어의 역흐름 (Inversion of Control)
•
개발자가 관리하고 통제해야하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킴.