본문 바로가기

스터디/웹개발

2022년09월11일 TIL - 정보처리기사 실기

220911 정보처리기사 실기

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

1. 요구사항 분석

  • 요구와 조건을 결정하는 단계
  • 활동: 기능 요구사항, 비기능 요구사항

2. 설계

  • 정의한 기능을 실제 수행할 수 있도록 방법을 논리적으로 결정하는 단계
  • 활동: 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계

3. 구현

  • 프로그래밍 언어 등을 결정하고 사용하여 실제 프로그램을 작성
  • 활동: 인터페이스 개발, 자료구조 개발, 오류 처리

4. 테스트

  • 검사하고 평가
  • 활동: 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트

5. 유지보수

  • 시스템이 인수되고 설치된 후 일어나는 모든 활동
  • 활동: 예방, 완전, 교정, 적응, 유지보수

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

  1. 폭포수 모델(Waterfall Model)
    • 단계를 마무리 지어야 넘어감, 가장 오래된 모델, 선형 순차적 모형으로 고전적 생명주기 모형, 경험과 사례 많음, 단계별 정의와 산출물 명확, 요구사항 변경 어려움
    • 절차: 타당성 검토 → 계획 → 요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수
  2. 프로토타이핑 모델(Prototyping Model)
    • 요구한 주요 기능을 프로토타입으로 구현하여, 피드백을 반영하면서 소프트웨어를 만들얻나가는 모델, 발주자 개발자 모두에게 공동의 참조 모델 제공, 프로토타입은 구현 단계의 구현 골격
  3. 나선형 모델(Spiral Model)
    • 시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 모델
    • 절차: 계획 및 정의 → 위험 분석 → 개발 → 고객 평가 (절차를 반복함)
  4. 반복적 모델(Iteration Model)
    • 구축대상을 나눠 병렬적으로 개발 후 통합하거나, 반복적으로 개발하여 점증 완성시키는 모델, 요구사항의 일부분이나 제품 일부분을 반복적으로 개발하여 최종 시스템으로 완성

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

  1. 구조적 방법론(Structured Development)
    • 전체 시스템을 기능에 따라 나눠 개발하고 이를 통합하는 분할과 접근 방식, 프로세스 중심의 하향식 방법론, 구조적 프로그래밍을 위해 나씨-슈나이더만(Nassi-Shneiderman) 차트 사용
    • 나씨-슈나이더만 차트: 논리의 기술에 중점을 둔 도형식 표현 방법, 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조로 표현, 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합
  2. 정보공학 방법론(Information Engineering Development)
    • 정보 시스템 개발에 필요한 관리 절차와 작업 기법을 체계화, 개발 주기를 이용해 대형 프로젝트를 수행하는 체계적인 방법론
  3. 객체 지향 방법론(Object-oriented Development)
    • ‘객체’라는 기본 단위로 시스템을 분석 및 설계하는 방법론, 복잡한 현실 세계를 사람이 이해하는 방식으로 시스템에 적용, 객체/클래스/메시지를 사용
  4. 컴포넌트 기반 방법론(CBD; Component Based Development)
    • 컴포넌트를 조립해서 프로그램을 작성하는 방법론, 개발 기간 단축으로 생산성 향상, 새로운 기능 추가 쉬움(확장성), 재사용 가능
  5. 애자일 방법론(Agile Development)
    • 절차보다 사람 중식으로 변화에 유연하고 신속하게 적응하여 효율적으로 시스템 개발, 개발 과정의 어려움을 극복하기 위해 모색한 방법론
  6. 제품 계열 방법론(Product Line Development)
    • 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발, 임베디드 소프트웨어를 작성하는 데 유용, 영역 공학과 응용 공학으로 구분
    • 영역 공학: 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역
    • 응용 공학: 제품 요구분석, 제품 설계, 제품을 구현하는 영역

애자일 방법론

