Automatyzacja programowania

Największy udział w kosztach wytworzenia oprogramowania ma czas, jaki zajmuje jego produkcja. Kluczem są więc narzędzia i środowiska wspomagające pracę programistów.

Największy udział w kosztach wytworzenia oprogramowania ma czas, jaki zajmuje jego produkcja. Kluczem są więc narzędzia i środowiska wspomagające pracę programistów.

Praca inżynierów oprogramowania najczęściej odbywa się pod dużą presją czasu. Rozumieją to producenci środowisk programistycznych i projektanci języków poszukując coraz lepszych rozwiązań, które umożliwiłyby bardziej efektywną pracę, szybsze niż dotąd wykonywanie zadań, a także zmniejszenie liczby błędów, które pojawiają w wytwarzanym kodzie. W praktyce oznacza to wprowadzanie mechanizmów umożliwiających automatyzację standardowych procedur i procesów związanych z programowaniem, a także kontroli i monitorowania jakości kodu.

Zmiany w językach

Minęło przeszło pięćdziesiąt lat od czasu, kiedy to Fortran został uznany za język przełomowy, który umożliwia istotną automatyzację pracy programisty. Droga od kart perforowanych, przez programowanie strukturalne, programowanie obiektowe do obecnego stanu, w którym kluczowa jest nie tylko znajomość samego języka, ale również biegłe posługiwanie się frameworkami, była długa. Zmiany, które następowały w językach przez lata miały na celu zwiększenie możliwości projektantów oprogramowania i usprawnienie ich pracy.

Najlepszym przykładem może być problem zwalniania pamięci. Wytworzenie kodu, w którym nie występują wycieki pamięci, zawsze było czasochłonne. Dlatego też powstały platformy zarządzane Java i .NET, gdzie zautomatyzowano proces zwalniania zasobów, zdejmując ten ciężar z programistów. Wprawdzie okupiono to zmniejszeniem elastyczności i wolniejszą pracą programów, ale najistotniejsze problemy, a mianowicie: przyspieszenie produkcji oprogramowania oraz ograniczenie błędów, zostały rozwiązane. Obecnie można zaobserwować poszerzanie programowania zorientowanego obiektowo o inne paradygmaty. Przykładem może być .NET, gdzie wprowadzono elementy deklaratywne do języków platformy za sprawą LINQu. Pozwala to na przetwarzanie zbiorów danych z dowolnego źródła za pomocą składni zbliżonej do SQL. W ten sposób możliwe jest ujednolicenie kodu operującego na danych, a w rezultacie ograniczenie liczby błędów i niezbędnego nakładu pracy.

Kolejny przykład to programowanie funkcyjne, które znajdzie się na platformie .NET za sprawą F#. Ten paradygmat programowania ma zastosowania głównie w rozwiązaniach naukowych, finansowych i technicznych. "Jedną z najważniejszych cech F# jest szerokie spektrum jego zastosowań: od skryptów aż po wytwarzanie komponentów czy złożonych systemów" - mówi Don Syme, jeden z twórców F#. Te zmiany to pierwszy krok do automatyzacji przetwarzania zbiorów danych w kodzie czy przeprowadzania skomplikowanych obliczeń.

Narzędzia programistyczne

Obecnie rynek ten podbijają wielordzeniowe procesory, co w nieunikniony sposób prowadzi do popularyzacji aplikacji wykorzystujących przetwarzanie równoległe. Visual Studio już od wersji 2005 ma wsparcie dla OpenMP (standardu pozwalającego na zrównoleglenie kodu), a teraz rozwijane są Parallel Extensions dla .NET. Z kolei Intel dwa lata temu wprowadził na rynek narzędzia pozwalające zrównoleglić kod C++, przenosząc ciężar z ręcznego programowania operacji równoległych na zarządzanie wątkami. Ułatwia to automatyzację wielu elementów programowania. Niedawno pojawiły się istotne udoskonalenia tych narzędzi. Wersja Thread Building Blocks 2.1 zawiera znacznie ulepszone mechanizmy wspomagające tworzenie interfejsów użytkownika, a także wprowadza techniki sztucznej inteligencji i programowania sieciowego. Producent chwali się także poprawieniem wydajności, harmonogramowania i zarządzania pamięcią.

O ile rozwój aplikacji równoległych dotyka tylko pewnego segmentu rynku, o tyle wsparcie dla procesów produkcji programowania, refaktoringu, czy zarządzania jakością jest ważne dla każdego zespołu programistów. W tym wypadku przykładem nowych narzędzi może być Visual Studio Team System, którego funkcjonalności pozwalają prowadzić projekty zgodnie z MSF, czy tworzyć własne rozszerzenia, aby dostosować VSTS do metodyk obowiązujących wewnątrz firmy. Innym przykładem jest TeamFocus firmy Borland. Należy ono do zbioru narzędzi Management Solutions, które należą do grupy produktów ALM (Application Life-cycle Management). Inne narzędzia z tego pakietu to TeamDemand, który ma ułatwić kierownictwu biznesowemu monitorowanie pracy i zarządzanie wymaganiami oraz TeamAnalytics, który ma generować raporty dla kontroli jakości.

W wypadku narzędzi typu QA (Quality Assurance) warto zauważyć nowe oprogramowanie IBM Rational Software Analyzer. Pozwala ono na automatyczne wykrywanie błędów na podstawie statycznej analizy kodu. "Niestety widzimy coraz więcej błędów w kodzie aplikacji pojawiających się na rynku. A im wcześniej zostaną one zauważone, tym mniej to będzie kosztować producenta i użytkowników" - tak uzasadnia Dave Locke, dyrektor marketingu produktów Rational.

Zintegrowane środowiska IDE

Narzędzia wspierające pracę programistów są ważne, ale kluczowym elementem zawsze będzie dla nich środowisko programistyczne IDE (ramka). Na rynku środowisk dla platformy Java jest duża konkurencja, wystarczy chociażby wymienić NetBeans, Eclipse czy IBM Rational Application Developer, a pośród aplikacji dla Windows króluje niepodzielnie Visual Studio. Ciekawym zjawiskiem jest także bardzo duża popularność wszelkiego rodzaju wtyczek i rozszerzeń, które mogą usprawniać pracę. Przykładem takim może być chociażby ReSharper firmy JetBrains dla Visual Studio i Visual Assit X firmy Whole Tomato Software. Tego typu produkty oferują m.in. rozbudowany refaktoring, formatowanie kodu i wykrywanie potencjalnych błędów. Jednakże środowiskiem, do którego powstaje najwięcej wtyczek jest niewątpliwie Eclipse, a wcześniej wspomniany Rational Software Analyzer jest właśnie pluginem dla tego środowiska. Warto zauważyć, że często funkcjonalności, które najpierw występują w postaci wtyczek, potem szybko stają się integralną częścią środowisk. Wynika to najprawdopodobniej z tego, że stosowanie dużej liczby rozszerzeń jest często okupione mniej stabilną pracą środowiska.

Debata Computerworld i Microsoftu o tworzeniu interfejsu użytkownika oraz użyteczności oprogramowania, czytaj str. 28.

Najważniejsze cechy IDE

  • debugowanie,
  • łatwość użycia,
  • łatwość edycji kodu,
  • czas kompilacji,
  • wizualne wsparcie,
  • szybkość działania kompilowanego kodu.

TOP 200