eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPytanie do fanow Test Driven Design i XP
Ilość wypowiedzi w tym wątku: 62

  • 1. Data: 2011-12-21 10:51:39
    Temat: Pytanie do fanow Test Driven Design i XP
    Od: Roman W <b...@g...pl>

    Na grupie padaly stwierdzenia, ze wymagania wobec programu mozna opisac w formie
    testow.

    Zalozmy, ze mamy zaimplementowac funkcje (na przykladzie C++)

    double calculate_stuff(const std::vector<double>& data);

    z warunkiem "ma sie wykonywac w czasie liniowym w rozmiarze wektora data".

    Jak napisac test, ktory sprawdza czy ten wymog jest spelniony?

    RW


  • 2. Data: 2011-12-21 11:37:22
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Paweł Kierski <n...@p...net>

    W dniu 2011-12-21 11:51, Roman W pisze:
    > Na grupie padaly stwierdzenia, ze wymagania wobec programu mozna opisac w formie
    testow.
    >
    > Zalozmy, ze mamy zaimplementowac funkcje (na przykladzie C++)
    >
    > double calculate_stuff(const std::vector<double>& data);
    >
    > z warunkiem "ma sie wykonywac w czasie liniowym w rozmiarze wektora data".
    >
    > Jak napisac test, ktory sprawdza czy ten wymog jest spelniony?

    Mierzysz czas dla dwóch-trzech wielkości wektora i sprawdzasz
    (asercją), czy czasy spełniają warunek liniowości. Np. test dla 10
    i 1000 elementów - jeśli test dla 1000 wykonuje się ok 100 razy dłużej
    niż dla 10, to OK. Jeśli 10000 razy dłużej, to masz n^2. Do tego
    niektóre frameworki mają możliwość ograniczeń czasowych na testy -
    pomocne, gdy implementacja jest jednak n^2 i miałaby się zakończyć
    za kwadrans, zamiast za kilkanaście sekund. Timeout na minutę oznacza,
    że coś na pewno jest źle.

    --
    Paweł Kierski
    n...@p...net


  • 3. Data: 2011-12-21 12:05:12
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Roman W <b...@g...pl>

    On Wednesday, December 21, 2011 11:37:22 AM UTC, Paweł Kierski wrote:
    > Mierzysz czas dla dwóch-trzech wielkości wektora i sprawdzasz
    > (asercją), czy czasy spełniają warunek liniowości. Np. test dla 10
    > i 1000 elementów - jeśli test dla 1000 wykonuje się ok 100 razy dłużej
    > niż dla 10, to OK. Jeśli 10000 razy dłużej, to masz n^2. Do tego

    Co jezeli uzyty algorytm jest mniej-wiecej liniowy dla N <= 1000, ale kwadratowy dla
    N > 2000?

    RW


  • 4. Data: 2011-12-21 12:14:13
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Paweł Kierski <n...@p...net>

    W dniu 2011-12-21 13:05, Roman W pisze:
    > On Wednesday, December 21, 2011 11:37:22 AM UTC, Paweł Kierski wrote:
    >> Mierzysz czas dla dwóch-trzech wielkości wektora i sprawdzasz
    >> (asercją), czy czasy spełniają warunek liniowości. Np. test dla 10
    >> i 1000 elementów - jeśli test dla 1000 wykonuje się ok 100 razy dłużej
    >> niż dla 10, to OK. Jeśli 10000 razy dłużej, to masz n^2. Do tego
    >
    > Co jezeli uzyty algorytm jest mniej-wiecej liniowy dla N<= 1000, ale kwadratowy dla
    N> 2000?

    Sprawdzać dla wartości, dla jakich się spodziewasz i dla jakich
    liniowość ma dla Ciebie znaczenie.

    --
    Paweł Kierski
    n...@p...net


  • 5. Data: 2011-12-21 13:29:18
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Roman W <b...@g...pl>

    On Wednesday, December 21, 2011 12:14:13 PM UTC, Paweł Kierski wrote:
    > Sprawdzać dla wartości, dla jakich się spodziewasz i dla jakich
    > liniowość ma dla Ciebie znaczenie.

    Zalozmy, ze spodziewam sie ze w produkcji N = 10^6 i test wtedy bedzie sie wykonywal
    godzine. Czy wtedy dokumentacja wymagan w postaci testu tez jest dobrym rozwiazaniem?

    RW


  • 6. Data: 2011-12-21 14:07:09
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Paweł Kierski <n...@p...net>

    W dniu 2011-12-21 14:29, Roman W pisze:
    > On Wednesday, December 21, 2011 12:14:13 PM UTC, Paweł Kierski wrote:
    >> Sprawdzać dla wartości, dla jakich się spodziewasz i dla jakich
    >> liniowość ma dla Ciebie znaczenie.
    >
    > Zalozmy, ze spodziewam sie ze w produkcji N = 10^6 i test wtedy bedzie sie
    wykonywal godzine. Czy wtedy dokumentacja wymagan w postaci testu tez jest dobrym
    rozwiazaniem?

    Na post-commit taki test się nie nadaje, ale w nocy masz z reguły kilka
    godzin do dyspozycji. W skrajnym przypadku można tego rodzaju testy
    zapuszczać tylko wtedy, kiedy to naprawdę niezbędne - np. przed
    wdrażaniem wersji na produkcję. Pozostaje też kwestia różnic
    w wydajności maszyn produkcyjnych i testowych/buildowych (jak ustawić
    górne ograniczenie czasu wykonania testu).

    --
    Paweł Kierski
    n...@p...net


  • 7. Data: 2011-12-21 14:11:55
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Roman W <b...@g...pl>

    On Wednesday, December 21, 2011 2:07:09 PM UTC, Paweł Kierski wrote:
    > Na post-commit taki test się nie nadaje, ale w nocy masz z reguły kilka
    > godzin do dyspozycji. W skrajnym przypadku można tego rodzaju testy
    > zapuszczać tylko wtedy, kiedy to naprawdę niezbędne - np. przed
    > wdrażaniem wersji na produkcję. Pozostaje też kwestia różnic
    > w wydajności maszyn produkcyjnych i testowych/buildowych (jak ustawić
    > górne ograniczenie czasu wykonania testu).

    Do czego zmierzam: ze jezeli wymaganiem jest *formalna gwarancja* ze procedura
    implementuje algorytm wykonujacy sie w czasie liniowym, to zaden test tego adekwatnie
    nie dokumentuje. Tylko zwykla dokumentacja moze to, well, udokumentowac.

    IMHO testowanie implementacji != dokumentacja wymagan i mieszanie tych rzeczy jest
    bledem.

    RW


  • 8. Data: 2011-12-21 14:27:31
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: A.L. <l...@a...com>

    On Wed, 21 Dec 2011 12:37:22 +0100, Pawe? Kierski <n...@p...net>
    wrote:

    >W dniu 2011-12-21 11:51, Roman W pisze:
    >> Na grupie padaly stwierdzenia, ze wymagania wobec programu mozna opisac w formie
    testow.
    >>
    >> Zalozmy, ze mamy zaimplementowac funkcje (na przykladzie C++)
    >>
    >> double calculate_stuff(const std::vector<double>& data);
    >>
    >> z warunkiem "ma sie wykonywac w czasie liniowym w rozmiarze wektora data".
    >>
    >> Jak napisac test, ktory sprawdza czy ten wymog jest spelniony?
    >
    >Mierzysz czas dla dwóch-trzech wielkości wektora i sprawdzasz
    >(asercją), czy czasy spełniają warunek liniowości. Np. test dla 10
    >i 1000 elementów - jeśli test dla 1000 wykonuje się ok 100 razy dłużej
    >niż dla 10, to OK. Jeśli 10000 razy dłużej, to masz n^2. Do tego
    >niektóre frameworki mają możliwość ograniczeń czasowych na testy -
    >pomocne, gdy implementacja jest jednak n^2 i miałaby się zakończyć
    >za kwadrans, zamiast za kilkanaście sekund. Timeout na minutę oznacza,
    >że coś na pewno jest źle.

    Echem... Akurat... Metoda Simplex jak wiadomo ma zlozonosc
    wykladnicza, a wszystkie testy pokazuja ze wielomianowa. Zeby dostac
    naprawde zlozonosc wykladnicza tzreba skonstruowac specjalny prtzyklad
    co nastapilo cos w 30 lat po sformulowaniu metody.

    Niestety, zlozonosci nei da sie testowac "na przykaldach" a "test
    driven development" wymyslono po cos supelnie innego

    A.L.


  • 9. Data: 2011-12-21 14:39:33
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Roman W <b...@g...pl>

    On Wednesday, December 21, 2011 2:27:31 PM UTC, A. L. wrote:
    > Echem... Akurat... Metoda Simplex jak wiadomo ma zlozonosc
    > wykladnicza, a wszystkie testy pokazuja ze wielomianowa. Zeby dostac
    > naprawde zlozonosc wykladnicza tzreba skonstruowac specjalny prtzyklad
    > co nastapilo cos w 30 lat po sformulowaniu metody.

    Dla skonczonej liczby punktow funkcje wykladnicza zawsze da sie dofitowac
    wielomianem, wiec takie testy moga byc tylko i wylacznie heurystyczne.

    RW


  • 10. Data: 2011-12-21 15:26:49
    Temat: Re: Pytanie do fanow Test Driven Design i XP
    Od: Maciej Sobczak <s...@g...com>

    On Dec 21, 11:51 am, Roman W <b...@g...pl> wrote:
    > Na grupie padaly stwierdzenia, ze wymagania wobec programu mozna opisac w formie
    testow.
    >
    > Zalozmy, ze mamy zaimplementowac funkcje (na przykladzie C++)
    >
    > double calculate_stuff(const std::vector<double>& data);
    >
    > z warunkiem "ma sie wykonywac w czasie liniowym w rozmiarze wektora data".
    >
    > Jak napisac test, ktory sprawdza czy ten wymog jest spelniony?

    Nie pisać.
    To jest jedna z tych rzeczy, którą łatwiej zrobić, niż sprawdzić
    (podobnie, jak wspomniany pogłos z filharmonii w Koluszkach).
    Pamiętajmy, że tworzenie testów też kosztuje, o czym zwolennicy TDD
    często zapominają.

    Przy okazji, powstaje również problem, jak sprawdzić, że test sprawdza
    to co miał sprawdzać? Bo koszt testów nie sprowadza się tylko do ich
    objętości, ale również do zrozumienia, jak zrobić test. Kto sprawdzi
    test?
    I w ogóle to dlaczego pisanie testów, których objętość może
    przekroczyć właściwy projekt (co TDDowcy przyznają) nie odbywa się
    według tej samej metody, która niby jest dobra do wszystkiego? Tzn.
    dlaczego testów nie pisze się według TDD? :-)

    Oprócz złożoności liniowej i pogłosu w filharmonii w Koluszkach,
    takich przykładów jest znacznie więcej. Np. mamy napisać generator
    liczb losowych o zadanym rozkładzie - jak to sprawdzić przez TDD?
    Tutaj również łatwiej jest to zrobić poprawnie przez właściwą
    konstrukcję, niż stworzyć poprawny test.

    Takich przykładów może być nieskończenie wiele, a to oznacza, że jest
    nieskończenie wiele projektów, dla których TDD jest niewłaściwym
    podejściem.
    Niespodzianka? Ani trochę.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com

strony : [ 1 ] . 2 ... 7


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: