노트

소프트웨어 공학, 방법론 본문

정보처리기사 정리

소프트웨어 공학, 방법론

blackmilktea 2024. 4. 11. 22:32

소프트웨어 공학이란(Software Engineering)?

품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문.

개발에 적용되는 이론, 방법,  도구를 포괄.

 

소프트웨어 공학 3R -> 소프트웨어의 생산성을 극대화

  • Reverse Engineering(역공학): 개발된 시스템을 분석하여 요구 분석서, 설계서 등의 문서를 추출하는 작업
  • Recycle Engineering(재공학): 기존 소프트웨어를 기능을 개선하거나 새로운 소프트웨어에 재활용하는 공법
  • Reuse(재사용): 이미 개발된 소프트웨어의 전체 또는 일부를 다시 사용하는 것을 의미

재공학 과정: 분석(Analysis) -> 재구성(Restructuring) -> 역공학(Reverse Engineering) -> 이관(Migration)

 

소프트웨어 개발 단계

계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수

 

 

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

1) 구조적 방법론

  • 절차지향 소프트웨어 개발 방법론(하향식)
  • 제한된 구조에서 코드 생성 및 순차적 실행
과정 설명
요구사항 분석 고객의 요구사항을 끌어내어 명세화
고주적 분석 원하는 기능/환경/데이터를 종합하여 데이터 흐름도 작성
구조적 설계 모듈 중심 설계 과정
구조적 프로그래밍 순차, 선택, 반복의 논리 구조 구성으로 프로그램 작성

구성 요소: 데이터 흐름도(DFD), 자료사전(DD), 상태전이도(STD), 소단위 명세서(minispec)

 

2) 정보공학 방법론: 기업의 주요 부분을 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합

 

3) 객체지향 개발 방법론

  • 현실세계의 개체(Entity)를 속성(Attribute)과 메서드(Method) 형태로 표현
  • 객체, 클래스 간의 관계를 식별하여 설계 모델로 변환하는 방법론
  • 캡슐화, 정보은닉, 상속, 다형성, 추상화

4) CBD(Component Based Development) 분석 방법론

  • 재사용 가능한 컴포넌트의 개발 또는 상용 컴포넌트를 조합해 어플리케이션 개발
  • 새로운 기능 추가가 쉬운 확장성, 생선성 및 품질이 향상, 시스템 유지보수 비용 최소화

5) 애자일 방법론

  • 기존 방법론들이 절차를 중시한 나머지 변화에 빠른 대응을 할 수 없는 단점 개선
  • 고객의 요구사항에 빠르게 대응하여 개발
  • 종류: XP(eXtreme Programming), SCRUM, FDD, Crystal 방법론 등

 

2. 소프트웨어 개발 모델

1) 폭포수 모델(Waterfall Model)

  • 계획, 분석, 설계, 구현, 테스트, 운영 등 전 과정을 순차적으로 접근하는 개발 모델(선형 순차 모델)
  • 각 단계의 검증 후 다음 단계 진행
  • 순차적으로 진행되기에 병행되거나 거슬러 반복 진행 X, 요구사항 변경 어려움

2) 프로토타이밍 모델(Prototyping Model)

  • 고객이 요구한 주요 기능을 프로토타입으로 구현
  • 개발자가 구축할 소프트웨어의 모델을 사전에 만들어 요구사항을 효과적으로 유도

- 장점: 사용자의 요구사항을 충실히 반영, 비교적 빠른 기간 안에 사용자가 평가할 수 있는 결과물이 만들어 짐.

오류를 초기에 발견 가능, 변경이 용이

- 단점: 시간과 비용이 훨씬 많이 들 수 있음. 사용자가 실제 제품과 혼동할 수 있음.

문서작성 소홀해질 수 있음. 프로토타입 폐기에 따른 비용이 듦.

 

3) 나선형 모델(Spiral Model)

  • 폭포수 모델과 프로토타이핑 모델의 장점을 수용, 위험 분석을 추가한 점증적 개발 모델
  • 프로젝트 수행 시 발생하는 위험 관리, 최소화하려는 것이 목적
  • 대규모 프로젝트 및 위험 부담이 큰 시스템 개발에 적합

계획수립 -> 위험분석 -> 공학적 개발 -> 고객 평가

- 장점: 위험분석 과정으로 위험성이 큰 프로젝트를 수행 가능.

고객의 요구사항을 보다 더 상세히 적용 가능

- 단점: 시간과 비용이 많이 들 수 있다. 반복 단계가 길어질수록 프로젝트 관리가 어려움.

 

