폭포와 민첩성 모두에서 리팩토링 및 최적화의 필요성을 결정하는 중요한 원칙이 하나 있습니다. YAGNI (You Ai n't Gonna Need It). 두 번째 원칙은 첫 번째의 추론이다 : "조기 최적화는 모든 악의 근원", 일반적인 속담과 동등한 코딩 "우수의 적은 완벽"이다.
priciples를 가지고 적용하자. 특정 유형의 파일을 가져 와서 정보를 추출한 다음 해당 정보를 데이터베이스에 저장하는 ETL 알고리즘을 빌드해야합니다. 이번 주 목표는 (애자일 또는 SDLC 매장에 있든 상관없이) 우리가 목표를 달성하는 것입니다.
당신은 똑똑한 사람이며 큰 그림을 엿볼 수 있습니다. 이것이 프로젝트에 ETL이 필요한 유일한 파일 유형은 아니라는 것을 알고 있습니다. 따라서 다른 유형의 파일에서도 작동하도록이 ETL 알고리즘을 구현하는 것이 좋습니다. 이렇게하면 YAGNI를 위반하게됩니다. 다른 파일에 대한 알고리즘을 개발하지 않아야합니다. 그것은 주말에 필요한 하나의 파일에 대한 알고리즘을 개발하는 것입니다. 해당 목표를 달성하고 승인 테스트를 통과하려면 해당 알고리즘을 개발하고 올바르게 작동해야합니다. 다른 파일과 함께 작동하도록 추가 코드를 "필요하지 않습니다". 지금 통합하는 데 시간을 절약 할 수 있다고 생각할 수도 있고, 옳을 수도 있지만, 몹시 틀릴 수도 있습니다. 다른 파일에 대한 알고리즘은 코드를 사용할 수없는 시스템 영역에서 사용해야하거나 새 파일에 대한 요구 사항이 사용자가 모르는 방식과 다를 수 있습니다 (민첩한 경우 요구 사항이 아직 존재하지 않을 수 있습니다). 그 동안 시간을 낭비하고 불필요하게 알고리즘의 복잡성을 증가 시켰습니다.
이제 다음 주가되었으며 첫 번째 알고리즘에 대한 훌륭한 연구 결과에 대한 모호한 보상으로 두 가지 새로운 파일 형식에 대한 알고리즘을 작성하는 작업을 받았습니다. 이제 알고리즘이 더 많은 파일에서 작동하도록하려면 추가 코드가 필요합니다. 파일 별 개별 단계가 포함 된 기본 패턴을 사용하는 템플릿 메소드 패턴을 사용하여 기존 알고리즘을 확장하거나 기존 알고리즘에서 공통 인터페이스를 도출하고 인터페이스를 따르는 두 개의 새로운 알고리즘을 개발하여 플러그인 할 수 있습니다. 사용할 알고리즘을 선택할 수있는 객체
개발하는 동안 시스템이 초당 10KB의 원시 데이터를 처리 할 수 있어야한다는 것을 알고 있습니다. 로드 테스트를 수행하고 초기 드래프트 알고리즘이 8KB / s를 처리 함을 찾으십시오. 글쎄, 그것은 AAT를 통과하지 못할 것입니다. 알고리즘을 보면 O (my God) 복잡성 루프 구조가 있다는 것을 알 수 있습니다. 당신은 그것을 합리화하고 12KB / s를 얻습니다. "정말 좋다"라고 생각하지만 "코드에 루프가 불량한 경우 다른 것을 제거 할 수 있습니까?"라고 생각합니다. 버즈 "초기 최적화"규칙을 위반했습니다. 코드가 작동하고 모든 요구 사항을 통과합니다. 요구 사항이 15KB / s를 요구하도록 업데이트 될 때까지 "완료"되었습니다. 이런 일이 발생하면 코드를 다시 가져 와서 개선 할 사항을 찾으십시오.
애자일이든 기존 SDLC이든 개발 과정에서 다음과 같은 간단한 프로세스를 따르십시오. "첫 번째 패스에서는 작동 시키십시오. 두 번째 패스에서는 예쁘게 만드십시오. 세 번째 패스에서는 SOLID로 만드십시오." 이것이 의미하는 바는 코드를 처음 작성할 때 코드가 올바르게 작동하고 버그가 없도록하지만이 코드 내의 디자인 규칙에 너무 많은주의를 기울이지 말아야한다는 것입니다. 다시는이 영역을 만지지 마십시오. 다음 번에 해당 코드 줄을 방문하면 자신이 틀렸다는 것을 증명 한 것입니다. 더 이상 일회성 시스템이 아닙니다. 가독성, 코드 간결성 및 / 또는 DRY 원칙에 맞게 리팩토링하십시오 (일부 코드를 5 번 복사하기 위해 붙여 넣기하여 루프 및 / 또는 메소드 호출로 리팩토링 할 수 있음). 해당 코드 줄에서 또는 그 주변에서 세 번째로 작업 할 때
O(my God)-complexity
아무것도 없으면 +1 해서 나를 웃게 만들었습니다.