Rzeczywiste przykłady aplikacji napisanych z TDD i dobrym zasięgiem testowym? [Zamknięte]

17

Czy są jakieś aplikacje open source, które są opracowywane przy użyciu programowania opartego na testach, które służą jako modele tego, jak powinny działać dobre testy jednostkowe?

Wolałbym zobaczyć przykłady w C # i .NET. (Pamiętaj, że wspomniałem o aplikacjach, nie tylko bibliotekach).

Jestem programistą średniego poziomu, który naprawdę chce wierzyć i ćwiczyć TDD. Aplikacja, nad którą pracuję w codziennej pracy, jest dość skomplikowana - około 1 miliona linii kodu - i chciałbym wprowadzić więcej testów jednostkowych. Mamy kilka testów jednostkowych, ale moje wysiłki w TDD i praca nad kodem, który już jest testowany, nie były zachęcające.

Z mojego, co prawda ograniczonego doświadczenia, TDD wydaje się zachęcać do dużej złożoności w imię oddzielenia. Fragmenty aplikacji, które są trudne do przetestowania - i które przypadkowo wydają się być krytyczne - zostają wypchnięte na peryferie, w sferę testów integracyjnych, które mogą, ale nie muszą, zostać napisane. (Mam tu na myśli zwykłych podejrzanych, dostęp do systemu plików, nawadnianie obiektów z bazy danych, asynchroniczne połączenia internetowe itp.)

Testowany kod zwykle wymaga dużej współpracy między obiektami i być może pewnej prostej logiki przepływu, która wszystko dzieje się w pamięci i którą można prawdopodobnie napisać w prostszy, bardziej zrozumiały sposób, gdyby wszystko nie musiało być całkowicie oddzielone dla testów.

Rozumiem techniki kpienia z zależności i tym podobne, ale z mojego doświadczenia wynika, że ​​częste stosowanie kpiny prowadzi do bardzo kruchych testów. Jeśli moim pierwszym instynktem po zobaczeniu kilku testów zmieniających kolor na czerwony jest „Świetnie, teraz muszę naprawić wszystkie kpiny”, to moje testy stały się oporem, a nie siatką bezpieczeństwa.

Próbuję ominąć tę mentalną barierę i w ramach tego czytam książkę Michaela Feathersa pt. „ Skutecznie współpracując ze starszym kodem” . Mam nadzieję, że pokaże mi część tego, czego mi brakuje.

Chciałbym również przestudiować nietrywialne aplikacje .NET z dobrym pokryciem kodu, być może system zarządzania treścią lub aplikację CRUD. Framework testowy FitNesse, o którym mówi wujek Bob, jest prawdopodobnie czymś, na co mogę się przyjrzeć, ale fajnie byłoby zobaczyć coś napisanego w języku, który znam najbardziej.

Wszelkie sugestie lub słowa mądrości będą mile widziane.

Josh Earl
źródło
1
Duplikat programistów.stackexchange.com
questions
2
Niezupełnie ... Interesują mnie przykłady rzeczywistych aplikacji. Przyjęta odpowiedź w tym poście zaleca środowisko testowe. Widziałem już kilka przykładów frameworków i bibliotek, ale to nie rozwiązuje mojego pytania.
Josh Earl
@JoshEarl - Zgadzam się. Nie sądzę, że moja odpowiedź poniżej byłaby odpowiednia dla drugiego postu
hanzolo

Odpowiedzi:

14

Nie wiem, czy użyto TDD, ale znakomitym przykładem testowania jest sqlite, który ma niezwykłe 100% pokrycie gałęzi i ma ponad 1000 razy więcej kodu testowego i skryptów niż kod produktu.

Bryan Oakley
źródło
4
brzmi to jak marnotrawstwo wysiłku, jeśli ich stosunek kodu do kodu testowego jest tak wysoki
Ryathal
6
@Ryathal: Koszt awarii determinuje wysiłek testowy, a nie długość testowanego kodu. Biorąc pod uwagę wystarczająco szerokie zastosowanie w podejściach wystarczająco krytycznych dla misji, testowanie mogło być tego warte. Nie jestem jednak pewien, czy SQLite tego nie przesadził.
thiton,
3
sqlite ma zdecydowanie kluczowe znaczenie dla wielu osób. Możesz być zaskoczony, jak często jest używany (na przykład OSX, iOS, Android OS). I musisz zdawać sobie sprawę, że wiele z tych linii kodu testowego i danych zostało prawdopodobnie wygenerowanych maszynowo. Baza danych wytrzymałości przemysłowej zawiera wiele przypadków brzegowych.
Bryan Oakley,
10
SQLite jest najczęściej używanym w bazie danych SQL na planecie, to podstawa instalacja jest o rząd wielkości większy niż MySQL, PostgreSQL, SQL Server, Oracle, DB2 połączeniu . To prawdopodobnie jeden z najczęściej używanych programów, kropka. Gdyby wystąpił błąd w SQLite, każdy smartfon na naszej planecie przestałby działać. Myślę, że to uzasadnia małą paranoję.
Jörg W Mittag
@ JörgWMittag wow, nigdy nie wiedziałem o SQLite. Zabawny. Dzięki. Ale 1000 razy więcej kodu testowego. To jest niesamowite.
Mike
0

Wiele zewnętrznych bibliotek typu open source jest TDDed. Biblioteki Hibernating Rhinos, takie jak RhinoMocks i NHibernate, są TDDed przez programistów używających XUnit jako środowiska do testowania jednostek.

Teraz, z OSS, zwykle nie możesz zagwarantować, że WSZYSTKO w produkcie zostało TDDeded. Społeczność może mieć standardy obejmujące tę praktykę, a nawet może korzystać z bota kompilacji, który wykonuje pomiary zasięgu kodu, ale TDD jest mentalnością, którą musi kupić programista, a ogół społeczeństwa może zobowiązać się do otwarcia- źródłowych pni VCS, takich jak te na GitHub, każdy może dokonać dowolnej zmiany z dowolną ilością pokrycia testowego (lub jeśli wymagany jest zasięg, testy mogły zostać napisane po fakcie, co jest pogwałceniem ducha TDD, ale tak naprawdę nie ma dobry sposób na złapanie go przy zatwierdzeniu).

KeithS
źródło