다이나믹하고 해석되는 언어를 사용하는 프로젝트 확장에 관한 흥미로운 사례 연구 는 David Pollak의 Beginning Scala 에서 찾을 수 있습니다 .
뇌에서 코드를 더 간단하고 직접적으로 표현하는 방법을 찾기 시작했습니다. 루비와 레일즈를 찾았습니다. 나는 해방되었다고 느꼈다. 루비를 사용하면 훨씬 적은 코드 줄로 개념을 표현할 수있었습니다. Rails는 Spring MVC, Hibernate 및 기타 "능률화 된"Java 웹 프레임 워크보다 훨씬 사용하기 쉬웠다. Ruby와 Rails를 사용하면 짧은 기간 동안 머릿속에있는 내용을 더 많이 표현할 수있었습니다. C ++에서 Java로 옮길 때 느꼈던 해방과 비슷했습니다 ...
Ruby 및 Rails 프로젝트 가 수천 줄의 코드를 넘어서면서 프로젝트 에 팀원을 추가 함에 따라 동적 언어의 과제가 분명해졌습니다.
우리는 테스트 작성에 코딩 시간의 절반 이상을 소비 했으며, 테스트 작성 과정에서 생산성 향상의 상당 부분을 잃었습니다 . 대부분의 테스트는 메소드 이름이나 매개 변수 수를 변경하여 코드를 리팩토링 할 때 호출자를 업데이트하도록하기 위해 Java에서 필요하지 않았을 것입니다. 또한, 2 ~ 4 명의 팀원 사이에 마음이 합병 된 팀에서 일하는 것이 루비에서는 잘 진행되었지만 새로운 팀원을 팀에 데려 오려고 할 때 정신 연결이 새로운 팀원에게 전달되기 어려웠습니다 .
나는 새로운 언어와 개발 환경을 찾고 갔다. Ruby만큼 표현력이 뛰어나고 Java 만큼 안전 하고 고성능 인 언어를 찾고있었습니다 .
보시다시피, 저자를위한 프로젝트 스케일링의 주요 과제는 테스트 개발 및 지식 이전에있는 것으로 나타났습니다.
특히, 저자는 7 장에서 동적 언어와 정적으로 형식화 된 언어 간의 테스트 작성의 차이점을 설명하는 데 대해 더 자세히 설명합니다.
왜 Lucky Stiff ...는 Dwemthy 's Array 에 루비의 메타 프로그래밍 개념을 소개 합니다. N8han14 가 Scala에서 작동 하도록 예제를 업데이트했습니다 ...
Ruby 코드와 비교할 때 Scala 코드의 라이브러리 부분은 더 복잡했습니다. 우리는 유형이 올바른지 확인하기 위해 많은 노력을 기울여야했습니다. DupMonster 및 CreatureCons 클래스에서 Creature의 속성을 수동으로 다시 작성해야했습니다. 이것은보다 많은 작업 method_missing
입니다. 또한 생물과 무기의 불변성을 지원하기 위해 상당한 양의 작업을 수행해야했습니다.
반면에 결과는 Ruby 버전보다 훨씬 강력했습니다. 스칼라 컴파일러가 보증하는 것을 테스트하기 위해 루비 코드에 대한 테스트를 작성해야한다면 훨씬 더 많은 코드가 필요하다. 예를 들어, 토끼가 도끼를 휘두를 수 없다는 것을 확신 할 수 있습니다. 루비에서 이러한 확신을 얻으려면 |^
토끼 호출 이 실패 하는지 확인하는 테스트를 작성해야 합니다. 스칼라 버전은 주어진 생물에 대해 정의 된 무기 만 루비에서 많은 런타임 반영이 필요한 생물에 사용될 수 있도록합니다.
위의 내용을 읽으면 프로젝트가 더 커짐에 따라 테스트 작성이 엄청나게 번거로울 수 있습니다. 이 질문에 언급 된 매우 큰 프로젝트의 성공 사례 ( "Python은 성공적으로 YouTube에 사용됩니다")에서 알 수 있듯이 이러한 추론은 잘못된 것입니다.
문제는 프로젝트의 확장이 실제로 간단하지 않다는 것입니다. 매우 크고 오래 지속되는 프로젝트는 생산 품질 테스트 스위트, 전문 테스트 개발 팀 및 기타 무거운 물건으로 다른 테스트 개발 프로세스를 "적절하게"수행 할 수 있습니다.
Youtube 테스트 스위트 또는 Java Compatibility Kit 는 Dwemthy 's Array 와 같은 작은 튜토리얼 프로젝트에서 테스트와는 다른 삶을 살고 있습니다.