본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/CS(ComputerScience)

소프트웨어 공학의 모든 것 - 유지보수

by 미노드 2023. 8. 7.

출처 : https://mini-noriter.tistory.com/31

포인트1. 유지보수 작업과 개발 작업의 차이는 무엇인가?
포인트2. 유지보수 작업 과정은 무엇인가?
포인트3. 형상관리 작업이란 무엇이며 그 절차와 방법은 무엇인가?
포인트4. 역공학과 리엔지니어링이란 무엇이며 어떻게 하는가?
포인트5. 유지보수 작업 방법과 지원 도구에는 어떤 것이 있는가?

유지보수 - 개발 후에 이루어지는 소프트웨어의 변경 작업

  • 유지보수 단계는 소프트웨어가 가장 유용하게 활용되는 기간
  • 소프트웨어는 환경과 비즈니스 요구에 따라 진화한다

유지보수에 드는 노력

11-1. 유지보수의 소개

- 레거시 시스템(Legacy System)
수십 년 전에 구축되었지만 지금까지 사용되고 있는 소프트웨어 시스템

- 레거시 시스템을 대체하지(=소멸하지) 못하는 이유

  • 대체하기 위해서는 비용이 많이 들기 때문
  • 전문가, 사용자들의 수십 년 동안의 경험, 지능이 녹아 있기 때문
  • 새로운 시스템이 더 좋다는 보장이 없기 때문

 

11-1-1. 변경의 이유와 유지보수 유형

>> 시스템의 릴리스, 배포, 설치 후에는 여러가지 이유로 변경이 필요하게 됨

- 버그 제거

  • 운용 단계에서 버그가 발생하면 제거해야 함
  • 변경된 소프트웨어가 예전에 선택된 테스트에 대하여 통과 여부를 가리는 리그레션 테스트 필요

- 운영 환경의 변화

  • 하드웨어, 플랫폼, 시스템 형상의 변화

- 정부 정책, 규례의 변화

  • 정부 정책, 규례에 의한 소프트웨어 변화가 불가피

- 비즈니스 절차의 변화

  • 예를 들어 보안이 중요해졌다면 웹 기반 시스템은 사용자 인증을 강화하기 위해 사용자에게 개인 인증의 질문을 추가한다

- 미래 문제를 배제하기 위하여

  • 미래에 일어날 수 있는 문제를 피하기 위함
  • 예를 들어 신뢰성을 개선하기 위하여 복잡한 컴포넌트(독립적 단위모듈)를 다시 설계하고 다시 구현한다

 

>> 유지보수 유형에는 어떤 것들이 존재하는가?

- 수정형 유지보수(Corrective Maintenance)

  • 발견된 결함을 고치기 위하여 소프트웨어 제품을 수정

- 적응형 유지보수(Adaptive Maintenance)

  • 변경된 환경에서도 계속 사용할 수 있도록 소프트웨어를 이식하거나 변경

- 완전형 유지보수(Perfective Maintenance)

  • 소프트웨어 설치 후에 성능이나 유지보수성을 개선하기 위해 실시하는 유형
  • 코드의 기능 및 효율성 향상 사용자의 요구 변화에 따라 시스템의 기능을 변경
  • 사용자에 의한 기능 보강 요청에 의해 발생하는 유지보수

- 예방형 유지보수(Preventive Maintenance)

  • 오류 발생을 방지하기 위해 수행하는 유지보수

유지보수 유형별 분포

 

11-1-2. Lehman의 법칙

- 시스템의 타입

  • E 타입 - 시스템이 계속 진화하는 타입, 확실하게 정의가 불가능한 시스템 ( Lehman의 법칙 적용 가능 )
  • S 타입 - 완전히 확실하게 정의할 수 있는 타입 ( 예 - 체스 게임, 수학 S/W )

>> Lehman의 법칙

1. 지속적인 변경의 원칙 (Law of continuing change)

  • 시스템이 릴리스 된 후 변경은 그 시스템이 대체될 때 까지 변경
  • 시스템의 요구는 항상 변화하기 때문에 소프트웨어가 사용되려면 계속 좋은 방향으로 진화되어야 함

2. 엔트로피, 복잡도 증가의 법칙 (Law of increasing entropy or complexity)

  • 시스템의 구조는 변경되면서 더 나빠진다 -> 변경이 오류를 유발, 더 많은 변경을 요구하기 때문
  • 시스템이 변경될 수록 그 구조는 더 복잡해지고, 구조를 단순화 하기 위해 많은 노력이 필요
  • 유지보수 비용을 줄이기 위하여 시스템 구조를 개선하는 재구조화 또는 리엔지니어링이 필요함

