큰 Java/J2EE 웹 애플리케이션을 감사하는 데있어 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1023786

  •  06-07-2019
  •  | 
  •  

문제

몇 년에 걸쳐 진화 한 대형 웹 Java/J2EE 응용 프로그램을 감사해야합니다. 그것은 내가 일하는 회사가 아니라 다른 회사에 의해 작성되었습니다. 그것은 현재 상태에서 발전하고 유지하기가 어려워졌으며, 새로운 기능은 추가하기가 어렵고 종종 생산에 나타나는 버그로 이어집니다. 코드 복제를 초래 한 일부 복사/붙여 넣기 코드가있는 것 같습니다. 현재 앱은 여기 저기 CMS와 같은 콘텐츠를 가진 일종의 온라인 쇼핑입니다. 코드의 새로운 부분에서 대부분 스트럿과 일부 봄, 아마도 일부 EJB가 좋은 측정을 위해 던져 졌을 것입니다. 사용 가능한 일부 단위 테스트가 있지만 많은 단위 테스트가 있습니다. 이것들은 내가 들었던 것들입니다. 아직 실제 코드를 보지 못했습니다.

우리 회사는 복잡성을 줄이고 품질과 모듈성을 향상 시키며 회귀없이 더 쉬운 새로운 기능을 추가 할 수 있도록이 앱의 일부를 다시 작성하도록 제안 할 것입니다. 헌신하기 전에, 그들은 기존 코드의 품질에 대해 어떤 종류의 감사를 표하고 재사용 할 수있는 양을 ast습니다. 다시 쓰거나 부분적으로 다시 작성하십시오.

캐치는 아주 짧은 기간 (며칠)에 이것을해야한다는 것입니다. 그래서 나는 짧은 시간에 할 수있는 일에 대한 계획을 세우려고 노력하고 있습니다. 내가 thiking은 다음과 같습니다.

  • "기본"사물 - 예외 처리, 로깅 확인
  • 레이어링 수준 (보기, 컨트롤러, DAO 레이어)을 확인하십시오.
  • 단위 테스트의 실제 커버리지를 측정하십시오
  • 프로젝트를 통해 일부 CheckStyle, FindBugs 및 PMD를 실행할 수 있습니다.
  • ...

실제 질문은 다른 것들을 고려/확인/척도 등으로 받아야하는 것입니다.

나는 이것에서 어떤 종류의 숫자를 얻을 수 있는지 잘 모르겠습니다. 그것이 실제로 무언가를 의미한다면, 경영진이 요구하는 것이 일종의 잘못된 접근법이라는 느낌이 들기 때문에 두 번째 질문은 다음과 같습니다. 더 나은 아이디어?

이에 대한 아이디어, 제안, 의견에 감사드립니다.

편집 : 믹스에 두 개의 데드 코드 탐지기를 추가하겠습니다. UCD 그리고 DCD

도움이 되었습니까?

해결책

나는 당신과 비슷한 설정을 가진 두 개의 웹 응용 프로그램이있었습니다. FindBugs와 CheckStyle이 10.000 이상 문제가있는 점을 보여 주면서 사용을 중단했습니다. 응용 프로그램은 JDBC 레벨 데이터 액세스, 프레젠테이션을 위해 JSP 및 요청 파견을위한 사용자 정의 프레임 워크를 사용했습니다. 운 좋게도이 낮은 레벨 설정으로 인해 중간 난이도에 대한 확장 및 수정을 수행 할 수있었습니다. 3 년 프로젝트 동안 원래 코드의 약 20%만이 그대로 유지되었습니다. 조만간 다른 모든 것을 변경, 교체 또는 제거해야했습니다 (그리고 마지막으로 FindBugs와 CheckStyle을 사용할 수있었습니다).

우리는 또한 완전한 재 작성의 딜레마에 직면했습니다. 그러나 이에 대한 몇 가지 요소가있었습니다.

  • 고객이 완전한 재 작성 비용을 지불할지 확실하지 않습니다.
  • 기능적 및 기술적 인 문서가 없기 때문에 완전한 재 작성을 수행하는 것이 위험합니다.
  • 완전한 응용 프로그램을 완전히 이해하는 사람은 너무 높았습니다. 고객은 요청 된 변경 사항을 더 빨리 원했습니다.
  • 프레젠테이션 및 페이지 동작에 맞는 사용자. 사용자가 이전 기능에 새 인터페이스를 사용하도록 설득하기가 어려워 보였습니다.
  • 완전한 재 작성을 수행하면 완전한 문서를 제공해야합니다. 업데이트를 위해서는 우리의 역할 만 문서화해야했습니다.
  • 프로그램이 작동하는 경우 (다소) 재 작성의 경영진 (소유 및 고객)을 설득하기가 어렵습니다.
  • 회사는 자체 PMD 규칙을 가지고 있었고 코드는 통과하지 못했습니다. 새로운 부품이 테스트를 통과하기에 충분하다고 주장하는 것은 더 간단했습니다.