4) RAD(Rapid Application Development) 모델

  • 매우 짧은 개발 주기를 강조하는 점진적 소프트웨어 개발 방식
  • 강력한 소프트웨어 개발 도구를 이용하여 매우 짧은 개발 주기로 개발하는 순차적 소프트웨어 개발 프로세스
  • CASE(Computer Adied Software Engineering) 도구를 이용해 시스템을 개발
  • 기술적으로 위험이 적고 빠른 개발이 요구될 때 사용이 적합

5) V 모형

  • 폭포수 모델에 시스템 검증과 테스트 작업을 강조
  • 높은 신뢰성이 요구되는 분야에 적합

                                                            인수 테스트: 알파 테스트(개발자+사용자), 베타 테스트(사용자)

요구 분석        <- 요구 분석 검증 ->    시스템 테스트: 기능, 비기능

아키텍처 설계 <- 인터페이스 검증 -> 통합 테스트: 상향식(드라이버), 하향식(스텁)

모듈설계         <- 모듈 검증 ->            단위 테스트: 정적, 동적

                                구현 

 

6) 4세대 기법: CASE 등의 자동화 도구를 이용하여 요구사항 명세로부터 원시코드를 자동으로 생성

 

 

3. 애자일(Agile) 방법론

1) 개념: 애자일 개발을 가능하게 해주는 다양한 방법론 전체를 일컫는 말, 경량(Lightweight) 프로세스라고도 함. 프로젝트를 시작 후 끊임없이 개선 노력

 

애자일 선언문

  • 공정과 도구보다 개인과 상호작용
  • 포괄적인 문서보다 작동하는 소프트웨어
  • 계약 협상보다 고객과의 협력
  • 계획을 따르기보다 변화에 대응
  • 왼쪽의 가치도 인정하나 오른쪽을 좀 더 중요시

2) 특징

  • 지속적인 소통을 통하여 변화하는 요구사항을 신속하게 수용
  • 팀의 목적을 우선시하며 고객의 의견을 가장 우선
  • 팀원들과 주기적인 회의와 제품을 시연함으로써 소프트웨어 점검
  • 작업 계획을 짧게 세우고, 반복적으로 수행 변화에 유연하게 대처

3) 종류

1. XP(eXtream Programming)

- XP 5가지 핵심가치: 용기, 존중, 의사소통, 피드백, 단순성

 

- 12가지 실천사항

  • 짝 프로그래밍(Pair Programming): 하나의 작업을 2명의 프로그래머가 코딩 리뷰 공동 수행
  • 계획 세우기(Planning Game): 게임처럼 선수와 규칙, 목표를 두고 기획 수행
  • 테스트 기반 개발(Test Driven Development): 선 단위 테스트 후 실제 코드 작성
  • 고객 상주(Whole Team): 개발 효율을 위해 고객을 프로젝트 팀원으로 상주
  • 지속적인 통합(Continuous Integration): 상시 빌드 및 배포가 가능한 상태로 유지
  • 코드 개선(Design Improvement): 코드 개선 작업 수행(가시성, 성능 등) 불필요한 기능 제거 및 리팩토링
  • 작은 릴리즈(Small Releases): 짧고 잦은 릴리즈로 고객이 변경사항을 볼 수 있게 함(잦은 피드백)
  • 코딩 표준(Coding Standards): 표준화된 관례에 따라 코드 작성
  • 공동 코드 소유(Collective Code Ownership): 시스템에 있는 소스코드는 팀의 모든 프로그래머가 언제라도 수정 가능
  • 간단한 디자인(Simple Design): 가능한 가장 간결한 디자인 상태 유지
  • 시스템 메타포어(System Metaphor): 최종적으로 개발되어야 할 시스템의 구조를 조망
  • 작업시간 준수(Sustainable Pace): 주 40시간 이상 작업 금지, 2주 연속 오버타임 금지

2. 스크럼(SCRUM)

  • 소프트웨어에 포함될 기능, 개선점에 대한 우선순위를 부여
  • 개발 주기는 30일 정도(스프린트)로 조절, 개발 주기마다 실제 동작할 수 있는 결과를 제공
  • 날마다 15분 정도의 회의, 항상 팀 단위로 생각

3. 그 외

크리스털 패밀리, FDD(Feature-Driven Development) - 기능주도 개발, ASD(Adaptive Software Development)

'정보처리기사 정리' 카테고리의 다른 글

2 데이터 입출력 구현  (0) 2024.04.16
소프트웨어 설계의 기본 원칙  (0) 2024.04.15
요구사항 모델링  (0) 2024.04.13
요구사항 분석  (0) 2024.04.12
프로젝트 계획  (0) 2024.04.12