3. 자기 통제의 법칙 (Law of self-regulation)

  • 시스템이 계속 피드백 되기에 가능
  • 안정성 유지의 법칙, 친근성 유지의 법칙, 지속성 성장의 규칙을 일반화 한 것

4. 안정성 유지의 법칙 (Law of organizational stability)

  • 진화하는 시스템의 유지보수 프로세스는 시스템이 소멸할 때 까지 일정한 평균 작업량을 보임

5. 친근성 유지의 법칙 (Law of familiarity)

  • 시스템의 평균 성장률은 소멸될 때 까지 일정
  • 시스템 개발 전 단계에 걸쳐 각 버전의 변화는 거의 일정

6. 지속적 성장의 법칙 (Law of continuing growth)

  • E 타입의 시스템은 사용자를 만족시키기 위하여 기능적 성장을 계속하여야 함

7. 품질 저하의 법칙 (Law of declining quality)

  • E 타입 시스템의 품질은 운영 환경의 변화에 완전히 적응하지 못하는 한 저하

8. 피드백 시스템의 법칙 (Law of feedback systems)

  • 진화 프로세스는 여러 단계의 여러번 반복, 중요한 역할을 담당하는 여러 관련자들의 피드백으로 구성

11-2. 유지보수 작업 과정

소프트웨어 개발은 코딩 중심의 작업이며, 유지보수는 이해 중심의 작업이다

11-2-1. 유지보수 작업

>> 유지보수 작업에 포함되는 기본적 작업들

1. 현재 프로그램의 이해

  • 소프트웨어 엔지니어는 변경 전에 소프트웨어를 알아야 함
  • 프로그램 로직을 추적하거나 요구, 설계 등에 대한 이해가 필요함

2. 변경 파악과 분석

  • 필요한 변경을 파악, 그 영향도와 소요 비용, 변경에 의한 리스크를 분석

3. 변경 영향 파악

  • 시스템 컴포넌트에 가해진 변경은 다른 컴포넌트에 영향을 줄 수 있음
  • 따라서 변경의 이해당사자들에게 알리고 피드백을 얻어야 함

4. 변경 구현, 테스트, 설치

  • 구현으로부터 설계를 복구하거나 변경된 요구를 만족시키기 위하여 설계를 변경할 수도 있음
  • 변경 반영을 위해 시스템을 수정
  • 시스템이 올바로 고쳐졌는지 확인하기 위하여 통합, 승인, 시스템 테스트 실시

유지 보수 작업 분포

 

11-2-2. 유지보수 프로세스

소프트웨어에 유지보수성을 형성하기 위한 요구가 어떤 것인지 인식하기 위하여 모델이 필요함

- 즉시 수정 모델

  • 문제가 발견, 확인되면 가능한 빨리 문제를 해결하는 방식
  • 장기적인 효과를 자세히 분석하지 않고 바로 수정하며 문서 수정은 최소화

즉시 수정 모델

 

  • 오늘날도 많이 사용

- 장점

  • 한 두명의 유지보수 담당자가 시스템을 잘 알고 있고 상세한 문서 없이 관리할 수 있으면 적절한 모델
  • 고객의 빠른 수정요구를 적용할 수 있음

- 단점

  • 한 두명의 유지보수 담당자가 시스템을 잘 알고 있으며 문서 없이 관리할 수 있는 상황이 흔하지 않음
  • 잘못하면 매우 어렵고 비용이 많이 드는 문제를 초래할 수 있음
  • 변경 효과(ripple effect)를 간과할 수 있음 - 파급된 더 이상의 수정을 잘못된 것으로 몰아갈 수 있음
  • 인력과 자원이 긴급 보수에 투입되어야 함 -> 문서 변경에 투자하는 시간 감소 -> 오류 탐색 기회 감소

 

- 반복적 개선 모델

  • 소프트웨어에 대한 변경이 전체 생명주기 단계에 반복적으로 일어나 시스템이 계속된다는 전제
  • 변경이 일어나게 되면 새 시스템의 개발이라는 반복 사이클이 시작되는 것
  • 현재 시스템의 요구 명세와 설계 변경을 구축하는 데 기초가 됨
  • 즉시 수정 모델을 더 체계화된 형태로 만들어낸 것

반복적 개선 모델

- 문제점

  • 완벽한 문서화, 유지보수 팀 시스템을 완전히 분석할 능력이 있다는 것을 전제 - But, 흔하지 않음

 

