Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
co do kompetencji to, wszędzie tam gdzie developer będzie wybierany po analizie, niestety ja ją muszę zakładać bo to obecnie kluczowe ryzyko projektu. Co do złego analityka, programista jest tu bezbronny...
Więc tym bardziej potrzebujesz mierzalnych kryteriów oceny jakości kodu i względne oceny "tanich/drogich" nieznanych rozszerzeń z jakością nie mają nic wspólnego.

Ale miarą "zrozumiałą" dla biznesu są koszty: wytworzenia (zakupu), utrzymania i rozwoju. W przypadku samochodu jedynym kryterium oceny jakości konstrukcji dla "zwykłego człowieka" są koszt utrzymania i serwisowania, problem w tym, że taką wiedzę porównawczą mają np. firmy zarządzające flotą setek samochodów, nie ma tej wiedzy praktycznie żaden nabywca jednego czy dwóch samochodów: dlatego wielu ludzi stale będzie kupowało buble, na czym korzystają dostawcy bubli, ten sam mechanizm działa w IT :)

konto usunięte

Temat: Jakość kodu

Nie chodzi mi o magię, lecz raczej o funkcjonowanie człowieka w grupie, w zespole. Wiemy, że natura nie znosi próżni, a zdrowy rozsądek podpowiada, że tam gdzie nie ma jasnych reguł, tam pojawia się kombinowanie, kwadratura koła i wyważanie otwartych drzwi, zamiast myślenia o robocie do zrobienia ;)

I czasem to kombinowanie staje się zasadą. To własnie mam na myśli.
Wiesz, jeśli tylko z tego kombinowania przychodzi jakiś pożytek, jakaś nowa jakość - to ok.
W każdym innym przypadku to strata czasu.

Kombinowanie źle się kojarzy.
Powiedzmy sobie szczerze - dobre zasady nie biorą się ze "zgadywania".
Dla przykładu - TDD :-) . Podobno stosowanie TDD (nikt o tym nie wspomniał od jakiegoś czasu) gwarantuje "dobrą jakość" kodu...
Taaaak?
Wreszcie nie trzeba myśleć i umieć?

Wreszcie nie trzeba :)
Nawiązując do TDD jakość bierze się z :

1. Przed implementacją funkcjonalności, należy napisać jej test
2. Sprawdzić, czy test nie przechodzi (dla niezaimplementowanej [sic!] funkcjonalności)
3. Napisać kod który przechodzi test (nie ma słowa o zaimplementowaniu funkcjonalności)
4. Jeśli test przechodzi - należy zmienić kod tak, żeby był "ładny" (bo jak coś działa to należy to zmienić)

Te zasady gwarantują dobrą jakość kodu i produktu ...

http://en.wikipedia.org/wiki/Test-driven_development

W przypadku TDD myślenie jest zakazane; zasady są zbyt absurdalne żeby normalnie myślący człowiek mógł je zaakceptować.
To troszkę tak, jakby rozważać, który język jest lepszy: angielski czy niemiecki ;) Odpowiedź jest jedna: ten, którym mówi większość :)

Większość stosuje TDD / Agile :-)
Nijak się to ma do standardów kodowania, Jakub ;)
Ja miałem na myśli ten aspekt.

A ja miałem na myśli to, że standardy na prawdę mogą być "z sufitu".
Należy docenić (i zabezpieczyć się przed) kreatywność ludzi którzy nie mają o niczym pojęcia.
Np. czy otwierający nawias klamrowy dajemy w tej samej linii, co nazwa metody, czy w kolejnej? czy stosujemy nazwy w konwencji pascal/camel, czy rozdzielamy człony nazwy podkreśleniem? czy operatory otaczamy spacjami z obu stron, czy nie?

To się nazywa konwencja. I mogę podać przykłady na to, że nawet to można ustalić głupio.
czy stosujemy zagnieżdżone dziedziczenie, czy nie? czy uciekamy od klas statycznych, czy wręcz przeciwnie?

A to jest już architektura.
Piotrze, jeśli w tym temacie nie miałeś styczności z głupotą to mogę tylko zazdrościć.
O tym myślałem mówiąc, że standardy nie mają znaczenia - ważne jest jedynie ich ustalenie w podobnych aspektach, a sama treść tych ustaleń ma znaczenie bardzo wtórne, bo i tak wszystko da się zrobić na 1001 sposobów, z których większość jest wystarczająco dobra.

