-
Data: 2011-12-18 01:36:16
Temat: Re: Porównanie różnych języków
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 17/12/2011 20:02, Roman W wrote:
> On Dec 17, 7:12 pm, Andrzej Jarzabek<a...@g...com>
> wrote:
>>
>>> A co jest rezultatem tej rozmowy? Notatki pisane olowkiem na serwetce,
>>> watem mailowy w firmowym Outlooku, czy cos bardziej
>>> ustrukturyzowanego?
>>
>> Przede wszystkim rezultatem tej rozmowy jest to, że programista wie, co
>> jest prawidłowym zachowaniem budowanego systemu.
>
> Systemu jako calosci? Czyli jednak dokumentacja.
Systemu jako całości lub danego kawałka. Wiedza to nie jest to samo, co
dokumentacja.
>> Jeśli chodzi o
>> artefakty, to może to być "user story" (czy inny "change control ticket)
>> - jeśli objaśnienie się kwalifikuje, będzie to prawdopodobnie jeden lub
>> kilka testów (acceptance test, unit tests),
>
> Ale to opisuje wycinek systemu.
Łącznie wszystkie te opisy opisują cały system. Tak samo jak z
dokumentacją wymagań zresztą: składa się zwykle z jakichś rozdziałów,
które opisują wycinki systemu.
>> no i przede wszystkim będzie
>> to działający kod, który robi właśnie to, co trzeba.
>
> Nie, bedzie to kod przechodzacy kilka testow. To nie to samo.
Jednak nie tylko przechodzący kilka testów, bo jego forma się bierze
stąd, że programista _rozumie_ co program ma robić, a nie z tego, że
widział kod testów i dostaje zadanie napisania kodu je przechodzącego.
To, że 100% gwarancji na poprawność kodu nie ma, to osobna sprawa -
dokumentacja też przecież takiej gwarancji nie daje.
>>> Czy uwazasz, ze 100% funkcjonalnosci mozna udokumentowac w formie
>>> testu?
>>
>> Nawet jeśli można udokumentować 99%, to praktycznie różnica jest niewielka.
>
> Czyli uwazasz, ze osiagalne jest "99%" (czyli prawie kompletny opis)?
> Tak/nie.
Ostrożnie powiem, że to zależy od dziedziny, a ja się na wielu
dziedzinach nie znam. Ale na ogół uważam, że tak właśnie jest - między
odpowiednio ekspresywnie napisanymi testami a odpowiednio ekspresywnie
napisanym kodem da się wyrazić to, co zazwyczaj się wyraża w
dokumentacji - równie dobrze jak w dokumentacji.
>>> Zalozmy, ze projekt zawiera biblioteke numeryczna. Czy wystarczy
>>> "acceptance test", czy nie nalezy rowniez udokumentowac algorytmow,
>>> ktore biblioteka ma implementowac?
>>
>> Nie wiem konkretnie jak jest z bibliotekami numerycznymi.
>
> Jest tak, ze nie wystarczy wiedziec, ze biblioteka przechodzi X
> testow, zeby ocenic, czy design jest poprawny czy nie. Testy moga
> sprawdzic skonczona liczbe przypadkow, ale wymagania stawiane
> bibliotekom numerycznym jest ciezko zawrzec calkowicie w formie
> testow.
> Np. wymaganie moze brzmiec "procedura X ma implementowac algorytm
> calkujacy Grubiediewa". Jak to sprawdzisz unit testem?
Po pierwsze - tak w ogóle - testy to nie tylko unit testy.
Po drugie w innych działkach, i przypuszczam, że tutaj tak samo, wybór
algorytmu wynika z pewnym właściwości całkowania tym algorytmem, które
są rzeczywistym wymaganiem. I te właściwości można jak najbardziej testować.
Poza sprawdzeniem obserwowalnych właściwości zachowania programu,
istotne właściwości implementacji zamiast zapisywać w dokumentacji można
często zapisać w kodzie. Trochę żartobliwie mogę powiedzieć, że to, co
napisałeś da się zapisać tak:
double X (args) {
return calkujAlgortymemGrubiediewa(args);
}
>> Jeśli chodzi o
>> to, że wykorzystujesz jakieś algorytmy z literatury i chcesz
>> udokumentować fakt, że stosujesz algorytm Kamionnego-Łomonosowa z
>> artykułu "Zastosowanie metod numerycznych przy wykopywaniu ziemniaków"
>> publikowanego w miesięczniku Kołchoźnik nr 8/51? No to może faktycznie
>> należy dać przypis w komentarzu.
>
> A jesli algorytm nie zostal nigdzie opublikowany?
To co napiszesz w dokumencie? Że funkcja całkuje algorytmem, który nie
został nigdzie opublikowany? Takie coś to można napisać w komentarzu.
Jeśli chodzi o opis działania samego algorytmu, to programiści dysponują
znakomitym narzędziem właśnie do tego, jakim są wysokopoziomowe języki
programowania.
Oczywiście jeśli masz taką sytuację, że wymyślasz własny algorytm i
musisz np. formalnie udowodnić jego poprawność, to może i najlepiej to
zrobić w postaci dokumentu. Ale jak często zdarzają się tak naprawdę
takie sytuacje?
>>> A jezeli zmieni dzialanie programu w aspekcie nie objetym testami?
>>
>> To dobrze, że przynajmniej zdaje sobie sprawę, że zmieni.
>
> Skad ma zdawac sobie sprawe? Przeciez nie ma dokumentacji, moze uznac,
> ze zmiana w kodzie nie zmieni istotnych aspektow dzialania programu,
> bo... unit testy przechodza.
Po pierwsze może się po prostu wziąć z analizy "jakie będą konsekwencje
jeśli zmienię program w ten sposób". Jeśli programiście mylnie się
wydaje, że zachowanie programu się nie zmieni, to dokumentacja w niczym
tu nie pomoże. Jeśli programista jest w stanie stwierdzić, że zachowanie
programu się zmieni, to powinien być też w stanie stwierdzić, że nie ma
testów testujących aspekt który się zmieni, więc jest w stanie uruchomić
całą procedurę "dlaczego nie ma na to testów".
Po drugie tak w ogóle ten scenariusz nie różni się za bardzo od
sytuacji, kiedy zmiany wprowadzone przez programistę powodują zmianę
działania programu w aspekcie nie objętym dokumentacją.
>> sytuacji, skoro aspekt nie jest objęty testami, to prawdopowodnie należy
>> go objąć testami. No chyba że OSCR powie, że ten aspekt jest nieistotny,
>> to wtedy nie ma problemu.
>
> Ale skad programista ma *wiedziec*, ze zmiana ktora chce wprowadzic w
> kodzie jest istotna i powinna byc skonsultowana z OSCR, skoro nie ma
> dokumentacji? Ma trzymac OSCR non-stop przy sobie? A jesli nad
> projektem pracuje wiecej niz 1 programista, to ile osob ze strony
> klienta ma je nadzorowac?
Zakłada się, że programista ma jakąś inteligencję i powinien na
podstawie rozmów z OSCR nabyć wiedzy i rozumienia na temat tego, jak
program ma działać i dlaczego właśnie tak.
Poza tym dąży się do tego, żeby zmiany funkcjonalne praktycznie zawsze
były objęte istniejącymi testami. Jeśli coś nie jest objęte testem, a
może być istotne, to się testy dodaje i potem one już są.
Następne wpisy z tego wątku
- 18.12.11 01:46 Andrzej Jarzabek
- 18.12.11 02:16 Roman W
- 18.12.11 02:24 Roman W
- 18.12.11 02:25 Roman W
- 18.12.11 02:58 A.L.
- 18.12.11 02:59 A.L.
- 18.12.11 10:27 Andrzej Jarzabek
- 18.12.11 10:41 Andrzej Jarzabek
- 18.12.11 10:50 Andrzej Jarzabek
- 18.12.11 11:04 Andrzej Jarzabek
- 18.12.11 11:45 Roman W
- 18.12.11 11:44 Roman W
- 18.12.11 11:52 Andrzej Jarzabek
- 18.12.11 12:14 Andrzej Jarzabek
- 18.12.11 12:18 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-11 Motodziennik #305 Nowy ELEKTRYK za 350 złotych miesięcznie? Kreatywne kredytowanie problemów
- 2024-12-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-11 Katowice => Key Account Manager (ERP) <=
- 2024-12-11 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-11 Idzie zima...czyli zaczynamy TETRIS :)
- 2024-12-11 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe
- 2024-12-11 Warszawa => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-12-11 Warszawa => Full Stack .Net Engineer <=
- 2024-12-11 Dyski HDD SATA 2,5'' >2TB
- 2024-12-11 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2024-12-11 Warszawa => System Architect (Java background) <=
- 2024-12-11 Warszawa => System Architect (background deweloperski w Java) <=
- 2024-12-10 sprężyny przednie ściśnięte
- 2024-12-10 Warszawa => SEO Specialist (15-20h tygodniowo) <=
- 2024-12-10 Warszawa => Senior Frontend Developer (React + React Native) <=