- 재사용 중심 모델

  • 유지보수 작업을 프로그램 컴포넌트의 재사용이라고 본다

>> 재사용 개념

  • 재사용 후보가 될 만한 시스템의 부품을 파악
  • 시스템의 부품을 이해
  • 시스템 부품을 새로운 요구에 맞추어 변경
  • 변경된 부품을 새 시스템으로 통합

재사용 중심 모델

재사용 모델 컴포넌트 분류, 변경을 가능하게 하는 프레임워크가 필요
- 재사용 컴포넌트를 위한 저장소가 필요, 재사용 컴포넌트 선택, 맞춤화 작업을 지원해야 함
- 유지보수 프로세스 모델의 비교

유지 보수 프로세스 모델의 비교

 

11-2-3. 프로그램의 이해

프로그램 이해 - 원시코드로부터 설계나 명세를 추출하여 멘탈 모델로 표현하는 것
>> 개발 프로세스(문제의 정의 -> 프로그램 개발)와는 반대로 추상성을 추구

- 상향식(bottom-up) & 묶음화(chunking)의 원리 사용

상향식 이해 모델

 

  • 원시코드에서 의미 있는 묶음과 표시를 발견/기억하여 더 큰 구조로 올라가 모든 시스템이 이해될 때 까지 반복

11-2-4. 변경 파악과 분석

유지 보수는 변경 요구를 기초로 어떤 부분을 변경할지 찾아내야 한다

- 변경 분석

  • 여러가지 방안을 평가하고 추구하여야 할 방안을 선택하는 것
  • 변경 효과 분석 - 지정된 컴포넌트가 변경되어 영향 받는 다른 컴포넌트는 어떤 것인가? (유지보수 비용 고려)
  • 변경을 구현하고 결과를 테스트 하는데 드는 비용과 시간의 예측
  • 리스크를 파악하고 해결책에 대한 측정 방법을 정의

- 객체지향 프로그램의 변경 효과 분석

변경 효과 - 클래스 사이의 의존관계로 파악한다 --> 의존관계가 있다면 변경시 영향이 가게 된다

>> 클래스 B가 A에 의존하는 경우

  • 클래스 B가 A의 서브클래스인 경우
  • 클래스 B가 클래스 A의 집합인 경우
  • 클래스 B가 클래스 A를 사용한다 -> 다음 중 하나를 만족
    • 클래스 A가 클래스 B에 있는 메서드의 파라미터 타입일 때
    • 클래스 A가 클래스 B에 있는 메서드의 리턴 타입일 때
    • 클래스 A가 클래스 B의 로컬 변수 타입일 때
    • 클래스 B가 클래스 A의 객체를 생성할 때
    • 클래스 B가 클래스 A의 메서드를 호출할 때
  • 클래스 B가 클래스 A와 다른 클래스 사이의 연관을 위한 클래스인 경우

 


11-3. 소프트웨어 형상 관리(Software Configuration Management)

  • 개발 주기동안 생성된 문서를 관리하고 소프트웨어 시스템과 컴포넌트의 상태를 추적하는 작업
  • 문서와 결과물에 대한 변경이 잘 조절되지 않는다면 불일치가 발생
  • 클래스 변경 후 의존 클래스를 업데이트해야 함
  • 하드웨어에 적용되었던 전통적 원리를 소프트웨어 개발에 적용

11-3-1. 베이스라인

소프트웨어 개발 주기의 각 단계에 결과물을 체크 -> 프로젝트의 진도를 측정하기 위함

>> 요구 단계 종료 후 문서를 체크하는 시점 = 마일스톤 (프로젝트의 진척 상태를 나타냄)

 

베이스라인 - 소프트웨어 결과물(소프트웨어 형상 항목)의 집합

 

- 목적

  • 프로젝트 진행의 중요한 상태를 정의
  • 프로젝트나 프로덕트가 특정 상태에 이르렀는지 나타냄
  • 계속되는 개발, 유지보수 작업의 기준 - 요구에 대한 베이스라인 설정 후 변경을 자유롭게 할 수 없음
  • 형상 항목에 대한 변경을 제어하는 메커니즘

베이스 라인과 형상 항목 ( 출처 - 소프트웨어 공학의 모든 것 467 page )

 

11-3-2. 형상관리 절차

 

형상관리 절차는 네 가지 기능으로 구성

  • 소프트웨어 형상 파악
  • 형상 변경 제어
  • 소프트웨어 형상 감사
  • 소프트웨어 형상 상태 보관

형상 관리 절차 ( 출처 - 소프트웨어 공학의 모든 것 468 page )

