Test Driven Development
Widzisz wersję archiwalną tematu "Test Driven Development" z forum pl.comp.lang.c
Seweryn Habdank-Wojewódzki - 5 Sty 2006, 06:38
Witam
Mam pytanie jakie są dedykowane narzędzia pod linux/unix'y, aby móc powiedzieć, że software jest pisany aby spełniać "Test Driven Development".
W szczególności interesują mnie programy do testowania zaawansowanych systemów obliczeniowych (predyktory, systemy decyzyjne, systemy ekspertowe do data miningu i KDD, etc.).
A już w ogóle jeśli to może też testować programy mające reżim hard real-time, to byłoby super.
I ostatnie pytanie czy są jakieś symulatory/testery jak wyglądałyby obliczenia w gridzie.
Pozdrawiam.
Marcin Hoppe - 5 Sty 2006, 09:17
Mam pytanie jakie są dedykowane narzędzia pod linux/unix'y, aby móc powiedzieć, że software jest pisany aby spełniać "Test Driven Development".
Oprogramowanie można pisać na modłę TDD nawet bez użycia dedykowanych narzędzi. Ot, po prostu najpierw pracować nad testami a później dopiero nad kodem, który te testy spełni. Podejście to nie wymusza stosowania jakichkolwiek zewnętrznych do danego środowiska wytwórczego cudaków -- można przecież pisać z boczku kod testowy w postaci skryptów Perl uruchamianych podczas każdej próby zbudowania programu.
Jeśli chodzi o biblioteki wspomagające TDD, np. biblioteki do testów jednostkowych, to najczęściej są one przeznaczone dla konkretnego języka programowania lub środowiska (jak Java czy .NET). Nie wydaje mi się, żeby istniał ogólny tool dla Linuksa/Uniksów.
W szczególności interesują mnie programy do testowania zaawansowanych systemów obliczeniowych (predyktory, systemy decyzyjne, systemy ekspertowe do data miningu i KDD, etc.).
A to jest istotnie ciekawe zagadnienie, zwłaszcza w przypadku równoległego rozwijania metod matematycznych i oprogramowania :).
Wracając jednak do głównego wątku: oprogramowanie obliczeniowe jest w ogólności najłatwiejsze do testowania. Można przygotować wiele zestawów danych wejściowych i na boku, ręcznie, opracować akceptowalne odpowiedzi systemu lub procedury decydujące o akceptacji rozwiązania. I znowu, można to zrobić za pomocą narzędzia do testów jednostkowych lub po prostu, jako zestaw skryptów.
A już w ogóle jeśli to może też testować programy mające reżim hard real-time, to byłoby super.
A tutaj niestety nie mam nic do powiedzenia. W ACM Digital Library są zdaje się jakieś artykuły na temat testowania systemów real-time.
I ostatnie pytanie czy są jakieś symulatory/testery jak wyglądałyby obliczenia w gridzie.
Tutaj też niestety nie mam żadnej wiedzy :(.
Seweryn Habdank-Wojewódzki - 5 Sty 2006, 09:38
Witam
Jeśli chodzi o biblioteki wspomagające TDD, np. biblioteki do testów jednostkowych, to najczęściej są one przeznaczone dla konkretnego języka programowania lub środowiska (jak Java czy .NET). Nie wydaje mi się, żeby istniał ogólny tool dla Linuksa/Uniksów.
To znaczy pisząc na grupę o C/C++ miałem na myśli te języki.
| W szczególności interesują mnie programy do testowania zaawansowanych | systemów obliczeniowych (predyktory, systemy decyzyjne, systemy ekspertowe | do data miningu i KDD, etc.). A to jest istotnie ciekawe zagadnienie, zwłaszcza w przypadku równoległego rozwijania metod matematycznych i oprogramowania :).
U mnie w firmie różne "dziwadła" piszemy, ale jakoś nie widziałem, żeby ktoś na
programu nigdy nie oddajemy.
Wracając jednak do głównego wątku: oprogramowanie obliczeniowe jest w ogólności najłatwiejsze do testowania. Można przygotować wiele zestawów danych wejściowych i na boku, ręcznie, opracować akceptowalne odpowiedzi systemu lub procedury decydujące o akceptacji rozwiązania. I znowu, można to zrobić za pomocą narzędzia do testów jednostkowych lub po prostu, jako zestaw skryptów.
I tu jest kłopot, jak w systemie ręcznie wyliczyć np. wektor 200 000 wyników. Bo tyle ma przykładowy wektor danych do obróbki? W sumie testy polegają na tym, że:
1. Sprawdzamy czy program działa - nie wywala się, nie ma mem leaków dla różnych danych wejściowych itp.
2. Sprawdzamy czy wyniki są cicra about poprawne (tu można czasem dać asserty), ale nie zawsze, bo czasami wyniki mieszczą się w zakresach, ale jak coś jest źle policzone, to tylko wykres i intuicja pomagają.
No i jak tu automatyzować punkt 2?
Pozdrawiam i dziękuję za dość wyczerpujące rozwianie wątpliwości.
Bronek Kozicki - 5 Sty 2006, 09:58
To znaczy pisząc na grupę o C/C++ miałem na myśli te języki.
korzystam z CPPUnit, ale nie jestem zadowolony. Problem z TDD i C++ polega na tym, że nie znam narzędzi które wspierałyby coś więcej niż programowanie zorientowane obiektowo, więc stosowanie tych dostępnych ogranicza Cię do OOP. Wyjściem jest ograniczenie zasięgu testów. Ponadto CPPUnit nie rozgranicza między testowanie implementacji a całego modułu - owszem jest ładna hierarchia, ale umieszczanie w niej zarówno testów wysokiego poziomu jak niskiego poziomu jest niewygodne. Jeżeli masz swobodę wyboru, może przyjrzyj się testom boost-a ?
B.
Seweryn Habdank-Wojewódzki - 5 Sty 2006, 10:34
Witam
| To znaczy pisząc na grupę o C/C++ miałem na myśli te języki. Jeżeli masz swobodę wyboru, może przyjrzyj się testom boost-a ?
Mam możliwość wyboru i podjęcia decyzji (oczywiście w obrębie projektu w którym jestem).
Testy w boost są ok i nawet bardzo ok, bo do obliczeń wystarczą "asserty", a wyniki to chyba nie ma bata, trzeba analizować ręcznie.
Pozdrawiam.
Tomek - 5 Sty 2006, 14:25
korzystam z CPPUnit, ale nie jestem zadowolony.
Sprobuj CxxUnit - nalepszy jaki uzywalem do tej pory, ale wymaga perla i troche setupu(wbrew temu co twierdzi autor w dokumentacji podlaczylem do VC2003 tak zeby automatycznie sie testowalo wszytsko a komunikaty o bledach wskazywaly na kod zrodlowy)
zbyszekz - 5 Sty 2006, 17:01
Witam | Jeśli chodzi o biblioteki wspomagające TDD, np. biblioteki do testów | jednostkowych, to najczęściej są one przeznaczone dla konkretnego języka | programowania lub środowiska (jak Java czy .NET). Nie wydaje mi się, | żeby istniał ogólny tool dla Linuksa/Uniksów.
To znaczy pisząc na grupę o C/C++ miałem na myśli te języki
Nie ma znaczenia jaki język, .
TDD to metodyka tworzenia aplikacji zakładająca stworzenie testów a następnie budowanie aplikacji tak aby te testy spełniły (maksymalne uproszczenie TDD). Metodyka nic nie mówi o tym jak testować, natomiast ważny jest moment powstania tychże, bo powstają wcześniej niż kod a ten manewr ma zapewnić że pirwszoplanowym testem będzie spełnienie wymagań użytkownika (testy powstają na bazie wymagań) a nie sprawdzenie czy aplikacja "chodzi" (bo to jest mało ważne, jeśli potrzeby użytkownika są zaspokojone).
Zbyszek Malec - 5 Sty 2006, 19:45
Zbyszek Zarzycki
Jej! Cały czas myślę że to ja :(
Zbyszek Zarzycki - 6 Sty 2006, 03:22
| Zbyszek Zarzycki
Jej! Cały czas myślę że to ja :(
A co myślałeś że jednemu psu Burek dali? ;-) Ja kiedyś myślałem że moje nazwisko nie jest zbyt popularne a tu w roddzinnej miejscowości (~30 tys. mieszkańców) z ksiązki telefonicznej dowiedziałem się że jest 5 rodzin Zarzyckich, a z żadną nie jestem spokrewniony.
Seweryn Habdank-Wojewódzki - 6 Sty 2006, 04:00
Witam
| To znaczy pisząc na grupę o C/C++ miałem na myśli te języki Nie ma znaczenia jaki język,
To znaczy w metodologii nie, ale moje pierwotne pytanie dotyczyło narzędzi, myślę, że przy wyborze narzędzia język odgrywa rolę. Może za nie długo nie, ale na razie pewnie tak.
TDD to metodyka tworzenia aplikacji zakładająca stworzenie testów a następnie budowanie aplikacji tak aby te testy spełniły (maksymalne uproszczenie TDD).
Rozumiem.
Metodyka nic nie mówi o tym jak testować, natomiast ważny jest moment powstania tychże, bo powstają wcześniej niż kod a ten manewr ma zapewnić że pirwszoplanowym testem będzie spełnienie wymagań użytkownika (testy powstają na bazie wymagań) a nie sprawdzenie czy aplikacja "chodzi" (bo to jest mało ważne, jeśli potrzeby użytkownika są zaspokojone).
Jasne. Tylko, że wymagania są opisem jakościowym zagadnienia, i testy muszą być przygotowywane na bazie specyfikacji. Potem do chodzi jakość - czy program działa czy nie, a potem w moim przypadku, ilością jest to jakie wartości program generuje.
Wyobraź sobie sytuację. Codziennie na drogach przejeżdża mnóstwo samochodów. Odnotowywujemy je w systemie. Następnie wymaganiem klienta jest to aby przewidywać jaki będzie ruch pojazdów w przyszłości np. do 1/2 godziny naprzód.
No więc zaprzęgliśmy matematykę i mamy jakieś wyniki z wykresów widać, że dobre, aplikacja się nie wiesza, działa on-line, potrafi się uczyć i takie tam. Była testowana wiele razy dla różnych danych.
Wejściami są dane o ruchu drogowym i wyjście też. Więc specyfikacja jest spełniona, nie wiesza się nie ma mem leaków itd. Wyniki z oglądu (na bazie danych historycznych) są dobre.
Teraz mamy kolejny projekt i dla celów marketingowych dobrzeby było móc
nie napiszę, że stosowano, jak nie zastosowano. Moje pytanie jest takie jak
się sugestie, które są rozsądne, tłumacze jednak oco mi dokładnie chodzi.
Pozdrawiam.
Zbyszek Zarzycki - 6 Sty 2006, 05:16
To znaczy w metodologii nie, ale moje pierwotne pytanie dotyczyło narzędzi, myślę, że przy wyborze narzędzia język odgrywa rolę. Może za nie długo nie, ale na razie pewnie tak.
Takimi narzędziami są Borland Caliber lub (cholera konkurencja ;) Mercury Test Director i dla nich język nie odgrywa roli. Polecane przez innych narzędzia do UnitTesting mają niewiele wspólnego z TDD. Testy modułowe są doskonałym narzędziem do sprawdzenia czy kod działa zgodnie ze specyfikacją kodu, ale mają niewiele wspólnego ze sprawdzeniem czy wymagania użytkownika są spełnione.
[...] Jeśli dla wymagania nie można opisać sposobu przetestowania jego spłnienia to znaczy że to nie jest wymaganie, tylko pobożne życzenie ;-)
Teraz mamy kolejny projekt i dla celów marketingowych dobrzeby było móc
nie napiszę, że stosowano, jak nie zastosowano. Moje pytanie jest takie jak
się sugestie, które są rozsądne, tłumacze jednak oco mi dokładnie chodzi.
Jeśli postępowanie jest zgodne z metodyką to jest ona używana, jeśli nie to nie. W tym konkretnym przypadku jeśli aplikacja jest budowana w celu
że zastosowano TDD.
Maciej Sobczak - 6 Sty 2006, 05:39
Teraz mamy kolejny projekt i dla celów marketingowych dobrzeby było móc
gdzie klient zapytał producenta, czy jego program to hurtownia danych. Chodziło o pewien program, który faktycznie korzystał z bazy danych, ale z hurtownią nie miało to kompletnie nic wspólnego. W tym wypadku, ani klient ani producent nie wiedzieli naprawdę co to jest hurtownia danych, ale ponieważ klient pytał (dlaczego?), to producent odpowiedział: tak, ten program jest hurtownią. I wszyscy byli zadowoleni.
ale osobiście nie uznaje kłamstwa i w projekcie nie napiszę, że stosowano, jak nie zastosowano
TDD to nie jest cel, tylko narzędzie. Podobnie, jak programowanie obiektowe. Nie oczekuj od całości, że będzie zrobione w TDD, podobnie jak nie oczekuj od całości, że będzie zrobione w OO. Można natomiast oczekiwać, że zarówno TDD jak i OO będą wykorzystane tam (i tylko tam!), gdzie może to sprawić, że produkt będzie lepszy. Hasło reklamowe, że całość jest TDD (albo OO, itd.) nie musi wcale produktowi pomóc - no, chyba że mówimy o takiej sytuacji, jak z tą hurtownią. ;)
Moje pytanie jest takie jak
Jeśli zastosowano TDD chociaż w części projektu, to napisz, że zastosowano TDD w projekcie. Będzie to prawdą tak samo, jak w stwierdzeniu, że w produkcji jakiegoś samochodu wykorzystano włókna węglowe, itd.
Zbyszek Malec - 6 Sty 2006, 06:43
A co myślałeś że jednemu psu Burek dali? ;-)
Jak już się wczytam, to wiem, że ty, to nie ja. Ale na pierwszy rzut oka mi
pamiętam! I dopiero po chwili przychodzi ulga. Teraz też myślałem że sam sobie odpowiadam ;)
Ja kiedyś myślałem że moje nazwisko nie jest zbyt popularne a tu w roddzinnej miejscowości (~30 tys. mieszkańców) z ksiązki telefonicznej dowiedziałem się że jest 5 rodzin Zarzyckich, a z żadną nie jestem spokrewniony.
To tak jak u mnie. Malców w moim mieście jak psów (albo jak mrówków, zależy skąd się pochodzi).
Pozdrawiam immiennika! :D
Bronek Kozicki - 6 Sty 2006, 06:49
| ale osobiście nie uznaje kłamstwa i w projekcie | nie napiszę, że stosowano, jak nie zastosowano TDD to nie jest cel, tylko narzędzie. Podobnie, jak programowanie obiektowe. Nie oczekuj od całości, że będzie zrobione w TDD, podobnie
... dokładnie. Nie da się zastosować TDD do wszystkiego - w szczególności nie sprawdzisz czy spełnia *zmienne* oczekiwania klienta. Do tego stosuje się metody Agile, do których TDD dobrze pasuje - o ile nie próbuje wychodzić za swoją działkę i przewidywać przyszłych wymagań. Albo testować tego czego poprawności nie można zweryfikować.
B.
Seweryn Habdank-Wojewódzki - 6 Sty 2006, 09:50
Witam
| Teraz mamy kolejny projekt i dla celów marketingowych dobrzeby było móc
gdzie klient zapytał producenta, czy jego program to hurtownia danych. Chodziło o pewien program, który faktycznie korzystał z bazy danych, ale z hurtownią nie miało to kompletnie nic wspólnego. W tym wypadku, ani klient ani producent nie wiedzieli naprawdę co to jest hurtownia danych, ale ponieważ klient pytał (dlaczego?), to producent odpowiedział: tak, ten program jest hurtownią. I wszyscy byli zadowoleni.
No co Ty myślisz o tej firmie? Kilka razy rozmawiałem z różnymi sprzedawcami nt. różnych rzeczy wykorzystanych w w sofcie (chodziło o algorytmy) i jak mi facet mówił, że wykorzystali ... (i tu przytaczał tonę magicznych trzyliterowych skrótw). A potem na pytanie gdzie to jest użyte nie chciał lub nie potrafił powiedzieć nic to olewałem, go. Czasami miało to wpływ na pewne decyzje. Po prostu jak kolesie są nie wiarygodni to nie mam ochoty z kimś takim rozmawiać. Pomyśl sobie tak przykładowo (banalny przykład). Ktoś mi mówi, że program spełnia reżim hard real-time, a spełnia np. inteligentny soft real-time albo częśiowo hard a częściowo soft, ale nie mówi mi gdzie jest soft a gdzie hard, a mi zależy na hard w jakiejś części. Więc jeśli on mi nie powie prawdy, a odkryję wadę przy okazji i już z nim nie będę rozmawiał. On zawsze się wykręci, że przecież ja nie pytałem (nie wiem czemu dziś nie można polegać na słowie drugiego człowieka), a opisy softu są zazwyczaj lakoniczne.
Ostatnio rozmawiałem z przedstawicielem matlaba i wypytalem go o szczegóły penych obliczeń on mi odpowiedział dokładnie co jest a co nie jest zrobione (z notatek na stronach matlaba to nie wynika) i wiem na co ten program stać, a na co nie. Nie zapłacę za soft, który potem wywalę do kosza, bo czegoś nie da się zrobić.
| ale osobiście nie uznaje kłamstwa i w projekcie | nie napiszę, że stosowano, jak nie zastosowano TDD to nie jest cel, tylko narzędzie.
Nie jest to cel, to jest użyty środek, tak jak to, że ktoś używa .net, czy javy. Ale niektórzy (picusie) lubią jak im się roi od XXX (magicznych trzyliterowych skrótów).
Nie oczekuj od całości, że będzie zrobione w TDD, podobnie jak nie oczekuj od całości, że będzie zrobione w OO. Można natomiast oczekiwać, że zarówno TDD jak i OO będą wykorzystane tam (i tylko tam!), gdzie może to sprawić, że produkt będzie lepszy. Hasło reklamowe, że całość jest TDD (albo OO, itd.) nie musi wcale produktowi pomóc - no, chyba że mówimy o takiej sytuacji, jak z tą hurtownią. ;)
Jasne, że nie. I wcale nie musi być wszędzie. To rozumiem. Raczej miałem na myśli sytuacje, że TDD jest pewnego rodzaju standardem. Coś jak ISO 9001 (dla kodu programów).
Jeśli zastosowano TDD chociaż w części projektu, to napisz, że zastosowano TDD w projekcie.
Nie, to napisze że moduł taki a taki (część kodu) przetestowano techikami TDD.
Pozdrawiam.
Seweryn Habdank-Wojewódzki - 6 Sty 2006, 09:55
Witam
| ale osobiście nie uznaje kłamstwa i w projekcie | nie napiszę, że stosowano, jak nie zastosowano | TDD to nie jest cel, tylko narzędzie. Podobnie, jak programowanie | obiektowe. Nie oczekuj od całości, że będzie zrobione w TDD, podobnie
... dokładnie. Nie da się zastosować TDD do wszystkiego - w
To dobrze.
szczególności nie sprawdzisz czy spełnia *zmienne* oczekiwania klienta.
Tym lepiej, bo często wymagania klientów zmieniają się w czasie pisania kodu, jak im coś się spodoba.
Do tego stosuje się metody Agile, do których TDD dobrze pasuje - o ile nie próbuje wychodzić za swoją działkę i przewidywać przyszłych wymagań.
Jasne. No to mnie uspokoiłeś. To TDD nie jest, żadnym standardem, jest tylko pewną formą podejścia do testów.
Pozdrawiam.
zbyszekz - 6 Sty 2006, 12:32
\
| Jeśli zastosowano TDD chociaż w części projektu, to napisz, że | zastosowano TDD w projekcie. Nie, to napisze że moduł taki a taki (część kodu) przetestowano techikami TDD.
Dla nieznających się nie będzie istotne, a dla fachowców z daleka pachnie kantem. Nie ma technik testowania TDD, TDD to metodyka tworzenia projektu.
Seweryn Habdank-Wojewódzki - 6 Sty 2006, 15:00
Witam
Dla nieznających się nie będzie istotne, a dla fachowców z daleka pachnie kantem. Nie ma technik testowania TDD, TDD to metodyka tworzenia projektu.
Aha. Na sieci znalazłem coś takiego: "znajomość technik Test Driven Development" jako wymaganie na stanowisko pracy.
Czemu TDD jest metodyką tworzenia projektu jeśli ona służy testowaniu? Nie kapuje co ma tworzenie z testowaniem wspólnego przy takim poziomie abstrakcji o jakim tu mówimy. Pytam bo po prostu nie wiem.
Pozdrawiam.
zbyszekz - 6 Sty 2006, 15:18
Witam | Dla nieznających się nie będzie istotne, a dla fachowców z daleka pachnie | kantem. | Nie ma technik testowania TDD, TDD to metodyka tworzenia projektu.
Aha. Na sieci znalazłem coś takiego: "znajomość technik Test Driven Development" jako wymaganie na stanowisko pracy.
Czemu TDD jest metodyką tworzenia projektu jeśli ona służy testowaniu? Nie kapuje co ma tworzenie z testowaniem wspólnego przy takim poziomie abstrakcji o jakim tu mówimy. Pytam bo po prostu nie wiem.
Jak sama nazwa wskazuje Test Driven Development (Budowa kierowana testami) TDD sluży budowie (głównie aplikacji) a testowanie jest motorem obrotu kolejnych faz tworzenia aplikacji. Tak więc to testowanie służy metodyce TDD a nie odwrotnie. Technik w TDD jest więcej niż tylko testowanie, zaczyna się od wydobywania wymagań (elicitation) a kończy na pozyskiwaniu opinii użytkownika o gotowym produkcie. TDD jest jedną z bardziej formalnych metodyk z rodziny Extreme Programing (powstała z resztą wcześniej niż XP).
Marcin 'Qrczak' Kowalczyk - 6 Sty 2006, 15:35
Czemu TDD jest metodyką tworzenia projektu jeśli ona służy testowaniu?
http://en.wikipedia.org/wiki/Test-driven_development http://www.google.com/search?q=test+driven+development
Seweryn Habdank-Wojewódzki - 6 Sty 2006, 17:01
Witam
| Czemu TDD jest metodyką tworzenia projektu jeśli ona służy testowaniu?
http://en.wikipedia.org/wiki/Test-driven_development http://www.google.com/search?q=test+driven+development
To czytałem, ale widać słabo kapowałem o co dokładnie chodzi. Teraz już mi powoli świta taki TQM w programowaniu.
Mam zatem jeszcze pytanie. W czym zatem tkwi problem?
Pozdrawiam.
zbyszekz - 6 Sty 2006, 17:48
To czytałem, ale widać słabo kapowałem o co dokładnie chodzi. Teraz już mi powoli świta taki TQM w programowaniu. Mam zatem jeszcze pytanie. W czym zatem tkwi problem?
Ty nam powiedz, to Twój problem.
Seweryn Habdank-Wojewódzki - 7 Sty 2006, 06:55
Witam
| To czytałem, ale widać słabo kapowałem o co dokładnie chodzi. Teraz już mi | powoli świta taki TQM w programowaniu. | Mam zatem jeszcze pytanie. W czym zatem tkwi problem?
Ty nam powiedz, to Twój problem.
A może gdzieś sa przykłady raportów z takich testów, czy w ogóle jakiś opis jak się do tego zabrać profesjonalnie?
Pozdrawiam.
zbyszekz - 7 Sty 2006, 09:37
A może gdzieś sa przykłady raportów z takich testów, czy w ogóle jakiś opis jak się do tego zabrać profesjonalnie?
Czegoś Ty się uczepił tych testów? To nie jest Devlopment Driven Test tylko odwrotnie.
Chcesz przyklad prosze bardzo:
1.3.2 Średni czas obslugi klienta musi być krószy niż 3 min. Test: Próba: 332 os. Czas min.: 18 sek Czas max: 732 sek. Czas średni: 154 sek. Test passed.
Spam z Borland? Konferencja Borland Developer Days 2004...
(OT) TEST
Test kompetencyjene z C/C++
Test kompilatora
riw blackdeath filmik
budowa narzB1dF3w rodnych schemat
panasonic dmr eh57
citroen polska lubin
www lordoscom pl
test z botaniki
obwod zhr
futra tu typuj na 28 2 2003 piatek
odrobaczywienie yorka
Kolekcja tematów z for internetowych ^^ Strona Główna
|
|