소프트웨어 공학 - [제8강] 소프트웨어 유지보수
주요용어
소프트웨어 유지보수: 고객에게 인도되어 사용 중에 있는 소프트웨어를 환경 적응, 오류수정, 성능 향상, 유지보수성 향상 등을 위하여 계속하여 수정, 보완하는 일이다
재공학: 레가시 시스템의 이해성을 높이고 유지보수성, 재사용성 등을 개선하기 위해 소프트웨어를 변경하는 작업
재구조화: 이해성과 유지보수성을 높이기 위해 프로그램의 제어 구조를 개선하는 작업
역공학: 소프트웨어 요소를 분석하여 높은 추상 수준의 표현을 유도하는 작업이다. 예를 들어 시스템을 분석하여 구성 요소들과 그들의 관계를 찾는 일, 소스 코드로부터 설계문서를 유도하는 일, 목적 코드로부터 소스 코드를 유도하는 일 등
코드 스멜: 소스 코드에서 문제를 일으킬 수도 있는 나쁜 부분
리팩토링: 기능적 행위를 바꾸지 않으면서 코드의 나쁜 부분을 개선하는 것
소프트웨어 형상 관리: 소프트웨어 요소들의 관련성을 파악하고 그것들의 버전들을 일관성 있게 관리함으로써 소프트웨어 시스템의 진화를 통제하는 일
소프트웨어 척도: 제품이나 프로세스의 특성을 정량적으로 평가하기 위해 사용되는 측정법
소프트웨어 유지보수
고객에게 인도된 후에도 변경 발생은 불가피
조직은 시스템 획득을 위해 큰 투자를 했으며 시스템에 의존적이므로 유지보수가 중요
변경의 세 가지 전략
- 기본 구조를 바꾸지 않고 오류 수정이나 요구사항 변경을 수용
- 아키텍처의 변경
- 이해와 변경이 용이하도록 수정(소프트웨어 재공학)
변경을 통해 시스템이나 구성 요소들의 여러 버전이 만들어짐
유지보수 프로세스
유지보수 유형
- 수정 유지보수: 오류의 수정
- 적응 유지보수: 외부 환경의 변화에 적응하기 위한 수정
- 완전 유지보수: 기능이나 성능 향상을 위한 개선을 위한 수정
- 예방 유지보수: 이해성과 유지보수성의 개선을 위한 수정
유지보수 프로세스
변경 요청 → 영향력 분석 → 시스템 릴리스 계획 → 변경 구현 → 시스템 릴리스
유지보수 비용
유지보수성을 고려하여 개발하면 개발비는 증가하나 유지보수 비용은 크게 절감됨
유지보수가 어려운 이유
개발 팀과 다른 유지보수 팀 먼저 시스템을 이해해야 함
상대적으로 능력이 못한 유지보수 팀
유지보수 계약이 개발과 계획과 별개인 경우 시간이 지나면서 소프트웨어 구조와 가독성이 떨어짐
재공학
레가시(legacy) 시스템
과거에 개발되어 사용되고 있으며 사업적으로 중요한 시스템
레가시 시스템의 진화를 준비하기 위해 시스템을 재공학함
재공학
기존 시스템의 이해도 개선, 유지보수성의 개선, 재사용성의 향상을 위해 소프트웨어를 변경하는 작업
새롭게 개발하는 것과의 비교
재공학의 경우 위험과 비용이 축소됨
재공학은 기존 시스템을 요구 명세서로 생각하는 것
재공학에 의한 개선 정도는 새로운 개발에 비해 제한적
재공학 프로세스
입력은 레가시 시스템이며 출력은 같은 기능을 가지나 구조화되고 모듈화된 수정 버전
레가시 시스템의 수명 연장을 위한 일이며 대규모 유지보수 작업임
재공학 프로세스의 활동
소스 코드의 변환: 프로그래밍 언어를 최신의 것으로 변경
역공학: 소스 코드를 분석하여 설계 문서를 추출
프로그램 재구조화: 프로그램의 제어 구조를 개선하는 일
프로그램 모듈화: 전체 모듈 구조를 개선하는 일
데이터 재공학: 데이터 구조를 변경
재공학 비용
아키텍처를 바꾸는 경우 가장 큰 비용이 발생함
재구조화 작업이 소스 코드를 변경하는 경우보다 비용이 큼
비용 요인
소프트웨어와 관련 문서의 품질이 낮은 경우
재공학을 위한 도구를 사용할 수 없는 경우
재공학해야 하는 데이터의 양이 많은 경우
유지보수 요원이 참여하지 못하는 경우
역공학
후기의 생성물에서 이전의 생성물을 추출하기 위해 과학적 지식을 이용하는 것
유지보수를 위해서는 시스템에 대한 이해가 선행되어야 함
소프트웨어 공학 관점에서 역공학의 예
프로그램이나 사용자 매뉴얼 등으로부터 기능 명세나 설계 문서 등을 만드는 과정
시스템을 분석하여 구성 요소들과 그들의 관계를 추출하는 것
목적 코드에서 소스 코들을 유도하는 것
재문서화를 간단한 역공학의 예로 보기도 함
역공학 프로세스
재문서화: 문서를 새로 만들거나 문서의 의미를 바꾸지 않고 개조하는 일임.
코드,기존 문서 및 인터뷰 등을 통해 설계 문서를 다시 문서화 함(설계의 복구)
재구조화: 같은 추상 수준에서 문서의 구조(또는 표현 방법)를 개선하는 일로 주로 코드의 재구조화를 의미(코드 리팩토링)
코드 스멜 :프로그램 안에 존재하는 나쁜 징후로 문제를 야기시킬 소지가 있는 부분
리팩토링
기능적 행위를 바꾸지 않고 구조를 개선하는 것으로 가독성과 유지보수성을 높이고 복잡성을 줄이기 위함
버그를 잡거나 기능을 추가하는 것이 아님
코드 리팩토링은 코드 스멜을 개선하는 것이며 코딩 스타일과 구조뿐 아니라 성능의 개선도 고려함
리팩토링 과정에서 테스트가 중요(익스트림 프로그래밍)
소프트웨어 형상 관리
형상
관련 있는 요소들의 배열 상태 또는 중요 기능을 구성하는 관련 요소들의 집합
소프트웨어 시스템을 구성하는 요소들과 그들의 관계로 볼 수 있음
소프트웨어 형상 관리
소프트웨어 품질 보증 활동의 하나
소프트웨어 시스템의 변경을 제어하고 관리하기 위한 프로세스
특정 시점에서 시스템을 구성하는 요소들이 무엇인지 파악하고 기록해야 하며 설계 문서와 코드가 작성 완료된 후에는 공식 검토를 거쳐야만 변경 가능
장점
구성 요소들을 조직화함으로써 부주의로 인한 수정 가능성이 감소
변경으로 인한 혼란의 최소화
구성 요소의 재사용성 증가
형상 관리 계획
형상 관리에 사용되는 표준과 절차를 기술
조직 내부의 표준과 외부 형상 관리 표준에 기초
형상 관리 항목
- 계획서, 요구사항 명세서, 설계 문서
- 시스템 구축에 사용되는 도구들, 컴파일러, 링커, 구문 분석기, 파서 등
- 각 모듈별 소스 코드, 실행 코드
- 테스트 계획, 테스트 케이스, 테스트 스크립트
- 개발 보고서
형상 관리 활동
항목의 식별, 버전 관리, 형상 구축, 변경 통제
항목의 식별
형상의 구성 요소로 포함되어 관리될 항목들을 정하고 항목의 특성을 정의함
각 요소의 버전을 구분하기 위해 작명법(관리 번호)이 필요함 버전 번호 외에 항목의 유형과 이름, 설명, 날짜, 책임자에 대한 정보도 유지함
형상 자체도 버전 번호를 가짐
형상 관리 항목이 개발되어 공식적으로 인정된 상태를 베이스라인이라 함
베이스라인이 설정된 이후의 변경은 공식적 승인을 얻어야 함
버전의 관리
- 개별 형상 항목과 시스템 형상은 진화됨
- 누가 무엇을, 언제 변경했는지 기록하여 이력을 제공하는 것
- 소스 코드의 버전을 관리하는 경우
- 소스 코드의 이름과 변경 사항
- 사용된 컴파일러와 링커의 버전
- 만든 사람의 이름
- 만든 날짜와 시간 등을 기록함
시스템을 구성하는 형상의 버전 넘버링 형식은 major.minor[.revision]
형상 구축
시스템 형상을 만들기 위해 그것을 구성하는 요소들의 정확한 버전을 파악하고 연결해야 함
변경 통제 (또는 형상 통제 프로세스)
형상 관리 항목들에 대한 변경을 통제하기 위한 의사결정 프로세스
변경 제어 프로세스, 형상 상태의 보고, 형상 감사를 포함
변경 제어 프로세스
변경을 제안하고 승인을 받아 구현하는 절차
변경의 요청, 변경의 파급 효과 분석, 변경, 새로운 기준선이나 릴리스의 구축이 필요함
변경된 항목의 새로운 베이스라인과 함께 구 버전도 라이브러리에 유지되어야 함
변경 제어 프로세스 절차
수정의 필요성 인식, 변경 요구서 제출
형상관리위원회가 승인을 결정
개발자를 배정하고 형상 항목을 체크 아웃
변경 작업, 변경에 대한 검토와 감사
품질 평가와 체크인
새로운 버전의 생성
시스템 릴리스에 변경 내용을 반영
형상관리위원회(CCB)는 형상 관리를 책임지며 변경 요청을 평가함
형상 상태의 보고
형상이 어떻게 변경되었고 현재 상태가 무엇인지 기록하고 보고하는 것
형상 항목에 대한 승인, 변경, 형상 감사 후에 결과를 기록하고 보고하는 것
누가 언제 무엇을 하였으며, 영향받는 것이 무엇인지 기록해야 함
형상 감사
형상 관리 계획대로 형상 관리가 진행되고 수정된 항목이 요구사항과 일치하는지 감사
형상을 이루는 베이스라인의 무결성을 공식적으로 승인하기 위함
형상 감사는 변경 제어 프로세스의 감시 활동임
승인된 변경이 수행되었는가
공식 기술 검토회가 수행되었는가
변경 내용을 파악할 수 있는가
형상 관리 절차를 준수하였는가
적절히 갱신되어 보관되었는가
재사용
재사용 단위
애플리케이션 시스템 재사용: 기성 제품(COTS)이나 애플리케이션 패밀리의 재사용
컴포넌트 재사용: 하나의 클래스에서 서브시스템 정도의 규모
함수 재사용: 전통적 표준 라이브러리
재사용의 장점
개발 및 유지보수 비용의 절감, 빠른 인도와 품질의 향상
검증된 컴포넌트이므로 신뢰도 증가
프로젝트 위험의 감소
컴포넌트 개발에 특화된 전문가를 활용
표준을 준수하는 컴포넌트
개발과 검토 시간의 단축
문제점
소스 코드가 없어서 유지보수가 어려움
CASE 도구와 연동되지 못하는 컴포넌트
재사용에 대한 거부감
컴포넌트 라이브러리의 유지 문제
소프트웨어 척도
유지보수에 영향을 주는 요인들
모듈화 정도, 모듈의 복잡도, 모듈의 가독성, 요구사항의 추적성, 문서화 정도
소프트웨어 척도
제품이나 개발 프로세스의 특성을 평가하기 위한 정량적 측정법
프로젝트 관리에 필요한 정보를 얻기 위함
제품과 프로세스의 품질을 개선하기 위함
소프트웨어 척도의 분류
제품 척도: 제품의 특성을 표현하는 척도로 크기, 복잡도, 설계 특성, 성능, 신뢰도 등과 같은 제품의 특성
프로세스 척도:프로세스의 효율성과 품질을 나타내는 것으로 프로세스의 수행 비용, 제품 생산에 걸린 시간, 프로세스 성숙도, 결함 발견과 제거의 효율성 등
프로젝트 척도: 프프로젝트의 특성을 나타내는 것으로 개발자의 수, 비용과 일정, 생산성,인사 패턴 등
복잡도 척도
유지보수를 위한 수정 작업은 모듈화 정도와 모듈의 단순함과 가독성에 큰 영향을 받음
모듈의 복잡도를 평가하기 위해 제어 구조, 논리적 복잡성 등을 고려함
사이클로매틱 복잡도와 소프트웨어 사이언스는 코드의 복잡도를 나타내는 척도임
사이클로매틱 복잡도
매케이브의 그래프 이론에 기초함
프로그램에 존재하는 독립적인 경로의 수로 복잡도를 평가
사이클로매틱 수 = 제어 흐름 그래프에서 영역(region)의 수= 에지 수 -노드 수 + (2 × 연결 요소의 수)
= 비교 횟수 + 1
소프트웨어 사이언스
할스테드 이론으로 코드에서 측정한 값으로 복잡성과 관련된 품질을 계산
다음 값을 이용함
n1 = 프로그램에서 사용된 유일 연산자의 수
n2 = 프로그램에서 사용된 유일 피연산자의 수
N1 = 프로그램에서 사용된 연산자의 총 수
N2 = 프로그램에서 사용된 피연산자의 총 수
척도
프로그램 길이 N = N1 + N2 또는 N?= n1 × log2 n1 + n2 × log2 n2
프로그램 부피 V = N × log2 n (단, n=n1+n2)
프로그램 난해성 D = n1/2 × N2/n2
프로그램 노력 E = V × D
01 소프트웨어 유지보수에 관한 설명으로 옳은 것은? 1 일반적으로 역공학은 낮은 추상 수준의 표현으로부터 높은 추상 수준의 표현을 추출하는 작업이다. 2 형상 관리는 유지보수 과정에서만 수행된다. 3 유지보수 유형 가운데 기능이나 성능을 개선하기 위한 완전 유지보수가 비중이 크다. 4 일반적으로 개발비용보다 유지보수 비용이 적다. 정답 | 1 해설 | 형상 관리는 소프트웨어 생명주기 전체에 걸쳐 일어나는 품질 보증 활동이다. 유지 보수와 관련된 비용은 예측하기 어려우나 소프트웨어의 수명이나 경제성을 고려할 때 개발 비용보다 많이 드는 것으로 알려져 있다. 02 다음은 기존의 레가시 시스템을 재공학하는 것과 새로운 시스템을 개발하는 것을 비교한 것이다. 잘못된 설명은? 1 새로운 시스템을 개발하는 것이 보다 높은 위험을 수반한다. 2 유지보수성을 높이려면 재공학으로는 할 수 없으므로 새로 개발해야 한다. 3 재공학에 의한 개선 정도는 새로운 개발에 비해 제한적이다. 4 재공학 비용이 새로 개발하는 것보다 비용이 덜 든다. 정답 | 2 해설 | 레거시 시스템의 유지보수성을 높이기 위해 재공학을 고려할 수 있다. 이때 재공학 비용과 개선 정도를 판단해야 한다. 03 역공학에 대한 설명이 아닌 것은? 1 레가시 시스템을 재공학하는 것이 아니고 신규로 개발하기 위한 것이다. 2 기존 코드나 데이터로부터 요구 명세서나 설계 문서를 복구한다. 3 전체 시스템을 분석하여 아키텍처를 파악한다.4 프로그램으로부터 데이터 흐름도와 자료 사전을 재생한다. 정답 | 1 해설 | 신규로 소프트웨어를 개발하려는 목적으로 역공학을 수행하는 것은 아니다. 역공학 은 유지보수나 재공학을 위해 시스템을 이해하려는 목적을 가진다. 04 다음이 설명하는 용어는 정확히 무엇인가? -시스템의 후기 상태에서 주어지는 생성물로부터 이전 상태의 관련 생성물을 추출하는 것 -소프트웨어 요소를 분석하여 높은 추상 수준의 표현을 유도하는 작업 -프로그램이나 사용자 매뉴얼 등으로부터 기능 명세나 설계 문서 등을 생성하는 과정 -소스 코드로부터 설계 문서를 유도하는 일 또는 목적 코드로부터 소스 코드를 유도하는 일 1 역공학 2 재공학 3 리팩토링 4 재구조화 정답 | 1 해설 | 역공학은 시스템의 유지보수를 위한 작업이며, 재공학 과정의 일부로 볼 수도 있다. 05 다음이 설명하는 것은 무엇인가? 소프트웨어 요소들의 관련성을 파악하고 그것들의 버전들을 일관성있게 관리함으로써 소프 트웨어 시스템의 변경과 진화를 통제하는 일 1 소프트웨어 사이언스 2 리팩토링 3 소프트웨어 척도 4 소프트웨어 형상 관리 정답 | 4 해설 | 주요 용어 부분을 참고하라. 06 소프트웨어 형상 관리 활동에 관한 설명으로 옳지 않은 것은? 1 형상 항목 식별-형상 관리가 필요한 항목을 정하고 베이스라인을 수립 2 변경 제어-변경 요청시 즉시 변경하여 융통성을 높임 3 형상 감사-형상 관리 계획대로 형상 관리가 진행되고 수정된 항목이 요구사항과 일치하 는지 감사 4 형상 상태의 보고-형상 관리의 수행 결과를 기록하고 보고함 정답 | 2 해설 | 변경 제어는 다음과 같다. 형상 항목의 변경 요구를 분석하여 승인할지 결정한다. 변경 작업 후에 해당 항목의 새로운 베이스라인을 생성하고 시스템 릴리스에 반영한다. 07 모듈의 복잡도를 측정하기 위한 척도로 보기 어려운 것은? 1 사이클로매틱 수 2 기능 점수 3 소프트웨어 사이언스 4 MTTF 정답 | 4 해설 | MTTF는 평균 수명 시간으로 신뢰도 척도이다. 기능 점수는 기능의 규모를 측정하 는 것이며 규모의 복잡도와 기술적 복잡도가 반영되어 있다고 할 수 있다.08 소프트웨어 재사용에 관한 설명으로 적당하지 않은 것은? 1 부품을 재사용함으로써 개발 생산성과 품질을 높일 수 있다 2 재사용 부품의 소스 코드가 제공되지 않아도 유지보수에 문제가 되지 않는다 3 대규모 부품을 재사용할 수 있다면 효율적이나 대규모 부품의 재사용율은 낮을 것이다 4 재사용할 수 있는 부품이 존재하면 프로젝트의 실패 위험을 줄일 수 있다 정답 | 2 해설 | 일반적으로 구입하여 재사용할 수 있는 부품은 소스 코드가 제공되지 않는다. 구입 처로부터 부품의 유지보수가 지원되지 않으면 문제가 될 수 있다. 정리하기 01 소프트웨어 유지보수의 유형을 구분하여 설명하라. 오류를 수정하기 위한 수정 유지보수, 환경의 변화에 적응하기 위한 적응 유지보수, 기능이 나 성능 개선을 위한 완전 유지보수, 유지보수성 향상을 위한 예방 유지보수로 구분된다. 02 소프트웨어 재공학을 정의하여 보아라. 일반적으로 소프트웨어 재공학은 기능을 바꾸지 않으며 기본적 아키텍처의 수정 없이 이해 성, 유지보수성, 재사용성 등을 개선하기 위해 시스템을 수정하는 일이다. 역공학, 재구조화, 재문서화 작업을 포함하는 개념이다. 03 코드 스멜이란 무엇인가? 소스 코드에서 문제가 생길 수 있는 나쁜 부분을 말한다. 이것은 설계나 코딩 작업이 잘못 되었다는 표시이며 리팩토링 작업을 요구하게 된다. 04 소프트웨어 형상 관리란 무엇인가? 품질 보증 활동의 하나로 개발 및 유지보수 과정에서 소프트웨어에 가해지는 변경을 제어하 고 관리하는 일이다. 이것은 관리해야 할 형상 항목을 선정하고 베이스라인을 설정하는 일, 형상 항목의 버전을 관리하는 일, 형상을 구축하는 일, 변경 요구를 승인하고 변경 작업을 제어하는 일, 형상 관리 절차를 기록하고 보고하는 일, 형상 관리를 감사하는 일로 이루어 진다. 05 사이클로매틱 수란 무엇인가? 프로그램의 복잡도를 측정하기 위한 척도이다. 프로그램에 존재하는 독립적인 경로의 수와 일치하며 ‘비교횟수+1’ 또는 제어 흐름 그래프에서 ‘영역의 수+1’ 로 계산된다.
- 1 일반적으로 역공학은 낮은 추상 수준의 표현으로부터 높은 추상 수준의 표현을 추출하는 작업이다.
- 2 형상 관리는 유지보수 과정에서만 수행된다.
- 3 유지보수 유형 가운데 결함 수정을 위한 유지보수 유형의 비중이 가장 크다.
- 4 일반적으로 유지보수 비용은 개발 비용보다 매우 적다.
- 정답 및 해설
- 정답입니다.
- 정답 : 1번
- 형상 관리는 소프트웨어 생명주기 전체에 걸쳐 일어나는 품질 보증 활동의 하나이다. 유지보수와 관련된 비용은 예측하기 어려우나 소프트웨어의 수명이나 경제성을 고려할 때 개발 비용보다 많이 드는 것으로 알려져 있다.
- 1 레가시 시스템을 재공학하는 것이 아니고 신규로 개발하기 위한 것이다.
- 2 기존 코드나 데이터로부터 요구 명세서나 설계 문서를 복구한다.
- 3 전체 시스템을 분석하여 아키텍처를 파악한다.
- 4 프로그램으로부터 데이터 흐름도와 자료 사전을 재생한다.
- 정답 및 해설
- 정답입니다.
- 정답 : 1번
- 신규로 소프트웨어를 개발하려는 목적으로 역공학을 수행하는 것은 아니다.
역공학은 유지보수나 재공학을 위해 시스템을 이해하려는 목적을 가진다.
- 1 형상 항목 식별 - 형상 관리가 필요한 항목을 정하고 베이스라인을 수립
- 2 변경 제어 - 변경 요청이 발생하면 즉시 변경하여 융통성을 높임
- 3 형상 감사 - 형상 관리 계획대로 형상 관리가 진행되고 수정된 항목이 요구사항과 일치하는지 감사
- 4 형상 상태의 보고 - 형상 관리의 수행 결과를 기록하고 보고함
- 정답 및 해설
- 정답입니다.
- 정답 : 2번
- 변경 제어는 다음과 같다. 형상 항목의 변경 요구를 분석하여 승인할지 결정한다.
변경 작업 후에는 해당 항목의 새로운 베이스라인을 생성하고 시스템 릴리스에 반영한다.
- 1 사이클로매틱 수
- 2 기능 점수
- 3 소프트웨어 사이언스
- 4 MTBF
- 정답 및 해설
- 정답입니다.
- 정답 : 4번
- MTBF는 평균 고장 간격(또는 수명 시간)으로 신뢰도 척도이다.
기능 점수는 기능의 규모를 측정하는 것이며 규모의 복잡도와 기술적 복잡도가 반영되어 있다고 할 수 있다.
- 1 부품을 재사용함으로써 개발 생산성과 품질을 높일 수 있다.
- 2 재사용 부품의 소스 코드가 제공되지 않아도 유지보수에 문제가 되지 않는다.
- 3 대규모 부품을 재사용할 수 있다면 효율적이나 재사용 가능성이 낮을 것이다.
- 4 재사용할 수 있는 부품이 존재하면 프로젝트의 실패 위험을 줄일 수 있다.
- 정답 및 해설
- 정답입니다.
- 정답 : 2번
- 급자가 부품의 유지보수를 지원하지 않으면 문제가 된다.
'컴퓨터과학[4-1] > 소프트공학' 카테고리의 다른 글
소프트웨어 공학 - [제10강] 유스케이스 다이어그램 및 명세 (0) | 2017.01.03 |
---|---|
소프트웨어 공학 - [제9강] 객제지향 분석과 설계 (2) | 2017.01.02 |
소프트웨어 공학 - [제7강] 소프트웨어 설계 (0) | 2017.01.02 |
소프트웨어 공학 - [제6강] 사용자 요구 분석 (0) | 2016.12.31 |
소프트웨어 공학 - [제5강] 소프트웨어 테스트 (0) | 2016.12.29 |
댓글