TDD로 작성되고 테스트 범위가 우수한 앱의 실제 예는 무엇입니까? [닫은]


17

테스트 단위 개발을 사용하여 개발 된 오픈 소스 응용 프로그램이 있습니까?

C # 및 .NET의 예제를 선호합니다. (라이브러리뿐만 아니라 응용 프로그램에 대해서도 언급했습니다.)

저는 TDD를 믿고 연습하고 싶은 중급 프로그래머입니다. 하루 종일 작업하는 앱은 약 1 백만 줄의 코드로 매우 복잡하며 더 많은 단위 테스트를 소개하고 싶습니다. 우리는 몇 가지 단위 테스트를 실시했지만 TDD와 이미 테스트중인 코드 작업에 대한 나의 노력은 고무적이지 않았습니다.

저의 제한된 경험에서 TDD는 디커플링이라는 이름으로 많은 복잡성을 장려하는 것 같습니다. 테스트하기 어렵고 우연히 중요한 경향이있는 앱의 비트는 주변으로 퍼져 나가거나 작성되지 않을 수도있는 통합 테스트 영역으로 밀려납니다. (여기서는 파일 시스템 액세스, 데이터베이스에서 객체 수화, 비동기 웹 호출 등 일반적인 용의자를 생각하고 있습니다.)

테스트중인 코드는 객체간에 많은 협업과 간단한 흐름 논리를 수반하는 경향이 있습니다. 모두가 메모리에서 발생하고 모든 것이 완전히 분리 될 필요가 없다면 더 간단하고 이해하기 쉬운 방식으로 쓰여질 수 있습니다 시험용.

나는 의존성 등을 조롱하는 기술을 이해하지만, 경험상 조롱을 많이 사용하면 매우 취성 테스트가됩니다. 많은 테스트가 빨간색으로 진행되는 것을 본뜬 첫 번째 본능이 "좋아요, 이제 모든 모의를 고쳐야합니다."

나는이 정신 장벽을 극복하려고 노력하고 있으며 그 일부로 Michael Feathers의 저서 인 레거시 코드로 효과적으로 작업하고 있습니다. 나는 내가 잃어버린 것의 일부를 보여주기를 희망합니다.

또한 코드 범위가 좋은 일부 .NET 응용 프로그램, 콘텐츠 관리 시스템 또는 CRUD 응용 프로그램을 연구하고 싶습니다. Bob 아저씨가 이야기하는 FitNesse 테스트 프레임 워크는 제가 살펴볼만한 내용이지만 가장 익숙한 언어로 작성된 것을 보는 것이 좋습니다.

어떤 제안이나 지혜의 말씀도 감사하겠습니다.



2
사실은 아닙니다 ... 실제 응용 프로그램의 예를보고 싶습니다. 해당 게시물에 허용 된 답변은 테스트 프레임 워크를 권장합니다. 이전에 프레임 워크와 라이브러리의 예를 보았지만 이것이 내 질문을 다루지 않습니다.
Josh Earl

@JoshEarl-동의합니다. 아래 답변이 다른 게시물과 관련이 있다고 생각하지 않습니다.
hanzolo

답변:


14

TDD의 사용 여부를 모르지만 테스트의 훌륭한 예는 sqlite이며, 이는 100 % 분기 적용 범위 를 가지며 제품 코드보다 1000 배 이상의 테스트 코드와 스크립트를 가지고 있습니다.


4
코드 대 테스트 코드의 비율이 너무 높으면 엄청난 노력 낭비처럼 들립니다
Ryathal

6
@Ryathal : 실패 비용은 테스트 된 코드의 길이가 아니라 테스트 노력을 지시합니다. 충분히 미션 크리티컬 한 접근 방식에서 충분히 광범위하게 사용되면 테스트는 그만한 가치가있었습니다. 그러나 SQLite가 그것을 과도하게 사용하지 않았다면 확실하지 않습니다.
thiton

3
sqlite는 많은 사람들에게 미션 크리티컬 한 제품입니다. 사용 빈도 (예 : OSX, iOS, Android OS)에 놀랄 수 있습니다. 그리고 당신은 테스트 코드와 데이터의 많은 라인이 아마도 기계로 생성되었다는 것을 알아야합니다. 산업 강도 데이터베이스에는 많은 경우가 있습니다.
Bryan Oakley

10
SQLite는 지구상 에서 가장 널리 사용되는 SQL 데이터베이스이며, 설치 기반은 MySQL, PostgreSQL, SQL Server, Oracle, DB2 결합 보다 훨씬 더 큽니다 . 아마도 가장 널리 사용되는 소프트웨어 중 하나 일 것입니다. SQLite에 버그가 있으면 지구상의 모든 스마트 폰이 작동을 멈출 것입니다. 나는 그것이 약간의 편집증을 정당화한다고 생각합니다.
Jörg W Mittag

@ JörgWMittag 와우, 나는 SQLite에 대해 전혀 몰랐습니다. 즐거움. 감사. 그러나 1000 배 더 많은 테스트 코드. 믿을 수 없어.
mike rodent


0

많은 타사 오픈 소스 라이브러리가 TDD되어 있습니다. RhinoMocks 및 NHibernate와 같은 Hibernating Rhinos의 라이브러리는 XUnit을 단위 테스트 프레임 워크로 사용하여 개발자가 TDD합니다.

이제 OSS를 사용하면 일반적으로 제품의 모든 것이 TDD되었음을 보증 할 수 없습니다. 커뮤니티는이 관행을 포함하여 표준을 가지고있을 수 있으며 코드 커버리지 메트릭을 수행하는 빌드 봇을 사용할 수도 있지만 TDD는 개발자가 구매해야하는 사고 방식이며 대중은 공개적으로 커밋 할 수 있습니다. GitHub의 트렁크와 같은 소스 VCS 트렁크를 사용하면 누구나 테스트 범위에 관계없이 모든 변경 사항을 적용 할 수 있습니다 (또는 범위가 필요한 경우 테스트는 TDD 정신을 위반 한 사실 이후에 작성되었을 수 있지만 실제로는 그렇지 않습니다. 커밋 할 때 좋은 방법).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.