Jakość Oprogramowania

Producenci środowisk tworzenia oprogramowania obiecują szybkie i bezproblemowe tworzenie systemów. Oczywiście jeśli tylko kupimy ich narzędzie. Inwestycja przyniesie natychmiast pozytywne efekty w postaci podniesienia efektywności pracy programistów.

Właśnie. Niewielu zwraca uwagę, że sukces projektu nie rodzi się w nagromadzeniu najnowszych technologii i drogich środowisk tworzenia oprogramowania.

Na początku warto sobie postawić pytanie: co rozumiemy poprzez jakość systemu ? Po pierwsze system powinien być użyteczny - dobrze określony zbiór usług systemu to podstawa dobrego projektu. Wymagania najlepszej jakości uzyskuje się poprzez prototypowanie, a ekstremalna forma prototypowania to proces ewolucyjny - Incremental Development.

Po drugie: wymagania powinny być zaimplementowane w sposób niezawodny. Po wyjściu wersji systemu od zespołu programistów jedynymi zgłoszeniami użytkowników powinny być rozszerzenia systemu. Niedopuszczalne jest, kiedy użytkownicy wyłapują błędy popełnione przez programistów. Tu warto zastosować Programowanie Sterowane Testami i Testowanie Mutacyjne.

Po trzecie: rozszerzalność. Przy stosowaniu refaktoryzacji (zobacz Poprawa Jakości Kodu) można wyhodować elastyczną architekturę (elastyczną dokładnie tyle ile potrzebujemy).

Jakość oprogramowania jest efektem dobrej organizacji procesu tworzenia oprogramowania i kompetencji członków zespołu. To nie narzędzia decydują o wynikowej jakości. Mamy bezpośredni wpływ na jakość systemu poprzez dobranie praktyk, które pozwolą zrealizować zaplanowany poziom jakości.

Definicje Jakości

(...) Nie ma bowiem łatwych odpowiedzi. Nie istnieje nic takiego jak najlepsze rozwiązanie - zarówno jeśli chodzi o narzędzia, jak i języki czy systemy operacyjne. Są jedynie systemy, które mogą być bardziej odpowiednie w konkretnych okolicznościach.

I tu właśnie do gry wchodzi pragmatyzm. Nie należy przywiązywać się do żadnej określonej metody, ale mieć na tyle rozległą wiedzę i doświadczenie, by w danej sytuacji wybrać dobre rozwiązanie. (...)

Andrew Hunt, David Thomas "Pragmatyczny Programista"