프로젝트 정리/소프트웨어 공학

11/30 13주차 수업 내용 정리

10장 유지보수

 

유지보수

 

소프트웨어가 인수되어 설치된 후 일어나는 작업
개발기간보다 길다.

 

유지보수의 종류


동기에 따라 네 가지 종류
- 교정형
- 적응형
- 개선형
- 예방형

 

Lehman의 원리

- S/W는 계속 변경된다.

- 복잡도가 계속 증가된다.

- 대규모 S/W의 유지보수에는 일정한 방향(특성)이 있다.

- 대규모 S/W는 안정화 상태인 경우가 많다.

- 진화할 때 친근성을 유지하려고 한다.

- S/W의 기능은 계속 증가한다.

- S/W가 운영 환경에 적응하지 못하면 품질이 저하된다.

- 소프트웨어는 피드백을 통해 진화해나간다.

 

개발작업과 유지보수 작업의 차이

- 포괄적이고 단발적으로 수행

   - 다양한 기술이 필요

-이해 단계에 많은 비용이 듦

   - 통합적이며 이해중심적

 

유지보수에 영향을 주는 요소

사용자

  - 불편, 오류의 개선을 위한 변경 요청

 

환경

  - 운용환경, 조직환경의 변화

 

유지보수 프로세스

  - 변경요청, 프로그램 이해/변경, 효과분석, 리그레션 테스팅

 

소프트웨어 제품

  - 지속적인 사용과 변경

 

유지보수 인력

  - 관련된 사람

 

유지보수 작업의 문제점과 한계

  - S/W에 대한 변경이 수로 일어남

    - 문서에 반영하지 않는 경우 이를 추적하는 것은 거의 불가능

 

  - 다른 사람이 작성한 프로그램을 이해하는 일은 쉽지않음

    - 문서화 되어있지 않거나 주석도 달지 않았다면 문제는 매우 심각

 

  - 변경을 가정하여 설계되는 경우가 드물다.

 

  - 관리적인 측면에서 유지보수를 담당하는 프로그래머에게 동기부여를 하지 못함.

 

  - 유지보수를 위한 적극적인 도구를 사용하지 못함.

    - 프로그램 이해를 위여 테스트나 디버깅 도구를 사용하는 데 그침.

 

유지보수 작업 모델

  - 즉시 수정 모델

  - 반복적 개선 모델

  - 재사용 중심 모델

 

형상관리

  - 변경에 대한 철저한 관리가 필요

    - 소프트웨어 형상 관리

 

  - 형상 관리

    - 소프트웨어를 이루는 부품의 baseline(변경 통제 시점)을 정하고 변경을 철저히 통제하는 것

 

  - 형상 관리 요소

    - 분석서

    - 설계서

    - 프로그램(원시코드, 목적코드, 명령어 파일, 자료 파일, 테스트 파일)

 

형상 관리 절차

  - 소프트웨어 형상 파악

  - 형상 변경 제어

  - 소프트웨어 형상 감사

  - 소프트웨어 형상 상태 보관

 

형상 요소 파악

  - 고유 식별자 - 고유 번호    예) LIS-Incl-DM

  - 이름

  - 문서 종류 - 요구 분석서, 설계 문서, 원시코드, 테스트 케이스

  - 문서 파일 - 파일 이름과 경로

  - 저자

  - 생성 날짜, 목표 완성일

  - 버전 번호

  - 업데이트 이력

  - 설명

  - SQA 담당자 - 형상 항목의 품질 보증 책임자

  - SCM 담당자 - 형상 항목을 검토할 책임자

 

형상 변경 제어

  변경의 이유를 파악

    - 소프트웨어의 결함

    - 하드웨어 변경

    - 운영 요구의 변경

    - 고객이나 사용자로부터 개선 요구

    - 예산, 프로젝트 일정, 기간의 변경

 

형상 감사

  - 베이스라인을 구축하기 위한 메커니즘 정의

  - 형상 항목 검토

  - 형상 항목 확인

 

 

리엔지니어링

  - 지속적으로 변화하는 S/W

    - 구조가 나빠짐을 의미

 

  - 리엔지니어링

    - 시스템 또는 컴포넌트를 재구조화 하는 과정

    - 유지보수를 넘어 개선하는 차원

 

  - 목적

    - 소프트웨어 아키텍쳐 개선

    - 소프트웨어의 복잡도 경감

    - 변경에 대한 적응성 개선

    - 성능, 효율성, 자원 유용성 개선

    - 소프트웨어 시스템의 유지보수 개선

 