Przypomnę: copy paste (kiedy wspomniałeś o tym za pierwszym razem jeszcze nie wiedziałem o co chodzi) to też pewna zasada :)
A jeśli jakieś zasady wśród tych zasad są rzeczywiście idiotyczne i po prostu przeszkadzają, to w zdrowej organizacji zaczną być po prostu omijane tak, żeby nie łamać pozostałych zasad, i po prostu z czasem umrą.

Nie prawda. Po pierwsze mało kto wie które zasady są idiotyczne a które nie.
Nie prawda :) Tak źle będzie tylko wtedy, jeśli będziesz pracował ze stadem baranów - a w tym przypadku nic nie pomoże, i tak wyjdzie śmigło.

Powiedzmy że śmigło wychodzi w pewnych firmach od wielu lat i wszyscy traktują to jako pewien standard.
Żeby wiedzieć, co jest "dobre" / "złe" trzeba mieć jakiś punkt odniesienia...
Większość ludzi na prawdę uważa, że dobre pomysły biorą się z gapienia się w sufit.
Być może to prawda. Mi np. najlepsze pomysły wpadają do głowy podczas jazdy samochodem.

Mi to pachnie nową metodyką realizacji projektów IT ;)
A tak na serio - niektórym wystarczy 2-3 sekundowa obserwacja sufitu... tak, to jest sarkazm.
Ludzie, dzięki swojemu "lenistwu" (czytaj: dążeniu do mniejszego męczenia się), w takich sytuacjach naprawdę potrafią być zadziwiająco kreatywni :)

A tam jest całe stado ludzi "pracowitych" .....
Ależ nie. Lenie wymyślają sposoby ułatwiania sobie robienia różnych rzeczy, żeby móc się dalej lenić :)

Podziwiam wiarę w ludzkość i zazdroszczę doświadczeń.,
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
Ale miarą "zrozumiałą" dla biznesu są koszty: wytworzenia (zakupu), utrzymania i rozwoju. W przypadku samochodu jedynym kryterium oceny jakości konstrukcji dla "zwykłego człowieka" są koszt utrzymania i serwisowania, problem w tym, że taką wiedzę porównawczą mają np. firmy zarządzające flotą setek samochodów, nie ma tej wiedzy praktycznie żaden nabywca jednego czy dwóch samochodów: dlatego wielu ludzi stale będzie kupowało buble, na czym korzystają dostawcy bubli, ten sam mechanizm działa w IT :)
Nie trafione porównanie. Samochody są produkcją wielkoseryjną i inaczej bada się ich jakość. Nikt też nie próbuje nazywać jakością gwarancji producenta, że dołożenie 50KM kosztuje x - a to właśnie próbujesz robić.
Jakość jest wielowymiarową funkcją, którą wyznacza się adekwatnie do oczekiwać odbiorcy pomiaru. Cena rozszerzenia z jakością nie ma nic wspólnego.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Jarosław Ż.:
Ale miarą "zrozumiałą" dla biznesu są koszty: wytworzenia (zakupu), utrzymania i rozwoju. W przypadku samochodu jedynym kryterium oceny jakości konstrukcji dla "zwykłego człowieka" są koszt utrzymania i serwisowania, problem w tym, że taką wiedzę porównawczą mają np. firmy zarządzające flotą setek samochodów, nie ma tej wiedzy praktycznie żaden nabywca jednego czy dwóch samochodów: dlatego wielu ludzi stale będzie kupowało buble, na czym korzystają dostawcy bubli, ten sam mechanizm działa w IT :)
Nie trafione porównanie. Samochody są produkcją wielkoseryjną i inaczej bada się ich jakość.

No to weź ręcznie robionego Rolsa :)
Jakość jest wielowymiarową funkcją, którą wyznacza się adekwatnie do oczekiwać odbiorcy pomiaru. Cena rozszerzenia z jakością nie ma nic wspólnego.

ja lubię tę definicję: jakością jest to co klient uznaje za jakość bo to jego wymaganie ma być spełnione ;)

ja rozumiem (chyba) co masz na myśli i "mentalnie" się z Tobą zgadzam, ale chcę zwrócić uwagę na to, co widzą "wasi" klienci :) bo ja tego wysłuchuje co dziennie ;) i uważam, że:

