Od pomysłu po zarządzanie

Podstawa to perfekcyjne opanowanie technologii oraz dobry pomysł. Te dwa elementy nie wystarczą jednak, aby odnieść prawdziwy sukces na rynku oprogramowania.

Podstawa to perfekcyjne opanowanie technologii oraz dobry pomysł. Te dwa elementy nie wystarczą jednak, aby odnieść prawdziwy sukces na rynku oprogramowania.

Analiza systemów informatycznych wymaga odpowiednich narzędzi, takich jak np. Borland Together.

Analiza systemów informatycznych wymaga odpowiednich narzędzi, takich jak np. Borland Together.

Czy tworzenie oprogramowania to wciąż sztuka, czy już tylko przemysł? Bezpowrotnie minęły czasy, gdy aplikacje tworzone były przez zapaleńców-samotników w przysłowiowym garażu. Dzisiaj firmy zajmujące się tworzeniem oprogramowania to sprawnie zarządzane przedsiębiorstwa, w których programiści są tylko niewielką - chociaż niezwykle istotną - częścią zespołu. Nowoczesne oprogramowanie nie może powstać bez pracy doświadczonych analityków i projektantów, zespołu testerów, a często także grupy zajmującej się wdrożeniem projektu. Nawet przedstawiciele takich profesji, jak np. graficy, są potrzebni do tworzenia nie tylko gier komputerowych, ale też oprawy graficznej aplikacji użytkowych. Duże projekty informatyczne wymagają dodatkowo opieki od strony biznesowej. Umiejętne zarządzanie całym procesem powstawania projektu informatycznego to nie tylko nadzorowanie kwestii technicznych, ale i relacji z klientem, sprawdzanie kruczków prawnych w umowach, tworzenie strategii sprzedaży i wdrażania gotowego oprogramowania. Wiele zależy od organizacji zaplecza marketingowego. Sporo ciekawych programów przechodzi bez echa tylko dlatego, że niewiele osób dowiaduje się o ich istnieniu.

Nie można jednak zapominać, że w centrum tego całego zamieszania cały czas znajduje się grupa programistów, która zamienia pomysły klienta i projektantów w działający system. Wszyscy, którzy wiążą swoją zawodową przyszłość z programowaniem, powinni zdawać sobie sprawę, że doskonała znajomość Javy, C++ czy C# i różnych technik programistycznych nie wystarcza do przygotowania nowoczesnej aplikacji.

Środowiska programistyczne już od dawna tworzone są z myślą o pracy grupowej i różnych etapach tworzenia oprogramowania. Są odrębne, ale współpracujące ze sobą produkty dla analityków, projektantów, programistów czy osób zarządzających projektem. Nie sposób przedstawić wszystkie zagadnienia związane z tworzeniem oprogramowania. Wystarczy odwiedzić dowolną księgarnię informatyczną, aby przekonać się, jak olbrzymia wiedza związana jest z samą chociażby analizą systemową. Rzut oka na kolejne etapy tworzenia oprogramowania pozwoli się jednak zorientować, jakie czynności wykonywane są w kolejnych częściach całego procesu i jakiego typu narzędzia mogą być potrzebne.

Analiza

Projektowanie oprogramowania to nie tylko wymyślanie układu interfejsu, ale też modelowanie struktur danych na podstawie wyników analizy. Nowoczesne oprogramowanie automatyzuje znaczną część tego procesu.

Projektowanie oprogramowania to nie tylko wymyślanie układu interfejsu, ale też modelowanie struktur danych na podstawie wyników analizy. Nowoczesne oprogramowanie automatyzuje znaczną część tego procesu.

