W kryształowej kuli

Za 10 lat powinniśmy mieć do dyspozycji metaprocesy, pozwalające na wybór lub dostosowanie procesów wytwarzania oprogramowania do rodzaju produktu i wymagań projektu.

Za 10 lat powinniśmy mieć do dyspozycji metaprocesy, pozwalające na wybór lub dostosowanie procesów wytwarzania oprogramowania do rodzaju produktu i wymagań projektu.

Próby przewidywania, jak będzie wyglądać niedaleka choćby przyszłość, zawsze pociągały ludzi - i często kończyły się niepowodzeniem. Lektura literatury science fiction, nawet ambitnej, sprzed lat kilkudziesięciu, zwykle pobudza do śmiechu: nawet u znakomitego i chwilami rzeczywiście proroczego Lema wielkie "kalkulatory" zwykle migają licznymi światełkami, wypluwają z siebie mnóstwo dziurkowanej taśmy i nerwowo potrząsają cyframi w okienkach.

Próby kształtowania rzeczywistości, od względnie niewinnych, jak państwowe wsparcie dla "przyszłościowych" gałęzi przemysłu lub dziedzin nauki, po złowieszcze, jak socjalizm i komunizm, regularnie kończą się spektakularnymi niepowodzeniami.

Jednocześnie wszelka ludzka działalność wymaga przewidywania przyszłego stanu rzeczy. Każda decyzja inwestycyjna w przedsiębiorstwie, każde podjęcie lub zaniechanie projektu opiera się de facto na przewidywanych skutkach takiego działania. Toteż zabierając się do przewidywania, warto uzmysłowić sobie, jakie są typowe błędy, które popełniamy, aby móc próbować ich unikać.

Pośpieszne wnioskowanie bez wstępnej analizy obecnej sytuacji; przykładem jest np. pośpieszne wyciąganie wniosków o istnieniu zależności przyczynowej, gdy mamy jedynie do czynienia z korelacją, lub o istnieniu korelacji, gdy mamy do czynienia jedynie z przypadkowym współwystąpieniem pewnych zjawisk.

Nie umiemy przewidzieć skutków ubocznych - zwłaszcza odległych w czasie - podjętych działań. Typowe przykłady to rozmaite próby inżynierii społecznej, interwencji gospodarczych państwa oraz interwencji w systemy biologiczne: z reguły "zacne" intencje działań przynoszą niezaplanowane skutki, bardzo odległe od zamierzonych.

Błędne oszacowania prawdopodobieństwa przyszłych wydarzeń. Istnieje wiele poznanych zależności, np. rozmaite zjawiska (wzorce, struktury w czasie i przestrzeni) regularne wydają się bardziej prawdopodobne niż nieregularne. Szczególne znaczenie dla trafności przewidywania przyszłości ma zjawisko "poszukiwania logicznej historii": zdarzenia, łączące się w zgodny z doświadczeniem życiowym łańcuch związków przyczynowo-skutkowych, wydają się prawdopodobniejsze od zdarzeń, gdzie takich związków nie dostrzegamy.

Ekstrapolacja liniowa: Uzbrojeni w tego rodzaju ostrzeżenia (psychologia poznawcza ma na ten temat wiele danych, z których tutaj skrótowo zostało podanych zaledwie kilka przykładów), przystępujemy do próby opisu, co może się zmienić w ciągu najbliższych 10 lat.

Szybko i intuicyjnie

O ile wiele dzisiejszych tendencji zdaje się prowadzić w kierunku bardziej uporządkowanych i sformalizowanych metod projektowania systemów, o tyle zjawiska opisane poniżej są wyrazem dążeń diametralnie przeciwnych: tworzenia systemów w sposób spontaniczny, intuicyjny, pozbawiony gorsetu sztywnych metodyk i - zdaniem zwolenników - dzięki temu pozwalający na pokonanie trzech chronicznych bolączek inżynierii oprogramowania:

  • Niedostosowania języka specyfikacji systemu przez programistów do języka użytkowników.
  • Trudności z uwzględnieniem i wdrożeniem późnych zmian wymagań i zakresu.
  • Marnotrawstwa pracy na tworzenie licznych artefaktów pośrednich: dokumentacji, specyfikacji, modeli, raportów.
