Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pisanie kodu, a głupie błędy wychodzące podczas testowania.
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Witajcie koledzy i koleżanki,
Chciałbym poruszyć dość powszechny problem, jakim jest tworzenie kodu pozbawionego głupich błędów.

Otóż pisząc tego posta opieram się na własnych doświadczeniach w tym zakresie. Pracując jako programista PHP, zwykle mam do wykonania jakiś moduł. W momencie testowania napisanego kodu według specyfikacji, okazuje się że wychodzi wiele głupich błędów, w tej chwili nie posiadam żadnych konkretnych przykładów, ale chodzi tutaj o takie elementy które powodują że w danych sytuacjach aplikacja po prostu się wysypuje, zwraca/zapisuje do bazy złe dane oraz nie działa jak powinna. Po przetestowaniu wydaje mi się że wszystko jest ok. Jednak już po krótkim czasie dostaje od innej osoby testującej listę błędów przekraczającej kartkę A4 :/
Czym to może być spowodowane? Jak walczyć z tego typu dolegliwością? Czy może to być spowodowane po prostu brakiem talentu do programowania?
Co robić?

Jak wygląda u Was podobna sytuacja? Czy napisany i przetestowany kod działa poprawnie i zawiera tylko drobne błędy, które każdemu mogły się przytrafić. Czy może także po napisaniu kodu, połowa rzeczy się sypie? Proszę nie pisać o pisaniu testów bo to jest oczywiste, jednak bez testów także można pisać kod pozbawiony błędów lub zawierający ich mała ilość.
Można powiedzieć że wpadłem w depresję i boję się że pracodawca może mi podziękować za współpracę prędzej czy później za dziurawe aplikacje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Jak zrobisz testy jednostkowe (bądź funkcjonalne) ze 100% pokryciem kodu szansa wystąpienia błędu znacznie się zmniejsza.
Poczytaj o PHPUnit


--------------------
Go to the top of the page
+Quote Post
bendi
post
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Odpowiem uzywajac zaslyszanej ostatnio anegotki - otoz w pewnej firmie, swiezo upieczony manadżer widząc wyniki finansowe i nakłady jakie firma ponosi na testowanie swoich produktów, wpadł na genialny pomysł - zwolnimy wszystkich testerów i zatrudnimy programistów, którzy piszą bez błędów...

Zaznaczam jeszcze raz, że to anegotka - a ty jako autor po prostu nie jesteś w stanie pewnych przypadków opracować, a jeszcze jak się przywiązujesz emocjonalnie do swoich rozwiązań (tak jak autor tego posta smile.gif) to wręcz nawet zakładasz, że przecież napisałeś takie cudo, że to nie może nie działać. Głowa do góry, nie ma ludzi nieomylnych.

Ten post edytował bendi 2.02.2011, 21:38:06


--------------------
Go to the top of the page
+Quote Post
kiler129
post
Post #4





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


E tam ;] Większość błędów przy programowaniu czegoś większego niż hello world to malutkie niedoróbki, ja przykładowo dzisiaj siedziałem 4h zanim odkryłem błąd. Polegał na tym, że zamaist if($fSignature === 1) miałem if($fSignature == 1), przez jeden znak w 300 linijkowym kodzie rezultat (spakowane archiwum z update) nadawało się do kosza bo metadane o plikach nie pokrywały się kolejnością z ich zapisem smile.gif
Jednym słowem - to norma biggrin.gif


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
fiszol
post
Post #5





Grupa: Zarejestrowani
Postów: 452
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

Ostrzeżenie: (0%)
-----


Nikt nie jest w stanie przewidzieć tego co użytkownik docelowy zrobi z aplikacją. Ty piszesz sobie pomalutku, analizujesz, testujesz na bieżąco z upływem czasu nabierasz coraz więskzego przekonania że wszystko jest ok. Dopiero w praniu wychodzi wszystko. Dla mnie, amatora i hobbysty to jest naturalne i akceptuje to (czasem naprawienie czegoś to więcej frajdy niż większa część kodu). Nie wiem jak jest na zawodowym stopniu programowania ale podejrzewam że nie da się błędów wykluczyć już na etapie pisania.

