문제

저는 현재 다른 협동 학생과 함께 완료되는 프로젝트를 진행하는 협동 조합 용어 중입니다. 이 프로젝트는 협동 조합에서 협동 조합으로 전달되었으므로, 열악한 관행이 진행되었으며 테스트는 끝까지 남았습니다. 테스트하는 동안 새로운 것을 배우기 위해 단위 테스트를 작성하고 싶다고 결정했습니다.

그러나 현재 형태로 테스트를 할 수없는 3 층의 엄격하게 결합 된 앱을 연구하고 있습니다. 나는 하룻밤 동안 인식을 넘어서 코드를 리팩토링하여 이러한 개념에 대한 지식없이 다른 협동 학생을 버리고 싶지 않습니다. 그렇다면 단위 테스트 가능성을 향해 코드를 천천히 끌어 당기려면 어떤 조치를 취해야합니까? 먼저 공장 패턴을 구현하고 다른 학생이 앞으로 나아 가기 전에이를 익숙해 지도록해야합니까?

내 지식이 결함이 있고 아무런 문제가 없으면 사과드립니다. 나는 이것에 익숙하지 않다 :)

도움이 되었습니까?

해결책

레거시 코드로 효과적으로 작동합니다 Michael Feathers

공장 패턴을 구현하는 것이 좋은 일이 될지 알기 어렵습니다. 코드가 수행하는 작업에 따라 다릅니다. :)

다른 팁

레거시 코드로 효과적으로 작동합니다 Michael Feathers (구독이있는 경우 Safari에서도 구입할 수 있음)는 작업에 대한 훌륭한 리소스입니다. 저자는 단위 테스트없이 레거시 코드를 코드로 정의하고 실질적인 연습을 제공합니다. 많이 테스트중인 코드를 가져 오기 위해 안전망없이 일하기 때문에 보수적 인 기술 (시간이 필요합니다). 목차 :

  • 부분 : 나는 변화의 역학
    • 제 1 장. 소프트웨어 변경
      • 소프트웨어를 변경 해야하는 네 가지 이유
      • 위험한 변화
    • 제 2 장 피드백 작업
      • 단위 테스트 란 무엇입니까?
      • 더 높은 수준의 테스트
      • 테스트 덮개
      • 레거시 코드 변경 알고리즘
    • 제 3 장 감지 및 분리
      • 가짜 공동 작업자
    • 제 4 장 이음새 모델
      • 거대한 텍스트
      • 이음새
      • 이음새 유형
    • 제 5 장. 도구
      • 자동 리팩토링 도구
      • 모의 개체
      • 단위 테스트 하네스
      • 일반 테스트 하네스
  • 파트 : II 변경 소프트웨어
    • 6 장. 시간이 많지 않아 변경해야합니다.
      • 새싹 방법
      • 새싹 클래스
      • 랩 방법
      • 랩 클래스
      • 요약
    • 7 장. 변화를 일으키려면 영원히 걸립니다
      • 이해
      • 지연 시간
      • 의존성 중단
      • 요약
    • 8 장. 기능은 어떻게 추가합니까?
      • 시험 중심 개발 (TDD)
      • 차이로 프로그래밍
      • 요약
    • 9 장.이 수업을 테스트 하네스에 넣을 수 없습니다.
      • 자극적 인 매개 변수의 경우
      • 숨겨진 의존성의 경우
      • 건축 블로브의 경우
      • 자극적 인 글로벌 의존성의 경우
      • 끔찍한 경우에는 종속성이 포함됩니다
      • 양파 매개 변수의 경우
      • 별칭 매개 변수의 경우
    • 10 장. 테스트 하네스 에서이 방법을 실행할 수 없습니다.
      • 숨겨진 방법의 경우
      • "유용한"언어 기능의 사례
      • 감지 할 수없는 부작용의 경우
    • 11 장. 나는 변화를해야한다. 어떤 방법을 테스트해야합니까?
      • 효과에 대한 추론
      • 추론
      • 전파 효과
      • 효과 추론을위한 도구
      • 효과 분석에서 학습
      • 단순화 효과 스케치
    • 12 장. 한 영역에서 많은 변화를 가져야합니다. 관련된 모든 클래스에 대한 종속성을 깨뜨려야합니까?
      • 가로 채기 포인트
      • 핀치 포인트로 디자인 판단
      • 핀치 포인트 트랩
    • 13 장
      • 수업 특성
      • 목표 테스트
      • 작성 특성화 테스트를위한 휴리스틱
    • 14 장. 도서관에 대한 의존성이 나를 죽이고 있습니다
    • 제 15 장. 내 응용 프로그램은 모두 API 호출입니다
    • 16 장. 나는 그것을 변경하기에 충분히 잘 이해하지 못한다.
      • 메모/스케치
      • 리스팅 마크 업
      • 스크래치 리팩토링
      • 사용하지 않은 코드를 삭제하십시오
    • 17 장. 내 응용 프로그램에는 구조가 없습니다
      • 시스템의 이야기를 들려줍니다
      • 벌거 벗은 CRC
      • 대화 조사
    • 18 장. 내 테스트 코드가 방해가됩니다
      • 클래스 이름 지정 규칙
      • 테스트 위치
    • 19 장. 내 프로젝트는 객체 지향적이지 않습니다. 안전한 변화를 어떻게해야합니까?
      • 쉬운 경우
      • 어려운 경우
      • 새로운 행동 추가
      • 객체 방향을 활용합니다
      • 그것은 모두 객체 지향적입니다
    • CHAPTER 20.이 수업은 너무 커서 더 큰 것을 얻고 싶지 않습니다.
      • 책임을보고
      • 다른 기술
      • 앞으로 나아가 다
      • 추출 후 클래스
    • 21 장. 나는 모든 곳에서 같은 코드를 바꾸고 있습니다.
      • 첫 단계
    • 22 장. 몬스터 방법을 변경해야하며 테스트를 작성할 수 없습니다.
      • 몬스터의 품종
      • 자동 리팩토링 지원으로 괴물을 다루는 것
      • 매뉴얼 리팩토링 도전
      • 전략
    • 23 장. 내가 아무것도 깨뜨리지 않는다는 것을 어떻게 알 수 있습니까?
      • Hyperaware 편집
      • 단일 골 편집
      • 서명을 보존하십시오
      • 컴파일러에 의지하십시오
    • 24 장. 우리는 압도적이라고 느낍니다. 더 나아지지 않을 것입니다
  • 부품 : III 종속성 차단 기술
    • 25 장. 의존성 차단 기술
      • 매개 변수를 조정하십시오
      • 메소드 개체를 해제하십시오
      • 정의 완료
      • 글로벌 참조를 캡슐화합니다
      • 정적 방법을 노출시킵니다
      • 추출하고 통화를 무시합니다
      • 공장 방법을 추출하고 무시합니다
      • Getter를 추출하고 무시하십시오
      • 구현자를 추출합니다
      • 인터페이스 추출
      • 인스턴스 대표자를 소개합니다
      • 정적 세터를 소개합니다
      • 링크 대체
      • 매개 변수 생성자
      • 매개 변수화 메소드
      • 매개 변수를 원시합니다
      • 기능을 풀 업
      • 의존성을 낮추십시오
      • 함수를 함수 포인터로 바꾸십시오
      • 글로벌 참조를 Getter로 바꾸십시오
      • 서브 클래스 및 재정의 메소드
      • 인스턴스 변수를 대체합니다
      • 템플릿 재정의
      • 텍스트 재정의
  • 부록 : 리팩토링
    • 추출 방법