Można oczekiwać, że w przyszłości pojawi się metodyka (by nie powiedzieć: nauka) pozwalająca precyzyjnie dopasować zastosowany proces wytwarzania do rodzaju produktu, wymagań projektowych i jakościowych. Dziś wybór między zastosowaniem procesu "ciężkiego" a procesu "lekkiego" zwykle jest dokonywany albo na podstawie mętnych intuicji, albo firmowej tradycji i kultury. W przyszłości pojawią się, miejmy nadzieję, metody (można je nazwać metaprocesami), pozwalające trafniej dopasować poziom formalizacji procesu wytwarzania do wymagań.

Programowanie intencjonalne

Jednym z najnowszych pomysłów jest "programowanie intencjonalne". Programista nie pisałby kodu, tylko generator programów, produkujący kod na podstawie opisu "intencji" eksperta domenowego, wyrażonych mieszanką języka naturalnego i różnych form wizualizacji (rysunki, wykresy, diagramy).

O ile faktyczna realizacja takiego pomysłu wymagałaby bez wątpienia zastosowania najnowszych technologii i metodyk, o tyle sama koncepcja jest w zasadzie prostą ekstrapolacją tego, co widzieliśmy w rozwoju inżynierii oprogramowania już wielokrotnie, a więc:

Piętrowej architektury systemów realizowanej poprzez hierarchię "maszyn wirtualnych": nie pisze się dzisiaj aplikacji działających wprost na procesorze i innych urządzeniach sprzętowych, lecz na wirtualnych platformach: sterownikach, systemie operacyjnym, API, bibliotekach łączonych statycznie i dynamicznie, wreszcie gotowych komponentach.

Języków 4. generacji: opis na wysokim poziomie abstrakcji przetwarzany automatycznie na kod źródłowy programu.

Modelowania: języki o składni uwzględniającej potrzeby domenowe służą do modelowania (UML, XML, SDL), po czym rozmaite techniki - lub wręcz programy tłumaczące - wspierają przełożenie modelu na kod nadający się do kompilacji i wykonania.

Nie wydaje się, aby ten kierunek - choć na pewno ciekawy i mogący zaowocować wieloma cząstkowymi rozwiązaniami - uporał się z kluczowymi problemami inżynierii oprogramowania. Co najmniej 1/3 kłopotów w projektach informatycznych bierze się nie z błędów implementacji, lecz z błędnych, niespójnych lub niekompletnych wymagań, czemu żadne "generatory kodu z intencji" zapobiec nie potrafią.

Testowanie eksploracyjne

Podobnie jak proces projektowania i implementacji ma zwolenników "intuicyjnych" metodyk, tak i testowanie próbuje uporać się z dylematem braku dokumentacji i specyfikacji metodami "eksploracyjnymi". Testowanie eksploracyjne oznacza próbę jednoczesnego badania funkcjonalności aplikacji, analizę "wsteczną" tego, jak powinna działać, i wreszcie testowania, czy działa poprawnie.

Sądzę, że wiele technik testowania eksploracyjnego ma przed sobą przyszłość. Testowanie daje się zrealizować technikami formalnymi, algorytmicznymi, tylko w pewnym zakresie - poza tym czynnikami sukcesu w testowaniu ważne są: intuicja, twórczo spożytkowane doświadczenie, umiejętność myślenia. Natomiast cała "ideologia" testowania eksploracyjnego: traktowanie planów i specyfikacji testów jako zbędnego balastu nawet dla dobrze udokumentowanych systemów - pozostanie zapewne jedną z wielu zabawnych, przemijających ciekawostek.