- 소프트웨어 형상 파악

  • 소프트웨어 개발 과정에서 여러 가지 문서가 생성, 사용됨
  • 프로젝트 크기, 개발 프로세스, 가용 자원 등 여러 가지 요인을 고려하여 문서를 관리할 필요가 있음
  • 베이스라인과 각 베이스라인의 형상 항목을 정의하는 것
  • 형상항목 - 단순항목, 복합항목(다수의 다른 항목을 포함)으로 나눠짐
형상 항목 설명
고유 식별자
(ID number)
소프트웨어 형상 항목을 구별하기 위한 고유번호이다. 형상 항목의 기능을 나타내기 위한 의미를 가져야 한다. 예를 들면 도서관 정보 시스템의 도메인 모델의 버전 1이라면 LIS-Inc1-DM과 같이 고유 식별자를 붙인다.
이름 형상 항목의 이름, 예를 들면 문헌 대출 유스케이스, 문헌 대출 시퀀스 다이어그램과 같다
문서 종류 형상 항목의 문서 종류. 예를 들면 요구 분석 명세서, 설계 문서, 테스트 케이스 등
문서 파일 문서 파일 이름과 경로
저자 형상 항목을 만든 개발자
생성 날짜, 타겟 완성일 형상 항목의 상태를 파악하기 위한 정보
버전 번호 형상 항목의 버전을 추적하기 위한 정보
업데이트 이력 누가 언제 업데이트하였는지 간단히 요약한 리스트
설명 형상 항목에 대한 설명
SQA 담당자 형상 항목의 품질 보증 책임자
SCM 담당자 형상 항목을 체크할 책임자

 

- 형상 변경 제어 (Software Configuration Change Control)

  • 변경의 이유를 파악 - 형상 항목을 변경하는 이유는 다음과 같음
    • 소프트웨어의 결함 - 예 > 기능이 부정확, 적합하지 않음, 성능이 만족스럽지 않음
    • 하드웨어 변경 - 예 > 하드웨어나 하드웨어 장치의 교체
    • 운영 요구의 변경 - 예 > 새로운 보안 절차에서 PW는 더 복잡한 보안 규칙을 만족해야 하기 때문
    • 고객이나 사용자로부터 개선 요구가 있을 경우 - 예 > 사용자 인터페이스 개선
    • 예산, 프로젝트 일정, 기간의 변경 - 예 > 다가오는 비즈니스의 상황 등으로 일정 조정이 불가피한 경우
  • 영향 분석 - 상황이 발생하면 팀은 형상 항목에 대한 변경 파악, 전문가가 변경에 대한 영향 분석
  • 변경 계획 수립 - 변경 계획서는 다음과 같은 사항을 명시하기 위한 기술/행정 사항으로 구성됨
    • 제안된 변경의 설명
    • 조직과 개발자의 파악
    • 변경의 이유
    • 영향 받는 베이스라인과 형상 항목
    • 제안된 변경을 구현하는 데 소요되는 노력, 시간, 비용, 제안된 변경의 우선순위
    • 프로젝트 일정에 대한 영향
  • 변경 계획의 평가 - 변경에 의하여 영향 받는 부서로 구성된 형상 관리 위원회에 의하여 검토됨
  • 변경을 추가 - 승인된 변경을 시스템에 추가함

 

- 소프트웨어 형상 감사

 

>> 가지는 의무

  • 베이스라인을 구축하기 위한 메커니즘 정의
    • 향후 구축될 베이스라인 - 관련 문서 중 하나라도 생성되어 형상관리 시스템에 제출되었을 때 존재하는 상태 
    • 승인된 베이스라인 - 형상 항목 제작, 인스펙션 작업 완료 후 형상관리 시스템에 제출되었을 때 존재하는 상태 
  • 형상 항목 검토
    • 형상 항목이 의도하는 것이 차이가 없음을 보장해야 함
    • 예 > 요구 베이스라인에서 유스케이스가 변경 -> 설계 수준의 베이스라인에 확장된 유스케이스에서 시스템/액터가 변경된 대로 상호작용하도록 일치되어야 함
  • 형상 항목 확인
    • 형상 항목이 올바른 문제를 해결하였는지 확증하기 위하여 정확성을 체크

 

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

  • 형상 항목에 대한 정보를 추적하고 보고하는 것

 

버전 관리 도구

 


11-4. 역공학

 