Ten post edytował fiszol 3.02.2011, 03:55:53


--------------------
\o/
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #6





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


A niby dlaczego choćby do Windowsa wychodzi tyle poprawek wink.gif? Nie da się wyeliminować błędów, od ich wykrywania są automatyczne testy i testerzy.
Go to the top of the page
+Quote Post
Pilsener
post
Post #7





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Błędy to też dla nas okazja do zarobku, większość to po prostu zwykłe luki w specyfikacji wink.gif
Najlepiej by aplikacja była odbierana etapami przez analityka wspartego grupą zwykłych użytkowników (najlepiej klikających we wszystko co się da jak dzikie małpy), jeśli dziś działa a już jutro nie działa to znaczy, że jakiś użytkownik ją zepsuł smile.gif
Można też odpalić kilka botów testujących do np. wykrywania złych linków.
Nikt nie jest w stanie wychwycić wszystkich błędów, bo możliwości jest po prostu zbyt wiele, często nie jesteśmy w stanie nawet stwierdzić, co jest nie tak (zawsze ktoś tam nie może się zalogować i bądź mądry).
Go to the top of the page
+Quote Post
kiler129
post
Post #8





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Nie bez powodu Google prócz inżynierów zatrudnia ludzi 40+, zwykłych Kowalskich. Jeśli oni nie umieją zainstalować i obsłużyć softu albo coś zepsują to wraca spowrotem smile.gif


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
rafalp
post
Post #9





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Ja od początku programowania aplikacji skupiam się na TYPACH danych o czym wielu programistów bez przeszłości z np. C++ , Java zapomina.

Dokumentowanie każdej metody, każdej klasy. Co przyjmuje i co zwraca - i tutaj dokładnie przypilnowanie aby właśnie zwracała TYLKO to (typ danych) jaki zaplanujemy. Oczywiście jeśli MIXED to również to zaznaczamy.


--------------------
Go to the top of the page
+Quote Post
lukasz91
post
Post #10





Grupa: Zarejestrowani
Postów: 149
Pomógł: 7
Dołączył: 6.01.2010
Skąd: Opole Lubelskie

Ostrzeżenie: (0%)
-----


Ano brak typów danych to najgorsza zmora PHP dry.gif
Ja zaczynałem naukę programowania od PHP i to był błąd.. przez brak typów łatwo nauczyć się złych nawyków


--------------------
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #11





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Pozostaje czekać na PHP 5.4, które częściowo typy wprowadzi.
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@Mephistofeles: Czy nie chodzi Ci aby przypadkiem o type hinting dla typów prymitywnych? Z silnym typowaniem to to nie ma wiele wspólnego. wink.gif

W PHP silnego typowania raczej nigdy nie będzie - zabiłoby to ten język.

Ten post edytował Crozin 5.02.2011, 20:01:52
Go to the top of the page
+Quote Post
tehaha
post
Post #13





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Cytat(Sajrox @ 2.02.2011, 21:25:24 ) *
Jak wygląda u Was podobna sytuacja? Czy napisany i przetestowany kod działa poprawnie i zawiera tylko drobne błędy, które każdemu mogły się przytrafić. Czy może także po napisaniu kodu, połowa rzeczy się sypie? Proszę nie pisać o pisaniu testów bo to jest oczywiste, jednak bez testów także można pisać kod pozbawiony błędów lub zawierający ich mała ilość.