"jakość produktu to stopień spełnienia wymagań"
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
"jakość produktu to stopień spełnienia wymagań"
Oczywiście. Problem polega na tym, żeby stawiać również wymagania na kod. Tak jak stawiasz wymagania na funkcjonalność. Przykładowe wymagania (to się testuje samo)
minimum 95% pokrycia kodu testkami jednostkowymi
maximum 20% metod publicznych
100% atrybutów prywatnych
minimum 95% dto immutable
a takie sprawdza się na code review
Czy spełnia SOLID?
Czy spełnia GRASP?
Czy jest zgodna z architekturą?
Czy kod jest czytelny (wcięcia, zmienne, komentarze)?
Czy poprawnie obsługuje wyjątki? (częste błędy reakcja na callbackach tylko na sukces)
Nigdy nie dowiesz się tyle o jakości kodu, kiedy w niego zajrzysz. Jak nie umiesz sam to skorzystaj z opinii kogoś kto potrafi i odpowie Ci np. weryfikując powyższe i inne podobne aspekty - czy kod jest wysokiej czy niskiej jakości.
Tak kod wysokiej jak niskiej jakości może być tani lub drogi w utrzymaniu. Pytanie ile będzie kosztowała zmiana jak kod przejmie ktoś, kto go nie pisał... a wskazówki w tym zakresie nie da Ci nic poza - ANALIZĄ KODU WŁAŚNIE!
I'm out.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Jarosław Ż.:
"jakość produktu to stopień spełnienia wymagań"
Oczywiście. Problem polega na tym, żeby stawiać również wymagania na kod. Tak jak stawiasz wymagania na funkcjonalność.

Aaaaa, to może rozdzielmy wewnętrzna ocenę jakości u developera i jakość tego co dostarcza klientom :)??
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
Mateusz K.:
Jarosław Ż.:
"jakość produktu to stopień spełnienia wymagań"
Oczywiście. Problem polega na tym, żeby stawiać również wymagania na kod. Tak jak stawiasz wymagania na funkcjonalność.

Aaaaa, to może rozdzielmy wewnętrzna ocenę jakości u developera i jakość tego co dostarcza klientom :)??
Ja to rozdzielam. Problem polega na tym, że ty chcesz, ebym ja dostarczył kod. Jak chcesz wiedzieć, że dostarczyłem dobry kod to musisz badać jakość kodu.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Aaaaa, to może rozdzielmy wewnętrzna ocenę jakości u developera i jakość tego co dostarcza klientom :)??
Ja to rozdzielam. Problem polega na tym, że ty chcesz, ebym ja dostarczył kod. Jak chcesz wiedzieć, że dostarczyłem dobry kod to musisz badać jakość kodu.

OK, no to wyjaśniamy :), ja nie chce od Ciebie "kodu" w sensie "czytam kod", ja chce aplikacje ale problem tu polega na tym, że jakość aplikacja jest pochodna jakości kodu.

Ja chcą dostać schabowego ale także chce by to mięso było świeże i "wysokiej jakości" dlaczego? Bo nie chce "rzygać" następnego dnia ;) (czyli po wyjściu z knajpy).
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
Mateusz K.:
Aaaaa, to może rozdzielmy wewnętrzna ocenę jakości u developera i jakość tego co dostarcza klientom :)??
Ja to rozdzielam. Problem polega na tym, że ty chcesz, ebym ja dostarczył kod. Jak chcesz wiedzieć, że dostarczyłem dobry kod to musisz badać jakość kodu.

OK, no to wyjaśniamy :), ja nie chce od Ciebie "kodu" w sensie "czytam kod", ja chce aplikacje ale problem tu polega na tym, że jakość aplikacja jest pochodna jakości kodu.
Więc musisz mierzyć jakość kodu a nie tylko to na ile działanie aplikacji odpowiada postawionym wymaganium. Ja na Twoim miejscu postawiłbym wymagania statyczne i dynamiczne na kod. Dorzuciłbym do kosztów usługi 3-4 dni konsultacyjne dobrego architekta (programisty) na code review i ocene kodu + postawił sobie narzędzia przez które ten kod przepuścisz i dostaniesz wyniki analizy z automatu. Na koniec robił bym mały raporcik z "pająckiem" pokazującym wymagania i ocenę i albo odbierał albo nie.
Ja chcą dostać schabowego ale także chce by to mięso było świeże i "wysokiej jakości" dlaczego? Bo nie chce "rzygać" następnego dnia ;) (czyli po wyjściu z knajpy).

konto usunięte

Temat: Jakość kodu

Patryk O.:
No właśnie, co uważacie o jakości kodu, który tworzycie. Ostatnio napisałem artykuł dostępny po adresem http://codefedonarts.com/2014/02/21/code-quality-reall... i chciałbym dowiedzieć się więcej na ten temat. Czy warto koncentrować siły na np. skorzystanie z TDD?

Cześć,

Tak, stosowanie TDD powinno utrzymać w ryzach choćby Złożoność cyklomatyczną i raczej nie uświadczysz kodu takiego jak tutaj ---> arrow code

