개발의변화
실기 1 본문
소프트웨어 생명주기 (SDLC)
- 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차
- 시스템이 개발될 떄부터 운용과 유지보수를 거쳐 생애를 마칠 때까지 어떠한 순서를 밟는지에 대한 작업 프로세스 모델화
1. 요구사항 분석
다양한 이해관계자의 상충할 수도 있는 요구사항을 고려하여 새로운 제품이나 변경된 제품에 부합하는 요구와 조건을 결정하는 단계
2. 설계
시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계
3. 구현
문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계
4. 테스트
시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계 (단위 테스트, 통합,시스템, 인수,)
5. 유지보수
시스템이 인수되고 설치된 후 일어나는 모든 활동
소프트웨어 생명주기 모델 종류
폭포수 모델: 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델
순차적 접근, 이해가 용이+관리가 편리, 요구사항 변경이 어려움
프로토타이핑 모델: 고객이 요구한 주요 기능을 프로토타입으로 구현하여, 고객의 피드백을 바녕ㅇ하여 소프트웨어를 만들어가는 모델
프로토타입 개발, 요구분석 용이+타당성 검증 가능, 프로토타입 폐기에 따른 비용
나선형 모델: 시스템 개발 시 위험ㅂ을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발하는 모델
위험분석, 반복개발 / 위험성 감소와 변경에 유연한 대처, 단계 반복에 따른 관리 어려움
반복적 모델: 구축대상을 나누어 병렬적으로 개발 후 통합, 반복적으로 개발하여 점증 완성 시키는 SDLC 모델
증분방식으로 병행 개발, 병행 개발로 인한 일정 단축 가능, 병행 개발에 따른 관리 비용 증가
소프트웨어 개발 방법론 종류(Structured Development)
구조적 방법론: 전체 시스템을 기능에 따라 나누어 개발하고, 이를 통합하는 분할과 정복 접근 방식의 방법론, 프로세스 중심의 하향식 방법론, 나씨 - 슈나이더만 차트 사용
정보공학 방법론(Information Engineering Development)
정보시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론, 개발주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론
객체 지향 방법론(Object-Oriented Development)
소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 작성하는 방법론
애자일 방법론 (Agile Development)
절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론
Agile 방법론: 절차보다는 사람이 중심이 되어 변화에 유연하고 신속하게 적으하면서 효율적으로 시스템을 개발할 수 있는 신속 적응적 경량 개발 방법론이다
애자일 방법론 유형
XP(eXtreme Programming)
용기, 단순성, 의자사소통, 피드백, 존중
스크럼(SCRUM)
백로그, 스프린트, 스크럼 미팅, 스프린트 회고, 번 다운 차트
린(LEAN)
린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
계획수립: 유동적 범위 설정, 확정적 범위 설정
업무수행: 팀 중심 업무 수행, 관리자 주도적 명령과 통제, 개인 단위로 업무 수행
개발/검증: 반복 주기 단위로 소프트웨어를 개발/검증, 분석 / 설계 / 구현 / 테스트를 순차적으로 수행
팀관리: 업무 몰입, 팀 평가 / 경쟁, 개별 평가
문서화: 문서화보다는 코드를 강조 / 상세한 문서화를 강조
성공요소: 고객 가치 전달 / 계획/일정 준수
유형: XP,스크럼,린 / 폭포수, 프로토타입, 나선형
객체 지향 분석 방법론
클래스: 특정 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀
객체 지향 프로그래밍에서 추상화하는 단위
하나 이상의 유사한 객체를 묶어서 하나의 공통된 특성을 표현
속성은 변수의 형태로, 행위는 메서드 형태로 선언
객체: 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상
클래스에서 정의한 것을 토대로 메모리에 할당됨
객체마다 각각의 상태와 식별성을 가짐
메서드: 클래스로부터 생성된 객체를 사용하는 방법
객체가 메시지를 받아 실행해야 할 객체의 구체적이 ㄴ연산
캡슐화: 서로 연관된 데이터와 함수를 함계 묶어 외부와 경꼐를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
결합도가 낮아지고 재사용이 용이
인터페이스가 단순화됨
정보 은닉과 관계가 깊음
변경 발생 시 오류의 파급 효과가 적음
상속성: 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법
다형성: 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질
- 오버로딩: 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가지는 기법
- 오버라이딩: 상위 클래스에서 정의한 일반 메서드의 구현을 하위 클래스에서 무시하고 재정의할 수 있는 기법
추상화: 공통 성질을 추출하여 추상 클래스를 설정하는 기법
종류로는 과정 추상화, 자료 추상화, 제어 추상화
정보 은닉: 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능함
필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부 시스템이 다른 모듈의 구현에 영향을 받지 않게 설계됨
모듈 내부의 자료 구조와 접근 동작들에만 수정을 국한하지 않기 때문에 요구사항 수정 가능
관계성: 연관화: is-member-of 관계, 클래스와 객체의 참조 및 이용관계, 같은 계층이 속하는 클래스 사이의 상호 의존성을 보여주는 비계층적 관계성을 나타냄
집단화: is part of 관계, part-whole관계
서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체를 만드는 특징이 있음
분류화: is-instance-of, 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스
일반화:is-a , 클래스들 간의 개념적인 포함 관계, 상위 클래스의 특성을 하위 클래스가 상속받음
특수화: is-a, 상위 클래스의 특성들을 상속받으면서 하위 클래스에서 나름대로 수정을 가하고 자기 자신의 고유한 특성을 갖는 관계
단일 책임의 원칙(SRP; Single Responsibility Principle)
하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙, 객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙
개방 폐쇄 원칙(OCP; Open Close Principle)
소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙
리스코프 치환의 원칙(Liskov Substitution Principle)
서브 타입(상속받은 하위 클래스)은 어디서나자신의 기반 타입(상위 클래스)으로 교체할 수 있다는 원칙
인터페이스 분리의 원칙(Interface Segregation Principle)
프로젝트 관리의 개념
프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
프로젝트 관리는 소프트웨어 개발 계획을 세우고 분석, 설계, 구현 드의 작업을 통제하는 것으로 생명 주기의 전 과정에 걸쳐서 진행
프로젝트 관리 대상
계획관리, 품질관리, 범위관리
프로젝트 관리 3대 요소
사람: 프로젝트 관리에서 가장 기본이 되는 인적 자원
문제: 사용자의 입장에서 문제를 분석하여 인식함
프로세스: 소프트웨어 개발에 필요한 전체적인 작업 계획 및 구조
COCOMO(COnstuctive COst MOdel)모형
COCOMO 모형은 보헴이 제안한 모형으로 프로그램 규모에 따라 비용을 산정하느 방식
비용산정 결과는 프로젝트를 완성하는 데 필요한 노력 Man-Month
비용 견적의 강도 분석 및 비용 견적의 유연성
조직형(ㅒㄱㅎ무ㅑㅊ ㅡㅐㅇ
비용산정 모형 종류
LoC(Lines of Code):
소프트웨어 각 기능의 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정
예측치를 이용하여 생산성, 노력, 개발 기간 등의 비용을 산정
Man Month:
한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 프로젝트 비용 선정
(Man Month) = (LoC)/(프로그래머의 월간 생산성)
(프로젝트 기간) = (Man Month)/(프로젝트 인력)
PutNam 모형
소프트웨어 개발주기의 단계별로 요구할 인력의 분포를 가장하는 방식
FP(기능점수 모형)
기능점수 모형은 요구 기능을 증가시키는 인자별로 가중치를 부여하고 요인별 가중치를 합산하여 총 기능의 점수를 계산하여 비용 산정
FP=총 기능점수 X [0.65 + (0.1 X 총 영향동)]
일정관리 모델
주 공정법: 여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정을 계산하는 기법
모든 자원 제약사항을 배제한 상태로 프로젝트의 시작과 끝을 나타내는 노드와 노드 간을 연결을 통해 공정을 계산하기 위한 액 티비티
PERT: 일의 순서를 계획적으로 정리하기 위한 수렴 기법으로 비관치, 중간치, 낙관치의 3점 추정방식
CCPM(중요 연쇄 프로젝트 관리) : 주 공정 연쇄법으로 자원제약사항을 고려하여 일정을 작성하는 기법
시작 가,라,마 -> 나,다 -> 바,사,아 -> 종료
LoC
ManMonth = Loc % 프로그래머의 월간 생산성 = 30,00 % 300 = 100개월
프로젝트 기간 = Man Month % 프로젝트 인력 = 100 % 5 = 20개월
럼바우 데이터 모델링
Functional Modeling(기능 모델링): 프로세스들의 자료 흐름을 중심으로 처리 과정 표현하는 모델링
자료 흐름도(DFD)를 활용하여 표현
Dynamic Modeling(동적 모델링): 시간의 흐름에 따라 객체들 사이으이 제어 흐름, 동작 순서 등의 동적인 행위를 표현하는 모델링
상태 다이어그램을 활용하여 표현
객체 모델링(Object Modeling): 정보 모델링이라고도 하며, 시스템에서 요구하는 객체를 찾고 객체 간의 관계를 정의하여 ER 다이어그램을 만드는 과정까지의 모델링, 가장 중요하며 선행되어 진행
객체 지향 설꼐 원칙: 객체 설꼐 시 특정 기능에 대한 인터페이스는 그 기능과 상관없는 부분이 변해도 영향을 받지 않아야 한다는 원칙
객체 설계 시 특정 기능에 대한 인터페이스는 그 기능과 상관없는 부분이 변해도 영향을 받지 않아야 한다는 원칙이다.
단일 책임의 원칙: 하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙
객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙
개방 폐쇄 원칙: 소프트웨어의 구성요소는 확장에는 열려 있고 변경에는 닫혀 있어야 한다는 원칙
리스코프 치환의 원칙: 서브 타입은 어디서나 자신의 기반 타입으로 교체할 수 있어야 한다는 원칙
인터페이스 분리의 원칙: 한 클래스는 자신이 사용되지 앟ㄴ느 인터페이슨는 구현하지 말아야 한다는 원칙, 객체 설계 시 특정 기능에 대한 인터페이스는 그 기능과 상관없는 부분이 변해도 영향을 받지 않아야 한다는 원칙
의존성 역전의 원칙: 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙
소프트웨어 생명주기 모델:
소프트웨어 생명주기 모델 중에서 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계는 무엇인가?
요구사항: 다양한 이해관계자의 상충할 수도 있는 요구사항을 고려하여 새로운 제품이나 변경된 제품에 부합하는 요구와 조건을 결정하는 단계
설계: 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계
구현: 설계 단계에서 논리적으로 결정한 문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계
테스트: 시스템이 정해진 요구를 만족하는지 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계
유지보수: 시스템이 인수되고 설치된 후 일어나는 모든 활동
폭포수 모델: 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후에 다음 단계로 넘어가는 모델
프로토타이핑 모델: 고객이 요구한 주요 기능을 프로토타입으로 구현하여, 고객의 피드백을 반영하여 소프트웨어를 만들어가는 모델
나선형 모델: 시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발해나가는 모델
반복적 모델: 구축대상을 나누어 병렬적으로 개발 후 통합하거나, 반복적으로 개발하여 점증 완성시키는 모델
구조적 방법론, 정보공학 방법론, 객체 지향 방법론, 컴포넌트 기반 방법론, 애자일 방법론, 제품 계열 방법론
스크럼:
매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
린:
도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
XP:
의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높이기 위한 방법론
델파이 기법
전문가의 경험적 지식을 통하나 문제 해결 및 미래예측을 위한 기법
FP
요구 기능을 증가시키는 인자별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능 점수를 계산하여 비용을 선정하는 방식
PERT
일의 순서를 계획적으로 정리하기 위한 수렴 기법으로 비관치,중간치,낙관치의 3점 추정방식을 통해 일정을 관리하는 기법
중요 연쇄 프로젝트 관리(CCPM)
주 공정 연쇄법으로 자원제약사항을 고려하여 일정을 작성하는 기법\