프로젝트를 통해 새로운 개발 관행을 시작하는 것은 매우 어렵습니다. 과거에 처음부터 단위 테스트되지 않은 프로젝트를 수행했을 때, '새 코드가 단위 테스트가 있어야'하지만 단위 테스트에 압력을 가하지 않는다는 규칙을 설정하는 것이 좋습니다. 오래된 코드를 위해 작성됩니다.

물론 프로젝트의 구조가 테스트 가능성에 적합하지 않은 경우에도 어렵습니다.

내 최선의 추천은 작은 단계로 가져가는 것입니다.

테스트없이 단위 테스트 어셈블리 (또는 프로젝트 또는 무엇이든)를 만들부터 시작하십시오. 그런 다음 상당히 잘 정의되고 분리 된 단일 작은 코드 영역을 찾아 해당 영역에 대한 단위 테스트를 작성하십시오. 코 코더가 검사 할 때마다 (가능한 경우 자동으로)로서 단위 테스트를 실행하는 것과 같이 공동 코더가보기를 시작하고 '모범 사례'를 시작하십시오.

일단 작업을 수행하면 천천히 더 추가하기 시작할 수 있습니다.

열쇠는 천천히입니다. 내가 말했듯이, 오래된 코드를 테스트에서 면제하는 것이 더 쉽습니다. 팀이 단위 테스트에 대한 아이디어를 파악하고 글을 쓰는 데 더 나아진 후에 나중에 나중에 다시 돌아올 수 있습니다.

코드에서 주요 기능에 관한 일련의 블랙 박스 테스트를 작성하는 것은 어떻습니까? ASP.NET 프로젝트라고 언급하므로 다음과 같은 프레임 워크를 사용할 수 있습니다. Waitn 또는 셀렌 웹 브라우저를 자동화합니다. 이것은 코드가 얼마나 많이 변경 되더라도 일정하게 유지 해야하는 기준 기능 세트를 제공합니다.

프로젝트의 높은 수준의 기능을 테스트하는 편안한 수의 테스트가 있으면 코드로 다이빙을 시작하고 Simon P. Stevens가 언급 한대로 작동합니다. 느리게. (무료!) 사본을 잡습니다 리팩터! Visual Basic의 경우, 따라서 추출 방법과 같은 기본 리팩토링을 자동으로 수행 할 수 있습니다. 더 큰 코드 덩어리를 더 작고 테스트 가능한 덩어리로 분할하여 기능을 변경하지 않고는 테스트 성을 크게 증가시킬 수 있습니다.

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