Najważniejszymi etapami tworzenia zarówno małej aplikacji, jak i dużego projektu informatycznego jest analiza problemu i zaprojektowanie rozwiązania. Nie należy bagatelizować tych dwóch etapów, nawet pisząc drobne programy narzędziowe. Na etapie analizy i projektowania podejmowane są decyzje, które mają decydujący wpływ na sposób działania końcowego produktu i skuteczność całego rozwiązania. Błędy popełnione na tych etapach trudno naprawić na przykład podczas kodowania aplikacji, gdyż wymaga to ponownego przeprojektowania dużej części programu.

Analiza projektu polega na zbadaniu wszystkich aspektów pracy programu lub systemu informatycznego. Na tym etapie należy nie tylko dokładnie poznać wymagania użytkownika (klienta), co często samo w sobie jest dużym wyzwaniem, ale też gruntownie przeanalizować stosowane dotąd rozwiązania i sposób działania rzeczywistego systemu, który ma być usprawniony za pomocą aplikacji. Zbadanie sposobu działania rzeczywistego, dużego systemu (np. banku, przedsiębiorstwa) to zadanie dla grupy doświadczonych analityków. Analiza takich przypadków wymaga wielu godzin wywiadów z przyszłymi użytkownikami (np. pracownikami przedsiębiorstwa), tworzenia ankiet i analizowania wyników, czytania dokumentów technicznych i prawnych. W wypadku małych programów użytkowych tak rozbudowanej analizy, oczywiście, się nie przeprowadza.

Przed rozpoczęciem kodowania w C++ czy Javie warto jednak sprawdzić, jak powinien działać docelowy program, np. zadając pytania w internetowych grupach dyskusyjnych poświęconych danej tematyce. Jeśli chcesz napisać prosty edytor HTML, wypytaj najpierw twórców stron WWW, jakich narzędzi nie mogli znaleźć w dostępnych aplikacjach, które programy najbardziej im się podobają, a do których mają najwięcej zastrzeżeń. Poleganie wyłącznie na własnym doświadczeniu i preferencjach często prowadzi na manowce.

Wyniki przeprowadzonej analizy służą do opracowania szczegółowego projektu programu lub systemu informatycznego. Innymi słowy, na etapie projektu odbywa się przekształcenie szczegółowego opisu projektu na rozwiązanie informatyczne.

Projekt

Budowanie kodu programu, niegdyś utożsamiane z tworzeniem oprogramowania, dzisiaj jest tylko częścią pracy.

Budowanie kodu programu, niegdyś utożsamiane z tworzeniem oprogramowania, dzisiaj jest tylko częścią pracy.

Projekty dużych systemów informatycznych od dawna nie są już tworzone całkowicie ręcznie. Znaczna ich część generowana jest zwykle automatycznie na podstawie wyników analizy. Dane, relacje pomiędzy nimi i wykonywane na nich operacje powinny być precyzyjnie zdefiniowane już na etapie analizy i stanowić postawę projektu. Nowoczesne narzędzia projektowe potrafią wygenerować np. strukturę bazy danych na podstawie diagramów przygotowanych podczas analizy. Oczywiście taki automatycznie wygenerowany projekt z reguły nie nadaje się do użytku, ale stanowi punkt wyjścia dla zespołu programistów. W rzeczywistości etapy analizy i projektowania wykonywane są wielokrotnie. Podczas projektowania konkretnych rozwiązań często okazuje się na przykład, że wyniki analizy nie są dość szczegółowe i trzeba wykonać dodatkowe badania.

Podczas tworzenia drobnych aplikacji użytkowych etapy projektowania i analizy z reguły tworzą całość, a analityk, projektant i programista w jednej osobie skupia się na przygotowaniu okien dialogowych i głównego algorytmu używanego w programie. Projekt aplikacji jest jednak niezbędny, nawet jeśli ograniczymy go tylko do ułożenia kontrolek w oknach dialogowych.

Budowa

