Trudna sztuka projektowania
W tym semestrze trafił nam się sympatyczny przedmiot jakim jest Inżynieria Oprogramowania. Każdy trochę bardziej związany z informatyką/programowaniem wie, że w dużym skrócie jest to dział wiedzy mówiący m.in. o planowaniu i projektowaniu nowo powstających aplikacji. No i właśnie o tym projektowaniu będzie ten mój dzisiejszy post.
W ramach tego przedmiotu odbywają się laboratoria. Zadanie jakie dostaliśmy do wykonania w ciągu całego semestru to stworzenie prostego programu, zaczynając od specyfikacji, diagramów itd., a kończąc na działającym projekcie zawierającym również testy jednostkowe. W tym momencie każdy początkujący programista by stwierdził, że przecież małą apkę to się w góra kilka dni napisze więc dlaczego aż 4 miesiące na to dostaliśmy. No właśnie nie. Przyznać się, kto z was kiedykolwiek do swoich programów pisał specyfikację i robił jakiekolwiek diagramy UML? ;) Ja przyznaję się, że tego nigdy nie robiłem, nie tylko z powodu braku wiedzy, ale też, a może przede wszystkim z lenistwa. I teraz wychodzi to dlaczego mieliśmy na to zadanie aż tyle czasu. Otóż dopiero wczoraj udało mi się zakończyć tworzenie specyfikacji projektu i diagramów klas i sekwencji.
Program, który dla siebie wybrałem to banalna aplikacja, której zadaniem jest pobranie średniego kursu walut dostępnego na stronie NBP w postaci pliku XML, wyświetlenie tego kursu oraz danie możliwość ewentualnego przeliczenia wartości z jednej waluty na inną. Niby nic tak na prawdę tutaj nie ma, ot kilka funkcji. A jednak moja specyfikacja, nie licząc spisu treści i tytułu, zajęła 5 stron A4! Zawarte tam są wszystkie funkcjonalności wymagane w projekcie oraz ogólny zarys systemu. O ile przy tej części zadania uważam, że poszło mi nawet nieźle, zwłaszcza, że nigdy wcześniej nie napisałem nawet linijki specyfikacji, to już jeśli chodzi o diagramy to cóż… Określę to tak, że jeśli ocena jaką za nie dostanę będzie większa niż 3.0 to można powiedzieć, że prowadzący przy sprawdzaniu był bardzo pobłażliwy. Nawet to 3.0 w tym wypadku będzie trochę naciąganą oceną. Dlaczego? Bo to co stworzyłem powinno być raczej wstępną wersją diagramu klas i sekwencji (zwłaszcza tego drugiego), a nie czymś co się oddaje do oceny. Niestety, zabrakło mi czasu, pisanie i sprawdzanie specyfikacji zajęło większość semestru. Nie ma oczywiście co udawać świętego, w jakimś stopniu przyczyniło się do tego moje lenistwo, jednak w tym wypadku nie było ono tak mocne jak niekiedy się zdarza przy innych zadaniach.
No więc mamy 13 stycznia, do tego czasu udało mi się oddać gotową specyfikację projektu i pożal się boże diagramy. Następne, a jednocześnie ostatnie zajęcia będą 27 stycznia, a w tym momencie został mi jeszcze do napisania sam kod i dopisanie do niego testów jednostkowych. Tutaj już na pewno pójdzie szybciej, zwłaszcza jak ma się wszystko dobrze zaprojektowanie :P W tym momencie chciałbym zakończyć tym, że jeśli ktokolwiek uważa, że tworząc programy na poważnie po prostu siada się do klawiatury i pisze to mam tylko jedno stwierdzenie – przed taką osobą jeszcze długa droga zanim uda mu się stworzyć i utrzymać większy projekt, niezależnie od tego jak dobry pomysł będzie miał, zawsze zabraknie tego formalnego opisu wszystkiego co chce się umieścić w naszym dziele. Oczywiście, raczej nie znajdzie się programisty, który do każdego swojego programu, nawet mającego max kilkaset linii kodu będzie pisał całą specyfikację i rysował diagramy UML, jednak próba zrobienia tego, nawet jedynie dla siebie, na pewno pozwoli inaczej spojrzeć na cały proces wytwarzania oprogramowania i pokaże, że klepanie kodu to jedynie niewielki fragment całości.
Jak już tak się rozpisałem, to może na koniec zamieszczę tą specyfikację, o której tyle mówiłem, może komuś się przyda, może ktoś będzie chciał zobaczyć jak taki twór wygląda, albo po prostu będzie miał silną chęć ocenienia jak mi to wyszło :D Diagramów nie zamieszczam, uwierzcie na słowo, że szkoda czasu na ich oglądanie.
Plik znaleźć można tutaj -> specyfikacja
No wiesz, tych diagramów byłam najbardziej ciekawa ;) jako że sama mam podobny przedmiot tylko nazywa się on analiza i projektowanie portali korporacyjnych i zamiast napisać aplikację mamy w nim stworzyć portal i jest to jedyna różnica ;) Trzymam kciuki za ocenę wyższą niż 3.0 ;)
A nie musieliście robić żadnych diagramów do tego ? Zależności, diagramów czynności, linii życia itd. itd. … ?
Bo to bardziej taki opis projektu niż jego dokumentacja w UML-u ?
W czym piszesz aplikację i jak postępy ? Tak jak wcześniej w c# czy wymóg to Java ?
Pozdro. ;-)
Mieliśmy robić do tego diagram klas i sekwencji, ale nie chwaliłem się nimi ponieważ, tak jak zaznaczyłem w tekście, byłby to raczej antyprzykład jak wykonywać takie diagramy :D Aplikację piszę w C#, nie mamy narzuconej technologii, jedyny wymóg jest taki, że ma być to aplikacja desktopowa. W tym momencie jeszcze niewielka część aplikacji istnieje, ale ponieważ jest to prosty program, do którego gotowe fragmenty będę brał z poprzedniej wersji to myślę, że poniedziałkowy deadline jest jak najbardziej wykonalny :)
Zrobione :) ?
Tak zrobione. O dziwo nawet diagramy się podobały, chociaż sam jestem z nich wybitnie niezadowolony, tak samo jak z kodu programu, który moim zdaniem wymaga zmian i jest po części wynikiem słabej architektury. Teraz zrobiłbym niektóre rzeczy inaczej, no ale właśnie tak się zdobywa doświadczenie.