리엔지니어링의 정의

  - 역공학

    - 시스템을 이루는 부품을 찾아내고 관계를 파악하며 다른 형태로 표현하기 위하여 대상 시스템을 분석하는 과정

 

  - 재구성

    - 대상 시스템의 기능은 변화 없이 같은 추상 수준에서 표현 형태를 바꾸는 작업

               ex) complete graph를 같은 기능을 하는 좀 더 간단한 구조로 바꾸는 것

 

  - 리엔지니어링

    - 대상 시스템을 새로운 요구에 맞도록 개조하는 작업

 

리엔지니어링 작업 과정

  - 개선이 필요한 위치 파악

  - 개선 전략을 선택

  - 제안된 개선의 구현

  - 목표를 기준으로 시스템 평가

 

 

유지보수 도구

  - 도구의 사용은 시간과 노력을 대폭 감소시킬 수 있음.

    - 일관성 유지, 변경 사항 공유

 

  - 역공학 도구

  - 메트릭 측정 도구

  - 성능 측정 도구

  - 정적 분석 도구

  - 변경 효과 분석 도구

  - 형상 관리 도구

  - 리그레션 테스팅 도구

 

 

 

11장 프로젝트 관리

 

  01. 프로젝트 관리란?

    - 프로젝트를 계획하고 수행하는 데 필요한 모든 작업을 총망라

      - 필요한 작업의 결정

      - 비용 예측

      - 프로젝트에 적합한 인력 확보

      - 직무 정의

      - 일정 계획

      - 작업 준비

      - 지시, 감독

      - 기술적 리더

      - 다른 사람이 내린 결정을 리뷰하고 승인

      - 팀원 사기 진작과 지원

      - 모니터링, 조절

      - 다른 프로젝트 관리자와 협력

      - 보고

 

  02. 소프트웨어 개발 프로세스

    - 프로젝트를 소규모 작업으로 구성하는 일반적인 접근 방법

 

    - 관리자와 팀원들이 다음 사항을 결정하는 데 도움

      - 무엇을 해야 하며

      - 어떤 순서로 작업을 진행할 것인지

 

    - 모델은 작업 방식을 엄격하게 규정하기 위함보다 생각하는 데 도움을 주어야 함.

 

  즉흥적인 개발 프로세스

    - 좋은 엔지니어링 과정을 따르지 않았을 때 일어나는 문제점들

      - 구현하기 전에 요구나 설계 등의 연습의 중요성을 인식하지 못함.

      - 설계가 잘 되지 않았다면 S/W의 질이 떨어질 수 있음.

      - 계획이 없어 목표 없이 일하게 됨.

      - 체계적인 테스트나 품질 보증 같은 작업의 필요성을 간과하게 됨.

      - 이상의 이유로 유지보수 비용이 증가됨.

 

  대표적인 개발 프로세스 모델

     1. 즉흥적인 개발 프로세스 - 즉흥적으로 프로그래밍하고 사용자가 원하면 수정하는 식으로 작업

     2. 폭포수 모델

       - 1970년대 소개

          - 항공 방위 소프트웨어 개발 경험으로 습득

       - 각 단계가 다음 단계 시작 전에 끝나야 함.

          - 순서적 : 각 단계 사이에 중복이나 상호작용이 없음

          - 각 단계의 결과는 다음 단계가 시작되기 전에 점검

        

        - 폭포수 모형의 단점

          - 처음 단계를 지나치게 강조하면 코딩, 테스트가 지연됨.

          - 각 단계의 전환에 많은 노력

          - 프로토타입과 재사용의 기회가 줄어듦

          - 소용 없는 다종의 문서를 생산할 가능성이 있음.

 

     3. 점증적 모형

        - 개발 싸이클이 짧은 환경

           - 빠른 시간 안에 시장에 출시하여야 이윤에 직결

           - 개발 시간을 줄이는 법 - 시스템을 나누어 릴리즈

 

        - 릴리즈 구성 방법

           - 점증적 방법 - 기능별로 릴리즈

           - 반복적 방법 - 릴리즈할 때마다 기능의 완성도를 높임.

 

        - 단계적 개발

           - 기능이 부족하더라도 초기에 사용 교육 가능

           - 처음 시장에 내놓는 소프트웨어는 시장을 빨리 형성시킬 수 있음

           - 자주 릴리즈하면 가동 중인 시스템에서 일어나는 예상하지 못했던 문제를 신속 꾸준히 고쳐나갈 수 있음.

           - 개발 팀이 릴리즈마다 다른 전문 영역에 초점을 맞출 수 있음.

 

      4. 나선형 모형

        - 소프트웨어의 기능을 나누어 점증적으로 개발

          - 실패의 위험을 줄임

          - 테스트 용이

          - 피드백

 

        장점

          - 대규모 시스템 개발에 적합 - risk reduction mechanism

          - 반복적인 개발 및 테스트

             - 강인성 향상

        

        단점

          - 관리가 중요

          - 위험 분석이 중요

          - 새로운 모형

 

      5. 진화적 모형

         - 반복적이며 점증적인 방법

 

         -RUP

           1. 도입 단계 : 프로젝트의 범위를 설정하고 목표를 명확히

           2. 정련 단계 : 시스템의 중요한 요구를 찾아내어 기본이 되는 설계를 완성

           3. 구축 단계 : 제조 단계, 원시코드가 완성되고 모든 중요한 요구의 테스트가 마무리

           4. 전환 단계 : 사용자에게 릴리즈

 

      6. 애자일 프로세스

        - 설계가 변경되어도 잘 수용할 수 있도록 짧게 반복하면서 개발하는 방법

        - 짧은 릴리즈와 반복 : 작업을 작은 조각으로 나누어 되도록 자주 릴리즈

        - 점증적 설계 : 설계에 대한 결정을 미루고 더 많은 지식이 쌓였을 때 설계를 개선

        - 사용자 참여 : 처음부터 변하지 않는 완벽한 표준을 만들려고 하기보다 사용자를 참여시켜 계속 피드백 제공

        - 문서 최소화 : 필요한 문서만 최소로 작성. 원시코드가 문서화의 실체

        - 비공식적 커뮤니케이션 : 형식적인 문서보다 지속적인 대화

        - 변화 : 요구와 환경의 변경을 가정하고 이를 다룰 수 있는 좋은 방법을 찾아냄.

 

        6.1 익스트림 프로그래밍

          - 최초의 애자일 프로세스

          - 계획 : 비즈니스 우선순위와 기술적인 예측을 토대로 결정

          - 짧은 릴리즈 : 2~4주

          - 메타포 : 정형화된 아키텍처 대신 메타포를 사용

          - 간결한 설계 : 불필요하게 복잡한 부분은 제거

          - 테스트 중심 개발 : 실제 코드를 쓰기 전에 먼저 테스트 코드를 작성

          - 설계 개선(리팩토링) : 동작의 변경 없이 시스템을 재구성하고 설계를 개선

          - 페어 프로그래밍 : 컴퓨터를 공유하며 개발과 테스팅 역할을 수행

          - 지속적 통합 : 항상 실행되는 시스템을 유지하도록 여러 번 통합하고 빌드

          - 적정 속도 : 주당 40시간

          - 고객 참여 : 팀에 고객이 합류하여 항상 질문에 답할 수 있도록

          - 코딩 표준 : 코딩에 동일한 규칙

 

       6.2 스크럼

          - 개발 연습을 하면서 개발 능력을 향상할 수 있는 프레임워크

          - 릴리즈 계획 회의

             - 백로그를 결정

          - 스프린트

             - 반복 주기 (2~4주)

             - 스토리를 개발하고 설치

          - 스크럼 회의

             - 매일 15분간의 진도 확인 회의

          - 스프린트 회고

 

  03. 개발 노력의 추정

    - 개발에 얼마만큼의 작업이 필요한지를 예측

    - 개발 노력

       - MM(인원/월)로 나타는 노동량

       - 개발 노력의 산정을 금전으로 환산

 

    - 일반적 추정 공식

                    Effort=a+b(size)^c + ACCUMm(factor)

     

    - 인건비 계산법

      - 상향식

        - 소작업에 필요한 기간을 구하고 이를 바탕으로 전체 소요 기간을 예측

 

      - 하향식

 

