정보처리기사

[정처기] 실기 요약 - 1-1. 소프트웨어 개발 방법론

검이 2023. 12. 11. 18:00

목차

1. 요구사항 확인

Chapter 01  소프트웨어 개발 방법론
Chapter 02  현행 시스템 분석
Chapter 03  요구사항 확인


소프트웨어 생명주기 모델 프로세스

요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수
  1. 요구사항 분석
    : 다양한 이해관계자의 요구사항을 고려하여 새로운 제품이나 변경된 제품에 부합하는 요구와 조건 결정
    : 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의
    : 기능 요구사항, 비기능 요구사항
  2. 설계
    : 시스템 명세단계에서 정의한 기능을 실제 수행할 수 있도록 수행방법을 논리적으로 결정
    : 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계
  3. 구현
    : 설계 단계에서 논리적으로 결정한 문제 해결방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램 작성
    : 프로그래밍 언어 선택, 기법, 스타일, 순서 등 결정
    : 인터페이스 개발, 자료 구조 개발, 오류 처리
  4. 테스트
    : 시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가
    : 단위테스트, 통합테스트, 시스템 테스트, 인수 테스트
  5. 유지보수
    : 시스템이 인수되고 설치된 후 일어나는 모든 활동
    : 예방, 완전, 교정, 적응 유지보수

소프트웨어 생명주기 모델 종류

폭포수 모델 / 프로토타이핑 모델 / 나선형 모델 / 반복적 모

1. 폭포수 모델
- 순차적 접근 / 이해가 용이하고 관리가 편리함 / 요구사항 변경이 어려움
- 적용 경험과 성공사례가 많음
- 소프트웨어 개발 시 각 단계를 확실히 마무리 지은 후 다음단계로 넘어감
- 타당성검토 →  계획 → 요구사항 분석 → 설계 → 구현 → 테스트 유지보수

2. 프로토타이핑 모델
- 고객이 요구한 주요 기능을 프로토타입으로 구현, 피드백 반영하며 소프트웨어를 만드는 모델
- 프로토타입은 발주자나 개발자 모두 공동의 참조 모델 제공 
- 요구분석 용이 / 타당성 검증 가능
- 프로토타입 폐기 비용 증가

3. 나선형 모델
- 시스템 개발 시 위험을 최소화 하기 위해 점진적으로 완벽한 시스템으로 개발
- 위험분석, 반복 개발
- 위험성 감소와 변경에 따른 유연한 대처 가능
- 단계 반복에 따른 관리 어려움
- 계획 및 정의 → 위험 분석 → 개발 → 고객평가

4. 반복적 모델
- 구축대상을 나누어 병렬적으로 개발 후 통합 or 반복적으로 개발하여 점증 완성
- 병행 개발로 인한 일정 단축 가능 / 관리비용 증가
- 사용자의 요구사항 일부분 혹은 제품 일부분을 반복적으로 개발하여 최종 시스템으로 완성


소프트웨어 개발 방법론 종류

구조적 방법론 / 정보공학 방법론 / 객체 지향 방법론 / 컴포넌트 기반 방법론 / 애자일 방법론 / 제품 계열 방법론

1. 구조적 방법론 
- 전체 시스템을 기능에 따라 나누어 개발, 이를 통합하는 분할과 정복 접근 방식
- 프로세스 중심의 하향식 방법론
- 구조적 프로그래밍 표현을 위해 나씨-슈나이더만 차트 사용

나씨-슈나이더만 차트
- 논리의 기술에 중점을 둔 도형식 표현 방법
- 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조로 표현
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합

 

2. 정보공학 방법론
- 정보시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론
- 개발 주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론

3. 객체 지향 방법론
- [객체]라는 기본 단위로 시스템을 분석 및 설계하는 방법론
- 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용하는 방법론
- 객체, 클래스, 메시지를 사용

4. 컴포넌트 기반 방법론
- 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 작성하는 방법론
- 개발 기간 단축으로 인한 생산성 향상
- 새로운 기능 추가 쉬움
- 소프트웨어 재사용이 가능