개념

  • 절차보다 사람 중심, 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템을 개발.
  • 개발 기간이 짧고 신속, 폭포수 모형에 대비되는 방법론으로 개발과 함께 즉시 피드백을 받아서 유동적으로 개발.

등장 배경

  • 기존 개발 방법론의 한계 극복: 변화에 신속한 대응 어려움, 빠르게 적용하고 효율적으로 개발할 수 있는 방법의 필요
  • 소프트웨어 개발환경의 변화: 트렌드가 모바일로 변화, 시장 적시성과 잦은 배포의 중요성 부각

유형

XP, 린(Lean), 스크럼(SCRUM) 등이 있다.

XP (eXtreme Programming)

  • 1~3주의 반복(Iteration) 개발주기, 5가지 가치와 12개 실천항목.
  • 5가지 가치
    1. 용기(Courage): 테스트, 빠르게 피드백, 리팩토링
    2. 단순성(Simplicity): 필요한 것만 한다
    3. 의사소통(Communication): 개발자, 관리자, 고객 간의 원활한 소통
    4. 피드백(Feedback): 의사소통에 대한 빠른 피드백
    5. 존중(Respect): 팀원 간의 상호 존중
  • 12가지 기본원리
    1. 짝 프로그래밍 (Pair Programming): 개발자 둘이서 짝으로 코딩
    2. 공동 코드 소유 (Collective Ownership): 코드는 누구든지 언제라도 수정 가능
    3. 지속적인 통합 (CI; Continuous Integration): 매일 여러번씩 통합하고 빌드해야한다.
    4. 계획 세우기 (Planning Process): 고객이 요구하는 비즈니스 가치를 정의하고, 개발자가 필요한 것은 무엇이며 어떤 부분에서 지연될 수 있는 지 알려줘야함
    5. 작은 릴리즈 (Small Release): 작은 시스템 먼저 만들고, 짧은 단위로 업데이트
    6. 메타포어 (Metaphor): 공통 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통 원활
    7. 간단한 디자인 (Simple Design): 현재 요구사항에 적합한 가장 단순한 시스템 설계
    8. 테스트 기반 개발 (TDD; Test Driven Develop): 테스트를 먼저 수행하고 이 테스트를 수행할 수 있도록 코드 작성
    9. 리팩토링 (Refactoring): 기능을 바꾸지 않으면서 중복 제거, 단순화 등을 위해 재구성
    10. 40시간 작업 (40-Hour Work): 피곤으로 실수하지 않도록 주 40시간 일하지 말아야한다.
    11. 고객 상주 (On Site Customer) : 개발자들의 질문에 즉각 대답해 줄 수 있는 고객을 상주시켜야한다.
    12. 코드 표준 (Coding Standard): 모든 코드에 대한 코딩 표준을 정의

스크럼 (SCRUM)

  • 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심
  • 주요 개념
    1. 백로그 (Backlog): 제품과 프로젝트에 대한 요구사항
    2. 스프린트 (Sprint): 2~4주의 짧은 개발 기간 반복적 수행으로 질 향상
    3. 스크럼 미팅 (Scrum Meeting): 매일 15분정도 미팅으로 To-Do List 계획 수립
    4. 스크럼 마스터 (Scrum Master): 프로젝트 리더, 스크럼 수행시 문제를 인지 및 해결하는 사람
    5. 스프린트 회고 (Sprint Retrospective): 스프린트 주기를 돌아보며 규칙 준수 여부 개선점 등을 확인 및 기록, 스프린트 끝난 싲점이나 일정 주기로 시행
    6. 번 다운 차트 (Burn Down Chart): 남아있는 백로그 대비 시간을 그래픽적으로 표현한 차트, 백로그는 수직축, 시간은 수평축

린 (LEAN)

  • 낭비 요소를 제거하여 품질을 향상
  • JIT(Just In Time), 칸반(Kanban) 보드 사용
  • 7가지 원칙: 낭비제거, 품질 내재화, 지식 창출, 늦은확정, 빠른 인도, 사람 존중, 전체 최적화