COCOMO 추정 모델

  - Boehm이 개발

     - TRW의 2K-32K 정의 많은 프로젝트의 기록을 통계 분석

 

  - 추정 과정

    1. 기본형 organic, 중간형 semi-detached, 내장형 embedded 중 어떤 프로젝트 유형인지 선택

 

  표준 산정 공식

                               

 기능 점수 기반 추정 모델

   LOC의 문제점

     - 정확한 라인 수는 예측 불가능

 

   S/W 구성 요소

     - 외부 입력, 외부 출력, 외부 질의, 내부 논리 파일, 외부 인터페이스 파일

 

   가중치 반영 기능 점수 도출

     - UFP=(입력 개수 X 3) + (출력 개수X4) + (질의 개수X3)

 

 

기술 복잡도 계산

  - 14개 분야

    - 데이터 통신, 분산 데이터, 성능 중요도, 과중한 하드웨어 사용, 높은 트랜잭션 비율, 온라인 데이터 입력, 온라인 업데이트, 복잡한 계산, 설치 용이성성, 오퍼레이션 용이성, 이식성, 유지보수성, 엔드유저의 효율, 재사용성

 

  - TCF = 0.65+[(0.01) Xt (14개 기술적 복잡도 요인의 합)]

 

객체 점수 기반 추정 모델

  - 구성요소인 클래스의 개수와 가중치 기반

  - 추정 방법

     1. 문제 도메인에 있는 클래스의 갯수를 추정

     2. 사용자 입력의 종류를 분류, 가중치 정함

       - UI 없음 : 2.0, 단순한 텍스트 UI : 2.25, 그래픽 UI : 2.5, 복잡한 UI : 3.0

     3. 1단계에서 추정한 클래스의 갯수에 사용자 인터페이스 유형에 의한 가중치를 곱함.

     4. 3단계에서 추정한 총 클래스의 개수에 

 