정의 - 대상 시스템을 분석하여 시스템의 컴포넌트와 관계를 찾아 내어 같은 수준의 다른 표현이나 더 높은 수준의 표현으로 만드는 작업

 

  • 하드웨어 완제품으로부터 설계를 해독해 내는 작업
  • 프로그램의 추상 수준을 점증적으로 복구해 나가는 과정
  • 같은 수준의 추상 수준에서 다른 표현을 추출하는 것도 역공학이다

역공학 ( 출처 - 소프트웨어 공학의 모든 것 473 page )

 

11-4-1. 역공학 작업 순서

 

  1. 원시코드에서 소프트웨어 결과물을 추출 데이터 베이스에 저장
  2. 파악된 각 요소를 다이어그램으로 그리기 위하여 레이아웃 계산
  3. 디스플레이 컴포넌트가 레이아웃에 따라 다이어그램으로 그려진다

역공학 도구의 구성 ( 출처 - 소프트웨어 공학의 모든 것 474 page )

 

 

11-4-2. 역공학의 용도

 

역공학에 의해 복원된 다이어그램은 여러 방면에 사용됨

 

  • 프로그램 이해
    • 역공학 도구에 의해 생성된 다이어그램은 유지보수하고 있는 SW의 구조, 기능, 동작의 이해를 용이하게 함
  • 정형적 분석
    • 역공학 도구에 의하여 생성된 다이어그램을 SW에 존재할 수 있는 문제를 감지하기 위하여 사용될 수 있음
  • 테스트 케이스 생성
    • 역공학 도구에 의하여 생성된 다이어그램은 테스트 케이스 생성을 용이하게 함
    • 예 > 흐름도의 경로는 경로 테스트 케이스를 생성하는 것을 용이하게 함
  • 리엔지니어링
    • 역공학에 의해 생성된 다이어그램은 리엔지니어링을 위하여 사용됨
    • 리엔지니어링 - SW의 특정 측면을 개선하기 위해 재구축하는 과정

 

11-4-3. 재문서화

 

의미적으로 같은 추상 수준을 가진 표현을 생성하는 작업

 

- 재문서화의 목적

  • 소프트웨어의 이해를 증진시키기 위하여 시스템의 다른 관점을 가지려는 것
  • 현재 보유한 문서를 개선하기 위함
  • 새로 수정된 프로그램의 문서화를 하기 위함

 

11-4-4. 설계 복구

 

  • 원시코드를 자세히 검토하여 의미 있는 추상성 높은 표현을 찾아내고 추출하는 작업

 

- 복구된 설계

  • 원시코드 이해에 도움이 될 수 있음
  • 향후 유지보수 또는 리엔지니어링을 위한 베이스라인으로 사용됨
  • 유사한 다른 애플리케이션을 위하여 사용될 수도 있음

- 설계 복구 작업은 프로그래밍 언어 구조에 크게 좌우됨

  • 객체지향 프로그램 - UML도구에 의하여 자동화되어 있음
  • 객체지향이 아닌 경우 - 내재된 설계의 의미와 의사결정을 파악, 이해하며 설계로 표현하는 작업이 필요함

- 설계 복구에는 도메인 지식이 필요할 수도 있음

 

 


11-5. 리엔지니어링

 

소프트웨어의 어떤 측면을 개선하기 위하여 시스템 또는 컴포넌트를 재구조화 하는 과정

 

소프트웨어는 지속적으로 변경된다 -> 시스템의 구조가 나빠지고있다 -> 유지보수의 비용이 많이 들어간다

>> 유지보수 비용을 줄이기 위하여 재구조화가 필요함

 

 

11-5-1. 리엔지니어링 목적

  • 소프트웨어 아키텍처 개선
  • 소프트웨어의 복잡도 경감
  • 변경에 대한 적응성 개선
  • 성능, 효율성, 자원 유용성 개선
  • 소프트웨어 시스템의 유지보수 개선

 

11-5-2. 리엔지니어링 과정

 

  1. 개선이 필요한 위치 파악
    • 소프트웨어 분석을 통하여 개선이 필요한 위치를 파악
  2. 개선 전략을 선택
    • 하나 이상의 전략이 존재할 수도 있음
    • 변경 효과 개선 전략 구현하는 데 소요되는 시간과 비용을 분석
    • 분석 결과를 기반으로 개선 전략을 선택
  3. 제안된 개선의 구현
    • 리엔지니어링한 SW가 요구를 만족하는지 테스팅 및 리그레션 테스팅 실시
  4. 목표를 기준으로 시스템 평가
    • 목표와 대비하여 평가함
    • 추가 개선이 필요하면 프로세스를 반복함

 

리엔지니어링 과정 ( 출처 - 소프트웨어 공학의 모든 것 477 page )