Drobne błędy oczywiście, się czasem zdarzają ale bez przesady, ogólnie nie piszę testów i raczej rzadko mi się zdarza żeby coś nie działało, wydaje mi się, że problem może leżeć w samym procesie realizacji: ja np. zanim cokolwiek zacznę pisać(w większych projektach) to sobie spisuje w notatniku wszystkie informacje o projekcie: jakie dane będą przetwarza i przechowywane w bazie, jakie relacje, jakie procesy, wszystkie funkcje dla użytkownika zalogowanego/niezalogowanego/admina/moderatora itp. itd. . Ogólnie tak zauważyłem, że wielu programistów od razu bierze się za pisanie aplikacji kompletnie pomijając fazę projektowania bo ludziom się wydaje, że to strata czasu, ale prawda jest taka że jak spędzisz kilka godzin w fazie projektowania to możesz zaoszczędzić kilkanaście godzin w fazie pisania i debugowania , a potem właśnie wychodzą problemy, że czegoś się nie przewidziało, a drugi powód to złe nawyki w programowaniu
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #14





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Wiem, dlatego napisałem częściowo. Nie orientuję się co prawda jak będzie wyglądało powiadamianie o złym typie, ale i tak uważam, że to dobre rozwiązanie do kontroli argumentów.
Go to the top of the page
+Quote Post
lukasz91
post
Post #15





Grupa: Zarejestrowani
Postów: 149
Pomógł: 7
Dołączył: 6.01.2010
Skąd: Opole Lubelskie

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 5.02.2011, 20:01:19 ) *
W PHP silnego typowania raczej nigdy nie będzie - zabiłoby to ten język.

A to czemu niby?


--------------------
Go to the top of the page
+Quote Post
singles
post
Post #16





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 2.02.2011, 21:27:39 ) *
Jak zrobisz testy jednostkowe (bądź funkcjonalne) ze 100% pokryciem kodu szansa wystąpienia błędu znacznie się zmniejsza.
Poczytaj o PHPUnit

Z tym, że testy jednostkowe też trzeba umieć pisać - i to także nie jest łatwa sztuka.
Raz to przetestować dla dobrych parametrów i tzw. "prawidłowego użycia". Ale też z drugiej strony pisanie testów takich, które starają się "położyć" aplikację - przede wszystkim nieprawidłowe parametry, czy też sprawdzanie, czy metody rzucają odpowiednimi wyjątkami.

Zupełnie inną sprawą jest testowanie kontrolerów - pytanie, czy zaliczymy to do testów jednostkowych czy funkcjonalnych? No chyba, że przyjmiemy założenie, że jak napisane w PHPUnit, to jednostkowe, a jak w Sellenium (dla których PHPUnit i tak ma wsparcie) to funkcjonalne.







--------------------
Works for me => u mnie działa - blog o (o)programowaniu i nie tylko
meet.php - darmowe meetupy związane z PHP
Go to the top of the page
+Quote Post
Crozin
post
Post #17





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@Mephistofeles: O ile dobrze się orientuję nie chodzi o żadne zgłaszanie błędów, a o automatyczne rzutowanie, czyli:
  1. function abc(int $arg) {
  2. return $arg * 2;
  3. }
  4.  
  5. abc('23'); // $arg = (int) 23
  6. abc(344.424); // $arg = (int) 344
  7.  
  8. function def(string $arg) {
  9. return $arg . 'xx';
  10. }
  11.  
  12. def(434); // $arg = (string) "434"
  13. def($myObject); // $arg = (string) $myObject->__toString();


@Bags_Bunny: poprawione.

Ten post edytował Crozin 5.02.2011, 20:45:39
Go to the top of the page
+Quote Post
Bags_Bunny
post
Post #18





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


@Crozin: w 12 i 13 to chyba Ci o def() chodziło, a nie abc().

@Crozin: dziękuję.

Ten post edytował Bags_Bunny 5.02.2011, 21:08:34


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #19





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


To trochę lipa, mimo wszystko powinno wywalić choćby notice.
Go to the top of the page
+Quote Post
Crozin
post
Post #20





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Wtedy byś się tych notice'ów nie pozbył za żadną cholerę... wink.gif Albo ilość jawnych rzutowań przed przekazaniem zmiennej jako argumentu funkcji zaśmieciłaby cały kod. PHP jest dynamicznie typowany i trzeba się z tym pogodzić - jak, nie pasuje to masz przecież alternatywę w postaci chociażby Javy.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:43