일정 계획과 관리

  - 일정 계획

    개발 프로세스를 이루는 소작업(activity)를 파악하고 순서와 일정을 정하는 작업

 

간트 차트

  - 프로젝트 일정표

    - 소작업별로 작업의 시작과 끝을 나타낸 그래프

    - 예비시간을 보여줌

    - 계획 대비 진척도를 표시

    - 개인별 일정표

 

04. 팀 구성

  조직의 구성

    - 결과물 및 소프트웨어 개발 생산성에 큰 영향

    - 역할과 책임 배정

    - 조직 관리

 

  조직 선택에 영향을 주는 요소

    - 작업의 특성

    - 팀 구성원의 의사 교류

 

  S/W 개발 조직

    - 책임 프로그래머 팀

        - 작은 팀으로 구성 책임 프로그래머가 통제

        - Chief programmer team

          - 외과 수술 팀 구성에서 따옴

        - 책임 프로그래머 : 제품설계, 주요부분 코딩, 중요한 기술적 결정, 작업의 지시

        - 프로그램 사서 : 프로그램 리스트 관리, 설계 문서 및 테스트 계획 관리

        - 보조 프로그래머 : 책임 프로그래머를 보좌, 여러가지 기술적 문제에 대해 자문

        - 프로그램 사서 : 프로그램 리스트 ,설계 문서 ,테스트 계획 등을 관리함.

 

        장점 : 의사 결정이 빠름

        단점 : 모든 의사 결정이 한 사람에 의해 이루어지므로, 이 사람의 능력이 프로젝트 성패의 갈림길이 됨.

 

   - 에고레스 팀

     - 민주주의식 의사결정

       - 서로 협동하여 수행하는 비이기적인 팀(Ego-less)

       - 자신이 있는 일을 알아서 수행

       - 구성원이 동등한 책임과 권한

 

   - 계층형 팀

     - 집중형, 분산형의 단점을 보완

     - 특징

       - 초보자와 경험자를 분리

       - 프로젝트 관리자와 고급 프로그래머에게 지휘권한이 주어짐

       - 의사교환은 초보 엔지니어나 중간 관리층으로 분산

 

     - 소프트웨어 기능에 따라 계층적으로 분산

     - 단점

        - 기술인력이 관리를 담당

        - 의사 전달 경로가 김

 

06. 프로젝트 계획서

  1. 목적

  2. 배경 지식

  3. 프로세스

  4. 서브시스템과 릴리즈 계획

  5. 위험

  6. 작업

  7. 비용산정

  8. 팀 구성

  9. 일정

'프로젝트 정리 > 소프트웨어 공학' 카테고리의 다른 글

12/13 15주차 수업내용 정리  (0) 2019.12.13
11/29 변경 사항  (0) 2019.11.30
11/28 변경 사항  (0) 2019.11.29
Mobile Robot Controller ADD-ON 개발  (0) 2019.11.24