소프트웨어 유지 관리 개념
소프트웨어 유지 관리에는 소프트웨어가 배포된 후에도 계속해서 올바르게 작동하고 보안을 유지하며 변화하는 사용자 요구 사항을 충족하는지 확인하는 데 필요한 프로세스와 활동이 포함됩니다.
여기에는 버그 수정, 성능 개선, 새로운 환경 적응, 새로운 기능 추가 등 다양한 작업이 포함됩니다. 소프트웨어 유지 관리의 목표는 소프트웨어의 유효 수명을 연장하고 사용자에게 지속적으로 가치를 제공하는 것입니다.
사업대가 산정가이드
- 소프트웨어 유지관리 : 요율제 유지관리비
개발비 재산정가 * 유지관리 난이도%, 직접경비
- 소프트웨어 운영: 투입공수방식 운영비
직접인건비, 제경비, 기술료, 직접경비
- 소프트웨어 유지관리 및 운영
고정비/변동비방식 유지관리 및 운영비
: 변동비 산정(재개발대가), 고정비 산정(투입공수방식), 직접경비
SLA 기반 유지관리 및 운영비 정산
: 서비스 측정 / 서비스 평가 / 보상 및 제제 비율에 따른 사후정산
소프트웨어 유지 관리 유형
- 수정 유지 관리:
- 소프트웨어가 출시된 후 소프트웨어에서 발견된 버그 및 결함을 진단하고 수정하는 작업이 포함됩니다.
- 기능, 성능 또는 보안에 영향을 미치는 오류를 수정하는 것을 목표로 합니다.
- 적응형 유지 관리:
- 새롭거나 변화하는 환경(예: 새로운 운영 체제, 하드웨어 또는 기타 소프트웨어)에서 작동하도록 소프트웨어를 수정합니다.
- 발전하는 기술 및 인프라와의 호환성을 보장합니다.
- 완벽한 유지 관리:
- 사용자 피드백을 기반으로 새로운 기능을 추가하거나 기존 기능을 개선하기 위해 소프트웨어를 강화하고 개선합니다.
- 유용성, 성능 및 기타 비기능적 속성을 개선하는 데 중점을 둡니다.
- 예방 유지 관리:
- 잠재적인 문제가 심각한 문제로 발전하기 전에 사전에 식별하고 해결합니다.
- 향후 문제를 방지하기 위해 코드 리팩터링, 최적화 및 문서 업데이트가 필요합니다.
3R 정의, 특성, 절차 및 도구
소프트웨어 유지 관리의 3R 접근 방식은 리팩토링 + 리엔지니어링, 리버스 엔지니어링, 리유즈
이러한 기술은 기존 소프트웨어 시스템을 이해하고, 개선하고, 변환하여 유지 관리, 확장성 및 효율성을 높이는 데 사용됩니다.
리팩토링
정의:
리팩토링은 외부 동작을 변경하지 않고 기존 코드를 재구성하는 프로세스입니다. 소프트웨어의 내부 구조를 개선하여 이해, 유지 관리 및 확장을 더 쉽게 만드는 것을 목표로 합니다.
특징:
- 코드 정리: 코드 가독성을 높이고 복잡성을 줄입니다.
- 외부 동작 변경 없음: 소프트웨어 기능이 동일하게 유지되도록 합니다.
- 점진적 개선: 코드베이스에 대한 작고 지속적인 개선이 포함됩니다.
- 기술적 부채 감소: 코드를 정리하고 최적화하여 기술적인 부채를 해결합니다.
절차:
- 코드 냄새 식별: 코드 품질이 좋지 않다는 징후를 찾습니다(예: 중복된 코드, 긴 메서드, 대규모 클래스).
- 리팩토링 계획: 리팩토링이 필요한 코드 부분을 결정하고 우선순위를 지정합니다.
- 리팩토링 기술 적용: 메서드 추출, 변수 이름 변경, 대규모 클래스 분할과 같은 기술을 사용합니다.
- 자주 테스트: 리팩토링으로 인해 새로운 버그가 발생하지 않는지 확인하기 위해 소프트웨어를 지속적으로 테스트합니다.
- 검토 및 문서화: 리팩터링된 코드를 반영하도록 변경 사항을 검토하고 문서를 업데이트합니다.
도구:
- 통합 개발 환경(IDE): IntelliJ IDEA, Eclipse, Visual Studio와 같은 도구는 내장된 리팩터링 지원을 제공합니다.
- 정적 분석 도구: SonarQube 및 PMD와 같은 도구는 리팩토링이 필요한 영역을 식별하는 데 도움이 됩니다.
리엔지니어링
정의:
리엔지니어링에는 기존 시스템을 조사하고 변경하여 새로운 형태로 재구성하는 작업이 포함됩니다. 시스템의 일부를 재설계하고 재구현하여 소프트웨어 시스템의 기능, 성능 또는 유지 관리성을 향상시키는 것을 목표로 합니다.
특징:
- 시스템 수준 변경: 시스템 아키텍처나 디자인에 대한 실질적인 변경이 포함됩니다.
- 기능 향상: 새로운 기능을 추가하거나 기존 기능을 개선할 수 있습니다.
- 향상된 유지 관리성: 향후 시스템을 더 쉽게 유지 관리하고 확장할 수 있습니다.
- 레거시 시스템 현대화: 레거시 시스템을 현대화하고 현재 기술과 호환되도록 만드는 데 종종 사용됩니다.
절차:
- 분석: 현재 시스템을 평가하여 구조, 기능 및 제한 사항을 이해합니다.
- 계획: 범위, 목표, 일정을 포함하여 리엔지니어링 계획을 개발합니다.
- 재설계: 분석을 기반으로 시스템 아키텍처와 구성요소를 재설계합니다.
- 구현: 재설계된 구성 요소 또는 전체 시스템을 다시 구현합니다.
- 테스트: 리엔지니어링된 시스템을 철저하게 테스트하여 원하는 개선 사항을 충족하는지 확인합니다.
- 배포: 재엔지니어링된 시스템을 배포하고 성능을 모니터링합니다.
도구:
- 모델링 도구: 시스템 설계 및 모델링을 위한 Enterprise Architect 및 Rational Rose와 같은 도구입니다.
- 코드 변환 도구: 코드 분석 및 변환을 위한 ReSharper와 같은 도구입니다.
리버스 엔지니어링
정의:
리버스 엔지니어링은 소프트웨어 시스템을 분석하여 구성 요소와 관계를 식별하고 다른 형식이나 더 높은 추상화 수준에서 시스템 표현을 만드는 프로세스입니다.
특징:
- 기존 시스템 이해: 특히 문서가 부족한 경우 기존 시스템의 작동 방식을 이해하는 데 도움이 됩니다.
- 문서 생성: 기존 코드에서 문서와 모델을 생성합니다.
- 리엔지니어링 분석: 종종 리엔지니어링 노력의 전조가 됩니다.
- 레거시 시스템 통찰력: 유지 관리 또는 통합 목적으로 레거시 시스템에 대한 통찰력을 제공합니다.
절차:
- 추출: 기존 시스템에서 코드, 데이터 및 기타 요소를 추출합니다.
- 분석: 추출된 요소를 분석하여 구조와 거동을 이해합니다.
- 추상화: 시스템의 아키텍처와 디자인을 묘사하기 위해 추상적인 표현(예: UML 다이어그램)을 만듭니다.
- 문서화: 추가 유지 관리, 리엔지니어링 또는 재개발 노력에 도움이 되도록 결과를 문서화합니다.
- 검증: 정확성을 보장하기 위해 기존 시스템에 대해 추상 표현을 검증합니다.
도구:
- 정적 분석 도구: 코드 분석 및 시각화를 위한 Understanding 및 Sourcetrail과 같은 도구입니다.
- 모델링 도구: 추상 표현을 생성하기 위한 UMLet 및 StarUML과 같은 도구입니다.
결론
3R 기술(리팩토링, 리엔지니어링, 리버스 엔지니어링)은 소프트웨어 유지 관리의 중요한 구성 요소입니다. 이는 변화하는 기술 환경에서 소프트웨어 시스템이 기능적이고, 유지 관리 가능하며, 관련성을 유지하도록 보장합니다. 이러한 기술을 적용함으로써 조직은 소프트웨어의 품질, 성능 및 수명을 향상시켜 사용자와 이해관계자에게 더 나은 가치를 제공할 수 있습니다.
'도전기 > PE' 카테고리의 다른 글
SECU_14주차 review (0) | 2024.06.16 |
---|---|
13주_SW_정리 (0) | 2024.06.02 |
13주_SW_품질 요구, 모형, 관측, 평가, ISO 25000 (0) | 2024.06.02 |
13주_SW_동적 테스트 개념과 블랙박스 및 화이트 박스 테스트 상세 비교 (0) | 2024.06.02 |
13주_SW_안전성 분석 필요성과 ETA (0) | 2024.06.02 |