Blog (22)
Komentarze (619)
Recenzje (0)
@alucosoftwareniedobreprogramy

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.
404276

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ę.

Komentarze (14)