Zapewne najważniejszym dla większości czytających te słowa etapem pracy jest zaprogramowanie przygotowanego wcześniej projektu. Wiele osób tworzenie oprogramowania kojarzy właśnie z pisaniem kodu w jednym z języków programowania i układaniem przycisków, pól edycji i opcji w nowoczesnych środowiskach programistycznych. W przypadku dużych systemów informatycznych zakodowanie projektu to zadanie dla wieloosobowych grup programistów, częściowo zresztą wykonywane automatycznie. Nowoczesne środowiska programistyczne potrafią samodzielnie wykonać dużą część pracy, tworząc np. proste okna dialogowe na podstawie struktury bazy danych (takie narzędzia znajdziesz nawet w Microsoft Accessie). Należy też pamiętać, co często umyka początkującym, że większość typowych problemów została już rozwiązana, a bogate biblioteki klas i funkcji znacznie upraszczają zaprogramowanie sortowania, operacji na plikach czy nawiązywanie połączenia internetowego.

Nie tylko gotowe biblioteki i zautomatyzowane środowiska programistyczne mają kluczowe znaczenie dla sprawnego zaprogramowania aplikacji. Jeśli przy projekcie pracuje kilka osób, należy zadbać o ujednolicony, przejrzysty styl programowania, dzięki któremu kod napisany przez każdego z twórców będzie zrozumiały dla reszty zespołu. Określone nazewnictwo zmiennych i klas, sposoby komentowania kodu i opisywania działania funkcji, dokładnie zdefiniowany sposób komunikowania się obiektów z różnych fragmentów programu - np. za pomocą klas fasadowych - wszystkie te elementy pomagają nie tylko zachować przejrzystość programu i usprawnić komunikację w zespole, ale też ułatwiają tworzenie dokumentacji i testowanie programu.

Testowanie

Testowanie oprogramowania to niełatwe zadanie, do którego często zaprzęga się... przyszłych użytkowników. Tłumy graczy chętnie testują publiczne wersje beta gier komputerowych.

Testowanie oprogramowania to niełatwe zadanie, do którego często zaprzęga się... przyszłych użytkowników. Tłumy graczy chętnie testują publiczne wersje beta gier komputerowych.

Testowanie aplikacji i systemów informatycznych jest bardzo trudnym zadaniem. Stopień złożoności współczesnych programów sprawia, że praktycznie niemożliwe jest wygenerowanie podczas testowania wszystkich sytuacji, jakie może napotkać przyszły użytkownik. O wielkości problemu świadczyć może powszechnie przyjęty zwyczaj publikowania łatek i poprawek do systemów operacyjnych, programów użytkowych i gier. Ogólnie przyjęte stało się publiczne testowanie roboczych wersji programów. Już dawno przyzwyczailiśmy się do różnych alfa, beta czy Release Candidate, które z jednej strony świadczą o kłopotach z odpowiednim przetestowaniem aplikacji, z drugiej zaś stały się pewnego rodzaju działaniem marketingowym, podsycającym zainteresowaniem nowym produktem.

Testowanie aplikacji doczekało się wielu opracowań naukowych, a także specjalnego oprogramowania ułatwiającego przeprowadzenie prób i analizę ich wyników. Często mylone jest z kontrolą jakości, której celem jest sprawdzenie, czy użytkownik otrzyma produkt o założonej w projekcie funkcjonalności, pozbawiony usterek i niedoróbek. Kontrola jakości to zagadnienie nieco szersze niż testowanie oprogramowania. Bez sprawnej organizacji testowania nie może być jednak mowy o odpowiedniej kontroli jakości produktu.

Testowanie oznacza więc wykrywanie błędów w działaniu programu (ale także usterek w kodzie źródłowym!), sprawdzenie poprawności wszystkich elementów aplikacji, jakości interfejsu użytkownika, a także mierzenie wydajności. To ostatnie zagadnienie obejmuje nie tylko szybkość wyświetlania grafiki w grach 3D, ale też np. wydajność połączenia z bazą danych, czas zapisywania i wczytywania dokumentów, przetwarzania obrazów w programach graficznych itd.

