Outsourcing i Inżynieria oprogramowania
Rozwój oprogramowania jest złożonym i trudnym procesem, który często wymaga współdziałania w wielu dziedzinach. Zaczynając od pomysłu, przez modelowanie i generowanie kodu, zarządzanie projektami, testy, wdrożenie, a na zarządzaniu zmianą kończąc. Cykl tworzenia oprogramowania czy cykl życia projektu tworzą proces rozwoju oprogramowania. Istnieje kilka modeli dla takiego procesu, każdy opisujący podejście do różnych zadań lub zajęć, które odbywają się w trakcie projektu.
Proces tworzenia i rozwoju oprogramowania
Inżynieria oprogramowania jest procesem złożonym z wielu różnych działań, w szczególności:
- Analiza wymagań klienta
Określenie wymagań odnośnie oprogramowania jest pierwszym zadaniem analizy wymagań. Analiza wymagań w zakresie inżynierii systemów i inżynierii oprogramowania, obejmuje te zadania, które zmierząją do określenia potrzeb i warunków niezbędnych do spełnienia dla nowej lub modyfikowanej wersji produktu. Warto tu zwrócić uwagę na kilka istotnych faktów: sprzeczne wymagania różnych interesariuszy, analiza, dokumentacja, implementacja, zarządzanie oprogramowaniem czy wymagania systemowe.
Choć klienci wierzą, że wiedzą, co program ma finalnie robić, na tym etapie wymagana jest wiedza i doświadczenie w inżynierii oprogramowania aby rozpoznać niepełne, niejednoznaczne lub sprzeczne wymagania. Analiza wymagań jest kluczowa dla powodzenia projektu. Wymagania na tym etapie powinny być udokumentowane, mierzalne, weryfikowalne, identyfikowalne, związane z celem biznesowym projektu oraz zdefiniowane do poziomu szczegółowości wystarczającej aby zaprojektować system.
- Specyfikacja
Specyfikacja jest zadaniem precyzyjnie opisującym oprogramowanie które ma być stworzone. Specyfikacja wymagań dla systemu informatycznego jest opisem zachowań systemu. Zawiera on również wymagania niefunkcjonalne. Wymagania niefunkcjonalne mogą zawierać ograniczenia w zakresie projektu lub realizacji (wymagania w zakresie wydajności, standardów jakościowych, wytycznych korporacyjnych). Specyfikacja wymagań jest podsumowaniem tego, co oprogramowanie ma finalnie robić, ale także tego czego oprogramowanie nie ma robić. Specyfikacja wymagań umożliwia dokładną analizę wymagań projektowych.
Powinna również zapewnić realistyczną podstawę do szacowania kosztów projektu, ryzyk i harmonogramów. Dokument specyfikacji wymagań dla systemu zawiera niezbędne wymogi, które są niezbędne do realizacji projektu. Aby określić wymagania musimy mieć jasne i dokładne zrozumienie finalnego produktu (projektu), który ma być stworzony i rozwijany. Aby to osiągność niezbędna jest dobra komunikacja z klientem i zespołem projektowym do czasu zakończenia prac nad finalnym produktem.
- Architektura systemu
Architektura systemu oprogramowania odnosi się do abstrakcyjnej reprezentacji tworzonego systemu. Termin ten może być zdefiniowany jako zbiór struktur, który obejmuje elementy oprogramowania oraz relacje między elementami systemu.
- Implementacja
Przejście od projektu do kodu może być najbardziej oczywistą cześcią inżynierii oprogramowania, ale niekoniecznie jest to największa część. Implementacja jest częścią procesu, w której programiści faktycznie przystępują do tworzenia kodu dla projektu.
- Testy
Testowanie oprogramowania to dochodzenie do celu, którym jest dostarczenie zainteresowanym stronom informacji o jakości produktu lub usługi. Testowanie oprogramowania może również stanowić obiektywne, niezależne spojrzenie na oprogramowanie, aby umożliwić klientowi docenienie i zrozumienie ryzyk związanych z realizacją projektu. Testowanie oprogramowania obejmuje weryfikacje działania systemu z zamiarem znalezienia błędów w oprogramowaniu (błędy lub inne wady).
- Dokumentacja
Dokumentowanie projektu dla potrzeb przyszłego utrzymania i rozwoju odbywa się w czasie pracy nad projektem. Może obejmować dokumentację tworzonych API i być tworzona na potrzeby wewnętrzne i zwenętrzne. Proces realizacji oprogramowania wybrany przez zespół projektowy będzie determinował jak obszerna będzie dokumentacja wewnętrzna (jeśli w ogóle bedzie potrzebna).
- Wsparcie
Kiedy projekt zostaje ukończony staje się istotną częścią działalności klienta. Ważne jest aby system był skutecznie utrzymywany, a ewentualne problemu były szybko eliminowane. System musi działać i być gotowym na nowe możliwości i potrzeby biznesowe.
- Utrzymanie i konserwacja
Zbyt często konserwacja jest rozumiana jedynie jako eliminacja wad w systemie. Jednak jedno z badań wykazało, że ponad 80% działań w zakresie konserwacji to działania nie naprawcze. Kluczowe zagadnienia konserwacji oprogramowania są zarówno kierownicze jak i techniczne. Do kierowniczych możemy zaliczyć uwzględnianie priorytetów nowych zadań ze strony klienta czy personelu pracującego bezpośrednio z systemem. Do technicznych natomiast dbałość o odpowiednie zrozumienie celu i funkcji projektu, analiza wpływu na działalność firmy, testy.
Modelowanie procesu
Długotrwałym celem pracy nad optymalnym procesem tworzenia oprogramowania jest znalezienie powtarzalnych, przewidywalnych procesów lub metod, które zwiększą wydajność i jakość. Bez zarządzania projektami, projekty programistyczne mogą być łatwo dostarczona z opóźnieniem lub poza zaplanowanym budżetem. Niestety nadal duża liczba projektów IT nie spełniaja oczekiwania pod względem funkcjonalności, kosztów, lub harmonogramu. Skuteczne zarządznie projektami jest dziedziną trudną, nie pozostaje nam jednak nic innego jak próbować podważać te tezy ciężką pracą.
Model Kaskadowy
Model kaskadowy jest najstarszym i najlepiej znanym modelem tworzenia oprogramowania, w którym programiści pracują nad funkcjonalnością w następujących po sobie krokach. Model kaskadowy to projektowanie sekwencyjne, często wykorzystywane w procesach rozwoju oprogramowania, postęp jest postrzegany jako płynący stale w dół (wodospad) do fazy projektowania, inicjacji, analizy, projektowania, budowy, testowania, wdrażania, i konserwacja.