Kod bez kurzu

Metodyka Cleanroom umożliwia uzyskanie oprogramowania najwyższej jakości.

Metodyka Cleanroom umożliwia uzyskanie oprogramowania najwyższej jakości.

Początki złych nawyków w programowaniu, poczynając od testowania ad hoc poszczególnych modułów, dostarczania produktu bez dokumentacji aż po kodowanie niestrukturalne (dające tzw. kod spagetti), sięgają już kilkudziesięciu lat. Na początku lat 80. Harlan Mills z IBM zasugerował, że najwyższy czas, aby programiści nauczyli się czegoś od producentów układów scalonych. Ci ostatni na czas dostarczają wysoce niezawodne układy, na ogół nie wymagające poprawek. Przeciwna sytuacja panuje przy produkcji oprogramowania - rzadko udaje się określić dokładną datę dostarczenia gotowej aplikacji, a niska niezawodność końcowego produktu powoduje, że wymaga on stałej konserwacji.

Bez zanieczyszczeń

Jak zauważył Harlan Mills, w przemyśle układów scalonych wydaje się duże pieniądze na to, aby w produktach nie znalazły się zanieczyszczenia czy błędy. Testowanie służy zaś tylko do pomiaru jakości. Układy scalone produkuje się w wolnych od kurzu pomieszczeniach, a nie usuwa kurz podczas testowania. H. Mills zaproponował metodykę tworzenia oprogramowania Cleanroom (nazwa pochodzi od sterylnych pomieszczeń, w których wytwarza się układy scalone), która koncentruje się na zapobieganiu pojawianiu się błędów, nie na ich usuwaniu.

Prześmiewcy twierdzą, że Cleanroom polega na tak daleko idącym rozdzieleniu projektowania i tworzenia aplikacji od jej testowania, że programiści nie mają nawet dostępu do kompilatora. Muszą formalnymi metodami dowieść poprawności każdej funkcji kodu, co wymaga znajomości m.in. zaawansowanych metod formalnych matematyki. Opracowany kod jest poddawany testowaniu przez niezależny zespół za pomocą statystycznych metod testowania, do czego również konieczna jest dobra znajomość matematyki.

Zasady i praktyki

Jak pokazuje literatura (np. www.cleansoft.com, gdzie również dostępny jest dokument Cleanroom Reference Model), mimo wprowadzenia sformalizowanych procedur, sami programiści stali się największymi zwolennikami tej metodyki. Zasady dostosowano do warunków projektu, utarły się dobre rozwiązania praktyczne i w efekcie niektóre przedsięwzięcia, zwłaszcza wymagające wysokiej niezawodności, realizuje się wyłącznie w zgodzie z Cleanroom.

Obecnie termin Cleanroom obejmuje zarówno zasady tworzenia oprogramowania bez wad, jak i pewne praktyki, które pojawiły się w trakcie stosowania tych zasad. Praktyki się zmieniają, natomiast zasady H. Millsa nie zmieniły się.

Pierwsza "zasada projektowania" mówi, że zespół programistów powinien dążyć do produkowania systemu, który jest prawie bezbłędny w chwili oddawania go do testów. Według drugiej zasady sformułowanej przez H. Millsa, głównym celem testowania jest pomiar jakości programu, nie zaś usunięcie błędów. Zasady Cleanroom doprowadziły do powstania praktyk. Są to:

Inkrementalne tworzenie programów. Inkrement to taki podzbiór funkcjonalny systemu, który da się wykonać w środowisku użytkownika. Pełna wykonalność powoduje, że nie traci się wysiłku na budowanie sztucznych "rusztowań" ani wersji demo programu oraz można ocenić celowość dalszych wysiłków.

Formalne metody specyfikowania i projektowania. Początkowo w metodyce Cleanroom wymagano sformalizowania metod specyfikowania i projektowania struktur programu, potem jednak okazało się, że lepiej jest wymagania te dostosować do złożoności projektu. Po opracowaniu "pudełek strukturalnych" (H. D. Mills, R. C. Linger, A. R. Hevner: Principles of Information Systems Analysis and Design, Academic Press, 1985 r.), obecnie stosuje się je powszechnie.

Intensywne recenzowanie. Powszechnie przyjęło się zespołowe recenzowanie i sprawdzanie poprawności tworzonych modułów (funkcji) programu, korzystając m.in. z metod weryfikacji funkcjonalnej, w celu upewnienia się co do zgodności ze specyfikacją.

Specyficzne testowanie. Testowanie koncentruje się na sprawdzaniu niezawodności, nie zaś na poszukiwaniu błędów. Odbywa się ono zwykle metodą "czarnego pudełka" (tester nie zna implementacji modułów) z punktu widzenia użytkownika końcowego. Metodyka Cleanroom wymaga stosowania statystycznych metod testowania, chociaż w większości projektów uzupełnia się je innymi metodami.