![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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 -------------------- |
|
|
![]()
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 ![]() Ten post edytował bendi 2.02.2011, 21:38:06 -------------------- |
|
|
![]()
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
![]() Jednym słowem - to norma ![]() -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]()
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/
|
|
|
![]()
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
![]() |
|
|
![]()
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
![]() 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ł ![]() 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). |
|
|
![]()
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
![]() -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
![]()
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. -------------------- |
|
|
![]()
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
![]() Ja zaczynałem naukę programowania od PHP i to był błąd.. przez brak typów łatwo nauczyć się złych nawyków -------------------- |
|
|
![]()
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.
|
|
|
![]()
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.
![]() 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 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 7 Dołączył: 6.01.2010 Skąd: Opole Lubelskie Ostrzeżenie: (0%) ![]() ![]() |
W PHP silnego typowania raczej nigdy nie będzie - zabiłoby to ten język. A to czemu niby? -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 121 Pomógł: 26 Dołączył: 2.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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:
@Bags_Bunny: poprawione. Ten post edytował Crozin 5.02.2011, 20:45:39 |
|
|
![]()
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 /*
|
|
|
![]()
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.
|
|
|
![]()
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ę...
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:43 |