정답: 4번 소프트웨어 재공학의 필요성은 주로 유지보수의 문제에서 기인합니다. 시간이 지나면서 소프트웨어는 환경 변화, 기술 발전, 사용자 요구의 변화에 따라 수정과 보완이 필요합니다. 이러한 유지보수 과정에서 코드가 복잡해지고 비효율적이 되면, 재공학을 통해 구조를 개선하고 최적화하는 것이 필요합니다.