소프트웨어 유지보수 및 진화
소프트웨어 유지보수 및 진화는 소프트웨어 인도 후의 수정과 시스템이 유용성을 유지하기 위해 지속적으로 변화해야 하는 장기적인 동학을 다룹니다.
Definition
소프트웨어 유지보수는 결함을 수정하고, 성능을 개선하거나, 변경된 환경에 적응시키기 위해 인도 후 소프트웨어 제품을 수정하는 것이며, 소프트웨어 진화는 변화하는 요구사항과 환경에 대응하여 소프트웨어가 수명 주기 동안 변화하는 더 광범위하고 지속적인 프로세스입니다.
Scope
이 분야는 유지보수의 범주(수정, 적응, 완전화, 예방); 소프트웨어 진화의 경험적 법칙; 프로그램 이해 및 영향 분석; 레거시 시스템의 재공학, 역공학 및 마이그레이션; 기술 부채의 축적 및 관리; 그리고 ISO/IEC 14764와 같은 유지보수를 규율하는 프로세스 및 표준을 포함합니다.
Sub-topics
Core questions
- 유지보수를 구성하는 변경 범주는 무엇이며, 어떻게 다른가요?
- 시간이 지남에 따라 소프트웨어가 어떻게 진화해야 하는지를 규율하는 경험적 법칙은 무엇인가요?
- 레거시 소프트웨어는 어떻게 이해되고, 재구조화되며, 마이그레이션되나요?
- 기술 부채는 어떻게 축적되며 어떻게 관리되나요?
Key theories
- 소프트웨어 유지보수 범주
- 유지보수는 수정(결함 수정), 적응(환경 변화에 대응), 완전화(기능 또는 성능 개선), 예방(유지보수성 개선)으로 분류되며, 실제로는 적응 및 완전화 작업이 지배적입니다.
- Lehman의 소프트웨어 진화 법칙
- Lehman은 활발히 사용되는 시스템은 지속적으로 변화해야 하며 그렇지 않으면 점진적으로 만족도가 떨어질 것이며, 복잡성을 줄이기 위한 노력이 없다면 진화함에 따라 복잡성이 증가한다고 관찰했습니다.
Clinical relevance
유지보수는 일반적으로 시스템 총 수명 주기 비용의 대부분을 차지하므로, 진화 동학을 이해하고, 복잡성 증가를 제어하며, 기술 부채를 관리하는 것은 소프트웨어의 장기적인 경제성과 생존 가능성에 결정적입니다.
Evidence & guidelines
ISO/IEC 14764는 소프트웨어 유지보수 프로세스를 정의하며, SWEBOK 소프트웨어 유지보수 지식 영역은 유지보수 범주, 활동 및 기술에 대한 합의된 지침을 제공합니다.
History
유지보수가 소프트웨어 비용의 대부분을 차지한다는 인식은 1970년대에 확산되었습니다. Lehman과 Belady는 대규모 시스템에 대한 경험적 연구를 통해 소프트웨어 진화의 법칙을 정립했으며, 장기 시스템이 노후화되고 기술 부채가 인식된 문제로 부상함에 따라 재공학 및 레거시 현대화 기술이 발전했습니다.
Debates
- 레거시 시스템 유지보수, 재공학 또는 교체
- 노후화된 시스템을 계속 유지보수할지, 재구조화할지, 아니면 완전히 교체할지 결정하는 것은 반복되는 전략적 논쟁이며, 교체의 위험과 비용을 지속적인 유지보수의 증가하는 비용 및 취약성과 비교하여 균형을 맞추는 문제입니다.
Key figures
- Meir M. Lehman
- Les Belady
- Ian Sommerville
Related topics
Seminal works
- lehman1980
- iso14764
- sommerville2015
Frequently asked questions
- 유지보수는 단순히 버그를 수정하는 것인가요?
- 아닙니다. 버그 수정(수정 유지보수)은 한 가지 범주에 불과하며, 대부분의 유지보수 노력은 적응 및 완전화(새로운 환경에 소프트웨어를 조정하고 기능을 추가하거나 개선하는 것)이며, 이는 일반적인 시스템에서 수정 작업을 능가합니다.
- 소프트웨어 복잡성이 시간이 지남에 따라 증가하는 경향이 있는 이유는 무엇인가요?
- Lehman이 관찰했듯이, 진화하는 요구사항을 충족하기 위한 지속적인 변경은 구조와 특수 사례를 추가합니다. 복잡성을 재구조화하고 줄이기 위한 노력이 의도적으로 이루어지지 않으면 시스템은 점진적으로 변경하기 어려워집니다.