Mam także pytanie do Ciebie. Zauważyłem, że we wpisie na blogu użyłeś Scali. Czy wykorzystujesz w niej także programowanie funkcyjne i jeśli tak to czy dodałeś jakieś specjalne metryki dla tego typu rozwiązań?

pzdr

konto usunięte

Temat: Jakość kodu

... aż mnie korci żeby zapytać, w jaki to sposób specyficzna metoda implementacji testów i kodu może "utrzymać w ryzach" złożoność coelomatyczną :-)

Anyway... kupiłem wiadro popcornu i nie mogę doczekać się odpowiedzi kolegi na twoje pytanie.

PS: Istnieje pewne banale rozwiązanie dla problemu arrow code i polega ono na odwracaniu warunku sprawdzanego w if :-)

Dla przykładu:

if (!x) return;
if (!y) return;

zamiast
if (x)
if(y) ...
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
Obaj wiemy, że to (analityk projektant i developer) "małżeństwo" takie samo jak architekt budowlany - wykonawca.

Jestem nie raz odbiorcą "kodu" czyli wykonanej aplikacji i jedyne obiektywne kryteria jakie ja i użytkownik mogą przyjąć to niestety serwisowalność i przydatność oraz bieżące koszty utrzymania (np. jakiej platformy muszę użyć) tak samo jak Ty kupując samochód oceniasz nie "jakość konstrukcji" a to ile pali, ile kosztuje naprawa itp....
Kompletnie nie mogę się z tym zgodzić. Jakość kodu to znacznie więcej. Co z tego, że ja jako autor kodu będę go serwisował szybko i tanio. Za rok skończy Ci się maintenance a ja powiem, że moje stawki wzrosły siedmiokrotnie. Kod będzie tak marny, że inny programista będzie go modyfikował 10 razy dłużej...
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Jarosław Ż.:
Obaj wiemy, że to (analityk projektant i developer) "małżeństwo" takie samo jak architekt budowlany - wykonawca.

Jestem nie raz odbiorcą "kodu" czyli wykonanej aplikacji i jedyne obiektywne kryteria jakie ja i użytkownik mogą przyjąć to niestety serwisowalność i przydatność oraz bieżące koszty utrzymania (np. jakiej platformy muszę użyć) tak samo jak Ty kupując samochód oceniasz nie "jakość konstrukcji" a to ile pali, ile kosztuje naprawa itp....
Kompletnie nie mogę się z tym zgodzić. Jakość kodu to znacznie więcej. Co z tego, że ja jako autor kodu będę go serwisował szybko i tanio. Za rok skończy Ci się maintenance a ja powiem, że moje stawki wzrosły siedmiokrotnie. Kod będzie tak marny, że inny programista będzie go modyfikował 10 razy dłużej...

nie zapominaj, że ja (klient) postrzega "kod" jako czarną skrzynkę, która dla Ciebie jest "biała"...
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
nie zapominaj, że ja (klient) postrzega "kod" jako czarną skrzynkę, która dla Ciebie jest "biała"...
To powinien przestać tak postrzegać/ Jeśli brakuje mu kompetencji niech je wynajmie (ekspert, który zrobi ocenę). Inaczej zawsze pozostanie nieeksplorowane ryzyko trupa w szafie.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Jarosław Ż.:
nie zapominaj, że ja (klient) postrzega "kod" jako czarną skrzynkę, która dla Ciebie jest "biała"...
To powinien przestać tak postrzegać/ Jeśli brakuje mu kompetencji niech je wynajmie (ekspert, który zrobi ocenę). Inaczej zawsze pozostanie nieeksplorowane ryzyko trupa w szafie.

Ja jestem gdzieś pośrodku z oceną, kupując gotową lodówkę macam ja w sklepie i kupuję lub nie, dopiero gdy mam ochotę na dedykowaną zatrudniam projektanta. I tu dochodzimy do ważnego elementu: kto odpowiada za "blokową" konstrukcję lodówki: projektant czy wykonawca?
Mateusz Kurleto

Mateusz Kurleto Szukamy wybitnych
talentów do
świetnego zespołu IT
w Gdańsku

Temat: Jakość kodu

Jarosław Ż.:
Mateusz K.:
Jarosław Ż.:
nie zapominaj, że ja (klient) postrzega "kod" jako czarną skrzynkę, która dla Ciebie jest "biała"...
To powinien przestać tak postrzegać/ Jeśli brakuje mu kompetencji niech je wynajmie (ekspert, który zrobi ocenę). Inaczej zawsze pozostanie nieeksplorowane ryzyko trupa w szafie.