그것은 당신이 실제로하고 싶은 일을 요약합니다.

복잡성에도 불구하고 다시 쓰고 싶습니까?

  • 코드 버그를 강조하십시오. 빨간색이 많은 대형 파이 차트는 설득력이 있습니다.
  • 프로그램 속성과 기업 비전에 적합하지 않은 방법을 설명하십시오.
  • 현재 요구 사항을 넘어 향상 옵션을 표시하고 현재 버전이 도전에 맞지 않는 방식을 설명하십시오.
  • 실제 사용자와 인터뷰를하십시오. 그들은 현재 버전의 중요한 문제를 지적 할 수 있습니다.
  • 저렴하지만 좋은 추정기입니다. 유지 보수 단계까지 비용을 지연시킬 수 있습니다.

다시 쓰고 싶지 않습니까?

  • 비용, 특히 고객이 모든 것을 다시 테스트하는 데 필요한 인공을 강조하십시오.
  • 기능을 깨는 데있어 잠재적 인 문제를 지적하십시오.
  • 풀 타임 문서 작가를 요청하십시오.

코드를 맛보고 싶다면 Hello World를 추가하십시오! 응용 프로그램에 대한 기능/화면. 그것은 새로운 것을 얼마나 힘들고 빠르게 구현할 수 있는지 알려줍니다.

다른 팁

실제로 그들은 전체 재 작성 비용을 지불하지 않을 것입니다.

  • 경기 침체입니다. 처음부터 다시 쓰는 비용은 높아질 것입니다.

  • 그들은 최대한 빨리 회사를 판매하려고 할 수 있습니다

  • 경영진은 소프트웨어 개발에 대해 아무것도 이해하지 못합니다

나는 먼저 몇 가지 간단한 사실을 가지고 갈 것입니다.

  • 도구를 사용하여 프로젝트의 SLOC를 표시하십시오.
  • FindBugs와 결국 PMD를 계획대로 실행하여 결함을 추정합니다.
  • 빠른 프로파일 링 세션을 수행하십시오
  • 다른 레이어를 확인하십시오
  • 자원이 일반적으로 닫혀 있는지 확인하십시오 (스트림, 최대 절전 모드 또는 JDBC 연결 등).
  • 적용되지 않는 곳에 기술이 사용되는지 확인하십시오 (EJBS, 웹 서비스 등).
  • 예외와 로깅을 어떻게 처리하는지 확인하십시오
  • 추상화가 너무 많거나 충분하지 않은지 확인하십시오.
  • 코드 복제를 줄이기 위해 일부 기본 클래스를 추가 할 수 있는지 확인하십시오.

응용 프로그램 아키텍처에 대한 빠른 다이어그램을 작성하여 문서를 제공하지 않으면 문서를 작성하십시오.

통계와 사실을 수집하고 보고서를 작성하여 회사에 보냅니다. 그들은 비용을 최소화하고 싶을 것이며 깨지지 않은 코드를 수정하지 말 것을 요청할 것입니다. 통계로 시작한 다음 영향을받는/가격의 시간/대략적인 비율이있는 사실과 제안으로 시작합니다.

일반적으로 레거시 스트럿 애플리케이션은 유지해야 할 피타입니다. 그것이 당신의 직업의 일부가 아니라면, 나는 그것을 놓아 주겠다고 말할 것입니다. 많은 템플릿이 포함되지 않고 많은 변경 사항이 적용되는 "독립형"페이지를 만나면 다른 기술로 다시 작성할 것을 제안하십시오.

당신은 유지 가능성과 확장성에 중점을두고 있습니다.

프로젝트를 재부팅하는 데 걸리는 시간을 살펴 보겠습니다. 그들은 소스 컨트롤을 사용합니까? 통합 및 사용자 수락 테스트를위한 별도의 환경이 있습니까? 빌드 서버가 있습니까?

첫 번째 개선이 2 개월 전에 보내야 할 때 누군가가 고객의 기대를 선불로 관리 해야하는 것으로 보입니다.

나는 당신의 목록을 많이 좋아합니다. 나는 당신이 시작하기에 훌륭한 공격 계획이 있다고 생각합니다.

나는 스프링이나 EJB 3.0을 표준화하는 것을 보았지만 둘다는 아닙니다.

나는 그것을 직접 읽지 않았지만 Michael Feathers의 책이 궁금합니다 "레거시 코드로 효과적으로 작동" 좋은 아이디어가 있습니까?

업데이트:

아마도 당신은 크루즈 컨트롤, 허드슨 또는 팀 시티와 같은 자동화 된 빌드 및 지속적인 통합에 넣어서 도울 수 있습니다. 리팩토링을 수행 해야하는 경우 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top