2022. 12. 20. 22:57ㆍOthers/SE
●유지보수
소프트웨어가 베타 테스트된 후 일어나는 모든 작업
소프트웨어가 유용하게 활용되는 기간
소프트웨어는 환경과 비즈니스 요구에 따라 진화함
결함을 고치거나 성능을 높이거나 새로운 기능을 추가하거나 변경된 환경에 적응시키기 위하여 배포 후 수정하는 작업
변경 이유 : 버그 제거, 운영 환경 변화, 정부 정책,규례의 변화, 비즈니스 절차의 변화, 미래 문제를 배제하기 위한 변경
●유지보수의 종류
교정형 유지보수 : 발견된 오류의 원인을 찾아 계획적으로 문제해결
적응형 유지보수 : 새로운 자료나 운영체제, 하드웨어 환경으로 이식
완전형 유지보수 : 성능이나 유지보수성을 개선하기 위한 변경
예방형 유지보수 : 문제가 발생하기 전에 사전에 예방하는 유지보수
응급형 유지보수 : 응급처치하기 위한 무계획적 유지보수
●유지보수 작업 과정
1. 프로그램 이해
2. 변경 파악과 분석
3. 형상 변경 관리
4. 변경 구현, 테스팅, 설치
- 통합적이고 이해 중심적(개발은 코딩 중심, 유지보수는 이해 중심)
●회귀 테스트
변경 이후에도 여전히 같은 기능을 수행하는지 확인하는 테스트
변경이 적은 경우, 변경 부분과 그에 의하여 영향이 있는 부분만 테스트
변경이 많은 경우, 예상치 못한 부분을 생각하여 전체를 테스트
●유지보수의 문제점
소프트웨어에 대한 변경이 수시로 일어나면 이를 문서에 반영하지 않는 경우 이를 추적하는 것이 거의 불가능
다른 사람이 작성한 프로그램을 이해하는 일을 쉽지 않다.
소프트웨어가 변경을 가정하여 설계되는 경우가 드물다
관리적인 측면에서 유지보수를 담당하는 프로그래머에게 동기부여를 하지 못함
프로그램 이해를 위해 테스트나 디버깅 도구를 사용하는데 그침
●유지보수 프로세스 모델
즉시 수정 모델 : 코드를 바로 수정하고 문서 수정은 최소화
반복적 개선 모델
재사용 중심 모델 : 컴포넌트 재사용을 통한 유지보수
●형상관리
개발 주기 동안 생성된 문서를 관리하고 소프트웨어 시스템과 컴포넌트의 상태를 추적
문서와 결과물에 대한 변경이 조정되지 않는다면 불일치 발생
베이스 라인 : 변경 통제 시점 지정, 마일스톤,
베이스 라인의 목적 : 프로젝트의 중요한 상태를 정의, 프로덕트가 특정 상태에 이르렀는지를 나타냄, 계속되는 개발, 유지보수 작업의 기준
●형상관리의 필요성
소수 개발자가 한 장소에서 일한다면 형상관리는 불필요
시스템을 개발하는 많은 팀과 개발자들이 협력하고 소프트웨어 결과물을 공유 할 필요가 있을 경우
여러 버전을 유지하여야할 경우
●형상관리 절차
소프트웨어 형상 파악
형상 변경 제어
소프트웨어 형상 감사
형상 상태 보관
●역공학
대상 시스템을 분석하여 시스템의 컴포넌트와 관계를 찾아내어 같은 수준의 다른 표현이나 더 높은 수준의 표현으로 만드는 작업
프로그램의 추상 수준을 점증적으로 복구해 나가는 과정
원시 코드에서 소프트웨어 결과물들을 추출하는 것
●역공학의 용도
프로그램 이해 : 소프트웨어 구조,기능,동작 이해 용이
정형적 분석 : 존재할 수 있는 문제 감지
테스트 케이스 생성 : 흐름도의 경로
리엔지니어링 : 소프트웨어의 특정 측면을 개선하기 위해 재구축하는 과정
●재공학, 리엔지니어링
시스템 또는 컴포넌트를 재구조화 하는 과정
기존 시스템을 널리 사용하고 있는 프로그래밍 표준에 맞추거나 고수준 언어로 재구성하거나 타 하드웨어 등에서 사용할 수 있도록 변환하는 작업
●순공학, 재공학, 역공학
순공학 : 극히 정상적으로 소프트웨어를 개발하는 정통적인 순서 기법. 개념으로부터 실물을 얻어내는 과정
재공학 : 유지보수 작업을 하면서 자연스럽게 발생한 학문, 설계문서를 수정한 후 다시 프로그램 소스를 수정하는 형태의 공학, 리모델링
역공학 : 실물로부터 개념을 얻어내는 과정, 시스템을 이해하여 적절이 변경하는 유지보수 과정의 일부
●3R
완성된 소프트웨어 프로그램을 기반으로 역공학(Reverse Engineering), 재공학(Re-Engineering), 재사용(Re-Use)을 통해 소프트웨어의 생산성을 극대화하는 기법
필요성 : 유지보수 효율성 향상 및 비용 절감, 개발 생산성 향상, 이해,변경,테스트 용이, 변경 요구사항에 대한 신속한 대응, 소프트웨어 위기 극복
●흐리기(Obfuscation)
소스코드의 구조를 변화시켜 역공학 분석을 방지하는 기법
파일 내부의 Class, 함수, 변수명 등을 다른 문자로 대체함으로써 역공학 시 코드를 이해하기 어렵게 만드는 것
언어 구조, 데이터, 알고리즘, 제어흐름 등을 숨겨, 원본 소프트웨어보다 흐리게 된 소프트웨어를 이해하기 어렵게 만들어야함.