Ja jestem gdzieś pośrodku z oceną, kupując gotową lodówkę macam ja w sklepie i kupuję lub nie, dopiero gdy mam ochotę na dedykowaną zatrudniam projektanta. I tu dochodzimy do ważnego elementu: kto odpowiada za "blokową" konstrukcję lodówki: projektant czy wykonawca?
Jarek, Twoje analogie są tyleż oryginalne co nietrafione. Pisanie oprogramowania to nie składanie klocków lego. To, że system skompilowany z jakiegoś kodu działa poprawnie nie ma żadnego związku z jakością samego kodu, łatwością jego utrzymania i rozwoju - w dowolnym czy wstępnie sprecyzowanym kierunku. To są sprawy zupełnie rozdzielne. Albo zaczniesz rozumieć jakość kodu i jego implikacje - albo Twoja opowieść o gwarantowaniu jakości wysokimi wymaganiami stanie się wyłącznie kolejnym marketingowym story.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Jakość kodu

Mateusz K.:
Ja jestem gdzieś pośrodku z oceną, kupując gotową lodówkę macam ja w sklepie i kupuję lub nie, dopiero gdy mam ochotę na dedykowaną zatrudniam projektanta. I tu dochodzimy do ważnego elementu: kto odpowiada za "blokową" konstrukcję lodówki: projektant czy wykonawca?
Jarek, Twoje analogie są tyleż oryginalne co nietrafione. Pisanie oprogramowania to nie składanie klocków lego. To, że system skompilowany z jakiegoś kodu działa poprawnie nie ma żadnego związku z jakością samego kodu, łatwością jego utrzymania i rozwoju - w dowolnym czy wstępnie sprecyzowanym kierunku. To są sprawy zupełnie rozdzielne. Albo zaczniesz rozumieć jakość kodu i jego implikacje - albo Twoja opowieść o gwarantowaniu jakości wysokimi wymaganiami stanie się wyłącznie kolejnym marketingowym story.

Przyznaje że niektóre moje wpisy to małe prowokacje, prowokacje do przemyśleń. Ja sobie zdaje sprawę z tego o czym piszesz, jednak patrze od kilku lat na problemy w projektach i część z nich jest efektem rozmycia odpowiedzialności.

Odpowiedzialność zbiorowa to zła jakość zarządzania projektem, tu chyba się zgodzimy? I teraz mamy dwie kluczowe role w projekcie:
- zamawiający
- wykonawca
Każdy z nich tworzy "produkt", każdy z tych produktów ma swoja jakość, o jakości jednak możemy mówić wyłącznie w kontekście odbiorcy, bo jakość to "stopień spełnienia oczekiwań".
(źr. http://www.centrum.jakosci.pl/podstawy-jakosci,definic... ) BTW: mnie zawsze kusi definicja Platońska ;))

Fundamentalne pytanie brzmi: czyje i jakie oczekiwania ma spełnić napisany kod skoro użytkownik gotowego oprogramowania go nie widzi? Jakie oczekiwania ma użytkownik (zamawiający) i w stosunku do czego ma te oczekiwania?

Tu ciekawa rzecz: mamy dwie kluczowe role: zamawiający i wykonawca. Moim zdaniem, powtarzam to nie raz: "osoba dokumentująca wymagania" (Analityk Biznesowy) nie jest rolą w takim projekcie, analityka angażuje wyłącznie ten (ta rola), która dostrzega ryzyko na styku zamawiający-wykonawca. Jeżeli ryzyko widzi zamawiający, angażuje Analityka, który "dokumentuje wymagania" wobec produktu jaki ma dostarczyć Wykonawca. Stopień szczegółowości tych wymagań to także konsekwencja postrzeganego ryzyka. Jednak nie sprawdza się "szczegółowość" w postaci listy 2000 zamiast 200 wymagań (to nazwę raczej głupotą). Ale sprawdza się szczegółowość wymagań jako dodatkowe narzucenie struktury logiki dziedzinowej (od pozostałej części kodu trzymam się z daleka). Tu faktycznie ja nie raz "ingeruje w kod" ale wyłącznie poprzez jego szkielet, szkielet logiki.

Dlatego w tym kontekście zawsze pytam: czym i dla kogo jest jakość kodu? Bo ja oceniam jakość kodu jako stopień korzystania z wzorców i dobrych praktyk (co by to nie miało znaczyć :))Ten post został edytowany przez Autora dnia 11.03.14 o godzinie 07:44



Wyślij zaproszenie do