Testowanie oprogramowania wymaga sprawnej organizacji i ustalenia pewnych standardów, począwszy od tak oczywistych, jak ujednolicony sposób opisywania wykrytych błędów.

Wdrożenie

Tworzenie oprogramowania wymaga dzisiaj sprawnego zarządzania projektem i zespołem developerskim. Do takich celów służą specjalne narzędzia, np. Borland StarTeam.

Tworzenie oprogramowania wymaga dzisiaj sprawnego zarządzania projektem i zespołem developerskim. Do takich celów służą specjalne narzędzia, np. Borland StarTeam.

Ten etap w praktyce dotyczy tylko dużych systemów informatycznych. Nie wystarczy uruchomić serwer bazodanowy i zainstalować program kliencki na komputerach wszystkich użytkowników. Konieczne jest wczytanie danych z istniejących systemów, przeszkolenie użytkowników, a także - wprowadzenie licznych poprawek, gdy okaże się, że np. interfejs aplikacji nie odpowiada osobom przyzwyczajonym do innych rozwiązań.

Wdrożenie małych aplikacji użytkowych i gier sprowadza się do przygotowania prostego w obsłudze programu instalacyjnego i dostarczeniu użytkownikowi przejrzystej instrukcji obsługi, ewentualnie popartej telefoniczną pomocą techniczną. Wdrożenia dużych systemów informatycznych to zadania na tyle poważne, że zajmują się nimi całe wyspecjalizowanie firmy. Problemy związane z wdrożeniem systemów informatycznych, choć inaczej nazwane, nierzadko trafiają na pierwsze strony codziennych gazet. Ileż to razy nowiutki system informatyczny przygotowany dla dużej instytucji publicznej przez całe miesiące nie działał sprawnie, a zinformatyzowane urzędy pracowały wolniej niż przed uruchomieniem systemu! Wdrożenie systemu to często problem informatyczny, biznesowy i polityczny jednocześnie.

Użytkowanie

Żywotność dużych systemów informatycznych liczona jest w latach. Nietrudno się domyślić, że w tak długim czasie początkowe założenia mogą odejść w niepamięć, a oprogramowanie musi radzić sobie w zupełnie nowych warunkach. Nie tylko duże, rozproszone systemy informatyczne (np. używane w instytucjach publicznych) muszą być uaktualniane i zmieniane w trakcie użytkowania. Najlepszym przykładem może być oprogramowanie księgowo-rachunkowe do małych firm. Przepisy skarbowe zmieniają się praktycznie co roku, zmuszając producentów aplikacji do udostępniania użytkownikom regularnych uaktualnień, często poważnie zmieniających sposób działania aplikacji. Obsługa tego typu problemów może okazać się bardzo kosztowna, zwłaszcza gdy brak dobrej dokumentacji technicznej i szczegółowego projektu programu. Obecnie nawet proste programy użytkowe udostępniają opcję aktualizacji przez Internet, a czasem, na przykład w programach antywirusowych czy antyszpiegowskich, od takiego narzędzia bezpośrednio zależy skuteczne działanie aplikacji.

W dużych systemach informatycznych często pojawia się także problem skalowalności. Na początkowym etapie analizy powinny zostać dokładne zbadane nie tylko rodzaj i ilość, ale też tempo przyrastania danych w systemie. System informatyczny działa jednak w nieustannie zmieniających się warunkach i często pojawia się problem dostosowania oprogramowania do pracy z powiększającymi się zbiorami danych czy większą liczbą użytkowników, np. korzystających z dostępu zdalnego.

Życie pozagrobowe

Każdy system informatyczny musi kiedyś zakończyć działanie. Nawet najlepsze aplikacje powoli wychodzą z użytku, a ich miejsce zajmują nowe rozwiązania. Wykorzystanie wiedzy i doświadczenia z zakończonego projektu, a także - gotowych rozwiązań programistycznych, algorytmów i bibliotek, to podstawa tworzenia kolejnych programów.


Zobacz również