5. 애자일 방법론
- 사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 방법론
- 개발 과정의 어려움을 극복하기 위해 적극적으로 모색한 방법론

6. 제품 계열 방법론
- 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
- 임베디드 소프트웨어를 작성하는데 유용
- 영역공학과 응용공학으로 구분

영역공학: 영역분석, 영역 설계, 핵심자산을 구현하는 영역
응용공학: 제품 요구분석, 제품 설계, 제품을 구현하는 영역

애자일

사람이 중심이 되어 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발할 수 있는 방법론

등장배경
기존 개발 방법론의 한계를 극복하기 위해 등장
- 소프트웨어 개발 트렌드가 모바일 환경으로 변화 / 시장 적시성과 잦은 배포의 중요성 부각
- 전통적 방법론은 문서 및 절차 위주로 변화에 신속한 대응 어려움 / 빠르게 적용하고 효율적으로 개발할 수 있는 방법론 필요.

유형
XP, 린, 스크럼

XP
의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높임
1~3주의 반복 개발주기
5가지 가치와 12개의 실천항목이 존재함
--------------------------------------------------------------------------
5가지 가치: 용기 / 단순성 / 의사소통 / 피트백 / 존중

12가지 기본 원리
: 짝 프로그래밍 / 공동 코드 소유 / 지속적인 통합 / 계획 세우기 / 작은 릴리즈 / 메타포어 / 간단한 디자인 / 테스트 기반 개발 / 리팩토링 / 40시간 작업 / 고객 상주 / 코드 표준
스크럼 ★
매일 정해진 시간과 장소에서 짧은 시간 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
- 백로그: 제품과 프로젝트에 대한 요구사항
- 스프린트: 2~4주의 짧은 개발 기간으로 반복적 수행을 통한 개발 품질 향상
- 스크럼미팅 : 매일 15분 정도 미팅으로 투두리스트 수립 / 데일리미팅이라고도 함
- 스크럼 마스터 : 프로젝트 리더, 스크럼 수행 시 문제를 인지 및 해결하는 사람
- 스프린트 회고 : 스프린트 주기를 되돌아보며 정해진 규칙 준수 여부, 개선점 등을 확인 및 기록 / 해당 스프린트가 끝난 시점이나 일정 주기로 시행
- 번 다운 차트: 남아있는 백로그 대비 시간을 그래픽적으로 표현 / 백로그 - 수직, 시간 - 수평

도요타의 린 시스템 품질 기법을 소프트웨어 개발 프로세스에 적용하여 낭비요소를 제거하여 품질 향상
JIT, 칸반보드 사용

7가지 원칙
: 낭비제거 / 품질 내재화 / 지식 창출 / 늦은 확정 / 빠른 인도 / 사람 존중 / 전체 최적화

객체 지향 구성요소

클래스 / 객체 / 메서드 / 메시지 / 인스턴트 / 속성

객체 지향 기법

캡슐화 / 상속성 / 다형성 / 추상화 / 정보은닉 / 관계성

1. 캡슐화
- 결합도 낮고 재사용 용이 / 인터페이스 단순화 / 정보은닉과 관계깊음 / 변경 발생시 오류 파급효과 적음

2. 상속성
- 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용

3. 다형성
- 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용
- 오버로딩, 오버라이딩이 대표적

오버로딩: 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러개 가지는 기법
오버라이딩: 상위 클래스에서 정의한 일반 메서드의 구현을 하위클래스에서 무시하고 재정의

 

4. 추상화
- 공통 성질을 추출하여 추상 클래스 설정 
- 과정 추상화, 자료 추상화, 제어 추상화

5. 정보 은닉
- 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술
- 필요하지 않은 정보는 접근할 수 없도록 하여 모듈 또는 하부시스템이 다른 모듈에 영향을 받지 않음
- 모듈 내부의 자료 구조와 접근 동작들에만 수정을 국한하지 않으므로 요구사항 등 변화에 따른 수정 가능
- 모듈 사이의 독립성을 유지하는데 도움을 줌
- 설계에서 은닉되어야 할 기본 정보로는 IP주소와 같은 물리적 코드, 상세 데이터 구조 등 존재

