niedobreprogramy
23.01.2012 14:18
W gąszczu burzliwych dyskusji dotyczących ostatnich nie‑do-końca-legalnych działań (DDoS) sfrustrowanych internautów warto zwrócić uwagę na trochę z innej beczki, choć powszechny, problem współczesnego oprogramowania komputerowego.
Świeżo upieczony programista oczekuje bowiem, niemalże natychmiast, widocznych rezultatów swojej pracy (czyt. kolorowych, wielofunkcyjnych okienek wykonujących bardzo ważne rzeczy). I tak, jak grzyby po deszczu pojawiają się programy (małe i duże) zawierające błędy i niedopatrzenia. Może to kwestia dobranej do projektu metodologii programowania, może wynika to z chęci jak najszybszego wdrożenia na rynek produktu, a może zupełnie coś innego? Jaka by nie była przyczyna takiego stanu rzeczy, problem "błędów w oprogramowaniu" dotyczy każdego programisty.
Swego czasu podjąłem próbę wytłumaczenia osobie z poza środowiska tęgich głów "dlaczego niektóre programy się tak wieszają?". Choć zdaję sobie sprawę z tego, że w paru miejscach musiałem minąć się z rzeczywistością aby uzyskać pożądany efekt (czyt. zrozumienie), takie łopatologiczne przedstawienie sprawy okazało się owocne.
Łopato-
Wyobraź sobie, że tworzysz program komputerowy, którego sposób działania będzie całkiem oczywisty tj. program dokona działania na dwóch liczbach całkowitych. Najlepiej będzie, jeżeli - w myślach - przyporządkujesz tym liczbom jakieś konkretne nazwy np. "a" oraz "b". Pod nazwą "a" zapamiętaj pierwszą z liczb wprowadzanych przez użytkownika programu, pod nazwą "b" zapamiętaj drugą z liczb. Następnie dodaj te liczby do siebie i wynik zapamiętaj pod nazwą "wynik". Wyświetl wynik dodawania dwóch liczb i zamknij program. Proste, prawda?
Spójrzmy na to całkiem oczywiste zagadnienie z punktu widzenia dobrze udokumentowanej i lubianej przez wszystkich (a może i nie) platformy .NET. Każde z powyższych zdań choć z pozoru nieskomplikowane gramatycznie, w kontekście programowania rodzi kolejne pytania.
-logia
- Jakiego rodzaju działanie na liczbach będzie miało miejsce i czy wiążą się z tym jakiekolwiek ograniczenia?
- Jaki będzie zakres wprowadzanych liczb?
- Jakiego typu zmienna przechowywać będzie wprowadzoną liczbę?
- Czy wynik działania nie przekroczy zakresu wartości zdefiniowanego dla wybranego typu zmiennych, jak to sprawdzisz?
- W jaki sposób użytkownik wprowadzi wartości reprezentujące docelowe liczby?
- Jak zachowa się program w sytuacji, w której użytkownik nic nie wprowadzi lub wprowadzi śmieci?
- Czy wprowadzona przez użytkownika wartość reprezentująca liczbę będzie typu całkowitego, czy wymagana będzie konwersja typów?
- Czy zastosowana metoda konwersji typów zadziała w każdym możliwym przypadku?
- Wiedząc, że metoda konwersji typów nie zadziała w każdym możliwym przypadku, jakie kroki podejmiesz aby uniknąć konieczności implementowania obsługi wyjątków?
- W jaki sposób wyświetlisz wynik działania programu?
- Czy konieczna będzie konwersja typów z typu całkowitego do obsługiwanego przez program typu wyjściowego?
- Co zrobisz z wykorzystanymi przez program zasobami pamięci itp.
I skąd będziesz wiedział jak zachowa się Twój komputer jeżeli ten, oczekując wprowadzenia dwóch liczb, otrzyma od Ciebie liczbę i tekst? Jeżeli dobrze zaprojektujesz swój program, na pewno unikniesz nieprzyjemnych sytuacji. Starając się z marszu coś zaprogramować napytasz sobie tylko biedy.
Choć współczesne systemy i platformy programistyczne starają się oszczędzić Nam tego typu konsekwencji wadliwego działania oprogramowania to od Ciebie, młody adepcie sztuki programowania, zależy, którą drogę wybierzesz. A wyborów nie masz za wiele. Drogą gwałtownych napadów frustracji i horendalnych strat kroczy wielu Twoich kolegów i koleżanek. Pozostaje jeszcze ta druga - droga umiarkowanego wzrostu, bez kolorowych świecących okienek, ale jest to także droga stabilności finansowej i świętego spokoju, tym większego im bogatsza będzie Twoja wiedza i doświadczenie.
Jeśli zatem dopiero odkrywasz arkana bycia deweloperem i tak bardzo zachwycasz się funkcjonalnością zintegrowanych narzędzi programistycznych nie ograniczaj się wyłącznie do autouzupełniania kodu i naciśnij czasem stary, dobry klawisz F1. Może dowiesz się czegoś ciekawego. Czego Tobie i Nam wszystkim (tj. deweloperom) życzę.