W chwili pisania tej odpowiedzi zdałem sobie sprawę, że nie chodzi o testowanie, ale o dokumentację. Najpierw powinieneś przeczytać manifest zwinny :
[Cenimy] działające oprogramowanie w porównaniu z obszerną dokumentacją
Powinieneś więc uczynić swoje specyfikacje wykonywalnymi, tj. Napisać je jako w pełni zautomatyzowany zestaw testów.
Czy pisanie specyfikacji opartych na opowiadaniach to dobry pomysł?
Tak jest, imho. Nazywa się to „programowaniem opartym na zachowaniu” lub „specyfikacją przez przykład”. W rubinie jest świetny ogórek narzędziowy , który bardzo pomaga.
Problem polega na tym, że ponieważ jest tak wiele historii, nie jest od razu jasne, dla jakiejkolwiek części systemu, które historie się z tym wiążą.
Dlaczego chcesz, żeby to było jasne? Mam na myśli, czy naprawdę potrzebujesz macierzy identyfikowalności „test / kod”? Zaletą pisania testów jako specyfikacji jest to, że nie potrzebujesz osobnej identyfikowalności „wymagań / testów”, ponieważ testy stają się wymaganiami. Do celów testów integracyjnych powinieneś traktować swoje oprogramowanie jako całość, a nie jako oddzielne części.
Może być potrzebne narzędzie pokrycia, aby sprawdzić, czy istnieją „martwe” moduły, części systemu nieobjęte testami specyfikacji. Ale tak naprawdę nie powinno cię obchodzić, jakiej specyfikacji odpowiada ten konkretny kod. Powinno być odwrotnie: z konkretnej specyfikacji powinieneś wiedzieć, która część systemu odpowiada jej. Nie powinieneś martwić się o pewne powielanie specyfikacji. A jeśli zastosujesz zasadę DRY do swojego kodu, dziesiątki specyfikacji wykonają ten sam kod.
Działa w czasach programistów, każdy sprint deweloperów otrzymuje specyfikację określającą, co należy zrobić i jakie zmiany należy wprowadzić. Ale jeśli chodzi o utrzymanie tej listy historii i testowanie, zaczyna się naprawdę ciężko śledzić błędy i ogólnie po prostu zachować specyfikacje, ponieważ jedna funkcja na ekranie mogła być udokumentowana w wielu różnych miejscach, ponieważ jest podzielone według historii.
Nierzadko zdarza się, że setki testów integracyjnych są niszczone przez jedną małą zmianę w kluczowym module. Właśnie tam wkracza testowanie jednostkowe.
Powinieneś tak ustrukturyzować swoje testy, abyś mógł stwierdzić, czy dany test spełnia wysokie wymagania, czy tylko jego subtelne szczegóły. Jeśli to drugie, należy oddzielić ten test od pakietu testów integracyjnych. Celem testów jednostkowych jest zlokalizowanie błędów. Tak więc, jeśli wprowadzisz błąd, nastąpi jeden i tylko jeden błąd testu.
Czy napisaliśmy historie w niewłaściwy sposób?
Myślę, że wystarczy uporządkować swoje historie w epopeje według użytkownika, np. „Klient”, „Asystent” lub według funkcji / ekranów / przepływów pracy („Zakup”, „Zwrot”).
I znowu testy specyfikacji nie zastępują testów jednostkowych. Czytaj więcej