6. 관계성
- 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법
- 연관화, 분류화, 집단화, 일반화, 특수화

연관화
- 클래스와 객체의 참조 및 이용관계
- 같은 계층에 속하는 클래스들 사이의 상호 의존성을 보여주는 비계층적 관계성을 나타냄

집단화 
- 서로 관련있는 여러 객체를 묶어 한개의 상위 객체를 만드는 특징이 있음
- 일반화와 달리 상위 클래스의 성질들이 하위 클래스로 상속되지 않음

분류화
- 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스

일반화
- 클래스들 간의 개념적인 포함관계
- 상위 클래스의 특성을 하위 클래스가 상속받음

특수화
- 상위 클래스의 특성들을 상속받으면서 하위클래스에서 나름대로 수정을 가하고 자신만의 고유한 특성을 갖는 관계

객체 지향 설계 원칙

단일 책임의 원칙 / 개방 폐쇄 원칙 / 리스코프 치환의 원칙 / 인터페이스 분리의 원칙 / 의존성 역전의 원칙

럼바우의 객체 지향 분석 절차

객체 모델링(정보 모델링) / 동적 모델링 / 기능 모델링

데이터 흐름도

각 프로세스를 따라 흐르면서 변환되는 모습을 나타냄
- 구조적 분석 기법에 이용
- 데이터의 흐름에 중심을 두는 분석용 도구
- 제어의 흐름은 중요하지 않음
- 시간 흐름을 명확하게 표현할 수 없음.


프로젝트 관리 대상

계획 관리 / 품질 관리 / 범위 관리

프로젝트 관리 3대 요소

사람 / 문제 / 프로세스

비용산정 모형 분류

1. 하향식 산정방법
- 경험이 많은 전문가에게 비용산정 의뢰 / 여러 전문가와 조정자를 통해 산정
- 델파이기법: 전문가의 경험적 지식을 통한 문제 해결 및 미래 예측을 위한 기법

2. 상향식 산정방법
- 세부적인 요구사항과 기능에 따라 필요한 비용 계산
- COCOMO, Loc, Man Month, 푸트남 모형, 기능점수(FP) 모형


비용산정 모형 종류

1. Loc 모형

예측치: (낙관치 + 4 * 중간치 + 비관치) / 6

- 각 기능의 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구하고 이를 이용하여 비용 산정
- 측정이 쉽고 이해하기 쉬워 많이 사용

2. Man Month

Man Month = (Loc) / (프로그래머의 월간 생산성)
프로젝트 기간 = Man Month / 프로젝트 인력

 

3. COCOMO

조직형 / 반 분리형 / 임베디드형

- 보헴이 제안한 모형 / 프로그램 규모에 따라 비용 산정
- 비용산정 결과는 Man-Month로 산정

4. 푸트남
- 소프트웨어 개발주기의 단계별로 요구할 인력의 분포 가정
- 생명주기 예측 모형이라고도 함
- Rayleigh-Nordan 곡선의 노력 분포도를 기초로 함

5. 기능점수(FP) 모형

기능점수 = 총기능점수 * [0.65 + (0.1 * 총 영향도)]

일정관리 모델

종류: 주 공정법 / PERT / 중요연쇄 프로젝트 관리

1. 주 공정법
- 여러가지 작업 순서가 얽혀있는 프로젝트의 일정을 계산
- 모든 자원 제약 사항을 배제한 상태로 프로젝트의 시작과 끝을 나타내는 노드와 노드간의 연결을 통해 공정을 계산하기 위한 액티비티

2. PERT 
- 일의 순서를 계호기적으로 정리하기 위한 수렴 기법으로 비관치, 중간치, 낙관치의 3점 추정방식을 통해 일정관리

3. 중요 연쇄 프로젝트 관리
- 주 공정 연쇄법으로 자원제약사항을 고려하여 일정을 작성


위험 관리

종류: 알려진 위험 / 예측 가능한 위험 / 예측 불가능한 위험
대응전략 : 회피 / 전가 / 완화 / 수용