Politechnika Gdańska Wydział Elektroniki, Telekomunikacji i. Informatyka PRACA DYPLOMOWA. dr inŝ. Stanisław Szejko

Wielkość: px
Rozpocząć pokaz od strony:

Download "Politechnika Gdańska Wydział Elektroniki, Telekomunikacji i. Informatyka PRACA DYPLOMOWA. dr inŝ. Stanisław Szejko"

Transkrypt

1 Politechnika Gdańska Wydział Elektroniki, Telekomunikacji i Informatyki Katedra InŜynierii Oprogramowania Rodzaj studiów: Kierunek: Specjalność: Dyplomant: Nr albumu: Magisterskie Informatyka InŜynieria Systemów i Baz Danych Marcin Kałkus 88967/ETI PRACA DYPLOMOWA Promotor pracy: dr inŝ. Stanisław Szejko Narzędzie do rejestracji zmian i problemów w projekcie informatycznym Streszczenie: Głównym celem pracy było zaproponowanie wzorca procesu zarządzania problemami w projektach informatycznych i jego praktyczna implementacja w postaci narzędzia wspomagającego ten proces. W ramach pracy zdefiniowano pojęcia związane z procesem, zidentyfikowano źródła problemów oraz przeanalizowano ich cykl Ŝycia. W wyniku analizy powstał model problemu, który posłuŝył jako wzorzec przy konstrukcji narzędzia. Zarządzanie problemami zostało takŝe opisane w szerszym kontekście jako element składowy procesu zarządzania konfiguracją oraz zaprezentowano wybrane rozwiązania i narzędzia obecnie dostępne na rynku. W ramach pracy powstał rozproszony system wspomagający wybrane aspekty zarządzania problemami, który wspiera pracę grupową i nie wymaga centralnego pojemnika danych. Aplikacja BAGGU została wytworzona w technologii Microsoft.NET, integruje się z wybranymi narzędziami do kontroli wersji oraz wykorzystuje pliki XML do implementacji warstwy danych. Gdańsk 2006

2 Podziękowania: Chciałbym podziękować Promotorowi za owocną współpracę i ogromną pomoc, oraz Bliskim za wsparcie. 2

3 Spis treści 1. Wstęp Wprowadzenie Zawartość pracy Źródła problemów w projekcie informatycznym Wprowadzenie Rodzaje problemów Defekty Terminologia Przyczyny powstawania defektów Rodzaje defektów Metody ograniczania wpływu defektów Postępowanie z defektami Zmiany Źródła zmian Rodzaje zmian Wpływ zmian na projekt Proces zarządzania zmianami Koszty defektów i zmian Cykl Ŝycia problemu w projekcie informatycznym Wprowadzenie Cykl Ŝycie problemu Zgłoszenie problemu Obsługa problemu Rozwiązanie problemu Diagram stanu problemu MoŜliwe stany problemu MoŜliwe rozwiązania problemu Role w procesie obsługi problemów Podsumowanie Model problemu Wprowadzenie Scenariusz zgłaszania problemu Podstawowe atrybuty problemu Identyfikator problemu Ogólny opis problemu Metryka problemu Szczegółowy opis problemu Priorytet problemu Stan problemu Przydział odpowiedzialności Historia problemu Modyfikacje atrybutów

4 4.4.2 Rozszerzenia opisu problemu Uwagi i komentarze Dodatkowe informacje o problemie Identyfikator produktu Wersja produktu Słowa kluczowe Dokuczliwość problemu Charakter problemu Powtarzalność Widzialność Składnik produktu Załączniki Pole duplikatu Model problemu Dynamika modelu problemu Diagram aktywności procesu obsługi problemu Diagram stanów problemu Podsumowanie Zarządzanie problemami w projekcie informatycznym Wprowadzenie Ogólny opis procesu Konfiguracja projektu Zarządzanie konfiguracją Zarządzanie konfiguracją systemu Zarządzanie problemami Śledzenie postępu prac Aspekty zarządzania konfiguracją Zarządzanie wymaganiami Zarządzanie incydentem Zarządzanie problemem Zarządzanie wersją Zarządzanie konfiguracją w najpopularniejszych metodykach Rational Unified Process PRINCE Proces zarządzania konfiguracją w kontekście Podsumowanie Przegląd rozwiązań dostępnych na rynku Wprowadzenie Narzędzia do ewidencji i śledzenia problemów Model narzędzia Przykładowe narzędzia Narzędzia do kontroli wersji Model narzędzia Przykładowe narzędzia Zestawienie cech Podsumowanie Narzędzie wspomagające proces zarządzania problemami

5 7.1 Wprowadzenie Specyfikacja wymagań Cele biznesowe Zakres problemu Udziałowcy Zdarzenia biznesowe i biznesowe przypadki uŝycia Wymagania wobec systemu Analiza wymagań i ograniczeń oraz dyskusja rozwiązań Bezpieczeństwo Warstwa danych Model logiczny systemu Wizja architektoniczna Zakres systemu Aktorzy i przypadki uŝycia Projekt narzędzia Decyzje projektowe Technologia Środowisko wytwórcze Środowisko docelowe Projekt systemu i klas Dynamika systemu Projekt warstwy danych Projekt interfejsu uŝytkownika Opis implementacji Instalacja narzędzia Usuwanie narzędzia Pierwsze uruchomienie aplikacji Tworzenie nowego projektu Dołączanie do istniejącego projektu Rezygnacja z uczestnictwa w projekcie Ustalanie ról w obrębie projektu Przeglądanie listy problemów Rejestracja problemów Podgląd problemów Testowanie narzędzia Testy funkcjonalne Testy akceptacyjne Wyniki Wnioski Podsumowanie Bibliografia KsiąŜki Artykuły Materiały wykładowe Strony Web Dokumentacja techniczna Załączniki

6 1. Wstęp Intellectuals solve problems, geniuses prevent them Albert Einstein 1.1 Wprowadzenie W obecnych czasach obserwuje się gwałtowny wzrost rozmiarów i stopnia złoŝoności wytwarzanego oprogramowania. Projekty informatyczne, bez względu na segment rynku, w którym operują, stają się coraz bardziej skomplikowane, pochłaniają ogromne budŝety i trwają coraz dłuŝej. Z drugiej strony nie mniejszym zmianom podlega rynek odbiorców oprogramowania, w którym klienci systemów informatycznych stają się coraz bardziej świadomi swoich potrzeb i stawiają przed dostarczanymi im produktami coraz wyŝsze wymagania zarówno pod względem funkcjonalności jak i jakości. Rezultatem tych wszystkich zjawisk zachodzących na rynku informatycznym jest wzrost złoŝoności procesów zarządzania przedsięwzięciami wytwarzania oprogramowania. InŜynieria oprogramowania przeistoczyła się w dyscyplinę wymagającą współdziałanie zespołów złoŝonych niekiedy z bardzo wielu osób. Nowoczesne projekty informatyczne bezwzględnie wymagają efektywnej i dobrze skoordynowanej współpracy zespołu specjalistów, zarówno w kwestii konstrukcji oprogramowania jak równieŝ zarządzania samym przedsięwzięciem. Zarządzanie projektem informatycznym to niezwykle złoŝona dziedzina wiedzy, łącząca w sobie zagadnienia z zarządzania zasobami ludzkimi, organizacji i planowania, szacowania zasobów, przydzielania odpowiedzialności itp. Jak kaŝde inne przedsięwzięcie, moŝe ono napotkać na wiele problemów w trakcie swojego trwania. Radzenie sobie z tymi przeciwnościami jest jednym z kluczowych aspektów zarządzania współczesnym projektem informatycznym. Niniejsza praca dyplomowa jest poświęcona w głównej mierze procesowi zarządzania problemami w projektach informatycznych. Jest to niezwykle waŝny element współczesnego procesu wytwórczego, który wdroŝony w sposób właściwy, w wielkim stopniu ułatwia i usprawnia pracę całego zespołu, co w konsekwencji prowadzi do powstawania oprogramowania lepszej jakości. Jak wiadomo w kaŝdej fazie projektu informatycznego pojawiają się problemy zgłaszane zarówno przez odbiorcę produktu jak 6

7 równieŝ samych jego twórców. Efektywne gromadzenie i zarządzanie tego typu danymi juŝ w niewielkich projektach moŝe być zadaniem nietrywialnym. Rozwiązanie tak skomplikowanego zagadnienia przy rozmiarach współczesnych projektów niewątpliwie wymaga wsparcia narzędziowego. Dostępne na rynku rozwiązania bazują na centralnie umieszczonej bazie danych problemów, do której dostęp uzyskuje się przez interfejs WWW albo dedykowane oprogramowanie klienckie. Narzędzia tego typu sprawdzają się jedynie w wypadku duŝych zespołów projektowych. W dobie Internetu oprogramowanie często tworzone jest przez mniejsze zespoły pracujące w warunkach rozproszonych przy braku dostępu do centralnej infrastruktury technicznej. Konieczne staje się znalezienie alternatywy dla wyŝej wymienionych rozwiązań, która oferowałaby podobne moŝliwości przy jednoczesnej rezygnacji z centralnego pojemnika danych na rzecz lokalnie przechowywanych kopii danych i mechanizmów ich synchronizacji przy pomocy ogólnodostępnego medium, np. poczty elektronicznej. Stąd inspiracja do napisania pracy, która oprócz solidnej podstawy teoretycznej, stanowiłaby praktyczne wykorzystanie wiedzy z tego zakresu w postaci dedykowanego narzędzia ukierunkowanego na spełnienie wyŝej opisanych wymagań. Zasadniczym celem pracy jest zatem opracowanie prototypu narzędzia wspomagającego zarządzanie problemami w projekcie informatycznym, które wspiera pracę grupową, ale nie wymaga centralnego serwera do przechowywania bazy danych o problemach. Aby cel ten osiągnąć konieczne było takŝe przeprowadzenie analizy całego procesu zarządzania problemami od momentu ujawnienia, poprzez ich rejestrację, obsługę i ostateczne rozwiązanie. Celem teoretycznej części pracy jest analiza procesu zbierania, zarządzania i radzenia sobie z problemami w projektach informatycznych. Pierwsza część pracy stanowi syntezę wiedzy ksiąŝkowej oraz praktycznej na ten temat. Bezpośrednim wynikiem analizy jest opis cyklu Ŝycia problemu oraz jego bardziej formalny model. Stąd drugim celem pracy i zarazem przykładem zastosowania opracowanego modelu problemu był prototyp narzędzia opracowywany w ramach części praktycznej pracy dyplomowej. Powstałe oprogramowanie w załoŝeniu miało posiadać niezbędny zakres funkcjonalności umoŝliwiający sprawne zarządzanie problemami w rozproszonym projekcie. Funkcjonalna kompletność, zgodność z dobrze opracowany modelem problemu, wspieranie pracy grupowej, integracja z narzędziami do wersjonowania kodu oraz niezaleŝność od centralnego pojemnika danych to główne upatrywane zalety narzędzia, które miało 7

8 powstać. Główną motywacją do jego opracowania było i nadal pozostaje przeświadczenie o tym, Ŝe powstały system będzie mógł być wykorzystany w przyszłych projektach, zarówno tych prowadzonych na uczelni jak i komercyjnych. Zamykający część teoretyczną przegląd rynku pod kątem oprogramowania wspomagającego proces zarządzania problemami moŝe być takŝe przydatny przy selekcji narzędzi w rzeczywistych projektach. 1.2 Zawartość pracy Jak wspomniano wyŝej praca zasadniczo dzieli się na dwie części. W rozdziałach 2-6 znajduje się teoretyczne wprowadzenie do tematyki zarządzania problemami w projektach informatycznych. Celem pierwszej części dyplomu jest usystematyzowanie wiedzy na temat tego procesu oraz stworzenie modelu słuŝącego do budowy narzędzia. Reszta pracy koncentruje się na jej praktycznej części i zawiera kompletny opis procesu analizy, projektowania oraz implementacji aplikacji. Praca rozpoczyna się rozdziałem pod tytułem Źródła problemów w projekcie informatycznym, który stanowi niejako wprowadzenie do poruszanej tematyki. W rozdziale tym pojawiają się definicje defektu i zmiany oraz wprowadzana jest klasyfikacja problemów i ich potencjalnych źródeł. Głównym celem tej części pracy było wyodrębnienie rodzajów problemów i sklasyfikowanie ich zarówno pod względem pochodzenia, wagi, czasu występowania, jak równieŝ ich kosztu i wpływu na proces wytwórczy. Zaprezentowana terminologia i klasyfikacja problemów posłuŝyła jako odniesienie przy budowie formalnego opisu problemu w dalszej części pracy. Jednocześnie uznanie problemu jako pojęcie nadrzędne w stosunku do defektu i zmiany przyczyniło się do powstania niekonsekwencji tytułu dyplomu w odniesieniu do zaproponowanej terminologii. Treść pracy odzwierciedla jednak przyjęty w Rozdziale 2 podział problemów na defekty i zmiany, a pozostawienie tytułu w pierwotnej postaci było podyktowane głównie wymogami formalnymi. W kolejnym rozdziale zatytułowanym Cykl Ŝycia problemu w projekcie informatycznym znajduje się kompletny opis cyklu Ŝycia problemu w projekcie informatycznym począwszy od zgłoszenia, poprzez jego przepływ przez organizację i na ostatecznym rozwiązaniu kończąc. Zasadniczym celem rozdziału jest opisanie sposobu przepływu informacji na temat problemu w firmie wytwarzającej oprogramowanie, ze szczególnym uwzględnieniem ról i odpowiedzialności poszczególnych członków zespołu 8

9 projektowego. Przeprowadzenie dynamicznej analizy problemu było konieczne przed przystąpieniem do budowy formalnego modelu problemu. Rozdział Model problemu stanowi jeden z najistotniejszych punktów pracy. Na bazie analizy przeprowadzonej w poprzednich dwóch rozdziałach został stworzony abstrakcyjny model problemu oraz jego zachowania. W rozdziale tym zaproponowałem formalny opis struktury problemu, obejmujący wszystkie jego najwaŝniejsze aspekty, wraz z niezbędnymi atrybutami koniecznymi do jego skutecznego śledzenia, zarządzania i rozwiązywania. Efektem końcowym rozwaŝań jest kompletny model problemu wyraŝony w języku UML, który posłuŝył jako podstawa przy konstrukcji narzędzia w części praktycznej pracy. Kolejny rozdział zatytułowany Zarządzanie problemami w projekcie informatycznym jest miejscem, w którym proces zarządzania problemami podlega analizie w nieco szerszym kontekście. W rozdziale tym zaprezentowane są poszczególne aspekty bardziej ogólnego procesu zwanego zarządzaniem konfiguracją. Rozdział zamyka ogólny opis najpopularniejszych metodyk wytwarzania oprogramowania w kontekście stosowanych w nich metod zarządzania zmianami i defektami. Część teoretyczną pracy zamyka rozdział zatytułowany Przegląd rozwiązań dostępnych na rynku. Jest on całkowicie poświęcony przeglądowi technologii i narzędzi dostępnych obecnie na rynku i obejmuje najpopularniejsze komercyjne i darmowe narzędzia do wersjonowania kodu oraz do śledzenia zmian i defektów. Opis konkretnych aplikacji poprzedzony jest ogólnym spojrzeniem na cechy, jakimi odznaczają się narzędzia reprezentujące poszczególne segmenty tego rynku. Dalsza część pracy w całości poświęcona została części praktycznej dyplomu. Stanowi ona streszczenie i komentarz do dokumentów projektowych będących załącznikami do pracy. Zawiera identyfikację wymagań nałoŝonych na aplikację wraz z opisem dziedziny problemowej, udziałowców oraz biznesowych przypadków uŝycia systemu. Dalsza część poświęcona jest aspektom projektowym i składa się z opisu najciekawszych problemów i ich proponowanych rozwiązań. Końcowe efekty pracy nad systemem przedstawione zostały w postaci opisu implementacji oraz wniosków z jego testowego wdroŝenia. WdroŜenie to jest o tyle ciekawe, iŝ dotyczy samego projektu mojej pracy dyplomowej, w którym to narzędzie było wykorzystywane od momentu uzyskania przez nie niezbędnego minimum funkcjonalności. 9

10 Pracę ostatecznie zamyka Podsumowanie, którego głównym zadaniem jest wyjaśnienie wszystkich ciekawych kwestii i trudności, jakie napotkałem w trakcie zgłębiania wiedzy na temat zarządzania problemami w projekcie informatycznym oraz konstrukcji narzędzia, które ma ten proces wspomagać. W załącznikach pracy umieszczone zostały dokumenty projektowe powstałe w trakcie realizacji systemu wspomagającego proces zarządzania problemami specyfikację wymagań systemowych oraz projekt systemu. 10

11 2. Źródła problemów w projekcie informatycznym Life is about change whether good or bad, and being able to adjust accordingly Okechukwu Keke 2.1 Wprowadzenie Projekt informatyczny, rozumiany jako zespół skoordynowanych zadań prowadzących do realizacji wyznaczonego celu, moŝe dotyczyć kaŝdej dziedziny Ŝycia. Wytwarzanie oprogramowania jest dziedziną nauki próbującą zamknąć w ramach definicji pewne zjawiska zastane, występujące w świecie fizycznym, ale niedostatecznie sformalizowane. Oprogramowanie jest przede wszystkim tworem myśli. Z jednej strony jego twórcy nie są ograniczeni technicznymi aspektami procesu tworzenia, z drugiej jednak strony są naraŝeni na błędy wynikające z faktu pracy tylko i wyłącznie z myślą ludzką i jej zapisem formalnym. Ta nieograniczona swoboda tworzenia jest jednocześnie źródłem największych problemów przy realizacji przedsięwzięć informatycznych. Niniejszy rozdział zawiera opis źródeł problemów w projekcie informatycznym, podejmuje próbę ich klasyfikacji zarówno pod względem pochodzenia, wagi jak równieŝ czasu występowania. W kontekście projektu informatycznego radzenie sobie z problemami stanowi jeden z elementów składowych szerszego procesu zwanego zarządzaniem konfiguracją. Proces ten w ogólności zajmuje się kontrolą wszystkich produktów projektu. Konfiguracja to zbiór logicznie powiązanych produktów, które muszą być traktowane i zarządzane jako złoŝona całość uwzględniająca zaleŝności pomiędzy wersjami części składowych i ich statusami [wwwwiki]. Wszelkie informacje na temat problemów pojawiających się w trakcie projektu, bez względu na ich charakter i przyczyny powstawania, stanowią jeden z wielu zasobów projektu i tym samym muszą podlegać sprawnemu procesowi rejestracji i zarządzania. Obok problemów procesowi temu podlega szereg innych aspektów projektu. PoniŜej znajduje się lista zarządzanych aspektów wraz z wyjaśnieniem ich znaczenia w kontekście procesu zarządzania konfiguracją: incydenty niepoŝądane zdarzenia zaobserwowane podczas pracy systemu problemy zidentyfikowane, znane i opisane zagadnienia dotyczące projektu, które uznane są jako zagroŝenia dla jego dalszego przebiegu, przyczyną problemów mogą być defekty, a ich rozwiązaniem zmiany 11

12 defekty - niepoprawne konstrukcje znajdujące się w dowolnym elemencie systemu informatycznego, które mogą prowadzić do niewłaściwego jego działania zmiany formalnie zgłoszone i udokumentowane modyfikacje wprowadzane do pierwotnych załoŝeń i konstrukcji systemu, naleŝy tutaj wyraźnie zaznaczyć, Ŝe prośba o zmianę (problem) nie jest toŝsama z jej fizycznym wprowadzeniem do systemu (zmiana). wersje kolejne wydania systemu, zawierające jasno sprecyzowane wersje swoich elementów składowych (komponentów, modułów, dokumentacji) wymagania niejawne oraz jawnie sprecyzowane i udokumentowane oczekiwania odbiorcy systemu wobec mającego powstać oprogramowania [IEEE 1233] Rysunek 2-1 przedstawia schemat zaleŝności pomiędzy wymienionymi elementami oraz umieszcza je w odpowiednich obszarach procesu zarządzania konfiguracją. Jak widać kaŝdemu kluczowemu aspektowi poświęcony jest oddzielny podproces. Jednym z tych podprocesów jest zarządzanie problemami, które stanowi główny obiekt zainteresowań niniejszej pracy dyplomowej. przyczyną moŝe być naprawa wymaga tworzy nową Rysunek 2-1 Podprocesy zarządzania konfiguracji (źródło własne) Warto w tym momencie zaznaczyć, Ŝe róŝnica pomiędzy prośbą o zmianę (ang. change request) a faktyczną zmianą wprowadzoną do systemu (ang. change, modification) powoduje, Ŝe ta pierwsza być moŝe powinna zostać umiejscowiona na styku obszarów zarządzania problemami i zmianami. Jednocześnie, poniewaŝ praca koncentruje się na obszarze zarządzania problemami, dla potrzeb przejrzystości dalszych rozwaŝań pod pojęciem zmiany będzie rozumiana prośba o jej wprowadzenie (ang. change request). 12

13 Wszystkie opisane wyŝej aspekty zarządzania konfiguracją będą szerzej opisane w Rozdziale 5 Zarządzanie problemami w projekcie informatycznym. W dalszej części tego rozdziału główny nacisk kładziony jest na opis rodzajów defektów oprogramowania oraz przyczyn wprowadzania zmian do systemów informatycznych. 2.2 Rodzaje problemów Projekt informatyczny jak kaŝde inne planowane i zarządzane przedsięwzięcie moŝe napotkać na szereg róŝnego rodzaju problemów w trakcie swego trwania. Zakres moŝliwości w tej materii jest praktycznie nieograniczony i moŝe obejmować problemy natury czysto technicznej, organizacyjnej, a nawet psychologicznej. Ze względu na opisaną róŝnorodność aspektów konieczne jest jasne określenie, jakiego rodzaju problemy będą przedmiotem dalszej analizy. Projektanci oraz programiści popełniają często pomyłki wynikające z niepoprawnego pojmowania wymagań oraz ich realizacji. KaŜdy zaszyty w produkcie defekt ma ogromny wpływ na koszt i postrzeganą jakość systemów informatycznych. Drugą waŝną cechą kaŝdego przedsięwzięcia informatycznego jest jego płynność. Praktyka pokazuje jak trudne jest formalne opisanie procesów zachodzących w świecie fizycznym. Osiągnięcie w pełni kompletnego opisu dziedziny biznesowej systemu informatycznego za pierwszym podejściem wydaje się wręcz niemoŝliwe. Tym samym kaŝdy projekt informatyczny skazany jest na napotkanie zmian w trakcie procesu jego realizacji. Zmiany mogą generować kolejne defekty, z kolei defekty obnaŝają potrzebę kolejnych zmian. Wydaje się, Ŝe opisane wyŝej problemy stanowią główne zagroŝenie dla powodzenia współczesnych projektów informatycznych. Defekty i zmiany mają wymiar nie tylko techniczny, ale takŝe dotykają aspektów zarządzania i organizacji samego projektu, a niejednokrotnie mają namacalny wpływ na cały proces wytwórczy w organizacji. Taka złoŝoność obu rodzajów problemów wydaje się być wystarczającym uzasadnieniem do ich dalszej analizy, co jest celem mojej pracy dyplomowej. Przyjęcie jako przedmiot rozwaŝań właśnie defektów oraz zmian wiąŝe się nie tylko z zawęŝeniem zakresu rozpatrywanych problemów, ale równieŝ definiuje obszar samej analizy. Opisywane w dalszej części pracy problemy będą dotykały projektów informatycznych oraz przede wszystkim wytwarzanych w ich trakcie produktów. Pod pojęciem produktu zazwyczaj rozumie się system informatyczny, czyli oprogramowanie, 13

14 którego głównym zadaniem i zarazem sensem istnienia jest wspieranie konkretnych procesów biznesowych odbiorcy. Pojęcia systemu oraz oprogramowania będą przeze mnie uŝywane zamiennie, jednak zawszę będą oznaczały produkt stricte informatyczny, z celowym pominięciem technicznych aspektów związanych np. z infrastrukturą sprzętową środowiska, w jakim dany system funkcjonuje. Takie podejście pozwoli na skoncentrowanie uwagi na problemach istotnych z punktu widzenia zarządzania cyklem wytwórczym i jednoczesne odrzucenie zagadnień wynikających z fizycznych ograniczeń i cech sprzętu. Warto zaznaczyć, Ŝe wytworami projektu informatycznego mogą być takŝe inne artefakty i składniki powstające w trakcie jego trwania takie jak dokumenty projektowe czy inne produkty i półprodukty kolejnych faz cyklu wytwórczego. Problem defektów oraz zmian dotyka nie tylko wynikowego systemu informatycznego, ale takŝe wszystkich innych rezultatów pracy zespołu projektowego, dlatego teŝ pojęcie produktu naleŝy zawsze rozpatrywać w nieco szerszym kontekście i nie zawęŝać go jedynie do docelowego systemu. 2.3 Defekty Defekty są niestety nieodłącznym elementem oprogramowania komputerowego i wydają się nieuniknione. Ich efektywne eliminowanie leŝy w interesie zarówno uŝytkowników, jak i producentów aplikacji. Stosuje się rozmaite techniki wykrywania i eliminowania defektów oraz wprowadza się nowe metodologie, które mają na celu zmniejszanie prawdopodobieństwa popełnienia błędu w procesie wytwórczym. Największym problemem inŝynierii oprogramowania pozostaje fakt, iŝ róŝnego rodzaju metody, z testowaniem na czele, mogą wykazać jedynie istnienie defektów, nigdy zaś ich brak Terminologia Najprostsza definicja defektu mówi o niepoprawnej konstrukcji w oprogramowaniu, która moŝe doprowadzić do niewłaściwego jego działania. Konsekwencją defektu jest błędne wykonanie programu. Jest to jednak definicja bardzo wąska, która nie obejmuje całości procesów zachodzących w cyklu wytwórczym oprogramowania. Pojęcie defektu jest często niesłusznie uŝywane zamiennie z innymi pojęciami typu błąd czy awaria. PoniŜej przytaczam definicje tych pojęć powiązanych z tematyką niezawodności i bezpieczeństwa systemów informatycznych [GORBZI2005]: 14

15 Awaria (ang. failure) awaria występuje w momencie, gdy efekty działania systemu odbiegają od tych zdefiniowanych w jego specyfikacji i oprogramowanie przestaje realizować usługi oczekiwane przez uŝytkowników. Błąd (ang. error) błąd to fragment lub stan systemu, który moŝe prowadzić do powstania awarii, innymi słowy awarie występują, dlatego Ŝe oprogramowanie jest błędne (ang. erroneous). Błąd jest niepoprawnym stanem systemu, którego nie spodziewali się jego projektanci. Defekt (ang. fault) przyczyną błędu jest defekt (sprzętu lub oprogramowania), zaszyty na stałe lub chwilowo w systemie. Defekt jest zatem niepoprawną konstrukcją znajdującą się w oprogramowaniu, która moŝe prowadzić do niewłaściwego jego działania, czyli wystąpienia błędu. Pomyłka (ang. mistake) pomyłka jest przyczyną powstania defektu, z kolei źródłem pomyłek jest człowiek. Stosując wyŝej zdefiniowane pojęcia moŝna precyzyjnie prześledzić proces powstawania negatywnych skutków defektów oprogramowania. Przykładowy scenariusz moŝe wyglądać następująco: twórcy oprogramowania zdarza się pomyłka w trakcie konstrukcji systemu pomyłka powoduje wprowadzenie defektu do oprogramowania defekt staje się przyczyną błędu aktywacja błędu w trakcie działania systemu prowadzi do jego awarii Proces ten został schematycznie przedstawiony na Rysunku 2-2. Jak widać pomyłki i wynikające z nich defekty powstają zasadniczo na etapie wytwarzania systemu informatycznego, podczas gdy ich aktywacja w postaci błędów i awarii następuje juŝ w trakcie jego działania. Warto zaznaczyć, Ŝe przyczyną zaszycia defektu w kodzie oprogramowania jest zazwyczaj pomyłka człowieka programisty, który źle zaimplementuje daną funkcjonalność lub analityka, który dostarczy nieprawidłowy projekt lub specyfikację systemu. 15

16 Rysunek 2-2 Defekt jako źródło awarii systemu (źródło własne) Z punktu widzenia procesu zarządzania problemami w projekcie informatycznym najwaŝniejszym pojęciem jest oczywiście defekt, gdyŝ jest on z załoŝenia przyczyną pojawiającego się problemu. Awaria i prowadzący do niej błąd stanowią jedynie konsekwencje zaistnienia defektu w oprogramowaniu. Kolejną bardzo waŝną cechą wszelkich defektów oprogramowania jest to, Ŝe są one w nim zaszyte od samego początku i nigdy nie powstają samoistnie w wyniku fizycznego zuŝycia produktu [GORBZI2005]. Terminologia związana z defektami i ich skutkami nie jest do końca uporządkowana. Oprócz wyŝej opisanych definicji występuje duŝa liczba określeń i zwrotów, które często mają podobne lub wręcz identyczne znaczenia, jednak sposób ich interpretacji i wzajemnej hierarchii bywa odmienny w zaleŝności od stosującej je organizacji. Bardzo powszechnym tego przykładem jest utoŝsamianie błędu z defektem i stosowanie tych pojęć zamiennie. Błąd często promowany jest takŝe do pojęcia nadrzędnego, które zbiorowo obejmuje zarówno defekty jak i awarie. Kolejnym często spotykanym pojęciem są tak zwane anomalie, które zwykle oznaczają klasę błędów, które samodzielnie nie powodują awarii, niemniej jednak mogą doprowadzić do awarii pośrednio. W tym sensie anomalia jest odchyleniem stanu systemu od normalnej pracy, co niekoniecznie musi być przyczyną jego nieprawidłowego działania. Bardzo powszechnym określeniem, zwłaszcza wśród programistów, jest pojęcie pluskwy (ang. bug), które najczęściej oznacza wadę występującą bezpośrednio w kodzie źródłowym, co oznacza, iŝ jest to defekt implementacji. W praktyce znacznie częściej spotyka się anglojęzyczny odpowiednik tego pojęcia, gdyŝ słowo pluskwa zasadniczo nie przyjęło się w polskiej 16

17 terminologii [WISZ2006]. Podobnym potocznym określeniem, które zyskało popularność takŝe wśród uŝytkowników, jest tak zwane zawieszenie się lub załamanie (ang. crash). Formalnie moŝna to pojęcie traktować jako szczególny typ awarii, przy której system całkowicie przestaje funkcjonować. Taka wieloznaczność i mnogość terminologii związanej z tematyką defektów moŝe utrudniać tworzenie jednoznacznego i precyzyjnego opisu zachowania problemów w projekcie informatycznym. Na potrzeby mojej pracy dyplomowej postaram się rygorystycznie trzymać pierwotnie zaprezentowanej i popartej przykładem hierarchii pojęć zawierającej defekt, błąd oraz awarię Przyczyny powstawania defektów Aby skutecznie gromadzić informacje na temat defektów oprogramowania, naleŝy w pierwszej kolejności zrozumieć powody ich powstawania. Najogólniej rzecz ujmując przyczyną wszelkiego rodzaju defektów i uchybień w procesie wytwarzania oprogramowania są pomyłki w tłumaczeniu informacji. Proces budowy oprogramowania, bez względu na przyjęty cykl wytwórczy, moŝna bowiem opisać jako zdefiniowany ciąg czynności poczynając od sformułowania problemu, poprzez jego analizę, projekt i kończąc na szczegółowej implementacji rozwiązującej dane zagadnienie. Budowa oprogramowania jest, więc dokonaniem pewnej liczby przekładów informacji, tłumaczących kolejne postacie problemu na róŝne rozwiązania pośrednie, aŝ do otrzymania szczegółowego ciągu rozkazów maszynowych. Defekty oprogramowania powstają właśnie wtedy, gdy tłumaczenie jednej reprezentacji zadania na inną, bardziej szczegółową, jest niewierne lub niedokładne. Warto zaznaczyć, Ŝe zarówno sam proces wytwarzania oprogramowania jak i jego końcowe produkty są na tyle specyficzne, Ŝe nie podlegają regułom tradycyjnie rozumianej inŝynierii. NajwaŜniejszą cechą odróŝniającą oprogramowanie od innych produktów jest fakt, iŝ jego niezawodność nie ulega pogorszeniu na skutek eksploatacji. Krzywa awaryjności produktów informatycznych została zaprezentowana na Rysunku

18 INTENSYWNOŚĆ AWARII SYSTEMU (ang. failure rate) BŁĄD KRZYWA RZECZYWISTA KRZYWA IDEALNA CZAS Rysunek 2-3 Krzywa awaryjności oprogramowania (R.Pressman, 2003) W odróŝnieniu od np. sprzętu, oprogramowanie nie starzeje się i nie jest podatne na awarie spowodowane stopniowym zuŝyciem się jego elementów składowych. Wydawałoby się, Ŝe oprogramowanie, na skutek ciągłego wykrywania i usuwania defektów, staje się bardziej niezawodne, im dłuŝej jest eksploatowane, co pokazuje krzywa idealna na wykresie. Niestety praktyka pokazuje, iŝ wszelkie zmiany i poprawki wprowadzane do oprogramowania w trakcie jego cyklu Ŝycia przyczyniają się takŝe do gwałtownego wzrostu awaryjności, poprzez wprowadzanie do produktu nowych defektów w miejsce tych naprawianych. NaleŜy mieć ten specyficzny fakt na uwadze przy analizie przyczyn powstawania defektów w oprogramowaniu Rodzaje defektów Defekty występujące w systemach informatycznych moŝna klasyfikować na róŝne sposoby - pod względem momentu ich występowania w cyklu wytwarzania, uciąŝliwości, priorytetu rozwiązania, wpływu na działanie systemu oraz szeregu innych cech. PoniŜej znajduje się charakterystyka najczęściej stosowanych podziałów. Pod pojęciem klasyczny cykl Ŝycia systemu rozumie się całość działań prowadzonych od ujawnienia potrzeby budowy systemu, poprzez analizę stawianych wymagań, projektowanie i implementację oprogramowania, testowanie, jego pielęgnację, do zakończenia wykorzystania oprogramowania [SZEJIW2003]. Wszystkie znane i stosowane obecnie standardy wytwarzania oprogramowania czerpią załoŝenia z tej definicji. Na kaŝdym etapie rozwoju oprogramowania pojawiają się róŝnego rodzaju 18

19 defekty. Przyjmując przytaczany model klasyczny jako odniesienie moŝna zatem wyróŝnić następujące klasy defektów, jakie pojawiają się w trakcie wytwarzania oprogramowania: defekty produktów i półproduktów o fazy specyfikacji wymagań o modelu i projektu systemu o kodowania (implementacji) o fazy testowania o dokumentacji o procesu zarządzania projektem PowyŜsza klasyfikacja jest najbardziej ogólna ze wszystkich tutaj prezentowanych, kaŝda kolejna stanowi jedynie jej uszczegółowienie na konkretnym poziomie. Rysunek 2-4 przedstawia bardziej praktyczne podejście do kategoryzacji defektów oprogramowania. Obrazuje on procentowy podział najczęstszych lokalizacji wykrywanych defektów. Wyraźnie widać, Ŝe zdecydowana większość defektów ma swoje źródła w specyfikacji wymagań oraz projekcie systemu. Defekty natury technicznej powstające na dalszych etapach cyklu wytwórczego mają relatywnie mniejszy udział procentowy. Rysunek 2-4 Procentowy udział defektów (Sheldon, IEEE Software, July 1992) Defekty, bez względu na moment ich powstania w cyklu wytwórczym, odznaczają się róŝnym stopniem waŝności. Systemy informatyczne praktycznie nigdy nie będą pozbawione defektów, a jednocześnie kaŝdy projekt to przedsięwzięcie ograniczone fizycznymi warunkami takimi jak czas realizacji czy budŝet. Wszystko to powoduje, Ŝe przy identyfikacji defektów konieczne jest ich odpowiednie stopniowanie. Biorąc pod uwagę priorytet przy ich analizie i usuwaniu, defekty moŝna podzielić na: 19

20 defekty krytyczne defekty niekrytyczne W fazie specyfikacji wymagań oraz projektu, powyŝszy podział nie moŝe być stosowany, gdyŝ praktycznie kaŝde zagadnienie uznane za defekt powinno być sklasyfikowane jako krytyczne dla dalszego powodzenia projektu. Obok stopnia uciąŝliwości defektu jedną z najwaŝniejszych cech jest sposób jego aktywacji i rodzaj negatywnego wpływu na działanie całego systemu. Defekty oprogramowania występują w bardzo róŝnych miejscach i często błędy wynikające z ich istnienia aktywują się wysoce niedeterministycznie. Istotna z punktu klasyfikacji jest takŝe częstotliwość występowania defektów oraz konsekwencje ich aktywacji. PoniŜej znajduje się podział uwzględniający powyŝsze aspekty: defekty losowe (zmienne, trudne do określenia warunki aktywacji) defekty stabilne (stałe warunki aktywacji) defekty narastające (defekty, których istnienie rodzi zagroŝenie wystąpienia kolejnych problemów) Kolejną cechą jest natura samego defektu. Działanie oprogramowania niezgodne z oczekiwaniami moŝe się przejawiać zarówno w postaci niepoprawnych wyników jak i źle oddanej funkcjonalności, co powoduje kolejny podział na defekty funkcjonalne oraz defekty obliczeniowe. Defekty natury funkcjonalnej są silnie powiązane z postrzeganą subiektywnie przez uŝytkowników ergonomią interfejsu uŝytkownika. Znaczna część problemów zgłaszanych przez końcowych odbiorców oprogramowania dotyka właśnie tej sfery, choć ich przyczyna niekoniecznie musi tkwić w samej warstwie prezentacji systemu. Niemniej jednak, przy zbieraniu informacji o defektach naleŝy koniecznie sklasyfikować dane zagadnienie jako defekty uciąŝliwe oraz defekty kosmetyczne. Zaprezentowane klasyfikacje stanowią moją subiektywną interpretację cech defektów i stanowią jedynie przykład róŝnorodności problemów, z jakimi spotykamy się w trakcie cyklu wytwórczego oprogramowania. KaŜdy projekt moŝe odznaczać się indywidualną specyfiką i na jego potrzeby mogą być tworzone zupełnie odmienne hierarchie zagadnień. W dalszej części rozdziału koncentrować się będę na pierwszym, najbardziej ogólnym, podziale defektów według momentu ich powstawania. Pozostałe 20

21 klasyfikacje, choć przydatne z punktu widzenia praktycznego, nie wymagają dalszych szczegółowych wyjaśnień Defekty produktów fazy specyfikacji wymagań Proces powstawania oprogramowania zazwyczaj rozpoczyna się od stworzenia ogólnego opisu problemu oraz zarysu poŝądanego rozwiązania. Zarys ten ma zazwyczaj postać zestawienia wymagań uŝytkownika ze wstępną koncepcją ich spełnienia. Niekiedy spis wymagań tworzy sam uŝytkownik, czasami zaś producent oprogramowania na podstawie wywiadów z uŝytkownikiem, badań jego potrzeb, swoich wyobraŝeń o potrzebach uŝytkownika itd. W kaŝdym z wymienionych przypadków istnieją bardzo duŝe szanse popełnienia pomyłki. UŜytkownik moŝe być niezdolny do adekwatnego opisania swych wymagań lub jego potrzeby mogą być fałszywie zinterpretowane w procesie identyfikacji. Najczęstszym przypadkiem jest jednak sytuacja, w której nie wszystkie potrzeby są odpowiednio rozpoznane i udokumentowane. Rysunek 2-5 obrazuje to zjawisko: Rysunek 2-5 Wymagania w zakresie systemu (J.Górski - InŜynieria Wymagań - wykład) Jak widać dla zidentyfikowanego zakresu systemu w praktyce znaczna część wymagań zostaje pominięta lub niekompletnie sprecyzowana. Kolejną duŝą grupą są wymagania źle zidentyfikowane, które wymagają bezwzględnej korekty. Spora liczba zidentyfikowanych wymagań zostaje wyspecyfikowana poprawnie poza granicami systemu tego typu pomyłki zwiększają nie tylko koszt i długość trwania projektu, ale mogą równieŝ stanowić źródło defektów we fragmentach systemu, z którymi mają punkty wspólne. Problem wadliwej specyfikacji wymagań wydaje się nieunikniony bez względu 21

22 na charakter projektu. Jest to o tyle niebezpieczne, Ŝe wszelkie pomyłki popełnione na tym etapie są szalenie kosztowne i są źródłem powstawania kolejnych pomyłek w następnych fazach procesu Defekty modelu i projektu systemu Drugi etap, analiza i projektowanie systemu, polega na przetłumaczeniu zebranych potrzeb uŝytkownika na zbiór rozwiązań dla budowanego systemu. Pracę nad oprogramowaniem rozpoczyna się od szczegółowej analizy problemu, który ma ono rozwiązywać. W przypadku systemów budowanych na zamówienie wymaga to moŝliwie wiernego odwzorowania procesów zachodzących w danej organizacji. Największy problem polega na tym, Ŝe nie wszystkie z działających procesów biznesowych są w pełni poznane i dają się w dostatecznie formalny sposób opisać. KaŜda z osób zaangaŝowanych w rozwój projektu informatycznego w pewnym sensie tworzy własną interpretację zastanej rzeczywistości. Klient stara się przedstawić problem analitykowi, ten z kolei przekazuje zinterpretowaną przez siebie wizję projektantowi, który na podstawie analizy rozpocznie prace nad techniczną specyfikacją systemu i poszczególnych rozwiązań. W rezultacie programista często otrzymuje wielokrotnie przeistoczony obraz rzeczywistego procesu biznesowego i staje przed koniecznością implementacji problemu, który, co najgorsze, będzie takŝe rozumiał na własny sposób. Fałszywa interpretacja wymagań, przeoczenie koniecznych do podjęcia decyzji lub załoŝeń niewystępujących jawnie wśród wymagań uŝytkownika powodują wprowadzenie defektów do powstającego produktu. Zasadniczym celem tego etapu jest przekształcenie załoŝeń w specyfikacje techniczne, będące precyzyjnym opisem zachowania całości systemu. Z uwagi na największą liczbę dokonywanych w tym etapie tłumaczeń jest on bardzo podatny na pomyłki w procesie budowy oprogramowania. Pomyłki, które moŝna tu popełnić, są niewątpliwie groźne i są silnie uzaleŝnione nie tylko od precyzji specyfikacji wymagań na system, ale takŝe od umiejętności projektantów. Po raz kolejny w procesie generacji defektów oprogramowania swój znaczący udział ma zatem czynnik ludzki. Ponadto, poniewaŝ z etapu na etap cyklu wytwarzania mamy do czynienia z coraz większą ilością przetwarzanej informacji, szansa wprowadzenia defektów do projektu i oprogramowania jest w tym kroku bardzo duŝa. 22

23 Defekty kodowania (implementacji) Kolejnym etapem konstrukcyjnym w fazie wytwórczej systemu jest kodowanie (implementacja) oprogramowania, a więc przełoŝenie specyfikacji oprogramowania na język programowania. Na tym etapie popełnia się z reguły wiele pomyłek, jednak znacząca ich ilość ma charakter pomyłki programisty. Zazwyczaj, choć niestety nie zawsze, są to defekty, których wykrycie i poprawienie jest relatywnie łatwe, a w przypadku defektów natury ortograficznej wykonywane jest to automatycznie przez narzędzia. Nie naleŝy jednak zapomnieć o fakcie, iŝ niedostatecznie szczegółowy i kompletny projekt systemu moŝe być przyczyną powaŝnych defektów. Programista, któremu projekt pozostawia zbyt duŝą dowolność w zakresie implementacji złoŝonych algorytmów jest potencjalnym źródłem wielu, trudnych do późniejszego wykrycia, defektów. W procesie implementacji występuje teŝ drugi rodzaj tłumaczenia - translacja programu w języku źródłowym na wykonywalny przez maszynę kod docelowy. Tej translacji dokonuje kompilator i moŝe się oczywiście zdarzyć, Ŝe zawiera on defekt powodujący błędną translację programu. Tego typu defekty musimy jednak traktować jako zjawiska będące zazwyczaj poza naszą kontrolą Defekty fazy testowania Przy okazji wytwarzania systemu powstaje takŝe szereg innych produktów, które równieŝ naraŝone są na pomyłki. Przykładami mogą być źle zaprojektowane plany testów, czy nieprawidłowo przeprowadzone i udokumentowane testy. Pod pojęciem defektów fazy testowania kryją się wszelkie defekty, które pozostają nie wykryte w produkcie na skutek niedoskonałości lub niekompletności procesu testowania. Dotyczy to zarówno testowania jednostkowego wykonywanego w trakcie prac implementacyjnych jak i późniejszych testów integracyjnych i systemowych. Warto zaznaczyć, iŝ pojęcie defektu testowania odnosi się tylko do przyczyn jego pozostania w produkcie, gdyŝ zasadniczo ich źródłami nadal pozostają czynniki ludzkie i defekty zaszczepione w poprzednich fazach. WaŜne jest jednak to, Ŝe przyczyną propagacji defektów są często źle zaprojektowane plany testów oprogramowania lub w skrajnych przypadkach ich kompletny brak. Kompleksowe testowanie kodu źródłowego powstającego w fazie implementacji moŝe przyczynić się do identyfikacji i eliminacji wielu defektów. 23

24 Defekty dokumentacji Jako wynik przedsięwzięcia programistycznego uzyskujemy program wraz z jego dokumentacją projektową oraz uŝytkową. Ten drugi składnik moŝe takŝe zawierać szereg defektów. O oczywistych problemach wynikających z wadliwej dokumentacji projektowej była mowa wyŝej. Osobną kwestią jest jakość i kompletność dokumentacji uŝytkowej oprogramowania. Dokumentacja ta ma wpływ nie tyle na samą niezawodność oprogramowania, a bardziej na jego postrzeganą jakość. JeŜeli instrukcja zawiera błąd merytoryczny, innymi słowy nie opisuje wiernie zachowania systemu, uŝytkownik po jej przeczytaniu uŝyje oprogramowania i stwierdzi, Ŝe oprogramowanie zawiera defekt. NaleŜy przy tym pamiętać, Ŝe nawet jeŝeli oprogramowanie i jego dokumentacja są zgodne, to w programie nadal mogą i z pewnością występują defekty. PowyŜszy problem dotyka takŝe słowników danych i pojęć, których błędna lub niekompletna zawartość takŝe traktowana jest jako defekt dokumentacji Defekty produktów procesu zarządzania projektem Projekt informatyczny jako przedsięwzięcie niezwykle złoŝone wymaga sprawnego zarządzania. Produkty tego procesu nie dotyczą bezpośrednio wytwarzanego produktu, jednak mają zasadniczy wpływ na kształt samego procesu wytwórczego. Defekty zaszyte w planach projektu, harmonogramach, przydziale zasobów, oszacowaniu kosztów czy raportach ze spotkań mogą prowadzić w skrajnym przypadku do niepowodzenia projektu lub co najmniej do powstawania kolejnych defektów w pozostałej dokumentacji systemu. Dokumentacja związana z zarządzaniem projektem powinna być traktowana na równi z innymi produktami procesu wytwórczego, a tym samym naleŝy dąŝyć do minimalizacji występujących w niej defektów Metody ograniczania wpływu defektów W ogólności wszelkie podejścia w dziedzinie niezawodności systemów informatycznych moŝna podzielić na cztery grupy [SKOCZ1996]: unikanie - stosowanie zasad i technik zmniejszających liczbę pomyłek prowadzących do defektów w docelowym produkcie. wykrywanie - polega na zastosowaniu takich konstrukcji w systemie, które starają się wykrywać obecność błędów. poprawianie - tworzenie w produkcie środków usuwających negatywne efekty wynikające z defektów. 24

25 tolerowanie - zdolność systemu do działania w obecności defektów. Jak w wielu innych dziedzinach, najlepszym sposobem radzenia sobie z problemami jest ich unikanie, co w tym kontekście oznacza wykrywanie i eliminowanie pojawiających się defektów zanim przeistoczą się one w źródła powaŝnych problemów. Niestety, ze względu na silny wpływ czynnika ludzkiego w całym procesie inŝynierii oprogramowania, nie istnieje w pełni skuteczna metoda unikania defektów. Jedynym dostępnym środkiem w takiej sytuacji staje się próba rozbudowy procesu wytwórczego o dobrze zdefiniowane i sprawdzone praktyki. W takim ujęciu techniki unikania defektów są to metody, zasady i praktyki projektowania i wytwarzania, które mają na celu zapobieganie pomyłkom wprowadzającym defekty w oprogramowaniu. Większość z nich jest ukierunkowana na zapobieganie powstawania defektów w trakcie opisywanego wcześniej procesu tłumaczenia informacji. Praktyka pokazuje, Ŝe liczbę pomyłek w tym procesie moŝna redukować poprzez: zmniejszenie złoŝoności problemu ulepszanie przekazu informacji natychmiastowe wykrywanie i usuwanie skutków pomyłek Zmniejszenie złoŝoności problemu moŝna uzyskać dzięki jego dekompozycji na szereg mniejszych podproblemów. Podejście takie, przynajmniej teoretycznie, stwarza nadzieję na popełnienie mniejszej ilości pomyłek przy kolejnych jego translacjach. MoŜemy starać się ten cel osiągnąć takŝe kładąc większy nacisk na kontrolę jakości powstających produktów, czemu słuŝą wszelkie techniki wspierania kontroli i sprawozdawczości w projekcie takie jak inspekcje, przeglądy, czy audyty. Dobre efekty w tej materii moŝna uzyskać zwiększając udział klienta w procesie wytwórczym np. poprzez umieszczenie zespołu projektowego w środowisku pracy odbiorcy systemu. Podejście takie stwarza lepsze warunki komunikacji na linii klient-dostawca i zapewnia większą widzialność stanu projektu na zewnątrz, co bezpośrednio przekłada się na skuteczność wychwytywania defektów zanim staną się one groźne dla dalszego przebiegu przedsięwzięcia. Wreszcie bardzo waŝne jest to, aby zamiast odkładać kontrolę jakości produktów danej fazy na jej koniec (tradycyjne podejście typu produkt-test), starać się czynić to na bieŝąco, juŝ w momencie ich tworzenia. Warto w tym momencie zaznaczyć, Ŝe wszelkie próby unikania defektów mają bardzo silny związek z ogólnie pojętym zarządzaniem jakością w projekcie. Jakość 25

26 kontroluje się poprzez niezaleŝne sprawdzenie zgodności produktu i procesu z przyjętymi wymaganiami zarówno na sam produkt jak i na sposób jego realizacji. Szczegółowe planowanie zarządzania jakością jest standardową czynnością we współczesnych projektach informatycznych i jako jeden z wielu czynników moŝe przyczynić się do skuteczniejszego unikania defektów Postępowanie z defektami Z faktem obecności defektów w produktach informatycznych nie moŝna dyskutować, moŝna jedynie starać się wprowadzać do procesu wytwórczego takie mechanizmy, które pozwolą efektywnie radzić sobie z ich wykrywaniem i usuwaniem. W ogólności proces zarządzania defektami moŝna przedstawić jako cyklicznie powtarzane testowanie i naprawianie produktu. Rysunek 2-6 przedstawia etapy postępowania z defektami: Rysunek 2-6 Ogólny proces postępowania z defektami (źródło własne) PowyŜszy schemat ma jedynie ogólny charakter i nie porusza takich aspektów jak planowanie testów, dokumentowania przypadków błędnego działania systemu (awarii) czy wreszcie dystrybucji i wdraŝania poprawionych wersji systemu. Zagadnieniami tymi zajmuje się m.in. proces zwany zarządzaniem konfiguracją, którego szerszy opis znajduje się w Rozdziale 5 Zarządzanie problemami w projekcie informatycznym. 2.4 Zmiany Nie lubimy zmian - to dość znana ludzka cecha. Intuicyjnie wiemy, Ŝe kaŝda zmiana pociąga za sobą jakiś wysiłek lub trudności do pokonania. W inŝynierii oprogramowania zmiany są nieuniknione, a ich potrzeba moŝe się ujawnić w kaŝdym momencie trwania procesu wytwórczego. Im późniejsze jej wystąpienie tym większy wpływ ma ona na całość przedsięwzięcia, dlatego planując realizację systemu informatycznego musimy się liczyć z moŝliwością całkowitego zachwiania równowagi projektu od momentu jego wstępnej analizy, a na wdroŝeniu i pielęgnacji kończąc. Wszelkie prośby o zmiany, obok defektów, stanowią jedno z głównych źródeł problemów w projekcie informatycznym. 26

27 Pielęgnacja oprogramowania jest jednym z najwaŝniejszych i zarazem najtrudniejszych zagadnień inŝynierii oprogramowania. Opieka nad oprogramowaniem wiąŝe się zazwyczaj z koniecznością modyfikacji wszystkich produktów wcześniejszego projektu informatycznego, począwszy od kodu źródłowego, a na specyfikacji wymagań kończąc. Systemy informatyczne muszą ulegać modyfikacjom z rozmaitych przyczyn, z których najbardziej trywialnymi jest konieczność usuwania wykrytych defektów i chęć dostosowania ich do wciąŝ zmieniających się potrzeb uŝytkowników. Z drugiej strony, wprowadzanie jakichkolwiek modyfikacji jest bardzo niebezpieczne, gdyŝ obarczone jest sporym ryzykiem wprowadzenia nowych defektów i aktywacji tych dotychczas nie wykrytych. Zmiany moŝna nie tylko rozpatrywać w kontekście produktu, ale takŝe z perspektywy organizacji samego projektu informatycznego. Rozmaite czynniki i warunki narzucane przez środowisko zewnętrzne, w którym obraca się przedsięwzięcie mogą powodować szereg problemów, u których podstaw leŝy szeroko pojęta konieczność wprowadzania zmian. Czas realizacji projektów planowany jest zazwyczaj na okres liczony w miesiącach, czasami nawet w latach. Biorąc pod uwagę tę skalę czasową praktycznie moŝemy być pewni, Ŝe w trakcie trwania projektu wystąpią istotne zmiany w samym przedsiębiorstwie lub w jego otoczeniu i nie będą one bez wpływu na toczący się projekt informatyczny. Zmiany w projekcie oraz naciski na ich wprowadzenie, będą zawsze, naleŝy jedynie umieć odpowiednio wcześnie je dostrzec i właściwie z nimi postępować. Warto w tym miejscu po raz kolejny rozróŝnić dwa pojęcia związane z problemem zmian w projekcie, a dokładniej, nie naleŝy mylić prośby o zmianę z właściwym procesem wprowadzania jej w Ŝycie. Analiza i odpowiednia klasyfikacja pojawiających się potrzeb/próśb zmian stanowi podstawę sprawnej pielęgnacji oprogramowania. Nie kaŝda potrzeba zmiany znajduje realne uzasadnienie do jej wprowadzenia, z kolei te uznane i przyjęte do realizacji odznaczają się zazwyczaj róŝnym stopniem pilności i krytyczności dla projektu. Jak juŝ zostało wcześniej zasygnalizowane, w dalszej części pracy pojęcie zmiany będzie rozumiane jako potrzeba i prośba o jej wprowadzenie. 27

28 2.4.1 Źródła zmian MoŜna powiedzieć, Ŝe źródeł zmian jest tak duŝo, jak duŝa jest liczba osób zaangaŝowanych w przedsięwzięcie informatyczne. Na domiar złego są one równie nieprzewidywalne. NaleŜy takŝe zwrócić uwagę na fakt, iŝ zrealizowanie jednej zaplanowanej zmiany lub poprawienie znanego defektu, moŝe pociągnąć za sobą konieczność wprowadzenia kolejnych zmian. Szczególnie istotne z punktu widzenia projektu są wszelkie zmiany wymagań. MoŜna wyróŝnić wiele powodów, dla których moŝe nastąpić zmiana (ewolucja) wymagań, przy czym część z nich wynika z faktu, Ŝe analiza duŝego projektu moŝe trwać nawet kilka lat i w tym czasie zmieniają się pewne warunki: mogą ulec zmianie warunki zewnętrzne, np. zmiana legislacyjna w państwie mogą ulec zmianie warunki wewnętrzne, np. zmieniła się polityka jakości firmy, lub teŝ firma właśnie taką politykę wdroŝyła w czasie tworzenie systemu, pogłębia się zrozumienie wymagań klienta zmieniły się osoby decydujące po stronie klienta, zatem mogła teŝ ulec zmianie wizja systemu klient stwierdził błąd we wcześniejszych wymaganiach, który musi być naprawiony zmieniło się otoczenie systemu lub oprogramowanie stowarzyszone zmienił się sprzęt Pomijając kwestię potrzeb zmian generowanych przez wykrywane defekty, z punktu widzenia projektu informatycznego źródła zmian mogą być zarówno zewnętrzne jak i wewnętrzne. PoniŜej znajduje się bardziej szczegółowa ich charakterystyka Źródła zewnętrzne Najprostszym i zarazem najczęstszym źródłem zmian zewnętrznych jest sam klient, który zgłasza nowe wymagania lub modyfikuje jedno z wcześniej zidentyfikowanych. Tego typu prośby są zazwyczaj najbardziej brzemienne w skutkach i mogą prowadzić do daleko idących zmian zarówno w powstającym produkcie jak i samym projekcie. Znakomita większość tego typu potrzeb zmiany wynika z niepowodzenia w opanowaniu oczekiwań odbiorcy produktu, a więc jest efektem defektów i niekompletności pierwotnej specyfikacji wymagań. W miarę rozwoju przedsięwzięcia klient nabywa umiejętność coraz 28

29 lepszego wyraŝania swoich wymagań i lepiej poznaje związane z przedsięwzięciem technologie. Wśród źródeł zewnętrznych warto zwrócić uwagę takŝe na szeroko pojętą sytuację rynkową, a więc działania konkurencji, działania partnerów, oczekiwania klientów, trendy i mody. Kolejnym zewnętrznym źródłem zmian jest sytuacja polityczno-prawna przykładem moŝe tu być wprowadzenie obowiązku stosowania kas fiskalnych, ustawa o ochronie danych osobowych czy teŝ zmiana przepisów ZUS. Nie bez znaczenia, zwłaszcza w projektach związanych z informatyzacją, jest bardzo szybki rozwój technologii. MoŜe on powodować konieczność zmian wymagań sprzętowych, rozwiązań telekomunikacyjnych czy narzędzi programistycznych w trakcie trwania projektu. Kolejnym źródłem zmian mogą być podwykonawcy, zwłaszcza ci nierzetelni Źródła wewnętrzne Zmiany wprowadzane w toczącym się projekcie mogą mieć źródła tkwiące wewnątrz samego projektu na przykład konieczność wprowadzenia korekt z uwagi na zbyt późne odkrycie defektów w przyjętym rozwiązaniu czy niewłaściwe oszacowanie pracochłonności lub brak zasobów. Ponadto w miarę rozwoju projektu, zespół go realizujący coraz lepiej poznaje dziedzinę problemową i uzbrojony w większą wiedzę na temat funkcjonowania środowiska klienta ma nowe i ulepszone pomysły, które moŝe chcieć zaprezentować klientowi. Potrzeba zmiany wywodzi się w takim przypadku bezpośrednio od wykonawcy i jest motywowana chęcią dąŝenia do usprawnienia wytwarzanego produktu, a co za tym idzie takŝe poziomem zadowolenia klienta. Przy okazji wewnętrznych źródeł zmian warto takŝe wspomnieć o zmianach własnościowych czy o róŝnego rodzaju decyzjach na szczeblu kierowniczym odnoszących się do całej organizacji wytwarzającej system. Przykładem takiej decyzji moŝe być wymuszenie zmiany stosowanych narzędzi wytwórczych, albo przejście na inną niŝ dotychczas technologię Rodzaje zmian Konserwacja oprogramowania polega na wprowadzeniu do niego modyfikacji. Dobrze jest, jeśli kaŝda taka zmiana wiąŝe się takŝe z powrotem do wcześniejszych faz analizy i projektowania, na których rezultaty wpływa przeprowadzana zmiana w oprogramowaniu. Jednak nie wszystkie zmiany w oprogramowaniu odznaczają się tym samym stopniem trudności ich wprowadzania. Z pielęgnacją oprogramowania związane są 29

30 cztery tradycyjnie wyróŝniane kategorie czynności [SZEJ2002] oraz powiązane z nimi klasy wprowadzanych w oprogramowaniu modyfikacji: pielęgnacja naprawcza (ang. corrective maintenance) - modyfikacje naprawiające adaptacja (ang. adaptive maintenance) - modyfikacje dostosowujące ulepszanie (ang. perfective maintenance) - modyfikacje udoskonalające utrzymanie zapobiegawcze (ang. preventive maintenance) modyfikacje prewencyjne. WyróŜnione typy zmian róŝnią się głównie ze względu na powody i cel ich wystąpienia. Charakter analizowanej prośby o zmianę ma bardzo często decydujący wpływ na decyzję o jej odrzuceniu lub przyjęciu i ewentualnym przydzieleniu priorytetu. PoniŜej znajduje się bardziej szczegółowa charakterystyka wymienionych wyŝej rodzajów zmian Modyfikacje naprawiające Polegają na usuwaniu z oprogramowania defektów wprowadzonych w fazach wymagań, analizy, projektowania i implementacji. Są to zmiany mające na celu usunięcie ujawniających się defektów, które prowadzą do pojawiania się błędów i awarii w rozwijanym systemie. Potrzeba wprowadzenia zmiany poprawiającej zazwyczaj wynika z wykrycia defektu, dlatego teŝ są to najczęściej zmiany, których nie moŝna unikać i wręcz naleŝy nadawać im wysoki priorytet realizacji Modyfikacje udoskonalające i prewencyjne Polegają na poprawie jakości oprogramowania i dotyczą takich jego aspektów jak wydajność czy ergonomia interfejsu uŝytkownika. Często zmiany tego typu zmierzają do skompensowania problemów wynikających ze współdziałania systemu z jego otoczeniem programowym lub sprzętowym. W przypadku zmian o charakterze ulepszającym moŝemy mieć do czynienia z modyfikacjami o charakterze udoskonalenia konkretnego aspektu działania systemu lub o charakterze prewencyjnym. W pierwszym wypadku potrzeba zmiany jest zazwyczaj reakcją na konkretny problem taki jak np. wydajność. Z kolei zmiana o charakterze prewencyjnym ukierunkowana jest na nadanie oprogramowaniu nowej cechy, której potrzeba nie koniecznie została jeszcze dostrzeŝona lub, której implementacja nie była wcześniej uwaŝana za priorytetową. Przykładami ruchów prewencyjnych są wszelkiego rodzaju ulepszenia bezpieczeństwa i niezawodności systemu. 30

31 Wszystkie prośby opisywanego tutaj typu muszą być skonfrontowane z wymaganiami jakościowymi nałoŝonymi na produkt. Jeśli, przykładowo, jednym z kluczowych aspektów tworzonego systemu jest wydajność to wszelkie potrzeby dotykające tej materii muszą być rozpatrywane z odpowiednio wysokim priorytetem. Z drugiej strony, prośby mające charakter ewidentnych Ŝyczeń, które nie przekładają się bezpośrednio na osiągnięcie celów biznesowych stawianych systemowi powinny być potraktowane z adekwatnie mniejszym stopniem zaangaŝowania Modyfikacje dostosowujące Modyfikacje dostosowujące polegają na dostosowaniu oprogramowania do zmian zachodzących w wymaganiach uŝytkownika lub w środowisku komputerowym, zmierzające do dostosowania systemu do zmieniających się uwarunkowań biznesowych, otoczenia lub zmian specyfikacji. Zasadniczo, obok zmian wymuszonych wykryciem defektów, jest to najliczniejsza i zarazem najbardziej skomplikowana grupa modyfikacji. Obejmuje ona zagadnienia wynikające ze zmiany wymagań uŝytkowników, zmian przepisów prawnych dotyczących dziedziny problemu, wszelkich zmian organizacyjnych po stronie klienta, czy wreszcie zmian sprzętu i oprogramowania systemowego. Modyfikacje dostosowujące muszą być szczegółowo przeanalizowane pod kątem juŝ zatwierdzonych i zmieniających się wymagań oraz przede wszystkim z uwzględnieniem zakresu systemu zawartego w kontrakcie wiąŝącym dostawcę z klientem Wpływ zmian na projekt Zmiany pojawiają się we wszystkich fazach cyklu Ŝycia oprogramowania, zarówno w trakcie jego wytwarzania, jak i późniejszej jego eksploatacji. Bez wątpienia wszystkie zmiany modyfikują ustalony plan działania. Wiele z nich, na przykład niewielkie opóźnienia podwykonawców, o ile nie dotyczą ścieŝki krytycznej projektu, nie powodują większych konsekwencji dla projektu poza modyfikacją cząstkowych terminów w harmonogramie. DuŜo bardziej niebezpieczne są zmiany mające wpływ na podstawowe atrybuty projektu na jego zakres, termin oraz koszty. NaleŜy pamiętać, Ŝe zmiana jednego z tych atrybutów zazwyczaj powoduje zmianę pozostałych. Zmiany terminów, zwłaszcza ich skrócenie, mogą być efektem nacisków rynku lub nowych właścicieli ich konsekwencją jest na ogół wzrost kosztów projektu. Równie duŝy wpływ na projekt moŝe mieć narzucone z zewnątrz odsunięcie terminów tutaj skutki są mniej przewidywalne. MoŜe to powodować przedwczesne odpręŝenie, utratę tempa 31

32 i spowolnienie prac, a w efekcie niedotrzymanie nowych terminów lub w skrajnym przypadku utratę osób będących siłą napędową projektu, osób, które zaangaŝowały się w projekt identyfikując swoje cele osobiste z celami projektu w tym przypadku drastyczne odsunięcie terminów moŝe zostać potraktowane jako uniemoŝliwienie realizacji własnych celów. Zmiany budŝetu projektu, zwłaszcza cięcia, skutkują zmniejszeniem zakresu projektu lub wydłuŝeniem czasu jego realizacji, w efekcie, czego często cele projektu nie są realizowane w akceptowalnym czasie lub wręcz wcale. Zmian nie moŝna ignorować ani odmawiać ich wprowadzenia, gdyŝ w takim wypadku docelowy produkt nie będzie spełniał rzeczywistych potrzeb, a jedynie realizował potrzeby historyczne, dziś juŝ nieaktualne. Z drugiej strony bezkrytyczne wprowadzanie wszystkich zmian moŝe spowodować wymknięcie się projektu spod kontroli, przekroczenie budŝetu i terminów czy wręcz jego fiasko. Jedynym rozsądnym rozwiązaniem jest właściwe zarządzanie zmianami. O konieczności zarządzania zmianami naleŝy pamiętać od samego początku projektu gdyŝ to zadanie, tak jak kaŝde inne, wymaga czasu i odpowiednich zasobów Proces zarządzania zmianami Istotny proces w ewolucji oprogramowania, który występuje takŝe przy wytwarzaniu oprogramowania od początku, to proces kontroli i zarządzania zmianami [SZEJ2002]. Jest on jednym z wielu elementów procesu zwanego zarządzaniem konfiguracją. Zasadniczo rozpoczyna się w momencie zaistnienia potrzeby wprowadzenia zmiany. Pierwszym krokiem jest jej wieloaspektowa analiza. NaleŜy tu dokładnie przeanalizować czy i dlaczego dana zmiana powinna być wprowadzona. Konieczne jest tutaj ocenienie, jaki wpływ będzie miała ta propozycja na projekt, czyli czy jest zgodna z jego celami i jak zmieni ona podstawowe atrybuty - zakres, termin i koszty. NaleŜy równieŝ przeprowadzić analizę ryzyka w związku z wprowadzanymi zmianami, gdzie szczególną uwagę naleŝy poświęcić kosztom jej zaniechania. Rysunek 2-7 przedstawia kolejne kroki procesu zarządzania zmianami. 32

33 Rysunek 2-7 Proces zarządzania zmianami (M.Piechówka, 2002) W efekcie procesu decyzyjnego moŝe nastąpić odrzucenie zmiany, odłoŝenie do powtórnego rozpatrzenia w terminie późniejszym lub jej akceptacja. W przypadku akceptacji zmiany naleŝy uaktualnić wszelkie plany i harmonogramy. NiezaleŜnie od rodzaju podjętej decyzji, informacja o niej wraz z uzasadnieniem powinna być rozpowszechniona wśród wszystkich podmiotów zaangaŝowanych w projekt. Oczywistym jest, Ŝe wszystkie wymienione wcześniej kroki powinny być szczegółowo dokumentowane. Opisany wyŝej schemat postępowania pozwala w sposób formalny wprowadzić zmianę do projektu i od tej pory dalsze czynności wykonywane są juŝ w ramach standardowego procesu zarządzania projektem. Temat tutaj poruszany będzie przedmiotem dalszej analizy w Rozdziale 5 Zarządzanie problemami w projekcie informatycznym. 2.5 Koszty defektów i zmian Praktyka pokazuje, Ŝe naleŝy starać się wykrywać i rozwiązywać problemy najwcześniej jak tylko moŝna. Najlepszym przykładem potwierdzającym to stwierdzenie jest gwałtowny wzrost kosztu usunięcia defektu zaszytego w specyfikacji wymagań w miarę przechodzenia do kolejnych faz wytwarzania systemu. Szacuje się, Ŝe w takim przypadku koszt usunięcia defektu wprowadzonego do produktu we wczesnych etapach jego konstrukcji, rośnie w stosunku 1 do 10 do 100 w trakcie całego cyklu Ŝycia oprogramowania. Przyjmując koszt usunięcia tego defektu w fazie analizy i projektowania jako jedna jednostka, koszt usunięcia tego samego problemu w fazie implementacji i testowania oprogramowania to juŝ 10 jednostek. JeŜeli defekt zostanie zidentyfikowany dopiero w trakcie eksploatacji systemu, moŝemy się spodziewać, Ŝe realizacja tego 33

34 przedsięwzięcia będzie się wiązała ze sto razy większym kosztem niŝ we wstępnych fazach produkcji oprogramowania. ZaleŜność ta staje się logiczna biorąc pod uwagę fakt, Ŝe modyfikacja oprogramowania na tym etapie zazwyczaj wiąŝe się z przeprojektowaniem, dodatkową implementacją i wreszcie ponownym wdroŝeniem nowej wersji systemu. Opisane wyŝej zaleŝności, w odniesieniu do defektów specyfikacji wymagań przedstawia wykres 2-8: Rysunek 2-8 Koszty defektów specyfikacji wymagań (J.Górski - InŜynieria Wymagań - wykład) Jak juŝ wspomniano wcześniej, defekty wczesnych faz projektu, a w szczególności fazy specyfikacji wymagań, stają się przyczyną konieczności wprowadzania daleko idących zmian do produktu w dalszych etapach jego produkcji. Defekty wykryte w fazie projektowania moŝna łatwo naprawić zmieniając kilka linijek tekstu lub modyfikując odpowiednie diagramy. Koszt usuwania tych samych defektów po implementacji oprogramowania jest dramatycznie wyŝszy, zarówno w wymiarze nakładów jak i czasowym. 34

35 3. Cykl Ŝycia problemu w projekcie informatycznym Ideas may also grow out of the problem itself, which in turn becomes part of the solution" Paul Rand 3.1 Wprowadzenie W poprzednim rozdziale wprowadzone zostały niezbędne pojęcia związane z problemami w projektach informatycznych. Przedstawiony został ogólny podział na defekty i zmiany oraz ich bardziej szczegółowa klasyfikacja ze względu na rozmaite kryteria. Wszystkie kwestie dotąd poruszane dotyczyły jednak statycznego opisu problemu i nie uwzględniały jego obsługi w czasie. Celem niniejszego rozdziału jest zidentyfikowanie i opisanie cyklu Ŝycia problemu w projekcie informatycznym. Najogólniej rzecz biorąc, proces ten moŝna rozbić na fazę zaistnienia (zgłoszenia, wykrycia) problemu, jego długi i Ŝmudny przepływ przez organizację aŝ do ostatecznego rozwiązania (poprawienie defektu, wprowadzenie zmiany). Rozdział koncentruje się po kolei na kaŝdym kroku, starając się moŝliwie formalnie go opisać. Przeprowadzenie analizy pod tym kątem wydaje się konieczne do opracowania narzędzia mającego wspomagać zarządzanie problemami w projekcie informatycznym. Wszystkie zaprezentowane poniŝej pojęcia oraz zaleŝności pomiędzy nimi powstały na bazie literatury poruszającej problem zarządzania zmianą w projektach informatycznych ([BAY2001], [GOR2000], [CADL2000], [LEST2000], [SZEJ2002]) oraz własnych przemyśleń wynikających z ich lektury. Przy konstrukcji modelu cyklu Ŝycia niezwykle cennym źródłem informacji była dokumentacja istniejących na rynku narzędzi takich jak Bugzilla ([BUG2005]) oraz Mantis Bug Tracker ([MAN2005]). Zaproponowany graf stanów problemu stanowi syntezę praktycznych rozwiązań prezentowanych przez wymienione narzędzia oraz wiedzy wydobytej ze źródeł ksiąŝkowych i własnych doświadczeń. Na koniec warto zaznaczyć, iŝ powstanie powyŝszego opisu cyklu Ŝycia problemu było konieczne, przed podjęciem próby skonstruowania formalnego modelu problemu, co jest przedmiotem rozdziału 4 Model problemu. 3.2 Cykl Ŝycie problemu Bez względu na indywidualny charakter kaŝdego zagadnienia, jakie pojawia się w trakcie trwania projektu informatycznego, zasadniczo przepływ konkretnego problemu moŝna podzielić na 4 ogólne kroki: 35

36 1. Zaistnienie problemu jest powiązane z jego fizycznym wystąpieniem, np. w momencie wykrycia defektu lub pojawieniem się potrzeby zmiany. W kroku tym problem ujawnia się i rodzi się potrzeba jego dalszej obsługi. ZGŁOSZENIE 2. Zgłoszenie problemu ma na celu jego formalne zaistnienie w projekcie. Na etapie tym tworzony jest ślad jego zaistnienia, formułowany jest jego opis oraz przeprowadzana jest jego wstępna klasyfikacja. OBSŁUGA 3. Pod pojęciem obsługi problemu kryje się cały proces przepływu zagadnienia przez organizację. Faza ta obejmuje identyfikację, klasyfikację, uszczegółowianie opisu, zmiany odpowiedzialności itd. ROZWIĄZANIE 4. Proces obsługi problemu powinien prowadzić do jego ostatecznego rozwiązania. Rozwiązanie moŝe przyjmować róŝne postacie i nie koniecznie musi się wiązać z wprowadzaniem zmian do powstającego produktu. 5. Bez względu na sposób rozwiązania problemu, koniec jego istnienia oznacza finalizację jego obsługi. Ślad o wystąpieniu danego zagadnienia pozostaje jednak w dokumentacji projektowej powstałej w krokach 2-4. Rysunek 3-1 Ogólny cykl Ŝycia problemu (źródło własne) PowyŜszy model cyklu Ŝycia problemu jest na tyle ogólny, iŝ obejmuje zarówno przypadek wykrycia i obsługi defektu oprogramowania, jak równieŝ proces zgłaszania i wprowadzania zmian do produktu. Jednocześnie, jest on zbyt ogólny, aby zobrazować szczegółowo, co naprawdę dzieje się z problemem w trakcie jego Ŝycia w projekcie. Praktyka pokazuje, iŝ przepływ zagadnienia przez projekt często nie jest liniowy, tak jak to pokazano na diagramie. Przedmiotem dalszej części tego rozdziału jest bardziej szczegółowy opis kaŝdego z wymienionych wyŝej kroków Zgłoszenie problemu Źródła wykrywanych problemów Projekty informatyczne zawsze obracają się w obrębie pewnej, ściśle określonej dziedziny problemowej, która wnosi do niego własny zestaw wymagań oraz zbiór udziałowców. Bez względu na to, czy mamy do czynienia z defektem czy potrzebą zmiany, źródła tego typu zagadnień pozostają relatywnie określone i zdefiniowane w ramach konkretnego projektu. Najczęściej spotykanymi źródłami problemów, których opinii i uwag nie naleŝy lekcewaŝyć, są następujące grupy udziałowców, obecne niemalŝe w kaŝdym projekcie informatycznym: 36

37 Przedstawiciele klienta Kierownik projektu Testerzy Personel ds. zapewniania jakości Programiści (Developers) Testerzy wdroŝeń testowych Dział wspomagania klienta (Technical support) Końcowi uŝytkownicy systemu (End Users) Dział sprzedaŝy i marketingu Strateg biznesowy Oczywiście, podana wyŝej lista nie jest kompletna ani słuszna dla kaŝdego projektu. Generalną zasadą jest to, iŝ kaŝdy uczestnik projektu, który potrafi stwierdzić, Ŝe działa on niezgodnie z załoŝeniami moŝe być źródłem zgłoszenia problemu. Z jednej strony, im bardziej system poddawany jest konstruktywnej krytyce, tym większe są jego szanse na osiągnięcie zadowalającego poziomu jakości w oczach jego odbiorców. Z drugiej jednak naleŝy pamiętać, iŝ nadmiar krytyki, zwłaszcza tej pochodzącej od mało istotnych lub wręcz niepotrzebnie zaangaŝowanych udziałowców, moŝe wprowadzić duŝy szum informacyjny do projektu. Zbyt duŝa liczba niepotrzebnych lub mało konstruktywnych uwag i sugestii od niekompetentnych źródeł moŝe spowodować marnotrawienie zasobów projektu przy realizacji mniej istotnych funkcjonalności kosztem zadań o znacznie wyŝszym priorytecie. Wszystko to powoduje, iŝ proces zgłaszania problemów w projekcie informatycznym nie moŝe pozostawać bez nadzoru ani kontroli. Kluczem jest tutaj staranne dobranie źródeł oraz racjonalna dystrybucja uprawnień w zakresie zgłaszania i zatwierdzania problemów Moment rejestracji zgłoszenia Równie waŝnym aspektem problemu, co jego źródło, jest moment jego zgłoszenia. Kiedy powinno się zgłaszać problem? Oczywiście bezpośrednio po momencie jego wykrycia! Wprowadzenie jakiegokolwiek opóźnienia względem chwili wystąpienia problemu moŝe powodować utratę cennych informacji na jego temat lub wręcz całkowite zagubienie śladu o jego wystąpieniu. Rejestracja problemu równocześnie z jego wykryciem zwiększa ponadto stopień kompletności opisu zarówno przyczyn jak i zaobserwowanych skutków. Szybko zarejestrowany problem staje się równieŝ szybko upublicznionym zagadnieniem, nad którego rozwiązaniem moŝe zacząć pracować cały zespół projektowy. Dzięki natychmiastowej rejestracji problemu unikniemy takŝe niepoŝądanego efektu gubienia i przeinaczenia danych w miarę upływu czasu spotykanego 37

38 przy nieformalnych metodach przechowywania i przekazywania informacji (pamięć ludzka, luźne notatki). Z drugiej strony pojawia się bardzo istotny pytanie czy zgłoszenie problemu musi być jednoznaczne z jego formalną rejestracją? Wspomniany wyŝej problem nadmiaru źródeł zgłoszeń moŝe stanowić powaŝne spowolnienie procesu wytwórczego. Ponadto naleŝy pamiętać, iŝ jakość oraz liczba napływających zgłoszeń jest silnie uzaleŝniona od liczby i kompetencji osób, które tego typu zgłoszenia mają prawo rejestrować Opis problemu Aby proces rejestracji problemu był skuteczny musi on być wsparty odpowiednio sformalizowanym i spójnym modelem opisu samego problemu oraz okoliczności jego wystąpienia. Na tym etapie istotne mogą się okazać wszelkie informacje nie tylko na temat, czego dotyczy problem i jak go powtórzyć, aby zademonstrować niepoŝądane efekty, ale takŝe czas i miejsce jego wystąpienia. WaŜne jest takŝe to, aby toŝsamość osoby zgłaszającej nie pozostawała nieznana. Wszystko to powoduje, Ŝe z jednej strony osoba zgłaszająca zagadnienie musi mieć do dyspozycji elastyczny sposób wyraŝenia istoty problemu, z drugiej zaś wyprodukowane przez nią zgłoszenie musi posiadać cechy umoŝliwiające jego sprawną klasyfikację, zarządzanie i obsługę. Na etapie rejestracji problemu intencją osoby zgłaszającej powinno być stworzenie moŝliwie kompletnego opisu, na bazie którego moŝliwa będzie jego wstępna kategoryzacja (np. defekty interfejsu powinny po decyzji o ich rozpatrzeniu wędrować do odpowiedniego działu) i nadanie priorytetu. Od informacji dostarczonej przez zgłaszającego w duŝej mierze zaleŝy dalsza obsługa danego problemu. Zagadnienie modelu problemu będzie szerzej opisane w Rozdziale 4, w którym to nastąpi przejście od ogólnego opisu struktury zgłoszenia do całkowicie sformalizowanego jego modelu obiektowego w notacji UML Inne aspekty Wszystkie wyŝej wymienione aspekty w duŝej mierze zaleŝą od nawyków, przyjętych praktyk i kultury pracy wypracowanej w projekcie i samej organizacji. Nie bez znaczenia pozostają tutaj takie czynniki jak zastosowane wsparcie narzędziowe oraz ustanowione reguły dostępu do niego. W przypadku małych projektów, być moŝe wystarczającym medium komunikacji w tej materii jest pamięć ludzka albo tablica karteczek z opisanymi problemami. W miarę wzrostu złoŝoności przedsięwzięcia, sprawny proces zarządzania problemami wymaga rozwiązań bardziej wyrafinowanych. Bez 38

39 względu na metodę przechowywania i propagacji zagadnień istotne jest jawne zdefiniowanie zakresu tego procesu. Przykładowo, jak juŝ wspomniano wyŝej, decyzja o aktywnym włączeniu klienta do procesu rejestracji problemów moŝe spowodować lepszą wykrywalność problemów, a jednocześnie moŝe narazić projekt na narastające nakłady nieuzasadnionej pracy. Zagadnienie zgłaszania problemów często dotyka takŝe sfery psychologicznej. Udziałowcy reprezentujący stronę klienta zazwyczaj nie mają skrupułów przy zgłaszaniu defektów. Źródła wewnętrzne projektu, zwłaszcza sami programiści, miewają opory przed ujawnianiem wykrytych przez siebie defektów w obawie przed automatycznym przypisaniem do nich odpowiedzialności i przymusem jednoczesnego zaproponowania rozwiązania. Sprawnie organizowany proces zbierania zgłoszeń o problemach w projekcie musi koniecznie zapewniać potwierdzoną praktycznie niezaleŝność źródła problemu od jego obsługi i rozwiązania Obsługa problemu Formalnie zarejestrowany i moŝliwie kompletnie opisany problem rozpoczyna swój właściwy cykl Ŝycia w obrębie projektu. WaŜnym aspektem całego procesu jest to, Ŝe faktycznej obsłudze podlega nie tyle sam problem, co zbiór informacji zgromadzony na jego temat. DostrzeŜony defekt lub potrzeba zmiany pozostaje niezmieniony od momentu zaistnienia, modyfikacjom ulega jedynie jego opis, priorytet oraz decyzje podejmowane w trakcie jego rozwiązywania. Zatem pod pojęciem obsługi rozumiany jest cały szereg transformacji, jakim moŝe podlegać informacja o problemie, do których naleŝą: wstępna ocena analiza i zrozumienie istoty problemu uszczegółowienie opisu opracowanie planu działań o decyzje o przypisanie zasobów o przydzielenie odpowiedzialności o ustalenia priorytetu rozwiązanie Wszystkie wyŝej wymienione operacje mają na celu uzyskanie jak najbardziej szczegółowej postaci opisu danego zagadnienia, które w efekcie ma prowadzić do 39

40 znalezienia optymalnego i moŝliwie szybkiego rozwiązania. Ostatni punkt, mianowicie samo rozwiązanie danego problemu, okazuje się być na tyle istotny i specyficzny, iŝ został opisany szerzej w odrębnej części rozdziału Wstępna ocena Sprawny proces obsługi problemu powinien zawsze rozpoczynać się odpowiednią weryfikacją słuszności samego zgłoszenia. Bez względu na dobór źródeł zawsze napotkamy zgłoszenia niekompletne, niesłuszne i takie, które są efektem pomyłki lub niewiedzy zgłaszającego. Jawne określenie źródła zgłoszenia jest szczególnie istotne w tej fazie jego obsługi. Oczywisty jest fakt, iŝ problemy sygnalizowane przez programistów z zespołu projektowego powinny być oceniane innym zestawem kryteriów niŝ te pochodzące od końcowych uŝytkowników, czy w ogólności osób niebędących bezpośrednio zaangaŝowanych w wytwarzanie oprogramowania. Bez względu na pochodzenie problemu, musi on zostać wstępnie oceniony, najlepiej przez osobę niebędącą autorem zgłoszenia (w przypadku, gdy zgłaszającym jest klient albo uŝytkownik jest to wymóg wręcz konieczny). W praktyce rola oceniającego zgłoszenia zazwyczaj przypada, w zaleŝności od rozmiaru projektu, kierownikowi projektu lub danego zespołu albo specjalnie do tego celu oddelegowanej osobie. Generalną zasadą jest jednak, iŝ weryfikacja zawsze odbywa się po stronie wykonawcy. Zasadniczo krok ten ma na celu wyeliminowanie wszelkich problemów, których dalsza egzystencja w projekcie jest w rzeczywistości nieuzasadniona oraz przyspieszenie obsługi tych, których rozwiązanie nie wymaga przejścia całej skomplikowanej procedury (np. poprawki, które moŝna naprawić niewielkim nakładem pracy w trybie natychmiastowym). Efektem pełnej wstępnej oceny danego zgłoszenie powinna być jednoznaczna odpowiedź na następujące pytania: Czy opisany problem rzeczywiście ma miejsce w systemie? Czy opis problemu zawiera dostateczną ilość informacji do procesu jego obsługi? Czy opisany problem mieści się w zakresie projektu? Najprostsze do rozpatrzenia są oczywiście problemy, dla których uzyskujemy skrajne odpowiedzi na powyŝsze pytania. Twierdząca odpowiedź na wszystkie wyŝej postawione pytania oznacza, iŝ zgłoszony problem musi zostać uwzględniony w projekcie i naleŝy bezwzględnie rozpocząć dalszy proces jego obsługi. Podobnie, w sytuacji, gdy na 40

41 większość pytań otrzymujemy negatywną odpowiedź zgłoszenie moŝe zostać uznane za niewaŝne i zupełnie odrzucone. W przypadku braku części odpowiedzi decyzja o dalszym losie danego zgłoszenia leŝy całkowicie w gestii osoby oceniającej. MoŜna w takiej sytuacji przyjąć dwie drogi odrzucić zgłoszenie wraz z powiadomieniem autora lub przepuścić dany problem w nadziei, iŝ dalszy proces jego obsługi zaowocuje dalszym skonkretyzowaniem i pojawieniem się stosownego rozwiązania. Pierwsze podejście nie wyklucza ponownego zgłoszenia danego problemu, drugi zaś rodzi moŝliwość późniejszego odrzucenia. Opisany wyŝej proces wstępnej oceny problemu w ogólności powinien być uruchamiany zawsze na wstępie jego obsługi. Praktyka pokazuje jednak, iŝ ocena nie moŝe być uznana za krok jednorazowy, którego efekty są aktualne do końca cyklu Ŝycia problemu. Dzieje się tak, poniewaŝ pomimo swojej pozornej prostoty rzetelna odpowiedź na postawione pytania nie zawsze jest moŝliwa. Przykładowo w przypadku defektów, stwierdzenie czy dany problem rzeczywiście istnieje wymaga od osoby oceniającej wykonania kroków do powtórzenia problemu w systemie. Co jeśli taki opis nie został dostarczony przez autora zgłoszenia albo opisany scenariusz nie doprowadził do opisanego efektu? Czy zgłoszenie takie powinno zostać odrzucone, gdy nie mamy pewności czy zostanie ono ponownie zarejestrowane z bardziej szczegółowym opisem? Z drugiej strony przepuszczanie wszelkich zarejestrowanych problemów moŝe prowadzić do kuriozalnych sytuacji, w których zespół projektowy rozwiązuje problemy, których istnienie nigdy nie zostało do końca potwierdzone. Wszystko to po raz kolejny podkreśla istotę trafnego doboru źródeł zgłoszeń oraz stosowania rozwagi przy procesie ich dalszej obsługi. Ocena problemów powinna być zatem krokiem wykonywanym cyklicznie przy kaŝdej aktualizacji informacji na temat danego zagadnienia. Na koniec warto zaznaczyć, iŝ etap oceny jest szczególnie waŝny w przypadku zgłoszeń zawierających prośby o zmianę. Potwierdzenie obecności defektu w zazwyczaj jest relatywnie łatwe, w porównaniu do uzasadnienia konieczności wprowadzenia postulowanej zmiany. Proces oceny tego typu próśb musi, zatem podlegać znacznie surowszej kontroli juŝ na wstępie obsługi. Kwestią tą zajmuje się proces zarządzania zmianami w projekcie informatycznym, o którym szerzej będzie mowa w Rozdziale 5 Zarządzanie problemami w projekcie informatycznym. 41

42 Analiza zgłoszenia Po zakończeniu etapu wstępnej oceny słuszności zgłoszenia i jego przepuszczeniu do dalszej obsługi konieczne jest przeprowadzenie bardziej szczegółowej analizy. Na tym etapie wiadomo juŝ, Ŝe zgłoszony problem stanowi realne zagroŝenie dla projektu, jednak nieznany jest jeszcze stopień ani zakres jego negatywnego wpływu. Pierwszym celem analizy jest próba oszacowania krytyczności problemu na podstawie dostarczonych informacji oraz usystematyzowanie juŝ zgromadzonych danych na jego temat. Bardzo często autor zgłoszenia dostarcza jedynie sygnał o fakcie istnienia konkretnego rzeczywistego problemu, co moŝe okazać się niewystarczające w procesie jego dalszej obsługi. Zgłoszenie po przejściu procesu analizy powinno nieść ze sobą więcej informacji. W trakcie etapu analizy zgłoszenie powinno zostać pozbawione wszelkich nieścisłości oraz błędów merytorycznych, których źródłem moŝe być niewiedza lub pomyłka zgłaszającego (np. błędnie określony moduł systemu, w którym wykryto defekt). Wreszcie analiza zgłoszenia moŝe skutkować nie tylko dodatkowymi informacjami na temat przyczyn problemu, ale takŝe konkretnym zarysem lub nawet kompletną wizją rozwiązania. Zasadniczo efektem procesu analizy zgłoszenia powinny być podstawy merytoryczne do uszczegółowienie jego opisu Uszczegółowienie opisu Opis problemu wstępnie ocenionego i przekazanego do dalszej obsługi nie moŝe być zamknięty. Pomimo wszelkich starań autora zgłoszenia, zbiór informacji na temat konkretnego problemu moŝe nie być, i z pewnością nie będzie, kompletny. Naturalną koleją rzeczy jest zatem aktualizacja danych przy kaŝdym kroku obsługi zagadnienia. KaŜda forma analizy problemu moŝe zaowocować dodatkowymi informacjami na jego temat. KaŜda osoba mająca jakiś wpływ na stan danego problemu, a więc kierownicy zespołów, testerzy, programiści, powinni mieć moŝliwość wzbogacenia jego opisu. Kolejne weryfikacje problemu dają nam szersze spektrum danych na temat istoty problemu, podobnie jak kolejne próby jego rozwiązania, nawet te nieudane. Nie bez znaczenia, szczególnie w przypadku problemów złoŝonych i trudnych do powtórzenia, są dalsze informacje od autora zgłoszenia, do których dostęp uzyskujemy np. w wyniku bezpośredniej rozmowy. Istotne jest gromadzenie informacji mających jakąkolwiek wartość merytoryczną przy dalszej obsłudze danego problemu. Kolejną grupą informacji dodawanej do opisu problemu jest sama historia jego obsługi. Problemy obarczone długą 42

43 historią zmian opisu, odpowiedzialności itp. powinny zwrócić uwagę kierownika projektu, jako zadania o potencjalnie podwyŝszonym priorytecie, być moŝe wymagające większego nakładu zasobów. Jak juŝ wspomniano wcześniej, do opisu tego i innych aspektów problemu konieczna jest odpowiednia struktura, mogąca przechowywać informacje oraz proces ich zmiany w czasie Przypisanie zasobów i odpowiedzialności Mając dostatecznie dobrze zdefiniowany problem moŝna przystąpić do kroków mających na celu jego rozwiązanie. Najbardziej podstawowym i zarazem oczywistym krokiem wydaje się podjęcie decyzji w sprawie jego dalszej obsługi, a więc przyjęcie określonego planu działania wraz z przypisaniem do rozwiązania danego problemu odpowiednich ludzi i zasobów. Problem opatrzony najlepszym moŝliwym opisem pozostanie problemem, dopóki ktoś nie zajmie się jego rozwiązaniem. Sprawne i jednoznaczne przydzielanie odpowiedzialności jest konieczne w celu utrzymania płynności pracy nad projektem. Nieład w tej materii moŝe prowadzić do sytuacji, w której jedne problemy rozwiązywane są niezaleŝnie przez kilka róŝnych członków zespołu projektowego, podczas gdy inne leŝą odłogiem. Kierownik projektu odpowiedzialny za podział zadań nie moŝe dopuszczać do sytuacji niejednoznacznych, w których próby rozwiązania konkretnych problemów nie wiąŝą się z faktycznym przydzieleniem odpowiedzialności. Z jednej strony wymaga to wprowadzenie do projektu odpowiedniej dyscypliny ( jeśli podejmujesz się próbie rozwiązania problemu to musisz wziąć za niego odpowiedzialność ), z drugiej zaś musi się to wiązać z rozsądnym podejściem w kwestii rezygnacji i zrzeczenia się odpowiedzialności za dany problem w razie poraŝki. Brak tego ostatniego moŝe budzić niechęć pracowników do podejmowania z własnej inicjatywy działań w kierunku poprawienia znanych problemów. Oczywiście przydział odpowiedzialności za rozwiązanie moŝe równieŝ być stosowany przez kierownika do odgórnego podziału pracy w zespole Ustalenie priorytetu Realizacja przedsięwzięcia informatycznego jest źródłem potencjalnie bardzo duŝej liczby problemów. Ich napływ w postaci ujawniających się defektów i ciągle zgłaszanych propozycji w praktyce nigdy nie ma końca, gdyŝ zawsze znajdzie się aspekt produktu, który albo nie działa zgodnie z oczekiwaniami albo w wyniku ewolucji punktu widzenia klienta staje się niepotrzebny i niefunkcjonalny w swojej obecnej postaci. Z drugiej strony 43

44 kaŝdy projekt informatyczny tworzony jest w ramach określonych granic, najczęściej wyznaczanych przez zasoby, budŝet oraz ścisły harmonogram. Tego typu realne ograniczenia w konfrontacji z próbami rozwiązania nie zawsze realnych problemów mogą doprowadzić do powaŝnej destabilizacji całego przedsięwzięcia. Kierownik projektu nie moŝe doprowadzić do sytuacji, w której większość zasobów pochłaniana jest przez zadania, których wykonanie ma małe lub znikome znaczenie przy osiąganiu globalnego celu. Dlatego tak niezmiernie waŝnym aspektem zarządzania procesem obsługi problemów jest ich odpowiednia kategoryzacja pod względem waŝności. Przypisanie priorytetu problemowi jest, obok przydzielenia odpowiedzialności za niego, jednym z najbardziej podstawowych i krytycznych kroków, jaki naleŝy podjąć przed rozpoczęciem procesu jego obsługi. Zarządzanie problemami z wyraźnie zaznaczonym stopniem krytyczności dla projektu z definicji staje się bardziej efektywne niŝ w przypadku braku tego typu informacji. Oczywiście kwestia przyjętego systemu priorytetowania zadań jest ściśle zaleŝna od charakteru projektu oraz wymagań klienta. Kolejną waŝną cechą priorytetu jest często jego subiektywny charakter (uŝytkownik zgłaszający problem w oprogramowaniu, którego uŝywa zawsze oceni jego waŝność wyŝej niŝ programista, który tego typu problemów musi rozwiązać wiele) oraz płynność - w miarę rozwoju produktu zmienia się hierarchia celów (np. we wczesnym etapie implementacji dominują kwestie związane z niezawodnością i wydajnością, z kolei w miarę zbliŝania się daty wdroŝenia, odpowiedni priorytet zyskują zadania związane z ergonomią i estetyką interfejsu uŝytkownika). Podobnie jak kwestia przydziału odpowiedzialności i zasobów, zadanie określenia priorytetu zazwyczaj spoczywa w gestii kierownika projektu lub zespołu. Sposób klasyfikacji waŝności problemów będzie szczegółowo omawiany przy okazji konstrukcji modelu problemu w następnym rozdziale Rozwiązanie problemu Proces obsługi problemu intuicyjnie powinien kończyć się jego rozwiązaniem. Przy definiowaniu pojęcia rozwiązania problemu w przypadku projektów informatycznych naleŝy niestety na wstępie odrzucić pozytywne nacechowanie tego słowa. Sposób rozwiązania konkretnego problemu niekoniecznie musi się bowiem wiązać z osiągnięciem celów zasugerowanych przez zgłoszenie wykryty defekt nie musi zostać w pełni usunięty, a prośba zmiany moŝe zostać całkowicie odrzucona. W związku z powyŝszym w dalszej części mojej pracy w pojęciu rozwiązania problemu większy nacisk będzie 44

45 kładziony na końcowy stan, w jakim się znajduje dane zgłoszenie, a nie faktycznie wykonane czynności zaradcze. Przykładowo pod pojęciem problemu naprawionego naleŝy rozumieć problem, który został uznany za rzeczywisty i usunięty z produktu, z kolei problem odrzucony to taki, wobec którego w wyniku konkretnej decyzji nie zostaną podjęte Ŝadne dalsze kroki. W obu przypadkach rozwiązaniem problemu jest konkretny stan zgłoszenia, ale tylko w przypadku problemu naprawionego moŝna mówić o jakichkolwiek wykonanych czynnościach naprawczych. Rysunek 3-2 MoŜliwe rozwiązania problemu (źródło własne) Definiując rozwiązanie problemu mamy do dyspozycji cały wachlarz moŝliwości, od rozwiązań poŝądanych o nacechowaniu pozytywnym (naprawienie defektu, uwzględnienie zmiany), aŝ po rozwiązania nieosiągające sugerowanego efektu o wybitnie negatywnym wydźwięku (odrzucenie zmiany, niemoŝność naprawy defektu). Rysunek 3-2 przedstawia schematycznie wymienione moŝliwości, a dyskusję poszczególnych rozwiązań problemów zawiera punkt Diagram stanu problemu Proces przepływu konkretnego zagadnienia przez projekt moŝe zostać zamodelowany w postaci diagramu stanów. Jak wiadomo diagram taki określa ciąg stanów 45

46 przyjmowanych przez konkretny obiekt w odpowiedzi na zdarzenia. W naszym przypadku, stanami problemu są kolejne etapy jego obsługi (opisane w punkcie 3.2), z kolei zdarzeniami inicjującymi poszczególne przejścia są czynności podejmowane w trakcie tej obsługi. Znając moŝliwe przejścia pomiędzy konkretnymi stanami moŝna podjąć próbę skonstruowania grafu obrazującego proces obsługi problemu w projekcie informatycznym. Diagram na Rysunku 3-3 stanowi próbę wizualizacji takiej maszyny stanów MoŜliwe stany problemu Zaprezentowany graf stanów stanowi rozszerzenie opisanego na początku tego rozdziału ogólnego cyklu Ŝycia problemu. PoniŜej znajduje się lista stanów, przez jakie przechodzi problem, wraz z szczegółowym opisem kaŝdego z nich oraz przykładami praktycznymi Problem niepotwierdzony KaŜdy pojawiający się problem rozpoczyna, jawnie lub niejawnie, swój cykl Ŝycia od tego statusu. Problem niepotwierdzony jest zagadnieniem, które zostało zarejestrowane, ale jeszcze nie zostało poddane procesom weryfikacyjnym. W praktyce oznaczać to moŝe, Ŝe np. defekt został niedawno dodany do rejestru problemów przez uŝytkownika oprogramowania, jednak jego faktyczne istnienie nie zostało potwierdzone przez reprezentanta wykonawcy. Problem taki pozostaje niepotwierdzony do momentu, gdy osoba do tego upowaŝniona podejmie decyzję o dalszym losie zgłoszenia. Niepotwierdzony problem moŝe zostać od razu rozwiązany z negatywnym skutkiem (odrzucony lub uznany za nieprawidłowy np. w przypadku stwierdzenia pomyłki zgłaszającego). Zdecydowanie częstszym przypadkiem jest jednak sytuacja, gdy zostaje on zweryfikowany i dodany do puli problemów otwartych (patrz ) w celu dalszej obsługi. W szczególnym przypadku problem moŝe zostać zweryfikowany i rozwiązany (patrz ) pozytywnie w jednym kroku np. gdy osoba weryfikująca jest w stanie sama szybko wprowadzić odpowiednią poprawkę do produktu Problem oceniany Pod pojęciem oceny mieści się cały proces wstępnej analizy zgłoszenia obejmujący jego zrozumienie, wstępną ocenę oraz potwierdzenie autentyczności, czyli stwierdzenie czy zgłoszenie opisuje rzeczywisty problem. Zgłoszenie będące w tym stanie naleŝy rozumieć jako zidentyfikowane przez osobę odpowiedzialną za jego weryfikację, ale jeszcze niedopuszczone do dalszej obsługi. 46

47 Weryfikacja poprawności rozwiązania Rysunek Diagram stanów problemu (źródło własne) 47

48 Dla autora zgłoszenia jest to sygnał, Ŝe problem został zauwaŝony i przechodzi proces oceny. Warto wspomnieć, Ŝe czas przebywania danego zgłoszenia w tym stanie moŝe być cenną wskazówką przy późniejszym przydzielaniu do niego ludzi, zasobów oraz priorytetu Problem otwarty Problem, który pomyślnie przeszedł proces weryfikacyjny staje się problemem otwartym. W praktyce oznacza to, iŝ zgłoszone zagadnienie zostało uznane przez kompetentne osoby za problem faktycznie wymagający dalszej obsługi. Podział zagadnień na te jeszcze niepotwierdzone oraz potwierdzone-otwarte w skuteczny sposób pozwala kontrolować jakość informacji gromadzonych w rejestrze problemów projektu. Zespół projektowy koncentruje się tylko i wyłącznie na drugiej grupie, czyli zagadnieniach i defektach, które takiej uwagi rzeczywiście wymagają. Problem, który przeszedł etap wstępnej weryfikacji i został uznany za otwarty powinien juŝ do końca swojego cyklu Ŝycia podlegać regułom obiegu problemu w organizacji. Oznacza to przede wszystkim to, Ŝe w przeciwieństwie do problemów niepotwierdzonych, kaŝda decyzja w jego sprawie powinna pozostawiać ślad w dokumentacji problemu. Warto zaznaczyć, iŝ problemy zgłaszane przez osoby odpowiednio upowaŝnione w projekcie (np. programistów, testerów) mogą ze względu na kompetencje tych osób, automatycznie przechodzić proces weryfikacji w momencie zgłoszenia, tym samym stając się otwartymi od początku swojego cyklu Ŝycia. Jedynym moŝliwym dalszym krokiem dla problemu otwartego jest przypisanie mu odpowiedzialności (patrz ) Problem przypisany Zgłoszenie osiąga ten stan, gdy zostanie przypisane do konkretnej osoby. W momencie przypisania, odpowiedzialność za dalszy postęp w obsłudze danego problemu spada na tę osobę. Tym samym problem otwarty, któremu został przydzielony opiekun w pewnym zakresie przestaje być problemem ogólnie dostępnym. Oczywiście nadal pozostaje on widoczny dla pozostałych członków zespołu, sygnalizowany zostaje jedynie fakt, iŝ rozwiązaniem konkretnego zagadnienia od tego momentu zajmuje się konkretna osoba. Istotne jest to, Ŝe przypisanie odpowiedzialności nie ma charakteru trwałej decyzji i moŝe ulec wielokrotnej zmianie w trakcie cyklu Ŝycia danego problemu. Problemy mogą być przypisywane odgórnie (np. kierownik projektu rozdziela zadania) lub dobrowolnie (członek zespołu podejmuje się rozwiązania z własnej woli). W szczególnych 48

49 przypadkach moŝe równieŝ zaistnieć automatyczny przydział problemów na bazie ich wstępnej klasyfikacji (np. wszystkie problemy w warstwie danych systemu przydzielamy liderowi zespołu od bazy danych). Bez względu na rodzaj i motywacje przydziału odpowiedzialności jest to mechanizm konieczny do zachowania porządku w rejestrze problemów. Przypisanie odpowiedzialności jest takŝe ostatnim biurokratycznym krokiem w procesie obsługi zagadnienia wszelkie kolejne kroki mają na celu juŝ faktyczne rozwiązanie zagadnienia. Problem przypisany moŝe zostać rozwiązany (patrz ), przypisany innej osobie lub w razie rezygnacji obecnego opiekuna moŝe powrócić do puli problemów otwartych Prace w toku Stan ten jawnie określa, Ŝe prace nad rozwiązaniem danego problemu są juŝ rozpoczęte. Jest to sygnał dla innych uczestników procesu zarządzania problemami, a w szczególności dla warstwy kierowniczej tego przedsięwzięcia, Ŝe zgłoszenie przeszło juŝ odpowiedni proces decyzyjny oraz, Ŝe osoba za nie odpowiedzialna podjęła juŝ kroki zmierzające do osiągnięcia rozwiązania. Warto jednak zauwaŝyć, Ŝe sam stan nie precyzuje, na jakim etapie zaawansowania są owe prace. Jest to specyficzny stan problemu, który moŝe zostać nadany tylko i wyłącznie przez osobę, do której aktualnie jest przypisany problem. Oczywiste jest takŝe, Ŝe prace raz rozpoczęte mogą zostać przerwane albo doprowadzić do konkretnego rozwiązania danego problemu Problem rozwiązany Uzyskanie przez problem statusu rozwiązanego oznacza, iŝ zapadła konkretna decyzja w jego sprawie oraz zostały podjęte ewentualne kroki wprowadzające ją w Ŝycie (np. usunięcie defektu z testowej wersji systemu). Rozwiązanie problemu moŝe oznaczać usunięcie defektu lub wprowadzenie poŝądanej zmiany i udostępnienie efektów pracy do weryfikacji (np. poprzez przekazanie nowej wersji systemu do testowania). NaleŜy jednak pamiętać, Ŝe rozwiązaniem problemu moŝe być takŝe jego odrzucenie. Biorąc pod uwagę mnogość moŝliwych rozwiązań (patrz punkt 3.3.2), decyzja rozwiązująca dane zagadnienie nie jest kwestią trywialną i wiąŝe się z dodatkowym uszczegółowieniem stanu problemu. Samo stwierdzenie, Ŝe problem osiągnął opisywany stan nie mówi nam nic o charakterze ani jakości rozwiązania. Bez względu na charakter decyzji, od tego momentu rozwiązanie (oraz ewentualne efekty jego wprowadzenia do produktu) oczekuje na weryfikację przez 49

50 osoby do tego upowaŝnione. Dopóki proponowane rozwiązanie zagadnienia nie zostanie zweryfikowane problem moŝe zostać powtórnie otworzony w celu alternatywnej obsługi Problem weryfikowany W rzeczywistości stan ten oznacza, Ŝe nie sam problem jest weryfikowany, ale jego zaproponowane i ewentualnie wprowadzone w Ŝycie rozwiązanie. Zgłoszenie będące w tym stanie niesie ze sobą informację przede wszystkim dla osoby odpowiedzialnej za dane rozwiązanie. Jest to sygnał, iŝ dostarczone rozwiązanie (lub decyzja o jego braku) jest w trakcie uzyskiwania akceptacji i tym samym nie powinno ulegać dalszym modyfikacjom. Jest to zatem stan przejściowy, którego jedynym logicznym następstwem jest zaakceptowanie rozwiązania (patrz ) lub ponowne otwarcie danego problemu, czyli innymi słowy odrzucenie dostarczonego rozwiązania (lub jego braku) Problem zweryfikowany Problem zweryfikowany to taki, którego rozwiązanie zostało zaakceptowane przez odpowiednio do tego upowaŝnione osoby w projekcie. Oznacza to, iŝ osoby te zapoznały się z zaproponowanym i wprowadzonym w Ŝycie rozwiązaniem problemu i uznały, iŝ jest ono wystarczające w kontekście opisu problemu. Zagadnienie pozostaje w tym stanie do czasu jego ostatecznego zamknięcia, które następuje dopiero w momencie wprowadzenia rozwiązania do oficjalnej wersji produktu (np. w chwili wydania kolejnej wersji oprogramowania lub wypuszczenia uaktualnienia do oficjalnej wersji systemu) Problem ponownie otwarty Problem ponownie otwarty, to taki, dla którego zostało juŝ zaproponowane i niekiedy takŝe wprowadzone w Ŝycie konkretne rozwiązanie, jednak w skutek jego weryfikacji zostało one uznane za niepoprawne lub niewystarczające. Przykładowo problem, który został w pierwszym obiegu obsługi rozwiązany przez uznanie go za niemoŝliwy do powtórzenia, moŝe zostać powtórnie otwarty, w momencie dostarczenia większej ilości informacji na jego temat. Problemy ponownie otwarte powracają do puli zagadnień otwartych. Pod względem dalszej obsługi nie róŝnią się niczym od tych pierwszych, jednak informacja o ich powrocie do obiegu musi zostać zachowana, stąd wyodrębnienie oddzielnego stanu. Warto w tym miejscu zaznaczyć, iŝ pojedynczy problem moŝe teoretycznie ulec wielokrotnemu cyklowi rozwiązania i ponownego otwarcia. 50

51 Problem zamknięty Stan ostateczny i docelowy, do którego powinien dąŝyć kaŝdy zarejestrowany problem w trakcie swojego cyklu Ŝycia w projekcie. Bez względu na wynikowe rozwiązanie, problem zamknięty to taki, którego rozwiązanie zostało uznane za słuszne i poprawne oraz, którego efekty zostały wprowadzone do oficjalnej wersji produktu (tylko w przypadku rozwiązań pozytywnych ). Zasadniczo problemy o statusie zamkniętym zostają wyeliminowane z dalszego obiegu informacji w rejestrze zagadnień. Czasem zdarza się konieczność ich ponownego otwarcia (np. w sytuacji, gdy pozornie zlikwidowany defekt ujawni się ponownie), dlatego teŝ w Ŝadnym wypadku nie naleŝy eliminować z rejestru śladu o ich wystąpieniu, ani historii ich obsługi Problem archiwalny Zamknięte problemy mogą podlegać archiwizacji w celu zasilania ogólno pojętej bazy wiedzy organizacji. Jak w kaŝdej innej dziedzinie Ŝycia, przeszłe doświadczenia mogą stanowić podstawę podejmowania szybszych i trafniejszych decyzji w przyszłości. Celem archiwizacji zgłoszeń jest z jednej strony gromadzenie wiedzy dla przyszłych projektów, a z drugiej strony uporządkowanie bazy zgłoszeń poprzez oddzielenie zagadnień definitywnie zamkniętych od tych, które mogę jeszcze ulec ponownemu otwarciu. W ogólności moŝna jednak przyjąć załoŝenie, Ŝe zgłoszenia powinny podlegać archiwacji dopiero po zamknięciu danego projektu MoŜliwe rozwiązania problemu Jak juŝ wspomniano wcześniej, rozwiązanie problemu w projekcie informatycznym moŝe przyjmować szereg róŝnych postaci. PoniŜej znajduje się szersze spojrzenie na ten temat, w którym zaproponowanych zostało 6 klas rozwiązań. KaŜda z nich została opatrzona stosownym opisem oraz przykładami ich występowania w rzeczywistych projektach Problem naprawiony Jedyne rozwiązanie o stricte pozytywnym znaczeniu. Problem opisany w zgłoszeniu został w rozumieniu autora rozwiązania całkowicie wyeliminowany. W praktyce moŝe oznaczać to, Ŝe defekt został usunięty w nowej wersji produktu albo do jego nowej wersji zostało wprowadzone ulepszenie, o które prosił zgłaszający. Problem naprawiony musi jeszcze zostać zweryfikowany pod kątem jakości samego rozwiązania i ewentualnie zamknięty po scaleniu rozwiązania z oficjalną wersją produktu. 51

52 Duplikat Zgłoszony problem został zidentyfikowany jako duplikat juŝ istniejącego, jeszcze nie rozwiązanego, problemu. W praktyce moŝe oznaczać to, iŝ kolejny uŝytkownik systemu zgłasza wystąpienie znanego juŝ defektu lub opisany problem stanowi fragment innego zagadnienia (podproblem). Napływ wielu identycznych lub podobnie brzmiących zgłoszeń jest typowy w momencie aktywacji szczególnie uciąŝliwego defektu w ogólnodostępnym i wdroŝonym systemie. Oznaczenie problemu jako duplikat wymaga skojarzenia go z oryginalnym zgłoszeniem, dlatego informacja o duplikacie powinna zostać umieszczona jako komentarz do prawidłowego zgłoszenia. Oczywiście w momencie rozwiązania pierwszego, oryginalnego, problemu wszystkie jego duplikaty (takŝe podproblemy) powinny zostać opatrzone odpowiednią informacją Problem nierozwiązywalny Problem opisany w zgłoszeniu nigdy nie zostanie rozwiązany, przynajmniej nie w kontekście posiadanego aktualnie opisu. Przyczyny takiego stanu rzeczy mogą być rozmaite, jednak ich cechą wspólną jest to, iŝ są one niezaleŝne od wykonawcy. Tego typu decyzja musi zawsze być poparta odpowiednią argumentacją. Najczęściej problemy zyskują status nierozwiązywalnych wskutek ograniczeń technicznych narzuconych przez technologię wytwarzania systemu (np. klient prosi o menu kontekstowe dostępne pod prawym przyciskiem myszy w systemie opartym na technologii WWW). Warto zaznaczyć, Ŝe zgłoszenia defektów zazwyczaj z oczywistych względów nie mogą zostać uznane za nierozwiązywalne, co praktycznie rezerwuje ten status tylko dla potrzeb zmian Problem odrzucony Rozwiązanie w praktyce zarezerwowane dla Ŝądań zmian przez klienta rzadko, kiedy stosowane w przypadku zgłoszeń o wystąpieniu błędu. W praktyce oznacza ono, iŝ problem poruszony w zgłoszeniu został uznany za nierealny lub niewykonalny w obecnie zdefiniowanych ramach projektu. Zgłoszenie tego typu najczęściej dotyczy usprawnień systemu, których wykonanie nie jest przewidziane w ramach projektu lub, których wprowadzenie mogłoby zachwiać budŝetem i harmonogramem przedsięwzięcia. Zgłoszenia tego typu najczęściej juŝ na etapie wstępnej weryfikacji i klasyfikacji otrzymują bardzo niski priorytet. Odrzucone problemy mogą następnie zostać zamknięte i zapomniane lub w razie wyraźnego nacisku klienta oczekiwać na podniesienie ich 52

53 priorytetu. Odrzucenie problemu róŝni się od uznania go za nierozwiązywalny tym, iŝ jest efektem świadomej decyzji wykonawcy, a nie skutkiem np. ograniczeń technicznych Problem niekompletny W wyniku procesu obsługi problemu, osoba za niego odpowiedzialna stwierdza, Ŝe obecny stan wiedzy na jego temat jest niewystarczający do osiągnięcia zadowalającego rozwiązania. W praktyce tego typu sytuacja dotyczy najczęściej defektów i oznacza, Ŝe na podstawie opisu problemu nie jest moŝliwe odtworzenie skutków opisanych w zgłoszeniu. Ten status rozwiązania przypisywany jest zgłoszonym defektom, gdy próby powtórzenia błędu zakończyły się fiaskiem, a kod źródłowy nie pozwala znaleźć powodu, dla którego, zostało zaobserwowane dane zachowanie systemu. W sytuacji takiej jedną z moŝliwości jest to, Ŝe zgłoszenie jest pomyłką, dotyczy faktycznie nieistniejącego problemu i niesłusznie przeszło proces weryfikacji. Mniej optymistyczna wersja zakłada, Ŝe problem naprawdę tkwi w systemie, jednak jego wykrycie ani tym bardziej usunięcie jest niemoŝliwe w chwili obecnej. Najczęściej spotykaną reakcją na tego typu zgłoszenia jest ich zamknięcie, w przekonaniu, Ŝe jeśli problem rzeczywiście istnieje to prędzej czy później i tak wróci do rejestru w postaci kolejnego, moŝliwie bardziej szczegółowego zgłoszenia. Drugim wyjściem jest zamroŝenie zgłoszenia na etapie weryfikacji rozwiązania i jeśli w późniejszym okresie pojawią się dodatkowe informacje, zmiana stanu i powrót do jego dalszej obsługi Problem nieprawidłowy Pomimo istnienia procesu wstępnej weryfikacji kaŝdego zgłoszenia, często dochodzi do sytuacji, kiedy do właściwego obiegu problemów przedostają się zgłoszenia sformułowane nieprawidłowo lub dotyczące kwestii niezwiązanych z realizowanym projektem. W praktyce są to zgłoszenia będące często efektem niewiedzy uŝytkowników i błędnego uŝycia systemu. Wychwytywanie tego typu problemów i ocena ich rozwiązań w postaci etykiety nieprawidłowy jest procesem czasochłonnym, dlatego tym bardziej warto tego typu przypadki rejestrować, w celu późniejszego przedstawienia klientowi bilansu nakładów pracy. 53

54 3.4 Role w procesie obsługi problemów W trakcie całego procesu obsługi pojedyncze zgłoszenia zmieniają swój stan pod wpływem decyzji konkretnych osób zaangaŝowanych w projekt. Przy definiowaniu cyklu Ŝycia problemu nie moŝna pomijać ról, jakie pełnią te osoby, ani zakresu podejmowanych przez nie decyzji. Na potrzeby analizy tego aspektu procesu obsługi problemów moŝna zdefiniować następujące 4 grupy osób bezpośrednio zaangaŝowanych w proces wytwórczy oprogramowania: klient w ogólności odbiorca produktu lub udziałowiec, pod pojęciem klienta naleŝy takŝe rozumieć docelowego uŝytkownika systemu kierownik przedstawiciel kierownictwa projektu po stronie dostawcy oprogramowania, osoba odpowiedzialna za przebieg i organizację projektu, w przypadku mniejszych projektów zazwyczaj jest to kierownik projektu, z kolei dla większych przedsięwzięć moŝe to być osoba oddelegowana do zarządzania zmianą albo kierownik ds. jakości wykonawca osoba bezpośrednio odpowiedzialna za produkcję oprogramowania, do tej grupy zaliczają się zarówno analitycy, projektanci jak i programiści tester osoba odpowiedzialna za weryfikację poprawności działania oprogramowania, moŝe to być zarówno przedstawiciel dostawcy oprogramowania jak i klienta, którego zadaniem jest sprawdzenie jakości dostarczanego produktu PowyŜsza klasyfikacja jest oczywiście bardzo ogólna i ma za zadanie jedynie nakreślenie róŝnych stron zaangaŝowanych bezpośrednio w proces obsługi problemów w projekcie informatycznym. Wszystkie wymienione grupy stanowią udziałowców projektu, których punkty widzenia naleŝy uwzględnić. NaleŜy jednak zaznaczyć, Ŝe pojedyncza osoba moŝe reprezentować kilka spośród wymienionych ról (np. wykonawca moŝe być takŝe testerem, podobnie jak klient). Istnienie takich powiązań pomiędzy rolami nie zmienia jednak faktu, iŝ kaŝda z nich musi być rozpatrzona oddzielnie, jako autonomiczna jednostka mająca swój udział i zakres kompetencji w procesie obsługi problemów. Rysunek 3-4 przedstawia umiejscowienie wyŝej zdefiniowanych ról na wcześniej zaproponowanym diagramie stanów problemu. Diagram ten definiuje, jakie przejścia pomiędzy stanami mogą być efektem decyzji i działań poszczególnych ról zaangaŝowanych w projekt. 54

55 KLIENT WYKONAWCA TESTER KIEROWNIK NIEPOTWIERDZONY KIEROWNIK TESTER KIEROWNIK TESTER OCENIANY KIEROWNIK TESTER OTWARTY KIEROWNIK TESTER KIEROWNIK WYKONAWCA KIEROWNIK WYKONAWCA KIEROWNIK PRZYPISANY WYKONAWCA WYKONAWCA PRACE W TOKU WYKONAWCA WYKONAWCA KIEROWNIK WYKONAWCA ROZWIĄZANY WYKONAWCA TESTER KLIENT TESTER KLIENT WERYFIKOWANY TESTER KLIENT KLIENT TESTER KIEROWNIK PONOWNIE OTWARTY KIEROWNIK KLIENT TESTER ZAMKNIĘTY KIEROWNIK KLIENT KIEROWNIK KIEROWNIK ZWERYFIKOWANY ARCHIWALNY Rysunek 3-4 Role w procesie obsługi problemu (źródło własne) 55

56 3.5 Podsumowanie Celem niniejszego rozdziału było zaprezentowanie w sposób moŝliwie zwięzły i formalny cyklu Ŝycia problemu. W celu osiągnięcia wystarczającego poziomu ogólności, tymczasowo w trakcie rozwaŝań porzucony został zaprezentowany w Rozdziale 2 podział problemów na defekty oraz zmiany problemy traktowane są tutaj jako jednakowe zagadnienia, gdyŝ zasadniczo ich cykl Ŝycia przebiega bardzo podobnie. Wszystkie podjęte tutaj kroki mają na celu przygotowanie gruntu pod budowę modelu problemu, którego przedmiotem jest Rozdział 4 Model problemu. 56

57 4. Model problemu 4.1 Wprowadzenie The mere formulation of a problem is far more essential than its solution Albert Einstein Nawet najlepiej napisany program nie jest wolny od defektów. Celem procesu testowania jest ich zdiagnozowanie i poinformowanie autorów systemu o ich zaistnieniu. Defektu nie wystarczy jednak po prostu zasygnalizować, trzeba to jeszcze zrobić efektywnie. MoŜna zaryzykować stwierdzenie, Ŝe kaŝdy projekt informatyczny napotka na swojej drodze, co najmniej jedno złe i niekompletne zgłoszenie defektu. Zmorą kaŝdego przedsięwzięcia informatycznego są zgłoszenia, które: nic nie mówią lub nie mają sensu nie zawierają wystarczających informacji lub zawierają błędne informacje okazują się być pomyłkami uŝytkownika lub błędami innych programów Aby uniknąć tego typu nieporozumień i maksymalnie usprawnić proces zarządzania problemami w projekcie, konieczne staje się sprecyzowanie, co składa się na dobre zgłoszenie problemu. Celem niniejszego rozdziału jest identyfikacja kluczowych informacji, jakie powinny się pojawić w rejestrze zgłoszeń wraz z pojawieniem się problemu oraz zaproponowanie struktury danych, która takie informacje jest w stanie przenosić, przy jednoczesnym uwzględnieniu cyklu Ŝycia problemu zaprezentowanego w Rozdziale 3. Zaproponowana struktura opisu problemu stanowi syntezę praktycznych rozwiązań zastosowanych w narzędziach takich jak Bugzilla ([BUG2005]), Mantis Bug Tracker ([MAN2005]) oraz wiedzy wydobytej ze źródeł ksiąŝkowych. Zaprezentowane w rozdziale zagadnienia i pojęcia oparte są w znacznym stopniu na przytaczanej juŝ wcześniej literaturze poruszającej problem zarządzania zmianą w projektach informatycznych ([BAY2001], [GOR2000], [CADL2000], [LEST2000], [SZEJ2002]). 4.2 Scenariusz zgłaszania problemu Problemy są zgłaszane z jednej bardzo prostego powodu - poniewaŝ chcemy, aby ich rozwiązanie zostało uwzględnione w procesie wytwórczym, a ich negatywne skutki zniwelowane, jeśli nie całkowicie to przynajmniej do akceptowalnego poziomu. Wykryty 57

58 problem moŝe mieć rozmaite przyczyny mógł powstać z winy programisty, jak równieŝ moŝe wynikać z niewiedzy zgłaszającego. Istotą dobrze zgłoszonego problemu nie jest jednak wskazanie winowajcy, a dostarczenie maksimum informacji potrzebnych w procesie jego obsługi. Najgorsze z moŝliwych zgłoszenia ograniczają się do lakonicznego stwierdzenia:,,to nie działa. Tego typu zgłoszenia mogą jedynie sygnalizować obecność usterki czy potrzeby zmiany, ale na pewno prędzej czy później wrócą do osoby zgłaszającej z dopiskiem proszę doprecyzować. Jedną z najlepszych metod zgłaszania defektów jest osobiste pokazanie ich programiście, jednak często jest to niemoŝliwe ze względu na rozproszenie zespołów wytwórczych. Wówczas nie pozostaje nic innego, jak opisanie czynności prowadzących do błędnego zachowania aplikacji, krok po kroku. Pierwszym etapem na drodze precyzowania problemu jest określenie czy raportujemy wystąpienie błędu, problem związany z infrastrukturą systemu, czy teŝ postulujemy rozszerzenie oprogramowania, a więc dodanie nowej cechy, która rozszerza jego funkcjonalność lub jakość. Od tego zaleŝy nie tylko priorytet zgłoszenia, ale równieŝ sama struktura jego opisu. Oczywiste jest, Ŝe usterki usuwane są w pierwszej kolejności, a potem moŝe znajdzie się czas na realizację ulepszeń. W tym miejscu, niejako mimo woli, wyłania się problem kategoryzacji problemów, o którym szerzej będzie mowa w dalszej części rozdziału. Przechodząc do opisu problemu naleŝy rozpocząć od ogólnego opisu jego istoty. Następnie przystępujemy do odtwarzania sytuacji, gdzie następuje drobiazgowy opis wykonanych czynności. Precyzja w tym miejscu jest niezmiernie waŝna, poniewaŝ często nawet drobna zmiana w scenariuszu, prowadzi do odmiennych rezultatów. Dla programisty niezwykle istotny jest precyzyjny opis, poniewaŝ dostarcza on więcej danych niŝ czasem wydaje się uŝytkownikom. Dokładny opis błędu słuŝy równieŝ samym testerom, którym często zdarza się powracać do własnych zgłoszeń po upływie czasu. W takich sytuacjach niejednokrotnie trudno jest zrozumieć sens wypowiedzi, która w momencie tworzenia wydawała się oczywista. Nie bez znaczenia są tutaj takŝe osoby, które w przyszłości z jakiś przyczyn muszą przejąć efekty prac poprzedniego zespołu. Na proces testowania i opisu problemów ma równieŝ wpływ specyfika samego produktu, jego środowisko oraz kontekst uŝycia. Przykładowo, jeśli testowaniu podlegają systemy wielodostępne, w których poszczególni uŝytkownicy posiadają róŝne 58

59 uprawnienia, istotne jest równieŝ zaznaczenie, dla jakiego zestawu uprawnień wystąpił błąd. W przypadku systemów internetowych, waŝny jest system operacyjny, na którym przeprowadzamy testy, jak równieŝ przeglądarka internetowa oraz jej wersja. 4.3 Podstawowe atrybuty problemu Aby uniknąć chaosu i sprawnie ewidencjonować pojawiające się w projekcie problemy, osoby uŝytkujące system (uŝytkownicy, testerzy) powinni dokumentować napotkane problemy powstałe podczas działania oprogramowania w specjalnie do tego przeznaczonej strukturze danych. Po przeanalizowaniu wyŝej opisanego scenariusza oraz mając na uwadze cykl Ŝycia problemu zaprezentowany w poprzednim rozdziale moŝna przystąpić do definiowania tego typu struktury. Generalną zasadą powinno być, iŝ na kaŝdy napotkany problem powinno przypadać osobne zgłoszenie. Przez analogię do tradycyjnych archiwów, rejestr problemów w projekcie informatycznym moŝe być traktowany jako swego rodzaju archiwum dokumentów, w którym kaŝde zgłoszenie posiada własną teczkę. Zbiory takiego archiwum muszą być w jakiś sposób uporządkowane, aby umoŝliwić ich odszukiwanie według zadanych kryteriów. PoŜądaną cechą archiwum jest to, aby kaŝdy dokument w nim zawarty miał podobną, standardową strukturę. Oczywiście realizacja rejestru problemów w postaci papierowej moŝe spełnić swoje zadanie jedynie w przypadku bardzo małych projektów. W przypadku przedsięwzięć o większej skali konieczne jest wprowadzenie wsparcia informatycznego w postaci dedykowanego narzędzia, w którym miejsce papierowych dokumentów zastępują dane gromadzone w odpowiednich strukturach, a proces ich wypełniania odbywa się za pomocą formularzy, którego przykładową postać przedstawia Rysunek 4-1. Zaprezentowany formularz stanowi jedynie propozycję i zawiera tylko podstawowy zakres informacji, jaki wydaje się konieczny do sprawnego gromadzenia danych na temat problemu. Warto w tym miejscu zaznaczyć, Ŝe przedstawiony zakres informacji o problemie obejmuje jedynie dane konieczne do jego identyfikacji i moŝliwie pełnego opisu, a jego zasadniczym zadaniem jest umoŝliwienie uŝytkownikowi systemu (klientowi, kierownikowi, testerowi, czy wykonawcy) zarejestrowanie w bazie zgłoszeń zaistnienia konkretnego problemu. Formularz nie zawiera informacji na temat autora ani czasu zgłoszenia, gdyŝ są to informacje, które mogą zostać dopisane do problemu automatycznie np. na podstawie danych aktualnego uŝytkownika systemu. Formularz nie obejmuje takŝe 59

60 cech problemu, które są konieczne w procesie jego dalszej obsługi takich jak informacje o przydzielonej odpowiedzialności, statusie rozwiązania czy przyznanych zasobach. MoŜliwość dodanie do zgłoszenia tego typu danych oraz uściślenia juŝ zgromadzonych pojawia się w dalszych krokach jego obsługi. Formularz problemu widziany przez osoby zajmujące się nim juŝ po jego zgłoszeniu i wstępnej ocenie (kierownicy, wykonawcy) ma w znaczącym stopniu rozszerzoną strukturę, co przedstawia Rysunek 4-2. Podobnie jak w poprzednim wypadku, zaprezentowany formularz stanowi jedynie wzorzec, na bazie którego moŝna wyciągnąć ogólne wnioski na temat rodzaju i zakresu informacji koniecznych do gromadzenia w procesie obsługi problemów. W dalszej części rozdziału znajduje się bardziej szczegółowy opis poszczególnych elementów zaprezentowanej struktury zgłoszenia wzbogacony o dodatkowe pola, których znaczenie i przydatność jest silnie uzaleŝniona od specyfiki konkretnego projektu informatycznego. PROBLEM Rodzaj Ogólny opis Istota problemu DEFEKT Problem z. Problem polega na... ŚcieŜka do powtórzenia Problem występuje, gdy... Efekty wystąpienia Problem skutkuje... Propozycja rozwiązania System powinien... Dodatkowe informacje Problem... Rysunek 4-1 Formularz zgłoszenia problemu (źródło własne) 60

61 Rysunek 4-2 Formularz dalszej obsługi zgłoszenia (źródło własne) Identyfikator problemu KaŜde zgłoszenie pojawiające się w projekcie musi być w łatwy sposób identyfikowalne. MoŜna to uzyskać poprzez kolejne numerowanie zgłaszanych problemów. W praktyce pole identyfikatora zawiera zazwyczaj liczbę lub standardowo generowany ciąg znaków, który stanowi swego rodzaju numer seryjny zgłoszenia. W celu uniknięcia niejednoznaczności oczywiste jest, iŝ identyfikator problemu powinien być niepowtarzalny, jeśli nie w całej organizacji, to przynajmniej w obrębie aktualnego projektu. 61

62 4.3.2 Ogólny opis problemu Identyfikator liczbowy problemu jest praktyczny przy ewidencji zgłoszeń, lecz jest juŝ niewystarczający, gdy przychodzi do ich identyfikacji przez ludzi. Osoby korzystające z systemu ewidencji zgłoszeń muszą mieć sposób na szybkie rozpoznawanie konkretnych problemów. Rolę takiego wzbogaconego identyfikatora moŝe pełnić pole ogólnego opisu problemu. Powinno ono być wypełniane w chwili zgłoszenia i przechowywać krótką informację o charakterze problemu. Opis powinien w moŝliwie zwięzły sposób, w postaci jednego zdania, określać przyczyny problemu, jego skutki lub oddawać jak najdokładniej, choć w skrócie, jego istotę. RozwaŜmy edytor tekstu zawieszający się za kaŝdym razem, gdy uŝytkownik próbuje pogrubić zaznaczony tekst. Złym opisem tego błędu jest zdanie Program zawiesza się, a lepszym - Program zawiesza się przy próbie pogrubienia zaznaczonego tekstu". Pole ogólnego opisu słuŝy przede wszystkim człowiekowi, jednak w niektórych sytuacjach moŝe być takŝe wykorzystywane przy zaawansowanym wyszukiwaniu zgłoszonych zagadnień Metryka problemu KaŜde zgłoszenie powinno być opatrzone podstawowymi informacjami na temat jego zaistnienia w rejestrze. Metryka pojedynczego zgłoszenia musi zawierać, co najmniej pole wskazujące na jego autora, datę pierwszej rejestracji oraz informacje o dacie i autorze ostatniej modyfikacji zgłoszenia. Są to informacje, bez których niemoŝliwe stałoby się efektywne zarządzanie rejestrem zgłoszeń Szczegółowy opis problemu Szczegółowy opis zgłoszonego problemu powinien przede wszystkim zawierać odpowiedzi na następujące pytania: Na czym polega istota problemu? Jakie są skutki wystąpienia problemu? Jaka sekwencja zdarzeń prowadzi do wystąpienia opisywanego problemu? Czy istnieje sposób uniknięcia (ominięcia) wystąpienia problemu? Co mogłoby rozwiązać dany problem? MoŜliwie kompletne i wyczerpujące odpowiedzi na powyŝsze pytania pozwolą na szybką i sprawną identyfikację, odnalezienie oraz rozwiązanie zgłaszanego problemu. 62

63 Ze względu na róŝnorodny charakter pytań warto pole szczegółowego opisu problemu rozdzielić na następujące sekcje i rozpatrywać je oddzielnie jako częściowo niezaleŝne Istota problemu Pole w naturalny sposób rozszerzające ogólny opis problemu. To tutaj powinien znajdować się szczegółowy opis zaistniałego problemu albo wyjaśnienie potrzeby wprowadzenia zmiany do oprogramowania. W przypadku prostych zgłoszeń pole to moŝe zawierać zdublowany opis ogólny. Przy większych, bardziej skomplikowanych problemach, sekcja ta posłuŝy jako miejsce do dodatkowego definiowania istoty problemu ŚcieŜka do powtórzenia problemu Ten fragment opisu problemu dotyczy w zasadzie głownie defektów. Osoba zgłaszająca problem powinna w miarę moŝliwości określić minimalny zestaw czynności potrzebny do powtórnego uzyskania opisywanego efektu. Jest to informacja niezbędna w procesie wykrywania i usuwania defektów, poniewaŝ błąd, którego nie umiemy powtórzyć, jest bardzo trudny do zlikwidowania. Niestety, w praktyce zgłoszenia problemów często pozbawione są dostatecznie precyzyjnego opisu ścieŝki do ich powtórzenia. Ten fragment opisu problemu powinien zawierać dokładną kolejność kroków zaczynając od początku, aby odtworzyć dany problem. Opis i dane do niego dostarczone powinny być w całości wystarczające, aby odtworzyć problem. JeŜeli aktywacja danego defektu wymaga konkretnej sekwencji zdarzeń, naleŝy je wyszczególnić. Przy opisie kroków naleŝy starać się minimalizować objętość dokumentacji dotyczącej danego problemu, jednakŝe nie jest to absolutnie konieczne. JeŜeli problem jest odtwarzalny musi istnieć na to odpowiedni sposób Efekty wystąpienia problemu Kompletny opis słowny problemu musi takŝe precyzować dokładny efekt jego wystąpienia. W ogólności chodzi tutaj o opis wyniku operacji, przy której wystąpił dany problem, przy czym nie wystarczy stwierdzenie typu "to nie wyszło" lub program zwrócił błędne dane. Jest to miejsce w opisie problemu, gdzie uŝytkownik zgłaszający problem powinien umieszczać wszelkie napotkane komunikaty o błędach - nawet te, których znaczenia sam nie rozumie. JeŜeli w momencie aktywacji defektu w zachowaniu systemu brak jest wyraźnych oznak błędu naleŝy takŝe zaznaczyć ten fakt, gdyŝ pozostawienie pustego pola moŝe zostać źle zinterpretowane jako brak informacji o efektach problemu. Zawartość tego pola jest kluczowa przy późniejszych próbach powtórzenia problemu 63

64 napotkanie tych samych symptomów oznacza, iŝ osoba odpowiedzialna za rozwiązanie danego zagadnienia dobrze zrozumiała zgłoszenie i rzeczywiście zajmuje się właściwym problemem. Przy wypełnianiu tej sekcji zgłoszenia najprościej po prostu przepisywać lub kopiować treści komunikatów wyświetlanych przez oprogramowanie. Pewnego rodzaju rozszerzeniem pola efektów wystąpienia problemu jest mechanizm załączników, który umoŝliwia np. dodanie do zgłoszenia zrzutu ekranu systemu tuŝ po wystąpieniu problemu. Załączniki, jako osobne pole w rekordzie problemu, są opisane w dalszej części tego rozdziału Propozycja rozwiązania Często zdarza się sytuacja, w której uŝytkownik zgłaszający problem ma w głowie gotowe rozwiązanie lub przynajmniej jego zarys. Oczywiście zazwyczaj nie chodzi tutaj o wskazanie konkretnego miejsca w kodzie, gdzie leŝy problem. Sekcja proponowanego rozwiązania daje zgłaszającemu moŝliwość wyraŝenia swojej opinii na temat zaistniałego problemu i zasugerowanie wykonawcy rozwiązania Dodatkowe informacje W ostatniej sekcji opisu problemu powinny się znaleźć wszelkie informacje, które nie mieszczą się w definicji poprzednich sekcji, a które osoba zgłaszająca pragnie przekazać wykonawcy. Pole to moŝna traktować jako swego rodzaju jednorazowy komentarz do opisu problemu. Nie naleŝy mylić tej sekcji z polem uwag opisywanym w dalszej części rozdziału informacje tutaj zawarte są ściśle powiązane z opisem istoty problemu Priorytet problemu Priorytet problemu jest rozumiany jako stopień jego waŝności w projekcie w stosunku do innych zgłoszonych problemów. Priorytet ma zasadniczo dwa wymiary. Pierwszym z nich jest krytyczność, a więc na ile problem jest istotny dla powodzenia projektu i funkcjonowania całego systemu. Drugim aspektem zawartym w priorytecie jest pilność, czyli maksymalny zadowalający czas usunięcia problemu. Pole priorytetu zgłoszenia jest takŝe ściśle powiązane z polem dokuczliwości. Priorytet zgłoszenia określa bezpośrednio tryb pracy nad usunięciem defektu lub wprowadzeniem zmiany. W chwili zgłaszania pole to pozostaje puste i jest wypełniane dopiero przy okazji analizy zgłoszenia i przydzielenia mu konkretnych zasobów. Wartość tego pola zazwyczaj nie jest stała i moŝe zmieniać się wraz z upływem czasu. Ustalenie priorytetu narzuca pewne 64

65 wymagania, co do tempa prowadzonych prac, wymuszając na przykład poprawienie danego błędu juŝ w następnej udostępnionej klientom wersji produktu. Warto w tym momencie zaznaczyć, iŝ priorytet problemu moŝe się odnosić zarówno do produktu (systemu) jak i procesu jego wytwarzania (projektu). Krytyczność rozwiązania danego problemu moŝe mieć diametralnie inny stopień w zaleŝności od kontekstu. Przykładowo, usprawnienie działania pewnego aspektu interfejsu uŝytkownika moŝe mieć wysoki priorytet, biorąc pod uwagę chęć poprawienia ergonomii i wydajności pracy z systemem. Ten sam problem w odniesieniu do celów i harmonogramu projektu moŝe mieć priorytet zdecydowanie niŝszy przy uwzględnieniu innych zadań oczekujących na realizację. Opisana tutaj relatywność priorytetu moŝe sugerować wprowadzenie do opisu problemu dwóch oddzielnych pól, odnoszących się odpowiednio do priorytetu względem produktu i projektu. Niezmiernie istotne jest, aby określenie problem o najwyŝszym priorytecie dla wszystkich zainteresowanych stron oznaczało to samo. KaŜdy zespół wypracowuje własną skalę oceny zgłoszeń, jednak ogólnie moŝna przyjąć, Ŝe najwyŝszą kategorię uzyskują problemy krytyczne, które uniemoŝliwiają działanie systemu, a następnie krytyczne nieblokujące, przy których dalsza praca jest niemoŝliwa. Następne w kolejności to zgłoszenia o wysokiej kategorii, potem średniej, a w końcu niskiej. PoniŜej znajduje się najczęściej spotykana hierarchia priorytetów przydzielanych zgłoszeniom, warto jednak zaznaczyć, iŝ konkretne projekty mogą wymagać specyficznego i całkiem odmiennego podejścia do tematu przydzielania waŝności zgłoszeń NajwyŜszy Problem dotyczy defektu lub zmiany, która jest kluczowa dla powodzenia przedsięwzięcia. Zaniedbanie zgłoszenia moŝe bezpośrednio wpłynąć na niezadowolenie klienta, jakość produktu, na wielkość sprzedaŝy i na wyniki firmy lub w skrajnym przypadku na całkowite niepowodzenie projektu. Problem o takim priorytecie naleŝy bezwzględnie natychmiast przeanalizować i rozwiązać. W przypadku zgłoszenia defektu oznacza to, iŝ w następnej wersji produktu zgłoszony defekt nie moŝe wystąpić i naleŝy powstrzymać jej wypuszczenie do chwili usunięcia błędu. W szczególnych sytuacjach moŝna takŝe rozwaŝyć przygotowanie specjalnej wersji produktu zawierającej poprawkę usuwającą defekt. 65

66 Wysoki Zgłoszenie o wysokim priorytecie jest bardzo waŝne w kontekście powodzenia przedsięwzięcia i produktu. NaleŜy go jak najszybciej przeanalizować i rozwiązać. W przypadku defektów, poza zupełnie wyjątkowymi sytuacjami, w następnej oficjalnej wersji produktu wypuszczonej na rynek lub udostępnionej klientowi nie moŝe wystąpić opisywany błąd. NaleŜy ponadto rozwaŝyć wydanie łaty poprawiającej defekt w obecnej wersji produktu Średni Problem istotny dla powodzenia przedsięwzięcia jednak juŝ nie tak krytyczny jak dwa powyŝsze przypadki. W harmonogramie prac nad produktem naleŝy uwzględnić próbę rozwiązania zgłoszonego problemu. Jeśli nie w najbliŝszej, to w kolejnej wersji produktu defekt powinien być usunięty, a postulowana zmiana wprowadzona. W praktyce średni priorytet oznacza, iŝ problem naleŝy rozpatrzyć i zaproponować konkretne rozwiązanie w przeciągu 4 miesięcy od zgłoszenia Niski Najogólniej rzecz ujmując są to problemy, które naleŝy prędzej czy później rozwiązać. Defekty o takim priorytecie zazwyczaj odznaczają się znikomą uciąŝliwością, co jednak nie zmienia faktu, iŝ naleŝy je w końcu usunąć z produktu. W przypadku zmian, te o niskim priorytecie to takie, na które nie ma specjalnego wskazania w specyfikacji wymagań i których realizacja moŝe zostać odłoŝona na późniejszy termin. W Ŝadnym wypadku nie naleŝy jednak niskiego priorytetu problemu interpretować jako przyzwolenie na jego całkowite zignorowanie. Problemy takie w praktyce naleŝy usuwać w przeciągu 6 miesięcy od zgłoszenia Stan problemu WaŜne, aby w dowolnym momencie procesu obsługi, moŝna było jednoznacznie stwierdzić, na jakim etapie znajduje się zgłoszenie. Przedmiotem poprzedniego rozdziału była szczegółowa analiza cyklu Ŝycia kaŝdego zgłoszenia defektu i prośby o zmianę w projekcie. Omawiane tutaj pole stanowi bezpośrednią konsekwencję wprowadzenia pojęcia stanu zgłoszenia. Jego wartość oznacza aktualny stan zgłoszenia - stopień zaawansowania naprawy defektu lub wprowadzenia zmiany. Dziedzina moŝliwych 66

67 wartości pola moŝe odpowiadać najwaŝniejszym etapom procesu rozwiązywania problemów zaproponowanym w poprzednim rozdziale Przydział odpowiedzialności Przydatność tego rodzaju pól zaleŝy od sposobu prowadzenia prac projektowych i programistycznych w firmie. SłuŜą one do określenia osób lub zespołów obarczanych odpowiedzialnością za pewne czynności związane z obsługą błędu. Odpowiednie uŝycie tych pól moŝe ułatwić zarządzanie procesem usuwania błędu. Standardowo pola przydziału określają osoby odpowiedzialne za kontakty z klientami, prace programistyczne, sporządzenie dokumentacji i przeprowadzanie testów. 4.4 Historia problemu Jak pokazano w poprzednim rozdziale dotyczącym cyklu Ŝycia problemu, przebieg jego obsługi jest procesem ciągłym i bardzo często czasochłonnym. W trakcie całego procesu definicja i opis problemu ulega rozmaitym przekształceniom opisy są aktualizowane i zmieniane są atrybuty zgłoszenia. Struktura danych opisująca zgłoszenie nie moŝe pozostawać obojętna na ten fakt, dlatego tak istotne jest zidentyfikowanie jej zmiennych aspektów i zaproponowanie efektywnej metody przechowywania informacji na temat zachodzących zmian Modyfikacje atrybutów Najbardziej oczywistym aspektem podlegającym modyfikacjom w opisie problemu są jego podstawowe atrybuty takie jak stan, przydział odpowiedzialności czy priorytet. W zasadzie jakakolwiek zmiana któregokolwiek z opisywanych w tym rozdziale atrybutów nominalnych powinna się wiązać z zapisem w historii danego zgłoszenia. Informacja taka moŝe się okazać przydatna przy dalszej analizie problemu albo przy rozliczaniu prac nad danym zgłoszeniem. Pojedynczy wpis do historii problemu powinien zawierać informacje na temat czasu modyfikacji, nowej wartości atrybutu oraz osoby, która jest jej autorem. W praktyce przydatny moŝe się okazać takŝe komentarz do modyfikacji, np. wyjaśniający przyczynę obniŝenia priorytetu problemu. Oczywistym jest fakt, iŝ pojedyncze zgłoszenie moŝe posiadać nieskończenie wiele wpisów w swojej historii Rozszerzenia opisu problemu W trakcie procesu obsługi bardziej skomplikowanych zgłoszeń ich opis moŝe ulegać wielokrotnym zmianom i aktualizacjom. Choć w danym momencie główny opis 67

68 problemu powinien stanowić jednolitą całość, czasem moŝe być wskazane przechowywanie informacji na temat, kto i kiedy zmodyfikował treść opisu, a czasem nawet poprzednie jego wersje Uwagi i komentarze Praktyka bardzo często pokazuje, Ŝe nawet najbardziej elastyczna struktura danych w pewnym momencie moŝe się okazać niewystarczająca do opisu szczególnych sytuacji. Pole uwag i komentarzy stanowi najmniej sformalizowany element struktury danych opisującej problem i moŝe posłuŝyć jako miejsce, w którym gromadzone są wszelkie informacje, których znaczenie nie mieści się w ramach pozostałych pól. Komentarz do problemu moŝe zawierać informacje nie dotykające bezpośrednio sedna problemu, a jednocześnie będące przydatne w procesie jego obsługi. Istotne jest to, iŝ pojedyncze zgłoszenie moŝe być opatrzone wieloma komentarzami, z których kaŝdy moŝe mieć innego autora. Przykładami komentarzy mogą być całkowicie nieformalne stwierdzenia takie jak np. Zajmę się tym w przyszłym tygodniu albo Proszę o podanie więcej szczegółów na temat. Ciąg takich uwag moŝe w pewnym momencie przyjąć formę dyskusji między zgłaszającym i programistą usuwającym usterkę. Jak widać pole uwag daje sporą dozę dowolności przy jego wykorzystaniu, co niestety rodzi niebezpieczeństwo jego naduŝycia. NaleŜy bezwzględnie unikać sytuacji, w których pole komentarza jest wykorzystywane do przechowywania informacji, które ewidentnie powinny się znaleźć w innych częściach zgłoszenia. 4.5 Dodatkowe informacje o problemie Poza omówionymi podstawowymi informacjami zgłoszenie moŝe zawierać dodatkowe dane przydatne w jego katalogowaniu i odszukiwaniu. NaleŜy jednak pamiętać, Ŝe rozszerzanie dowolnej struktury danych zwiększa złoŝoność procesu obsługi takich danych. W omawianym przypadku ewidencji zgłoszeń powoduje takŝe powstanie dodatkowych zaleŝności między systemem ewidencjonowania zgłoszeń a całością procesu produkcji oprogramowania. Im ściślejszy ten związek tym mniejsza jest uniwersalność struktury danych. PoniŜej znajduje się lista cech zgłoszenia, które mogą stanowić dodatkowy zestaw informacji przydatnych w szczególnych przypadkach procesu ich obsługi. 68

69 4.5.1 Identyfikator produktu W przypadku, gdy przedmiotem projektu jest realizacja więcej niŝ jednego systemu przydatne moŝe okazać się oznakowanie kaŝdego zgłoszenia identyfikatorem produktu, którego się tyczy. Takie podejście jest zdecydowanie bardziej praktyczne, niŝ umieszczanie takiej informacji bezpośrednio w opisie problemu. Ogólnie rzecz biorąc jest to zatem pole identyfikujące produkt, w którym zauwaŝono defekt lub, w którym konieczne jest wprowadzenie zmiany. Pole to jest zazwyczaj wypełniane w chwili zgłoszenia problemu, choć nie jest to reguła moŝe się np. zdarzyć, iŝ uŝytkownik nie do końca zdaje sobie sprawę, z jakiego produktu korzysta. Wartość ta nie pozostaje takŝe stała, moŝe się zdarzyć, iŝ zgłoszonemu problemowi zostanie omyłkowo przypisany niewłaściwy produkt. Dobrze, gdy w polu tym znajduje się zrozumiały i unikalny kod określający konkretny produkt. Stosowane tutaj oraz w podrozdziale 4.5 pojęcie produktu moŝe odnosić się zarówno do finalnego rezultatu projektu informatycznego (systemu, modułu, dokumentacji) jak równieŝ do poszczególnych półproduktów i składników powstających w całym cyklu wytwórczym (produktów kolejnych faz projektu). Sposób, zakres oraz stopień szczegółowości przy identyfikowaniu produktów jest ściśle uzaleŝniony od potrzeb i specyfiki konkretnego projektu Wersja produktu Pole wersji produktu stanowi naturalne rozszerzenie poprzedniego pola. W przypadku złoŝonych projektów wytwarzających wiele wersji oprogramowania konieczna moŝe okazać się identyfikacja wersji danego produktu, w której został zauwaŝony defekt. Pole wersji, podobnie jak identyfikator produktu, jest wypełniane w chwili zgłoszenia i podlega tym samym zasadom. Pole powinno przechowywać informacje pozwalające jednoznacznie zidentyfikować odpowiednią wersję produktu Słowa kluczowe W przypadku, gdy zaleŝy nam na skutecznym odszukiwaniu zgłoszeń zasadne moŝe okazać się wprowadzenie dodatkowych ustrukturalizowanych atrybutów do rekordu problemu. Przykładem takiego pola jest zbiór słów kluczowych. W polu tym, wypełnianym przez osobę zgłaszającą problem, naleŝy umieścić jedno lub kilka słów kluczowych charakteryzujących zagadnienie z jej punktu widzenia. Zestaw moŝliwych do uŝycia słów kluczowych musi być stały w obrębie projektu lub produktu i powinien zawierać pojedyncze słowa lub krótkie wyraŝenia. W przypadku zgłoszeń 69

70 defektów słowa kluczowe powinny opisywać błąd z punktu widzenia zgłaszającego, a więc naleŝy je dobierać na podstawie wiedzy moŝliwej do uzyskania podczas uŝytkowania systemu, a nie opartej na doświadczeniu nabytym przy jego tworzeniu. JeŜeli na przykład produktem jest telefon, to słowami kluczowymi, znanymi uŝytkownikowi, są sygnał, wybieranie numeru, klawiatura, zakończenie rozmowy itp. Jeśli uŝytkownik napotyka problem przy wybieraniu numerów zawierających cyfrę 6, odpowiednimi słowami kluczowymi są wybieranie numeru, klawiatura. Pole słów kluczowych silnie zaleŝy od kontekstu zgłoszenia, poniewaŝ róŝne produkty będą udostępniały róŝne zestawy dozwolonych wartości. W praktyce pole tego typu umoŝliwia segregację zgłoszeń na kategorie, co w efekcie pomaga w określaniu fragmentów produktu, które nie sprawiają problemów uŝytkownikom, oraz tych, które wymagają jeszcze dopracowania Dokuczliwość problemu Dokuczliwość jest cechą praktycznie zarezerwowaną dla defektów. Pole dokuczliwości uŝywa ustalonego zbioru wartości, które określają jego wpływ na działanie oprogramowania oraz na pracę i sposób oceny produktu przez jego uŝytkowników. Dokuczliwość problemu jest w znacznym stopniu cechą subiektywną i jest określana przez osobę zgłaszającą defekt, choć warto zaznaczyć, iŝ jej wartość moŝe ulegać zmianom w dalszym procesie obsługi zgłoszenia (np. w wyniku wstępnej oceny zgłoszenia). Zbiór moŝliwych poziomów dokuczliwości moŝe zaleŝeć od potrzeb, ale w praktyce powinien być taki sam dla wszystkich produktów opracowywanych w organizacji. WaŜne jest, aby definicje poszczególnych poziomów były znane i zrozumiałe zarówno dla wytwórców oprogramowania jak i osób zgłaszających defekty. PoniŜsza tabela zawiera przykładową propozycję hierarchii dokuczliwości, wraz z opisem znaczenia poszczególnych stopni [BAY2001]: Dokuczliwość Opis SKRAJNA Oprogramowania nie da się uŝywać, przez co uŝytkownik nie moŝe wykonywać nawet swoich podstawowych zadań. DUśA Nie działa pewna istotna część produktu, jednak uŝytkownik nadal moŝe wykonywać pewien podzbiór swoich zadań ŚREDNIA Pewien fragment produktu nie działa, ale uŝytkownik moŝe wykonać większość operacji. Mogą istnieć pewne skomplikowane i niewygodne metody obejścia błędu. Niedziałające część oprogramowania jest opisana w jego specyfikacji. MAŁA UŜytkownik moŝe wykonać większość operacji, a nie działa jedynie niewielki fragment produktu, nieopisany w specyfikacji. NajwyŜszym poziomem dokuczliwości moŝna oznaczyć błąd, który powoduje zawieszenie programu natychmiast po jego uruchomieniu. W edytorze tekstu błędem 70

71 o duŝej dokuczliwości jest niemoŝność uŝywania stylów tekstu. Średnio dokuczliwym błędem jest brak moŝliwości ustalania szerokości marginesów, natomiast błąd polegający na tym, Ŝe nie moŝna pogrubić tekstu, korzystając z menu programu, ale udaje się to zrobić przy uŝyciu skrótów dostępnych na klawiaturze, ma niski poziom dokuczliwości Charakter problemu Jak zaznaczono wyŝej, dokuczliwość problemu odnosi się właściwie tylko i wyłącznie do defektów oprogramowania i precyzuje jedynie poziom jego wpływu na działanie produktu. W przypadku, gdy zaleŝy nam na bardziej szczegółowym klasyfikowaniu problemów, a rejestr zgłoszeń ma zawierać zarówno raporty o defektach jak i propozycje zmian, zasadne moŝe okazać się wprowadzenie dodatkowego pola opisującego zgłoszenie pod względem jego charakteru. Takie rozszerzenie struktury danych wpłynie pozytywnie na moŝliwość wyszukiwania i kategoryzowania problemów pod kątem ich faktycznego znaczenia. PoniŜej znajduje się przykładowy podział zgłoszeń według ich charakteru [MAN2005]: Charakter Opis PROPOZYCJA Zgłoszenie jawnie sklasyfikowane jako powaŝna propozycja zmiany BŁAHY Zgłoszenie dotyczy problemu, którego waga jest znikomo mała. W praktyce zgłoszenia tego typu mają bardzo niski priorytet, a w aspekcie dokuczliwości mieszczą się nawet poniŝej poziomu MAŁA. TEKST Zgłoszenie dotyczy problemu nie odnoszącego się do funkcjonalności systemu zazwyczaj oznacza to błąd merytoryczny w tekście wyświetlanym przez system albo literówkę w interfejsie lub dokumentacji. POPRAWKA UŜytkownik moŝe wykonać większość operacji, a nie działa jedynie niewielki fragment produktu, nieopisany w specyfikacji. DROBNY Zgłoszenie dotyczy problemu, którego waga jest mało istotna, ale nie pomijalna. WAśNY Zgłoszenie dotyczy problemu, którego waga jest bardzo istotna. UPADEK Zgłoszenie dotyczy problemu, który spowodował upadek systemu. BLOKADA Zgłoszenie dotyczy problemu, który spowodował zablokowanie pewnej funkcjonalności systemu Powtarzalność Pole w pewnym sensie nadmiarowe, gdyŝ informacja o powtarzalności powinna być zaszyta juŝ w samym opisie problemu. Wprowadzenie tego typu dodatkowego klasyfikatora zagadnień ma na celu dalsze usprawnienie kategoryzowania zgłoszeń i moŝe okazać się pomocne przy określaniu priorytetów - osoba oceniająca zgłoszenie nie musi analizować opisu, aby określić pewne aspekty zgłoszenia. PoniŜej znajduje się przykładowy podział zgłoszeń według ich powtarzalności [MAN2005]: 71

72 Powtarzalność ZAWSZE CZASAMI LOSOWO NIE PRÓBOWANO NIE DO POWTÓRZENIA Opis Problem występuje zawsze, gdy powtórzy się kroki zawarte w opisie problemu Problem występuje prawie zawsze, gdy powtórzy się kroki zawarte w opisie problemu. Opis problemu moŝe, ale nie musi, zawierać informacje na temat dodatkowych warunków, jakie muszą być spełnione, aby problem wystąpił. Problem występuje, ale zgłaszający nie jest w stanie precyzyjnie określić dokładnych przyczyn jego powstawania. Opis takiego problemu, moŝe być z tego powodu pozbawiony szczegółowego opisu dojścia do wystąpienia problemu. Problem został zauwaŝony, jednak z jakiegoś powodu nie została podjęta Ŝadna próba jego powtórzenia. Opis takiego problemu, moŝe być z tego powodu pozbawiony szczegółowego opisu dojścia do wystąpienia problemu. Problem został zauwaŝony, jednak wszystkie podjęte próby jego powtórzenia zakończyły się poraŝką. Problemy tego typu mogą posiadać szczegółowy opis, który jednak w warunkach testowych moŝe nie prowadzić do jego powtórzenia Widzialność W przypadku, gdy do rejestru problemów mają dostęp zarówno wykonawcy, uŝytkownicy jak i przedstawiciele klienta zasadne moŝe być wprowadzenie dodatkowego mechanizmu filtrującego zgłoszenia. Zdarzają się sytuacje, gdy wykonawcy zaleŝy, aby pewne aspekty działania oprogramowania albo bardziej krytyczne defekty wykryte przez samych programistów nie były widoczne poza zespołem projektowym. Rozszerzenie struktury danych problemu o pole typu widzialność całkowicie rozwiązuje ten problem. W najprostszym scenariuszu wystarczy pole o binarnej wartości, choć nie wyklucza się bardziej złoŝonego klasyfikowania problemów niŝ zaprezentowane poniŝej: Widzialność PRYWATNE PUBLICZNE Opis Zgłoszenie widziane tylko przez członków zespołu projektowego wykonawcy. Zgłoszenie widziane przez wszystkie osoby mające dostęp do rejestru problemów Składnik produktu KaŜdy produkt informatyczny moŝe zostać podzielony na składniki w sposób odzwierciedlający strukturę jego implementacji. Struktura takiego podziału przypomina zazwyczaj drzewo, którego korzeniem jest cały produkt, a na kolejnych poziomach znajdują się poszczególne jego moduły i komponenty. Pole składnika produktu jest w pewnym sensie podobne do pola słów kluczowych. RóŜnica polega na punkcie widzenia - jest dla programisty tym, czym pole słów kluczowych dla uŝytkownika. Informacja niesiona łącznie przez oba te pola umoŝliwia precyzyjne określenie miejsca występowania problemu, a takŝe podział zgłoszeń na kategorie z punktu widzenia zarówno uŝytkownika 72

73 jak i programisty. Pole składnika moŝe pozostać niewypełnione, aŝ do chwili ukończenia procesu rozpoznania przyczyn problemu. WaŜne, aby w pojedynczym zgłoszeniu moŝna było określić tylko jeden odpowiadający mu składnik produktu. Pole składnika produktu zaleŝy od kontekstu z tych samych powodów, co pole słów kluczowych, a zbiór moŝliwych do wybrania składników zaleŝy oczywiście od konkretnego produktu i potrzeb projektu. Dziedziną tego pola moŝe być zarówno szczegółowa lista modułów i komponentów produktu, jak równieŝ ogólny podział systemu na np. warstwę danych, logikę oraz interfejs uŝytkownika. Choć pole składnika zasadniczo odnosi się do produktów stricte informatycznych (systemu, modułu), moŝe ono zostać takŝe zaadaptowane na potrzeby opisu innego rodzaju produktów i półproduktów poszczególnych faz cyklu wytwórczego (np. do określania konkretnych fragmentów dokumentów projektowych) Załączniki W procesie opisu problemu niezwykle pomocne bywa załączenie zrzutów ekranów. Często w przypadku niemoŝności odtworzenia błędu jest to jedyny dowód na to, Ŝe miał on jednak miejsce, a przyczyna, Ŝe nie jesteśmy go w stanie powtórzyć tkwi w specyficznych okolicznościach jego zaistnienia. Bardzo często programista jest w stanie z samego zrzutu ekranu odczytać te okoliczności. Aby osoba zgłaszająca problem miała moŝliwość przekazania wykonawcy tego typu informacje dodatkowe, struktura danych przechowująca informacje o problemie musi umoŝliwiać dołączanie do niej zewnętrznych danych w postaci załączników. Najogólniej rzecz ujmując załącznik to zewnętrzny plik związany z rekordem lub będący jego elementem. Zawartość takiego pliku moŝe zaleŝeć od właściwości produktu, w którym wystąpił problem oraz od rodzaju zgłoszonego defektu. Struktura danych powinna być na tyle elastyczna, aby pozwalać na umieszczenie więcej niŝ jednego załącznika w rekordzie problemu. Zrzuty ekranu stanowią tylko jeden z moŝliwych rodzajów załączników, choć praktyka pokazuje, iŝ są ich najczęściej spotykaną formą. Niektóre produkty wymagają uŝycia załączników częściej niŝ inne. Przykładowo, w opisie defektów występujących w kompilatorach lub programach łączących często jest przydatne dołączenie plików źródłowych, przy przetwarzaniu, których wystąpił błąd. RównieŜ w produktach sieciowych często uŝywa się załączników zawierających diagramy obrazujące powstałe problemy. 73

74 W takich sytuacjach umoŝliwienie tworzenia załączników do rekordów problemów moŝe znacznie usprawnić proces ich usuwania Pole duplikatu Pole duplikatu w opisie problemu słuŝy do wskazania innego zgłoszenia, o którym wiadomo, Ŝe w istocie zawiera informacje o tym samym lub bardzo podobnym zagadnieniu. Pole to zawiera zazwyczaj identyfikator drugiego zgłoszenia. W celu maksymalnego uproszczenia procesu katalogowania i wyszukiwania zgłoszeń naleŝy unikać sytuacji, w której wiele zgłoszeń opisuje ten sam problem, w przeciwnym, bowiem razie łatwo stracić kontrolę nad wszystkimi powiązanymi zagadnieniami. Podwójne zgłoszenia powinny być jak najszybciej łączone w jedno, a odpowiedzialność za wykonanie połączenia spoczywa na osobie, która pierwsza zauwaŝy, Ŝe dwa zgłoszenia opisują ten sam problem. Wszelkie duplikaty powinny być zlikwidowane, zanim prace nad zgłoszeniem ulegną zakończeniu. 4.6 Model problemu PowyŜszy opis stanowi zakres informacji, jaki moŝe nieść ze sobą pojedynczy problem w projekcie informatycznym. Przedstawiona struktura, choć zawiera szczegółowy opis kaŝdego elementu składowego, nie stanowi formalnego modelu problemu, którego powstanie było głównym celem niniejszego rozdziału. Korzystając z niego moŝna jednak przystąpić do budowy takiego modelu. Rysunek 4-3 przedstawia statyczną strukturę problemu z wykorzystaniem notacji UML 2.0 w zakresie modelowania klas oraz związków zachodzących pomiędzy nimi. Wybór notacji podyktowany był chęcią uzyskania jak największej czytelności i przejrzystości przy jednoczesnej zgodności ze standardami. Diagram klas stanowi bezpośrednie przełoŝenie opisanej wyŝej struktury problemu. Jak widać w proponowanym modelu została wprowadzona hierarchia dziedziczenia, aby zobrazować część wspólną oraz róŝnice pomiędzy zgłoszeniami defektów i propozycji zmian. Ponadto diagram zawiera wszystkie zidentyfikowane elementy takie jak definicja problemu (defektu i zmiany), jego historię, dodatkowe informacji itp. W modelu problemu został wykorzystany wzorzec projektowy Stan (ang. State) [GAMM1995] do zamodelowania stanu problemu oraz jego rozwiązania. Podejście takie daje moŝliwość odrębnego definiowania zachowania i właściwości problemu w kaŝdym ze stanów oraz umoŝliwia ewentualne rozszerzenie modelu o nowe stany i rozwiązania w przyszłości. 74

75 Rysunek 4-3 Diagram klas modelu problemu Charakterystyka poszczególnych elementów modelu znajduje się poniŝej. Opis poszczególnych klas, oprócz wyjaśnienia ich znaczenia, zawiera ogólną charakterystykę atrybutów oraz związków zachodzących pomiędzy obiektami. W zaprezentowanym modelu celowo pominięto bardziej szczegółowe aspekty takie jak definicje metod, gdyŝ w zamierzeniu ma to być model moŝliwie prosty i niezaleŝny od konkretnej implementacji, odnoszący się przede wszystkim do statycznych aspektów modelu problemu. 75

76 Klasa Problem Opis klasy Klasa abstrakcyjna, której instancje reprezentują pojedyncze problemy pojawiające się w trakcie projektu informatycznego. Instancja Problemu moŝe być albo Defektem albo Zmianą. Atrybuty Identyfikator unikalny identyfikator problemu datazgłoszenia data pojawienia się zgłoszenia problemu autor imię i nazwisko osoby zgłaszającej problem priorytet aktualna wartość priorytetu problemu osobaprzypisana imię i nazwisko osoby aktualnie odpowiedzialnej za rozwiązanie problemu produkt nazwa produktu, którego dotyczy problem wersjaproduktu numer wersji produktu, której dotyczy problem składnikproduktu nazwa części produktu, której dotyczy problem słowakluczowe lista słów kluczowych charakteryzujących problem widzialność określa czy informacja o problemie jest publiczna czy prywatna tytuł - krótki opis charakteryzujący istotę problemu opis rozszerzony opis problemu dodatkoweinformacje dodatkowe informacje na temat problemu Związki Problem zgłoszony przez Członek zespołu projektowego związek 1-1 określający, kto jest autorem zgłoszenia problemu, pojedynczy problem moŝe mieć tylko jednego autora Problem przypisany do Członek zespołu projektowego związek 1-1 reprezentujący aktualnie przypisaną odpowiedzialność za rozwiązanie problemu, do pojenczego problemu w danym momencie moŝe być przypisana tylko jedna osoba Problem posiada listę modyfikacji Modyfikacja silna agregacja 0-* reprezentująca historię zmian pojedynczego problemu Problem posiada załączniki Załącznik silna agregacja 0-* reprezentująca zbiór załączników dodanych do pojedynczego problemu Problem posiada komentarze Komentarz - silna agregacja 0-* reprezentująca zbiór komentarzy dodanych do pojedynczego problemu Problem jest w stanie Stan słaba agregacja 1 1 określająca stan, w jakim znajduje się aktualnie dany problem Problem posiada rozwiązanie Rozwiazanie słaba agregacja 1 1 określająca rozwiązanie, jakie przypisano danemu problemowi Problem stanowi klasę bazową dla klas Defekt oraz Zmiana Klasa Defekt Opis klasy Klasa potomna dziedzicząca po klasie Problem. Instancje tej klasy reprezentują zgłoszenia o defektach i zawierają informacje na ich temat. Atrybuty powtarzalność określa jaka jest częstotliwość aktywacji defektu w produkcie sposóbpowtórzenia opis kroków koniecznych do powtórzenia aktywacji defektu dokuczliwość określa stopień dokuczliwości istnienia danego defektu w produkcie efektywystąpienia opis efektów aktywacji defektu propozycjarozwiązania opis propozycji rozwiązania problemu Związki Defekt dziedziczy po klasie Problem Klasa Zmiana Opis klasy Klasa potomna dziedzicząca po klasie Problem. Instancje tej klasy reprezentują prośby o zmiany i zawierają informacje na ich temat. Atrybuty propozycjazamiany szczegółowy opis proponowanej zmiany w produkcie Związki Zmiana dziedziczy po klasie Problem 76

77 Klasa Komentarz Opis klasy Instancje tej klasy reprezentują pojedyncze komentarze do konkretnych problemów. Atrybuty data data dodania komentarza do problemu autor imię i nazwisko osoby dodającej komentarz tresc treść komentarza Związki Komentarz dodany przez Członek zespołu projektowego związek 1-1 określający, kto jest autorem komentarza do problemu, pojedynczy komentarz moŝe mieć tylko jednego autora Problem posiada komentarze Komentarz - silna agregacja 0-* reprezentująca zbiór komentarzy dodanych do pojedynczego problemu Klasa Modyfikacja Opis klasy Instancje tej klasy reprezentują pojedyncze modyfikacje wprowadzane do opisu konkretnego problemu. Zbiór instancji dotyczących pojedynczego problemu stanowi kompletny zapis historii danego problemu. Atrybuty data data wprowadzenia modyfikacji rodzaj dokładny opis co uległo zmianie ze wskazaniem nowej i starej wartości autor imię i nazwisko osoby wprowadzającej modyfikację Związki Modyfikacja dokonana przez Członek zespołu projektowego związek 1-1 określający, kto jest autorem modyfikacji do opisu problemu, pojedyncza modyfikacja ma tylko jednego autora Problem posiada listę modyfikacji Modyfikacja silna agregacja 0-* reprezentująca historię zmian pojedynczego problemu Klasa Załącznik Opis klasy Instancje tej klasy reprezentują pojedyncze załączniki dołączane do konkretnych problemów. Atrybuty data data dodania załącznika do problemu autor imię i nazwisko osoby dodającej załącznik nazwa nazwa załącznika opis szerszy opis zawartości załącznika plik właściwy plik załącznika Związki Załącznik załączony przez Członek zespołu projektowego związek 1-1 określający, kto jest autorem załącznika do problemu, pojedynczy załączniks moŝe mieć tylko jednego autora Problem posiada załączniki Załącznik silna agregacja 0-* reprezentująca zbiór załącznikó dodanych do pojedynczego problemu Klasa Stan Opis klasy Klasa abstrakcyjna, której instancje reprezentują indywidualne stany, w jakich moŝe znaleźć się pojedynczy problem w trakcie swojego cyklu Ŝycia. Związki Problem jest w stanie Stan słaba agregacja 1 1 określająca stan, w jakim znajduje się aktualnie dany problem Stan stanowi klasę bazową dla klas reprezentujących konkretne stany Klasa Rozwiązanie Opis klasy Klasa abstrakcyjna, której instancje reprezentują konkretne rozwiązania pojedynczego problemu w trakcie swojego cyklu Ŝycia. Związki Problem posiada rozwiązanie Rozwiązanie słaba agregacja 1 1 określająca rozwiązanie, jakie przypisano danemu problemowi Rozwiązanie stanowi klasę bazową dla klas reprezentujących konkretne rozwiązania 77

78 4.7 Dynamika modelu problemu WaŜnym elementem modelu problemu jest takŝe jego zachowanie w czasie. Identyfikacja cyklu Ŝycia problemu w projekcie informatycznym była przedmiotem rozwaŝań w Rozdziale 3 Cykl Ŝycia problemu w projekcie informatycznym, gdzie na bazie analizy scenariusza obiegu zgłoszenia powstał ogólny opis stanów, w jakich moŝe się znaleźć pojedyncze zgłoszenie. Standard UML oferuje notacje do modelowania zachowania zarówno procesów jak i obiektów w nich biorących udział. Notacje te, w postaci diagramów aktywności oraz stanów, zostały uŝyte do zamodelowania procesu obsługi problemów Diagram aktywności procesu obsługi problemu Rysunek 4-4 Diagram aktywności procesu obsługi problemu 78

79 4.7.2 Diagram stanów problemu Ogólny diagram stanów problemu został zawarty w Rozdziale 3 przy okazji opisu cyklu Ŝycia problemu w projekcie informatycznym (Rysunki 3-3 oraz 3-4). W kontekście zaproponowanego modelu, diagram stanów odnosi się do klasy Problem oraz jej klas potomnych. 4.8 Podsumowanie Celem tego rozdziału było przede wszystkim stworzenie formalnego modelu problemu. Przy okazji charakterystyki elementów opisu problemu pokazano jak waŝna jest precyzja przy gromadzeniu informacji na temat problemów w projekcie informatycznym. Przeprowadzona analiza, wymienione atrybuty oraz pola opisowe zgłoszenia i wreszcie zaproponowany model problemu w notacji UML mogą stanowić solidną podstawę do opracowania rzeczywistej struktury danych w narzędziu będącym celem praktycznej części pracy dyplomowej. 79

80 5. Zarządzanie problemami w projekcie informatycznym The greatest challenge to any thinker is stating the problem in a way that will allow a solution" Bertrand Russel 5.1 Wprowadzenie Dotychczas treść mojej pracy koncentrowała się głownie na pojęciu problemu, jego atrybutach i cyklu Ŝycia. W Rozdziale 2 wprowadzone zostało pojęcie zarządzania problemami, jako działania będącego integralną częścią zarządzania projektem informatycznym. Wspomniałem wtedy, iŝ zarządzanie problemami stanowi fragment większego przedsięwzięcia zwanego zarządzaniem konfiguracją projektu informatycznego. Celem niniejszego rozdziału jest ogólne przedstawienie tego procesu jako całości. Poruszenie tego zagadnienia, chociaŝ w sposób ogólny, wydaje się konieczne, gdyŝ obsługa problemów w projekcie informatycznym nie jest procesem autonomicznym i nie moŝe być rozpatrywana w oderwaniu od pozostałych zagadnień zarządzania konfiguracją. Znacząca część niniejszego opracowania tematyki związanej z zarządzaniem konfiguracją została oparta na publikacjach ITIL (Information Technology Infrastructure Library) [ITILSRV2000]. Metodyka ta zawiera wytyczne dotyczące organizacji procesów tworzenia i dostarczania usług IT i jest zbiorem reguł opartych na najlepszych praktykach wypracowanych przez ekspertów, konsultantów, dostawców rozwiązań IT oraz końcowych uŝytkowników teleinformatyki. Obecnie pracami nad rozwojem standardu kieruje Office of Government Commerce (OGC), które jest równieŝ twórcą innych znanych światowych standardów, do których naleŝą m.in.: metodyka zarządzania projektami PRINCE2 (Projects in Controlled Environments version 2), metodyka analizy, specyfikacji i projektowania systemów informatycznych SSADM (Structured Systems Analysis and Design Method) oraz metodyka analizy ryzyka i zarządzania nim CRAMM (CCTA Risk Analysis & Management Method). 5.2 Ogólny opis procesu Zarządzanie konfiguracją (ang. Software Configuration Management) stanowi jeden z aspektów projektów informatycznych, którego głównym celem jest wsparcie prowadzenia projektu, wspomaganie równoczesnej pracy wielu ludzi oraz kontroli dokonywanych zmian w sytuacji, gdy cel lub wymagania na oprogramowanie są niestabilne, produkt jest wytwarzany w wielu wersjach lub dla wielu docelowych platform 80

81 [SZEJ2002]. Termin ten oznacza takŝe właściwą koordynację pracy zespołu poprzez utrzymywanie sprawnej komunikacji między jego członkami oraz przechowywanie i ochronę wspólnych zasobów oraz kontrolowanie spójności wersji produktów projektu. Zarządzanie konfiguracją jest dziedziną inŝynierii oprogramowania, której znaczenie gwałtownie rośnie wraz ze stopniem złoŝoności systemów informatycznych. Swoim zakresem obejmuje w całości cykl Ŝycia projektu, a szczególnego znaczenia nabiera w trakcie jego dalszego rozwoju. Planowanie i kontrola zmian to tylko niektóre z kluczowych funkcji, jakie pełni w nowoczesnym projekcie informatycznym. Jej znaczenie jest, więc powaŝne, nie tylko dla zespołów projektowych po stronie wykonawcy, ale przede wszystkim po stronie klienta. Zarządzanie konfiguracją jest szczególnie ukierunkowane na wspomaganie równoległej pracy wielu ludzi nad wspólnym projektem. Sam proces rozumiany jest jako nadzór nad rozwojem wszelkich elementów składowych projektu i dotyczy wszystkich produktów powstałych w procesie wytwórczym, zarówno na etapie jego wytwarzania, jak i dalszej eksploatacji. Zarządzanie konfiguracją eliminuje następujące problemy: niemoŝność odnalezienia aktualnej wersji zasobów projektu powtórne pojawianie się juŝ usuniętych defektów praca nad nieaktualnymi wersjami kodu źródłowego testowanie niewłaściwej wersji systemu zgubienie lub zniszczenie wprowadzonych zmian niemoŝność ustalenia stopnia spełnienia wymagań na system niespójność reprezentacji produktów projektu NaleŜy pamiętać, Ŝe zasady zarządzania konfiguracją bardzo silnie zaleŝą od specyfiki danego projektu, a sam plan zarządzania powinien być ustalony juŝ na początku jego trwania. Za proces ten najczęściej odpowiada kierownik projektu, a do jego głównych zadań naleŝą zapewnienie zasobów niezbędnych dla efektywnego zarządzania konfiguracją, określanie zasad i egzekwowanie ich stosowania oraz kontrola efektywności stosowanych metod [KUCHZK2005]. 81

82 5.3 Konfiguracja projektu Przed przystąpieniem do opisu procesu naleŝy zdefiniować sam obiekt jego zainteresowań. Konfiguracja to zbiór logicznie powiązanych produktów, które muszą być traktowane i zarządzane jako złoŝona całość uwzględniająca zaleŝności pomiędzy wersjami części składowych i ich statusami [wwwwiki]. Elementem konfiguracji moŝe być dowolny składnik oprogramowania lub otaczającej go infrastruktury, który decyzją zarządzających projektem jest kontrolowany przez proces zarządzania konfiguracją. Źródłem wszelkich danych o elementach konfiguracji jest baza danych zarządzania konfiguracją (ang. Configuration Management Data Base) stanowiąca repozytorium informacji o wszelkich elementach konfiguracji. Baza ta zawiera szczegóły dotyczące elementów konfiguracji oraz wzajemnych powiązań pomiędzy nimi. WaŜnym pojęciem jest takŝe konfiguracja podstawowa (ang. Configuration Baseline), czyli konfiguracja produktu lub systemu określona w konkretnym momencie w czasie, która obejmuje zarówno jego strukturę jak i zawartość. W trakcie trwania projektu, jego docelowy produkt moŝe posiadać wiele, następujących po sobie konfiguracji bazowych. Zarządzanie konfiguracją zapewnia spójność i porządek poprzez identyfikowanie, kontrolę, utrzymanie i weryfikację wersji wszystkich elementów wchodzących w skład projektu. Proces zarządzania konfiguracją musi zostać poprzedzony zdefiniowaniem zestawu jednostek, które mają podlegać kontroli wersji. Mając zdefiniowany zestaw elementów konfiguracji moŝna się zająć kontrolą statusu tych obiektów, zarządzaniem zmianami w jednostkach i ich statusach oraz tworzeniem wersji bazowych (spójnych, wyróŝnionych zestawów obiektów tworzących system) oraz wydań systemu (wersji bazowych wypuszczanych poza zespół produkcyjny). 5.4 Zarządzanie konfiguracją Zarządzanie konfiguracją jest procesem niezwykle złoŝonym i obejmuje swoim zasięgiem wiele aspektów projektu. Zakres procesu zarządzania konfiguracją obejmuje przede wszystkim planowanie i definiowanie organizacyjnych i technicznych aspektów procesu wytwórczego, ze szczególnym uwzględnieniem długoterminowego charakteru współczesnych projektów informatycznych. Sprawny proces zarządzania konfiguracją w projekcie przyczynia się do zapewnienia spójności systemu oraz gwarantuje, Ŝe wszystkie strony zaangaŝowane w cykl produkcyjny będą poinformowane o aktualnym stanie wytwarzanego oprogramowania. Dostarczanie dokładnych informacji na temat 82

83 elementów konfiguracji i ich dokumentacji wspiera wszystkie inne procesy zarządzania usługami i stanowi cenną pomoc w planowaniu czasowym i finansowym. Zasadniczo moŝna rozbić cały proces zarządzania konfiguracją na trzy logiczne płaszczyzny, które przedstawia schemat 5-1: Rysunek 5-1 Trójwymiarowy aspekt zarządzania konfiguracją (źródło własne) Zarządzanie konfiguracją systemu Pierwszym wymiarem procesu jest samo zagadnienie zarządzania konfiguracjami, które związane jest ściśle ze strukturą projektu, tworzonego systemu i wszystkiego, co go otacza. Ten fragment procesu ma za zadanie kontrolę i zarządzanie wersjami poszczególnych elementów projektu oraz przechowywanie historii zmian wersji jego składników oraz zaleŝności pomiędzy nimi. Mają tutaj miejsce działania prowadzące do identyfikacji, selekcji i oznakowania wszystkich elementów konfiguracji zgodnie z przyjętym poziomem szczegółowości, zdefiniowanym i dopasowanym do aktualnych potrzeb danego projektu. Istotna jest takŝe ciągła kontrola mająca na celu zapewnianie, iŝ tylko autoryzowane i identyfikowalne elementy konfiguracji są akceptowane i rejestrowane w bazie danych zarządzania konfiguracją w całym cyklu ich Ŝycia. W zaleŝności od poziomu szczegółowości i rozpatrywanego zakresu, proces zarządzania konfiguracją systemu moŝna rozbić na szereg warstw, co obrazuje Rysunek 5-2: 83

84 Rysunek 5-2 Zakres zarządzania systemu (J.Górski, 2000) Warto jednak zaznaczyć, Ŝe zarządzanie konfiguracją systemu nie jest równoznaczne z zarządzaniem zasobami, gdyŝ jej zadaniem jest utrzymanie nie tylko odpowiedniej informacji dotyczącej zasobów, ale równieŝ informacje o wzajemnych powiązaniach pomiędzy poszczególnymi elementami Zarządzanie problemami Drugą płaszczyzną jest zarządzanie problemami, czyli zgłoszeniami dotyczącymi dostrzeŝonych błędów i konieczności zmian w systemie. Zgłoszenia rozumiane są tutaj jako udokumentowane propozycje zmian poszczególnych elementów konfiguracji, zarówno te podyktowane zmianami w projekcie jak równieŝ spowodowane wystąpieniem awarii systemu. Propozycje mogą zostać zgłaszane z róŝnych powodów takich jak wykrycie defektu, zmiana wymagań funkcjonalnych lub chęć polepszenia jakości produktu. Rozpatrywanie kaŝdego zgłoszenia wykonywane jest według określonej procedury, która była przedstawiona w Rozdziale 3 Cykl Ŝycia problemu w projekcie informatycznym. W wielkim skrócie procedura ta składa się z kilku etapów, które mogą być porównane do stanów, w jakich moŝe znaleźć się automat skończony. W miarę jak zgłoszenie zmienia swój stan, dodawane są do niego dodatkowe informacje, które przybliŝają go do rozwiązania i zamknięcia Śledzenie postępu prac Trzecią płaszczyznę procesu zarządzania konfiguracją stanowi ogólnie pojęta kontrola nad stanem zaawansowania prac nad systemem, która obejmuje zarówno planowanie zmian i rozwiązań problemów oraz egzekwowanie ustalonych załoŝeń. 84

85 Zawiera ona informacje o postępie wprowadzanych zmian do systemu, procencie defektów w systemie oraz dotychczasowym zuŝyciu zasobów. Głównym zadaniem tej części procesu jest raportowanie statusu oraz rejestrowanie wszystkich, bieŝących i historycznych, danych dotyczących kaŝdego elementu konfiguracji w jego cyklu Ŝycia. Ocena stanu projektu ma na celu weryfikowanie fizycznego istnienia elementów konfiguracji oraz sprawdzanie poprawności i aktualności danych w bazie wiedzy. Obejmuje równieŝ procesy weryfikowania wersji i konfiguracji przed wprowadzeniem zmian do środowiska docelowego tworzonego systemu [ITILSRV2000]. 5.5 Aspekty zarządzania konfiguracją Zarządzanie konfiguracją dotyczy wszystkich elementów projektu informatycznego, od dokumentacji po kod źródłowy oprogramowania, oraz zmian w nich zachodzących. Zmiana jest podstawowym, choć niepoŝądanym, zjawiskiem zachodzącym w projektach informatycznych. Zmiany są odpowiedzią na problemy (defekty i prośby o zmiany), które pojawiają się w trakcie jego trwania i niekiedy prowadzą do duŝej ilości modyfikacji. Stopień ich rozległości determinuje ilu elementów konfiguracji dotyczą. Ze względu na duŝe zróŝnicowanie składników projektu, proces zarządzania szeroko pojętej konfiguracji moŝna rozbić na szereg podprocesów, które wzajemnie się uzupełniają na drodze do wspólnego celu. PoniŜej zostały opisane najwaŝniejsze aspekty tych procesów oraz korzyści płynące z ich wprowadzenia do projektów Zarządzanie wymaganiami Zarządzanie wymaganiami, często teŝ postrzegane jako wynikłe z ewolucji wymagań, jest procesem mającym na celu kontrolę nad wszelkimi zmianami w oczekiwaniach klienta. Pozorne jest przeświadczenie, Ŝe jeśli odbiorca systemu ma jasno sprecyzowane potrzeby, to nie będą one ulegały zmianom w czasie. NaleŜy zwrócić uwagę na fakt, Ŝe zmiany mogą następować zarówno w zakresie wymagań funkcjonalnych, niefunkcjonalnych, jak równieŝ mogą generować zmianę w obu tych kategoriach. Konsekwentnie, wymagania z punktu widzenia systemu moŝna podzielić na dwie poniŝsze kategorie, przy czym oczywiście w tym wypadku interesująca jest głównie druga z nich: Wymagania trwałe - zwykle naleŝą one do tzw. rdzenia systemu i są ściśle zaleŝne od działalności firmy, jej charakteru oraz organizacji. Dla przykładu w szkole zawsze będą istnieli uczniowie, nauczyciele i administracja. 85

86 Wymagania nietrwałe - są to wymagania zaleŝne od rozmaitych zewnętrznych i wewnętrznych czynników lub teŝ od zarządzeń firmy, które często mogą zaleŝeć od osób decydujących. Dla przykładu szkoły podlegają ministerstwu, które moŝe zmienić zasady przekazywania mu raportów z działalności jednostek. Głównym zadaniem zarządzania wymaganiami jest takie ich dokumentowanie i kontrolowanie ich ewolucji, aby w dowolnym momencie trwania projektu była moŝliwa jednoznaczna interpretacja wydobytych wymagań Zarządzanie incydentem Źródłem wszelkich problemów oraz wynikających z nich zmian w projekcie są bardzo często konkretne zdarzenia. Pod pojęciem incydentu rozumie się takie zdarzenie nie będące częścią normalnego działania systemu, które powoduje, lub moŝe powodować przerwę w dostarczaniu usługi lub obniŝenie jej jakości. Incydent moŝe być spowodowany uszkodzeniem elementu infrastruktury lub niepoprawnym zachowaniem oprogramowania. Jako, Ŝe tego typu zdarzenia stają się przyczyną konieczności wprowadzania zmian do konfiguracji systemu, muszą ona takŝe podlegać odpowiedniej rejestracji i zarządzaniu. Stąd wynika proces zarządzania incydentem, który odpowiada za przywracanie normalnego działania systemu w moŝliwie najkrótszym czasie oraz odpowiednim rejestrowaniu kroków podjętych w tym celu. Głównym zadaniem procesu jest zatem minimalizacja zakłócenia procesu biznesowego wspieranego przez oprogramowanie, w taki sposób, aby zapewnić osiągnięcie moŝliwie najwyŝszego poziomu dostępności oraz utrzymanie gwarantowanego poziomu usługi. Do zasadniczego zakresu procesu naleŝą: wykrywanie i rejestrowanie incydentów klasyfikacja incydentów badanie i diagnoza rozwiązanie incydentów w oparciu o bazę wiedzy i przywrócenie normalnego działania usługi zamykanie incydentów monitorowanie, śledzenie i komunikacja Głównym celem i zarazem korzyścią wynikającą z zarządzania incydentem jest minimalizowanie niekorzystnego wpływu niepoŝądanych zdarzeń na wspieraną dziedzinę biznesową, poprzez ich szybkie rozwiązywanie. Sam proces daje takŝe lepsze śledzenie 86

87 wyników w odniesieniu do gwarancji zapisanych w umowach, poprawę wykorzystania personelu i wzrost efektywności świadczenia usług. Sprawnie realizowane zarządzanie incydentami moŝe prowadzić do całkowitego wyeliminowanie incydentów zgubionych, nigdzie nie zarejestrowanych i nierozwiązanych oraz zapewnianie dokładniejszych informacji o elementach konfiguracji poprzez ich ciągła weryfikację prowadzoną podczas rejestracji kolejnych incydentów. Warto jednak wspomnieć, Ŝe zasadniczo zarządzanie incydentem obejmuje swym zakresem rozwiązywanie jedynie standardowych i dobrze zdefiniowanych zgłoszeń, które mają gotowe, standardowe rozwiązania. PowaŜniejsze problemy zazwyczaj rozpoczynają swój cykl Ŝycia od konkretnego incydentu, jednak w ich przypadku poszukiwaniem rozwiązań zajmuje się opisany dalej proces zarządzania problemem Zarządzanie problemem Zarządzanie defektami Zarządzanie defektami to proces, który odpowiada za znalezienie przyczyny niestandardowego incydentu i znalezienie sposobu na przywrócenie poprawnego działania systemu lub usługi. Proces ten w załoŝeniu minimalizuje niekorzystne konsekwencje występowania defektów w systemie i jego infrastrukturze. Do głównych jego celów naleŝy zapewnianie szybkiego i efektywnego rozwiązywania problemów wynikających z istnienia defektów poprzez zwiększanie produktywności personelu wspierającego oraz dostarczenie odpowiedniej informacji zarządczej na temat efektywności radzenia sobie z tego typu problemami w skali pojedynczego projektu jak równieŝ całej organizacji. Cele te osiąga się poprzez następujący zakres działań: rejestracja i kontrola obiegu informacji o defektach korelacja priorytetów rozwiązywania problemów z potrzebami biznesowymi identyfikowanie oraz usuwanie defektów minimalizowanie występowania tych samych incydentów w przyszłości poprzez gromadzenie informacji o rozwiązanych problemach Z procesem zarządzania defektami wiąŝą się dwa kluczowe pojęcia. Pierwszym z nich jest kontrola problemu, czyli wszelkie aktywności koncentrujące się na przekształcaniu ogólnie sformułowanych problemów w dobrze udokumentowane defekty. Uzyskujemy to poprzez odpowiednią identyfikację, rejestrację i opis zgłaszanych 87

88 problemów. Kolejnym krokiem jest kontrola defektu, która obejmuje działania koncentrujące się na rozwiązywaniu znanych defektów. Wprowadzając zarządzanie defektami do projektu uzyskujemy przede wszystkim poprawianie jakości naszego systemu poprzez stopniowe zmniejszanie liczby incydentów - w pierwszej kolejności tych o duŝym wpływie na proces biznesowy wspierany przez oprogramowanie oraz systematycznie powtarzających się. Stosując sprawne zarządzanie defektami z czasem uzyskujemy stałe, systemowe rozwiązania, które eliminują ponowne pojawianie się incydentów danego typu. Nieocenioną korzyścią jest takŝe stałe zasilanie bazy wiedzy informacjami o problemach i ich rozwiązaniach Zarządzanie zmianą Tak jak incydenty identyfikują problemy, tak te stają się przyczyną konieczności wprowadzania zmian do projektu i realizowanego oprogramowania. Proces zarządzania zmianą ma na celu zapewnienie, Ŝe dla wszystkich zmian zostały przyjęte i są uŝywane standardowe metody, procesy i procedury w celu zapewnienia skuteczności i efektywności ich wprowadzania. Proces ten zapewnia równowagę pomiędzy pojawiającymi się potrzebami zmian i ryzykiem ich negatywnego wpływu na prowadzony projekt. Proces zarządzania zmianą jest odpowiedzialny za kontrolowanie zmian wszystkich elementów konfiguracji w Ŝyjącym systemie oraz otaczającym go środowisku i obejmuje następujące działania: inicjowanie zmian rejestrowanie wniosków o zmianę szacowanie wpływu, kosztu, korzyści i ryzyka proponowanych zmian zarządzanie i koordynacja budowy, testów i implementacji zmian monitorowanie i raportowanie implementacji zmiany Zmiana moŝe być standardowa i stanowić zaakceptowane wcześniej rozwiązanie zidentyfikowanego i relatywnie prostego problemu lub zestawu nowych wymagań. Jest to podstawowy rodzaj zmiany, której realizacja przeprowadzana jest najczęściej w formie oddzielnego projektu lub kolejnej iteracji w rozwoju tworzonego oprogramowania. Istnieją takŝe zmiany o zwiększonym priorytecie. Pilna zmiana umoŝliwia szybkie przejście przez proces normalnej zmiany z pominięciem lub uproszczeniem niektórych etapów (np. testów), przy załoŝonym ryzyku. Tego typu model postępowania stosowany jest 88

89 zazwyczaj jedynie w sytuacjach awaryjnych, gdzie czas implementacji zmiany jest krytyczny dla dalszego działania systemu. Bezsprzeczną korzyścią wynikająca z procesu zarządzania zmianą jest lepsze dopasowanie systemu i usług do aktualnych potrzeb biznesowych odbiorcy projektu. Poprzez dobrze zdefiniowany, sformalizowany i odpowiednio prowadzony proces zyskujemy zmniejszenie niekorzystnego wpływu zmiany na projekt oraz lepsze oszacowanie kosztów propozycji zmian przed ich wprowadzeniem. Zyskujemy ponadto polepszenie zarządzania problemem i dostępnością usług poprzez wykorzystanie informacji zarządczych związanych ze zmianą oraz podniesienie efektywności pracowników poprzez zmniejszenie liczby problemów powstających w wyniku błędnych zmian, a tym samym uzyskujemy zwiększenie moŝliwości obsłuŝenia duŝej ilości zmian Zarządzanie wersją Zarządzanie wersją to całościowe spojrzenie na zmianę oraz zapewnienie, Ŝe wszystkie aspekty wersji, zarówno techniczne, jak i nietechniczne zostały poprawnie i łącznie rozpatrzone. Proces ten ma zastosowanie dla duŝych i krytycznych wymian sprzętu, wprowadzania nowych wersji oprogramowania oraz wiązania i grupowania zestawów zmian. Zarządzanie wersją jest ściśle związane z procesami zarządzania konfiguracjami oraz zarządzania zmianą. Procesy te korzystają z tych samych baz wiedzy zawierających informacje o elementach konfiguracji. Zarządzanie wersją obejmuje następujące odpowiedzialności: planowanie i nadzorowanie pomyślnych wdroŝeń nowych oraz zmienionych wersji oprogramowania, jak równieŝ związanego z tym sprzętu i dokumentacji współpraca pomiędzy procesami zarządzania wersją, a zarządzania zmianą, w celu uzgodnienia właściwej zawartości oraz planu wdroŝenia dla wersji zapewnienie, Ŝe wszystkie elementy, które zostały wdroŝone lub zmienione są bezpieczne i moŝliwe do śledzenia poprzez bazę wiedzy zarządzanie oczekiwaniami klientów i uŝytkowników dotyczących wersji i procesu wdroŝenia. W procesie zarządzania wersją często spotyka się pojęcie biblioteki stosowanego oprogramowania. Jest to miejsce przechowywania głównych kopii kolejnych wydań wszystkich kontrolowanych w organizacji wersji oprogramowania. Opis jego zawartości powinien znajdować się w bazie wiedzy projektu. Kolejnym waŝnym pojęciem jest 89

90 zarządzanie budową, które oznacza proces grupowania i konfigurowania komponentów sprzętu i oprogramowania składających się na kolejne wydawane wersje systemu. Poszczególne wydania oprogramowania powinny podlegać testom i akceptacji uŝytkowników przed ich wydaniem. W celu zapewnienia maksymalnego bezpieczeństwa często tworzy się plany wycofań, konieczne na wypadek całkowitych lub częściowych niepowodzeń we wdroŝeniu wersji. Testy planów wycofań powinny stanowić część procesu testowania wersji. W zestawieniu z zarządzaniem zmianą i testowaniem, zarządzanie wersją moŝe dostarczyć znaczną poprawę jakości usług, jako wynik wyŝszego wskaźnika sukcesu we wdraŝaniu nowych wersji systemu i minimalizacji zakłóceń w obszarze biznesu. Bezpośrednimi korzyściami są takŝe pewność, Ŝe uŝywany sprzęt i oprogramowanie jest znanej jakości, redukcja moŝliwości uŝycia złego lub nieautoryzowanego oprogramowania oraz polepszenie wykorzystania zasobów. 5.6 Zarządzanie konfiguracją w najpopularniejszych metodykach W pierwszej części niniejszego rozdziału został przedstawiony ogólny zarys procesu zarządzania konfiguracją. O wadze tego aspektu prowadzenia projektów informatycznych niech świadczy fakt jego istotnej roli w najpopularniejszych standardach i metodologiach wytwórczych obecnie promowanych na rynku. PoniŜej zostały uwypuklone cechy wybranych dwu metodyk w kontekście radzenia sobie z opisanymi wyŝej problemami zarządzania konfiguracją Rational Unified Process Rational Software Corporation, jedna ze znaczących firm produkujących narzędzia do wspomagania modelowania i implementacji systemów opracowała zalecenia dotyczące efektywnego rozwijania oprogramowania. Rational Unified Process (RUP) [RUP1998] kładzie nacisk na iteracyjny (przyrostowy) model rozwoju oprogramowania w połączeniu z konsekwentnym zarządzaniem wymaganiami. Standard promuje wykorzystywanie architektur opartych na komponentach i modelowanie wizualne. WaŜnym aspektem RUP jest ciągła weryfikacja jakości oprogramowania i kontrola zmian w oprogramowaniu. Metodyka ta jest takŝe wspierana bogatą ofertą oprogramowania firmy Rational, które w praktyczny sposób implementuje załoŝenia i praktyki definiowane przez standard. 90

91 Najogólniej rzecz ujmując, w procesie wytwarzania systemu według firmy Rational wyróŝnia się dwa wymiary cyklu tworzenia aplikacji: Czasowy (poziomy), który reprezentuje dynamiczne aspekty organizacji procesu tworzenia oprogramowania w czasie. W wymiarze tym są cztery główne fazy: wstępna, opracowania, implementacji i przekazania. Koniec kaŝdego etapu jest wyznaczany przez kamień milowy (ang. milestone), czyli punkt kontrolny, w którym sprawdza się, czy są juŝ zrealizowane określone zadania. Statyczny (pionowy), który opisuje, co ma być wytwarzane, przez kogo, kiedy i w jaki sposób. W opisie tym znajdują się takie pojęcia jak pracownicy (ang. workers), czyli osoby lub grupy osób, które mają określone zadania i odpowiedzialność w zespole, działania (ang. activities), czyli konkretne prace i zadania do wykonania dla określonych pracowników, produkty (ang. artifacts) czyli materialne efekty działań oraz przepływy (ang. workflows), które opisują kolejność następowania działań, w wyniku których powstają wyraźnie określone rezultaty (produkty). Z punktu widzenia zarządzania konfiguracją interesujące jest przede wszystkim ostatnie pojęcie wymiaru statycznego. Przepływy opisują kolejność następowania działań, w wyniku, których powstają określone rezultaty, czyli produkty. KaŜdy przepływ charakteryzuje interakcję między pracownikami, sposób i wymierne wyniki ich współpracy. Standard definiuje szereg przepływów takich jak modelowanie biznesowe, określenie wymagań, analiza i projektowanie, czy implementacja. Oprócz wymienionych typowo inŝynierskich przepływów zdefiniowano takŝe przepływy wspomagające, wśród których znajduje się ogólno pojęte zarządzanie projektem oraz zarządzanie konfiguracją i zmianami (ang. configuration & change management). Ostatni, najbardziej interesujący z punktu widzenia mojej pracy, przepływ opisuje sposób kontroli wszystkich wyników prac (dokumentów, modeli, kodu, struktur danych) oraz zarządzanie zmianami dokonywanymi równolegle, wersjami i powiadomieniami. W trakcie procesu projektowego, a szczególnie procesu opartego o podejście iteracyjne, wiele produktów podlega modyfikacji. RUP wspomaga zarządzanie zmianami dzięki umoŝliwieniu śledzenia zmian w wymaganiach, projekcie implementacji i samej implementacji. Istnieją zdefiniowane działania (wraz z odpowiednimi artefaktami) umoŝliwiające śledzenie defektów, nieporozumień czy uzgodnień. U podstaw tego 91

92 fragmentu RUP leŝy załoŝenie, iŝ zbiory artefaktów oprogramowania tworzą komponenty. Kierownicy projektów tworzą projekty i przydzielają do nich zespoły w celu pracy nad komponentami. Programiści pracują nad przydzielonymi im zadaniami, defektami i prośbami o zmiany. Wszelkie wygenerowane zmiany w elementach konfiguracji (pliki źródłowe, dokumentacja) są następnie logicznie grupowane w zbiory zmian (ang. change sets), które po ukończeniu prac przekazywane są do obszaru integracji (ang. project integration area). Na bazie zestawów zmian tworzone i testowane są nowe wersje bazowe komponentów, które docelowo integrowane są z wdroŝonym systemem. W praktyce do zarządzania konfiguracją i kontroli zmian w RUP stosowane są dwa produkty firmy Rational ClearCase oraz ClearQuest. Pierwszy z nich to rozbudowany system do zarządzania konfiguracją, drugi zaś wspomaga proces zarządzania problemami w projektach. Współpraca obu systemów moŝliwa jest dzięki UCM (ang. Unified Change Management), który stanowi nakładkę na ClearCase, która integruje oba systemy tak, aby zmiany wprowadzane do konfiguracji były odzwierciedlane w postaci zmian stanu zarejestrowanych w ClearQuest problemów. UCM ma za zadanie zespalać działania mające na celu planowanie i zarządzanie konfiguracją przy jednoczesnym propagowaniu informacji o postępach prac PRINCE2 Standard pochodzi od stworzonej przez angielską firmę Simpact Systems Ltd. metody zarządzania projektami PROMPT II. Metoda została zaadaptowana przez agencję rządu Wielkiej Brytanii, zajmującą się projektami teleinformatycznymi. Ostatnia wersja standardu, PRINCE2 (Projects in Controlled Environments version 2), była najpierw standardem dla projektów realizowanych przez administrację rządową, jednak obecnie jest stosowana takŝe przez wiele czołowych firm światowych takich, jak np. Hewlett Packard. Podstawą PRINCE2 [wwwprince2] jest osiem procesów, które w mniejszym lub większym stopniu powinny wystąpić w czasie realizacji kaŝdego projektu (przygotowanie załoŝeń projektu, inicjowanie projektu, strategiczne zarządzanie projektem, sterowanie etapem, zarządzanie wytwarzaniem produktu, zarządzanie zakresem etapu oraz zamykanie projektu). Procesy te są ze sobą powiązane i zwykle występują przemiennie w kolejności wynikającej ze złoŝoności projektu oraz fazy i stanu jego realizacji. Ponadto metodyka uwypukla istnienie ośmiu komponentów, wśród których wymieniane jest takŝe zarządzanie konfiguracją produktów oraz sterowanie zmianą. 92

93 Zarządzanie konfiguracją według PRINCE2 zajmuje się kontrolowaniem wszystkich produktów projektu i składa się z 5 elementów: Planowanie (Planning) Identyfikacja (Identification) Sterowanie (Control) Charakteryzowanie statusu (Status accounting) Weryfikacja (Verification) W PRINCE2 wszystkie prośby o zmianę są traktowane jako zagadnienia projektowe: wnioski o zmianę (request for change) - dotyczące zmiany w wymaganiach albo produkcie. odstępstwo (off specification) rejestrowane, kiedy produkt nie spełnia wymagań. sugestie (suggestions) zapytania (queries) zagadnienia ogólne (general issues) Obsługa wszystkich zagadnień projektowych jest w gestii Kierownika Projektu. Ich zgłoszenia muszą być udokumentowane w rejestrze zagadnień (Issue Log). Wnioski o zmianę muszą być zaakceptowane przez Rada Projektu lub Komitet ds. zmian (Change Authority). Przed akceptacją zmiany musi być wykonana analiza wpływu zmiany. Odstępstwa (off specification) mogą być załatwiane w ramach działań korygujących przez Kierownika Projektu o ile nie wykraczają one poza określone dla projektu granice tolerancji. Rada Projektu moŝe zaakceptować odstępstwa bez uruchamiania działań korygujących definiując je jako ustępstwo [wwwwiki]. Metodyka PRINCE2 wprowadza jednolity system dokumentacji projektów oparty na teczkach (ang. folder). Składają się na niego teczka projektu, teczki poszczególnych etapów, teczka jakości oraz teczka merytoryczna. KaŜda z nich ma określoną zawartość, przy czym w kontekście zarządzania konfiguracją największe znaczenie mają dwie ostatnie. Teczka jakości obok innych elementów zawiera charakterystyki produktów oraz rejestr problemów realizacyjnych. Teczka merytoryczna z kolei zawiera wszelkie elementy konfiguracji, rejestr konfiguracji oraz opis lokalizacji elementów i charakterystykę poprawek specyfikacji wprowadzonych w trakcie projektu. Dzięki takiemu podziałowi informacje dotyczące róŝnych projektów są spójne. O ile przy realizacji jednego projektu 93

94 moŝe to nie mieć znaczenia, to juŝ przy realizacji kilku projektów, wprowadzenie jednolitego systemu dokumentacji oraz określonych wymagań informacyjnych jest jednym z najwaŝniejszych elementów skutecznego zarządzania projektami. Warto teŝ zwrócić uwagę na jedno szczególne wymaganie, mianowicie metodyka PRINCE2 wymaga, aby przed zamknięciem kaŝdego projektu jego realizatorzy opisali popełnione błędy oraz sposoby rozwiązania występujących problemów. Nikt nie jest nieomylny, ale prawdziwym błędem jest powtarzanie pomyłek popełnionych wcześniej. Metodyka zarządzania projektami gwarantuje, Ŝe Ŝadna nauczka z przeszłości nie pójdzie w zapomnienie. 5.7 Proces zarządzania konfiguracją w kontekście Celem niniejszego rozdziału jest zaprezentowanie szerokiego spektrum aspektów, które mieszczą się pod pojęciem procesu zarządzania konfiguracją. Jak widać jest to zagadnienie złoŝone, obejmujące wiele podprocesów, które korzystając ze wspólnej bazy wiedzy nawzajem się uzupełniają i wspierają. Rysunek 5-3 stara się zobrazować zaleŝności zachodzące pomiędzy nimi. Strzałki łączące poszczególne elementy diagramu reprezentują kierunek przepływu i wykorzystania produktów przynaleŝnych do konkretnych podprocesów. Rysunek 5-3 ZaleŜności pomiędzy procesami zarządzania konfiguracją (źródło własne) Zaznaczony przerywaną linią obszar rysunku określa zakres, jaki w załoŝeniu obejmuje moja praca dyplomowa. Całościowe, bardziej szczegółowe rozpatrzenie procesu 94

95 zarządzania konfiguracją wykracza poza jej ramy, zarówno w kontekście części teoretycznej jak i praktycznej. Poprzednie rozdziały koncentrowały się na zagadnieniach związanych z definiowaniem, gromadzeniem i dalszą obsługą informacji o defektach i potrzebach zmian. Zagadnienia te mieszczą się w ramach zarządzania problemami oraz zmianą i to właśnie na tych aspektach zarządzania konfiguracją będzie się koncentrowała część praktyczna mojej pracy, której głównym celem jest wytworzenia narzędzia wspierającego opisywane procesy. 5.8 Podsumowanie Szerokie pole zarządzania konfiguracją sprawia, ze dotyka ona róŝnych dziedzin nie koniecznie związanych bezpośrednio z informatyką takich, jak ekonomia czy zarządzanie. W niniejszym rozdziale moim celem było ogólne przybliŝenie tylko niektórych jego aspektów. Proces ten jest bez wątpienia jednym z kluczowych zagadnień inŝynierii oprogramowania. Projekty informatyczne, których celem jest dostarczenie klientowi oprogramowania komputerowego spełniającego jego wymagania, są przedsięwzięciami niezmiernie złoŝonymi. Zarządzanie konfiguracją oprogramowania pozwala nam zapewnić kompletność, dostępność i identyfikowalność wytwarzanych produktów informatycznych i poszczególnych ich elementów. 95

96 6. Przegląd rozwiązań dostępnych na rynku When the only tool you own is a hammer, every problem begins to resemble a nail. Abraham Maslow 6.1 Wprowadzenie Jak zostało to opisane w poprzednim rozdziale, proces zarządzania konfiguracją składa się z wielu oddzielnych i wzajemnie uzupełniających się aspektów. Tematyka mojej pracy bezpośrednio dotyka w głównej mierze śledzenia problemów oraz pośrednio takŝe zagadnień związanych z kontrolą wersji. Niniejszy rozdział poświęcony będzie przeglądowi technologii i narzędzi dostępnych obecnie na rynku, wspomagających te dwie istotne dziedziny zarządzania konfiguracją. Biorąc pod uwagę zakres pracy dyplomowej oraz cele jej części praktycznej, analizie podlegać będą aplikacje naleŝące do następujących dwóch grup: narzędzia do rejestracji i śledzenia problemów (ang. issue tracking systems) narzędzia do kontroli wersji (ang. version control systems) Omawiając poszczególne grupy aplikacji starałem się wyodrębnić z nich charakterystyczne cechy w celu stworzenia ogólnego modelu tego typu narzędzi. Takie podejście ma na celu przygotowanie podstaw do stworzenia funkcjonalnej specyfikacji wymagań na oprogramowanie mające powstać w części praktycznej mojej pracy dyplomowej. Ponadto opis został wzbogacony krótką charakterystyką kilku najpopularniejszych komercyjnych i darmowych systemów kontroli wersji kodu oraz śledzenia zmian i defektów. Charakterystyki narzędzi oparte są w głównej mierze na dokumentacji dostarczanej przez producentów oraz, w niektórych przypadkach, na własnym praktycznym doświadczeniu zdobytym podczas pracy z nimi w trakcie rozmaitych projektów akademickich i komercyjnych. 6.2 Narzędzia do ewidencji i śledzenia problemów Praktyka współczesnych projektów informatycznych pokazuje, Ŝe do ewidencji defektów i propozycji zmian nie naleŝy podchodzić lekkomyślnie. NierozwaŜne jest stosowanie karteczek, archiwum i, jednego wielkiego dokumentu w edytorze tekstu, list to do, ani tym bardziej pamięci pojedynczych członków zespołu projektowego. 96

97 Powszechnie znaną prawdą jest fakt, Ŝe lista problemów pojawiających się w trakcie trwania projektu, jakkolwiek byłaby przechowywana, powinna mieć następujące cechy: gwarantować, Ŝe Ŝadna informacja nie zginie być dostępna dla odpowiednio uprawnionych osób, a nie tylko dla pojedynczego członka zespołu pozwalać na oznaczanie rzeczy poprawionych w sposób inny niŝ ich skasowanie umoŝliwiać natychmiastowe odnalezienie listy problemów, które ma rozwiązać konkretna osoba oraz listy problemów dotyczących konkretnego projektu czy produktu Odpowiedzią na powyŝej postawiony problem jest zintegrowany system obsługi problemów, który minimalizuje straty czasu, zwiększa produktywność zespołu oraz w ogólniejszej perspektywie takŝe satysfakcję klientów. Narzędzia tego typu mogą takŝe posłuŝyć przy sprawdzaniu poprawności wytwarzanego oprogramowania oraz określeniu zdolności zespołów do usuwania zgłaszanych problemów. System taki moŝe znacząco podnieść produktywność pracowników poprzez wprowadzenie udokumentowanego planu zadań. Zasadniczo narzędzia, o których mowa mają następujące podstawowe zastosowania: w trakcie trwania projektu - rejestracja rzeczy, które mniej lub bardziej warto zrobić, ale nie ma na to na razie czasu - warto jednak, by gdzieś ten pomysł został zapisany przy zamykaniu projektu - usprawnienie przebiegu informacji o błędach wykrywanych w trakcie testów i zapewnienie, Ŝe Ŝaden wykryty błąd nie zostanie zapomniany i Ŝe kaŝdy trafi do właściwej osoby w trakcie i po wdroŝeniu - ułatwienie osobom świadczącym wsparcie techniczne rejestrowania zgłaszanych przez klientów problemów i wymaganych zmian - wraz z automatycznym powiadamianiem o nich odpowiedzialnych za poszczególne komponenty Narzędzia takie posiadają równieŝ moŝliwość szerokiego analizowania sposobu obsługi problemów w projekcie, co daje kierownikom narzędzie pozwalające na badanie wydajności zespołów. Przy okazji korzystania z tego typu wsparcia budujemy bazę informacji do wykorzystania w przyszłych przedsięwzięciach oraz mamy moŝliwość generowania raportów na temat przebiegu aktualnego projektu. 97

98 Bardzo istotnym aspektem tej grupy narzędzi jest realizowany przez nie model problemu oraz sposób jego obiegu w trakcie całego cyklu Ŝycia zgłoszenia. Zazwyczaj narzędzia do śledzenia defektów i zmian stanowią implementację konkretnego cyklu Ŝycia zgłoszenia opartego o stany. Zbiór takich stanów jest często z góry ustalony i nie moŝe podlegać zmianom. NaleŜy pamiętać o tym, Ŝe model oferowany przez dane narzędzie w znaczący sposób narzuca sposób obsługi problemów w organizacji. Dobór odpowiedniego narzędzia do śledzenia zagadnień nie tylko usprawnia sam proces zarządzania problemami, ale takŝe ma wpływ na jego kształt i zakres. Wbudowane w tego typu systemy moŝliwości przydzielania zagadnień konkretnym członkom zespołu dają kierownikom projektów narzędzie do efektywnej dystrybucji pracy nad realizowanym systemem. Zgromadzone w bazie zagadnień dane pozwalają efektywnie rozplanować harmonogram usuwania wykrytych defektów i ewentualnego wprowadzania zmian. Ponadto, pod warunkiem rzetelnego uzupełniania danych, zakres wiedzy o poszczególnych problemach umoŝliwia realną ocenę stanu projektu w dowolnym momencie jego trwania Model narzędzia Większość obecnych na rynku narzędzi do gromadzenia informacji o problemach operuje w modelu otwartym, polegającym na tym, Ŝe do bazy danych z problemami mają dostęp zarówno członkowie zespołu projektowego jak równieŝ specjalnie do tego uprawnieni przedstawiciele klienta/odbiorcy produktu. Ze względu na całkowitą jawność danych, otwarty system zarządzania problemami ma szereg zalet, ale równieŝ wady. Przede wszystkim umoŝliwia producentom pozostawanie w kontakcie z klientami i sprzedawcami oraz efektywne powiadamianie o problemach. System taki pomaga zredukować koszty dzięki wprowadzeniu ścisłego podziału zadań. Klienci mogą bezpośrednio wprowadzać opisy problemów a takŝe obserwować, co się z nimi dzieje i w szczególności być powiadamiani o rozwiązaniu lub odrzuceniu problemu. Z drugiej strony relatywna powszechność dostępu do bazy danych zagadnień w tym modelu, moŝe znacznie zwiększyć ryzyko powstania chaosu informacyjnego i stawia dodatkowe zagroŝenia w odniesieniu do poufności danych Architektura Zasadniczym celem omawianego procesu jest kontrola nad zgłaszanymi problemami oraz propozycjami zmian w projekcie. Ze względu na specyfikę warunków 98

99 pracy współczesnych projektów informatycznych często konieczne staje się zastosowanie metody kontaktu z klientem, która gwarantowałaby zadowalający poziom komunikacji przy moŝliwie minimalnej potrzebie bezpośrednich spotkań. W ogólności działanie otwartego systemu wspomagania zarządzaniem problemami opiera się na Rysunku 6-1: Rysunek 6-1 Model systemu do gromadzenia zgłoszeń (źródło własne) Systemy tego typu oparte są zazwyczaj na architekturze typu klient-serwer, gdzie strona klienta najczęściej jest reprezentowana przez zwykłą przeglądarkę internetową (system realizowane w technologii WWW). Aplikacje do rejestracji zgłoszeń mają dosyć proste i "lekkie" interfejsy. Wprowadzenie informacji o nowym problemie, a takŝe modyfikacja stanu, treści lub atrybutów istniejącego zagadnienia odbywa się poprzez wypełnienie odpowiedniego formularza na stronie WWW. O istotnych zmianach stanu problemu są dodatkowo powiadamiani, najczęściej pocztą elektroniczną, osoby aktualnie przypisane i monitorujące dane zagadnienie oraz autor zgłoszenia. Dodatkową funkcjonalnością tego typu narzędzi są wszelkie moŝliwości raportujące oraz wyszukiwawcze. Podstawą jest tutaj moŝliwość wyszukiwania zgłoszeń według rozmaitych kryteriów (np. wszystkie aktywne zgłoszenia, za które jest odpowiedzialny X, wszystkie aktywne zgłoszenia dotyczące modułu Y, wszystkie problemy rozwiązane w ostatnim tygodniu) oraz wszelkiego rodzaju statystyki (np. liczby zgłoszonych i usuniętych błędów w poszczególnych modułach itp.). 99

100 Kontrola dostępu Jeśli uŝywamy aplikacji w ramach duŝej organizacji, a tym bardziej, gdy udostępniamy ją klientom lub uŝytkownikom w Internecie, potrzebny staje się odpowiedni model uprawnień. Obejmuje on niezaleŝnie uprawnienia do dostępu do poszczególnych modułów i projektów oraz klasyfikowanie błędów na wewnętrzne i publicznie dostępne. Pierwsza sprawa jest dosyć oczywista i sprawia, Ŝe w ramach jednej bazy wiedzy moŝemy przechowywać informacje o problemach w kilku niezaleŝnych projektach. Druga kwestia jest nieco subtelniejsza - niekiedy wykorzystując publicznie dostępną aplikację chcemy niektóre błędy ukryć przed klientami (np. obserwacje na temat nieeleganckich rozwiązań w kodzie, sprawy bardzo techniczne). W tym wypadku zazwyczaj wystarczy klasyfikacja błędów na "ogólnie dostępne" i "wewnętrzne". Taki model uprawnień musi jednak być ortogonalny do modelu uprawnień związanego z podziałem na projekty i moduły Sposób działania Osoby posiadające konto w systemie mają moŝliwość zgłaszania problemów (uwag i propozycji zmian) dotyczących dowolnego projektu, do którego mają uprawnienia. Informacje na temat problemów i propozycji zmian gromadzone są przez narzędzie w postaci tzw. zagadnień w centralnej bazie danych. KaŜde takie zagadnienie posiada autora (osoba zgłaszająca dany problem/propozycję) oraz szereg szczegółowych informacji dotyczących samego zagadnienia. Po zarejestrowaniu w bazie danych wszystkie osoby będące przypisane do projektu (zarówno wykonawcy jak i klienci) mogą śledzić postęp w jego rozwiązywaniu. W wielkim skrócie praca z narzędziem przebiega według następującego schematu: dowolna osoba posiadająca odpowiednie uprawnienia wprowadza informację o defekcie lub o prośbie o zmianę problem jest wstępnie analizowany przez odpowiednią osobę (najczęściej przez kierownika projektu) i przypisywany jest konkretnej osobie do rozwiązania, przy czym niektóre narzędzia oferują automatyczne przypisywanie odpowiedzialności w oparciu o podane w zgłoszeniu informacje (projekt, moduł) odpowiedzialna osoba akceptuje zgłoszenie albo stwierdza, Ŝe właściwym odpowiedzialnym jest kto inny i przypisuje problem jemu, moŝe się teŝ zdarzyć, Ŝe dane zagadnienie jest kolejnym objawem jakiegoś wcześniej zarejestrowanego problemu 100

101 toczą się prace związane z obsługą problemu, w trakcie których mogą być do niego dołączane kolejne informacje, moŝe on być "przypisywany" kolejnym odpowiedzialnym itp. ostatecznie, odpowiedzialny kończy pracę nad zgłoszeniem na jeden z kilku sposobów - oznaczając Ŝe problem został poprawiony, stwierdzając, Ŝe poprawiony z jakichś przyczyn nie będzie albo uznając, Ŝe zgłoszenie było niepoprawne jeśli defekt usunięto lub wprowadzono zmianę do systemu, autor zgłoszenia albo inna odpowiednio uprawiona osoba weryfikuje, czy zagadnienie faktycznie zostało rozwiązane prawidłowo i ponownie go aktywuje albo oznacza Ŝe rozwiązanie zostało zweryfikowane po ostatecznym rozwiązaniu problemu (np. po opublikowaniu albo instalacji u klienta nowej wersji modułu) zgłoszenie jest zamykane Struktura danych Nie mniej istotnym aspektem narzędzi do gromadzenia problemów jest sam sposób ich opisu. Oprócz opisu defektu lub propozycji zmiany, jego aktualnego stanu i przypisanej odpowiedzialności oraz daty wprowadzenia, definiowane są jeszcze rozmaite dodatkowe atrybuty. Zestaw pól i atrybutów jest specyficzny dla danego narzędzia. Do najwaŝniejszych i najczęściej spotykanych pól naleŝą rodzaj problemu (np. błąd krytyczny, uniemoŝliwiający działanie systemu/programu, błąd powaŝny, niezbyt istotny, wartościowy luźny pomysł), waga, czyli de facto informacja jak szybko musi to zostać poprawione (natychmiast, jak najszybciej, w normalnym trybie, w dowolnej przyszłości), numer wersji programu, w którym wykryto defekt, platforma, czy środowisko systemowe. PowyŜsza lista często jest adaptowana do potrzeb danej organizacji i niektóre narzędzia wspomagają moŝliwość dowolnego rozszerzania standardowo zaproponowanego modelu problemu. Często spotykanym rozwiązaniem jest takŝe moŝliwość dołączania do kaŝdego zgłoszenia plików w postaci załączników Przykładowe narzędzia Istnieje bardzo obszerny zestaw komercyjnych produktów do rejestracji i monitorowania błędów. W szczególności większość producentów komercyjnych oferuje rozwiązania mniej lub bardziej zintegrowane z ich narzędziem do kontroli wersji. Integracja oznacza zazwyczaj ułatwianie wiązania konkretnych wersji kodu z usuwaniem konkretnych problemów. Narzędzia tego typu mają jednak pewne powaŝne wady, 101

102 z których największą jest wysoka cena. Często tego typu oprogramowanie jest płatne od stanowiska, co przy tego typu narzędziach, gdzie zaleŝy nam, by mógł je uŝywać kaŝdy pracownik i jak najwięcej klientów, moŝe prowadzić do naprawdę powaŝnych wydatków. Ponadto komercyjne narzędzia trudno przerabiać, a chęć modyfikacji, chociaŝby modelu problemu, w tego typu zastosowaniach pojawia się często ze względu na daleko idące specyficzne cechy kaŝdego przedsięwzięcia informatycznego. Alternatywą dla komercyjnych produktów jest uŝycie pakietu rozprowadzanego na zasadach Open-Source, tym bardziej, Ŝe istnieją relatywnie rozbudowane i wyrafinowane rozwiązania tego typu. W dalszej części rozdziału pragnę przedstawić krótko dwa najpopularniejszych z nich Bugzilla Bugzilla jest dedykowanym systemem zarządzania problemami. Napisana w Perlu, została stworzona inicjalnie na potrzeby projektu Mozilla, ale obecnie uŝywana juŝ takŝe w wielu innych projektach i organizacjach. Bugzilla jest obecnie uznawana za standardowy system zarządzania problemami, do którego porównuje się wszystkie inne produkty tego typu. W tym momencie, Bugzilla jest uŝywana w bardzo wielu firmach do pomocy przy rozwoju ich własnych aplikacji. System umoŝliwia pracę z wieloma projektami równocześnie i implementuje cykl Ŝycia zgłoszeń bardzo podobny do tego zaprezentowanego w Rozdziale 3. Mechanizmy bezpieczeństwa systemu oparte są na kontach uŝytkowników, dla których indywidualnie ustalane są uprawnienia i zakres obowiązków w kaŝdym projekcie. Struktura opisu problemu jest bardzo rozbudowana i zawiera praktycznie wszystkie atrybuty wymienione w Rozdziale 4 oraz parę dodatkowych. Brak moŝliwości konfiguracji tej struktury bez ingerencji w kod źródłowy oraz jej nadmierne skomplikowanie przez wielu uŝytkowników uwaŝane jest za wadę tego narzędzia. Bugzilla cechuje się bardzo prostym i surowym interfejsem uŝytkownika, ale jest bardzo stabilną aplikacją i oferuje wiele zaawansowanych i ciekawych funkcji, między innymi: zintegrowany, oparty na produktach schemat bezpieczeństwa zaleŝności między zgłoszeniami i moŝliwość tworzenia z nich grafów zaawansowane funkcje związane z raportowaniem błędów szybki, stabilny system RDBMS (MySQL) ogromne moŝliwości konfiguracji bardzo wygodny i naturalny system rozwiązywania błędów API do , XML, konsoli i HTTP 102

103 moŝliwa integracja z aplikacjami do konroli wersji, takimi jak Perforce czy CVS (przez interfejs Bugzilli oraz skrypty zapisu/odczytu) czytelny przeglądarkowy interfejs uŝytkownika model przywilejów i uprawnień pozwalający na ustalanie komu co wolno widzieć i co zmieniać łatwość modyfikowania i uzupełniania - wynikająca zarówno z przechowywania informacji w relacyjnej bazie danych o czytelnej strukturze, jak z zaimplementowania programu w Perlu moŝliwość "głosowania", który błąd powinien być usunięty jako pierwszy (kaŝdy uŝytkownik ma do dyspozycji kilka głosów i przypisuje je najbardziej dotkliwym dlań błędom) Rysunek 6-2 Formularz zgłoszenia w systemie Bugzilla (projekt Mozilla/Firefox) Bugzilla moŝe być łatwo dostosowana do róŝnych potrzeb. Aktualni uŝytkownicy adaptują Bugzillę do wsparcia zadań w dziale IT, rozdziału zadań w Administracji, projektowania, zarządzania problemami w projekcie (zarówno przed jak i po produkcji), oraz obsługi problemów sprzętowych tak jak Redhat czy Linux-Mandrake. W połączeniu 103

104 z takimi narzędziami jak CVS Bugzilla staje się potęŝnym, łatwym w obsłudze rozwiązaniem do zarządzania konfiguracją. Więcej informacji na temat samego narzędzia, jego najświeŝsze wersje oraz obszerną dokumentację uŝytkową moŝna znaleźć na stronie projektu pod adresem Mantis Bug Tracker Młodszym bratem Bugzilli jest narzędzie o nazwie Mantis Bug Tracker. Jest to system wspomagający zarządzanie zgłoszeniami opierający się na technologii języka skryptowego PHP. Podobnie jak Bugzilla jest to system wykonany w technologii WWW, który wspiera prowadzenie wielu projektów jednocześnie. System implementuje kompletny cykl Ŝycia problemu od jego początkowego zgłoszenia, poprzez obsługę, rozwiązanie oraz ostateczne zamknięcie, przy czym model jest na stałe zaszyty w logice aplikacji i system nie przewiduje wprowadzania do niego własnych stanów. Struktura opisu problemu jest bardzo rozbudowana i obejmuje wszystkie najczęściej spotykane atrybuty zgłoszenia (opis szczegółowy, dodatkowe informacje, powtarzalność, uciąŝliwość, słowa kluczowe, wersja produktu itp.). Zakres gromadzonych danych moŝna w łatwy sposób rozszerzyć o dodatkowe pola słownikowe z poziomu panelu administracyjnego konkretnego projektu. Mantis rejestruje pełną historię zmian kaŝdego zgłoszenia oraz umoŝliwia dodawanie do nich komentarzy oraz załączników. Zakres funkcjonalności udostępnianej poszczególnym uŝytkownikom systemu jest ustalany na podstawie przydzielonych im uprawnień, zarówno w odniesieniu do całego systemu jak i poszczególnych projektów, których uŝytkownik jest uczestnikiem. System udostępnia ponadto wiele opcji związanych z wyszukiwaniem, zarządzaniem i raportowaniem problemów. Dodatkowo system moŝna skonfigurować tak, aby wybrane przez nas zdarzenia były automatycznie rozsyłane za pośrednictwem poczty elektronicznej do wszystkich zainteresowanych. Podsumowując, system Mantis jest bardzo elastycznym i rozbudowanym narzędziem, posiadającym wiele przydanych funkcji i cech takich jak: łatwość instalacji i konfiguracji moŝliwość działania w dowolnym środowisku (zarówno Windows jak i Linux) współpraca z większością najpopularniejszych systemów RDBMS (MySQL, PostreSQL) elastyczny system uprawnień oparty na role 104

105 rozbudowane systemy wyszukiwawcze i raportujące moŝliwość rozszerzania struktury opisu problemu bez ingerencji w kod źródłowy przyjazny interfejs uŝytkownika oparty na formularzach WWW i technologii Ajax rozsyłanie powiadomień mailowych przy kaŝdej zmianie stanu zagadnienia dodawanie komentarzy i załączników do zagadnień dostępność polskiej wersji językowej Rysunek 6-3 Formularz zgłoszenia błędu w systemie Mantis System jest stale rozwijany przez społeczność Open-Source i rokuje spore nadzieje na przyszłość. Jednocześnie otwartość kodu źródłowego oraz zastosowanie popularnej technologii PHP czyni go łatwym do modyfikacji. System Mantis sprawdził się w zastosowaniach praktycznych. Osobiście miałem okazję z niego korzystać w trakcie projektów realizowanych w trakcie studiów oraz przy przedsięwzięciach komercyjnych. W obu przypadkach narzędzie spełniło swoje zadanie i w widoczny sposób przyczyniło się do polepszenia efektywności pracy całego zespołu projektowego. 105

106 Więcej informacji na temat samego narzędzia, jego najświeŝsze wersje oraz obszerną dokumentację uŝytkową moŝna znaleźć na stronie projektu pod adresem Narzędzia do kontroli wersji Praktyka współczesnych projektów informatycznych dobitnie pokazuje, Ŝe tworzenie oprogramowania bez wykorzystania systemu zarządzania wersjami jest bardzo trudne, jeśli nie niemoŝliwe. Coraz częściej spotykane rozproszone środowisko wytwórcze, sprawia, Ŝe bezwzględnie musi istnieć repozytorium, w którym zawsze znajduje się pełny i aktualny zbiór zasobów projektu, obejmujący wszystko od kodu źródłowego tworzonych systemów i na wszelkiego rodzaju dokumentacji kończąc. W przypadku złoŝonych projektów musi być moŝliwe dokładne odtworzenie stanu i zakresu zasobów, z których zbudowano dystrybucję systemu aktualnie działającego u klientów. Wreszcie, musi być dostępna historia zmian, zarówno w formie opisów podawanych przez wprowadzających modyfikacje, jak i bezpośredniego porównania poszczególnych zasobów. WyŜej wymienione potrzeby ujawniają się nawet w projektach realizowanych przez pojedyncze osoby na przestrzeni kilku miesięcy. Gdy nad przedsięwzięciem informatycznym pracuje kilkunastoosobowy zespół, a projekt trwa wiele miesięcy, brak zarządzania wersjami daje praktyczną pewność ogromnych problemów. Kontrola wersji (ang. version control) to w ogólności zarządzanie róŝnymi odmianami konkretnego produktu programistycznego. Proces ten powinien odwzorować zaleŝność pomiędzy poszczególnymi wersjami produktu, zarządzać częściami wspólnymi dla wielu wersji, umoŝliwić równoległą pracę wielu uczestników projektu tworzących nowe wersje. Kontrolę wersji uwaŝa się za powaŝny problem technologiczny, którego rozwiązaniem są narzędzia opisane w dalszej części tego rozdziału Model narzędzia Zasadniczym celem procesu zarządzania konfiguracją jest ukierunkowanie na wspomaganie równoległej pracy wielu uczestników projektu oraz nadzór nad rozwojem wszelkich elementów składowych projektu informatycznego powstałych zarówno na etapie wytwarzania jak i jego późniejszej eksploatacji. Szczególnie waŝnym jest utrzymywanie kontroli nad wersjami poszczególnych składników oprogramowania będącymi w środowisku wytwórczym i docelowym. 106

107 Podstawowe pojęcia We wszystkich dostępnych na rynku systemach kontroli wersji uŝywa się zestawu podstawowych pojęć związanych z opisywanym procesem. PoniŜsze pojęcia stanowią jednocześnie zbiór podstawowych funkcjonalności, jakie musi oferować narzędzie do kontroli wersji: Artifact (produkt) dowolny składnik projektu informatycznego np. kod źródłowy, rysunek lub dokument Repository (repozytorium) miejsce przechowywania zasobów w systemie kontroli wersji, niekoniecznie baza danych, często pewna specyficzna struktura katalogów z opisami. Kopia robocza miejsce, w którym znajdują się kopie lokalne pobranych z repozytorium zasobów, nad którymi pracuje konkretny uczestnik projektu, najczęściej jest to katalog na lokalnym komputerze wykonawcy Get (pobranie) pobranie aktualnych wersji wszystkich lub wybranych zasobów z repozytorium, w domyśle jest to pobranie bez intencji ich zmiany Check-out (wybranie) pobranie zasobów z serwera z zamiarem ich modyfikacji, w niektórych narzędziach wiąŝe się z nałoŝeniem blokady na dany zasób Check-in (wstawienie) po zakończeniu prac nad lokalnymi zasobami następuje proces zwrócenia ich nowych wersji do repozytorium, tak, aby kaŝdy mógł je pobrać w najnowszej wersji, w przypadku stosowania blokad, zasoby są po tym procesie zwalniane Lock (blokada) zablokowanie innym uŝytkownikom moŝliwości wybrania konkretnego zasobu (check-out) Label (etykieta) oznaczenie nazwą grupy zasobów w celu łatwiejszej ich identyfikacji Branch (gałąź) stworzenie alternatywnej linii wersjonowania, co pozwala na rozwój tego samego zasobu w róŝnych kierunkach, np.: wprowadzanie poprawek do starej wersji i dodawanie funkcji do nowej wersji. Merging (połączenie) łączenie dwóch wersji konkretnego zasobu w jeden, moŝe się odnosić do dwóch sytuacji: łączenia gałęzi i rozwiązywania konfliktów w systemach bez blokad Warto jednak zaznaczyć, Ŝe nie wszystkie narzędzia dostępne na rynku wykorzystują mechanizmy blokady. Blokada jest sposobem na uniknięcie sytuacji, 107

108 w której dwie osoby zmieniają ten sam plik. JeŜeli operacja Check-out zakłada blokadę na zmianę pliku to nikt inny nie moŝe go wybrać ani wstawić (Check-in) jego nowej wersji. Podejście takie praktycznie uniemoŝliwia zaistnienie konfliktu, jednak powaŝnie ogranicza moŝliwość współbieŝnej pracy nad zasobami. W praktyce narzędzia często oferują rozwiązanie pośrednie, stosując blokady tylko na plikach binarnych, pomijając przy tym zasoby tekstowe, które znacznie łatwiej poddać procesowi scalania w przypadku napotkania konfliktu Sposób działania Korzystając z powyŝszej terminologii pracę z systemem kontroli wersji moŝna opisać przez stały ciąg działań. Na początku tworzone jest repozytorium projektu, do którego dodawane są wszystkie związane z projektem zasoby. W trakcie projektu kaŝda zainteresowana strona (programista, tester) pobiera (Get) całość zasobów projektu z repozytorium do swojego lokalnego katalogu roboczego. Osoba pragnąca wprowadzić modyfikacje do zasobów wybiera (Check-out) zasoby mające podlegać edycji i dokonuje modyfikacji wybranych zasobów. Po zakończeniu pracy nad konkretnymi zasobami są one wstawiane (Check-in) z powrotem do repozytorium. JeŜeli w trakcie tej ostatniej operacji okaŝe się, Ŝe ktoś inny modyfikował zasób, który wstawiamy to konieczne staje się przeprowadzenie procesu połączenia (Merge) obu wersji zasobu. Uproszczony model pracy z systemem kontroli wersji przedstawia Rysunek 6-4. Rysunek 6-4 Model narzędzia do kontroli wersji (źródło własne) Warto zaznaczyć, Ŝe nawet najbardziej rozbudowany system do kontroli wersji nie rozwiązuje wszystkich problemów w zespole programistycznym. Jest on tak naprawdę 108

109 częścią większej całości, mianowicie systemu zarządzania zmianą. DuŜe komercyjne systemy zarządzania zmianą pozwalają na łączenie zmian w kodzie z Ŝądaniami zmiany i śledzeniem błędów. Takie podejście pozwala na dokładniejsze zarządzanie projektem i pracą nad produktem. Samo podejście do projektu przez pryzmat Ŝądań zmiany i próśb o funkcjonalność porządkuje pracę, która musi być wykonana i pozwala na jej właściwą organizację Przykładowe narzędzia Rynek narzędzi do zarządzania wersjami, czy teŝ zarządzania konfiguracją, co oprócz zarządzania wersjami obejmuje procedury budowy kodu, rejestracji błędów, powiadamiania o zmianach itp., jest bardzo bogaty. Są to jednak w większości przypadków produkty dosyć prymitywne (CVS, RCS, SCCS, SourceSafe, PVCS), bądź drogie (Perforce, StarTeam, Razor) albo bardzo drogie (ClearCase, Continouous). W dalszej części rozdziału pragnę przedstawić krótką charakterystykę dwóch narzędzi tego typu CVS CVS to prawdopodobnie najbardziej rozpowszechniony system zarządzania wersjami plików. Narzędzie moŝe pracować zarówno jako serwer jak i na pojedynczej maszynie. Narzędzie w swojej rdzennej postaci posiada jedynie interfejs tekstowy dostęp do wszelkiej funkcjonalności uzyskujemy poprzez zestaw komend wywoływanych w linii poleceń. CVS jest wykorzystywany przez większość projektów Open-Source, gdzie z jednego repozytorium korzystają nieraz setki programistów rozproszonych po całym świecie. CVS działa na bardzo szerokim zestawie platform sprzętowych i systemowych. Intensywne jego uŝywanie w wielu projektach owocuje takŝe pojawianiem się wielu aplikacji wspomagających. CVS działa bez stałego podłączenia do repozytorium, które wymagane jest jedynie w trakcie aktualizowania kopii roboczej i zatwierdzania zmian. Repozytorium CVS to zbiór, rozłoŝonych w odpowiednich katalogach, archiwów (jedno archiwum na jeden wersjonowany plik). Jeśli któryś z tych plików ulegnie uszkodzeniu, wszystkie pozostałe nadal pozostają w pełni dostępne. Jeśli chcemy podzielić repozytorium na dwa, zmienić jego strukturę albo przenieść całość lub część na inną maszynę, wystarczy odpowiednio skopiować strukturę plików i katalogów. CVS nie blokuje plików. Jeśli modyfikowany zasób od momentu ostatniego pobrania został zmodyfikowany przez kogoś innego, CVS uniemoŝliwia zatwierdzenie 109

110 zmian wymagając w zamian aktualizacji lokalnej kopii. Jeśli zmiany dotyczyły róŝnych miejsc pliku wbudowane w narzędzie mechanizmy łączą zmiany w jedną spójną wersję zasobu. W przypadku bardziej złoŝonego konfliktu CVS generuje raport rozbieŝności i wymaga od programisty ich samodzielnego rozwiązania. NajpowaŜniejszą wadą CVS jest brak moŝliwości ingerencji w strukturę katalogów z jednoczesnym zachowaniem wersji zasobów oraz brak moŝliwości zmiany ich nazw. Kolejną istotną wadą jest takŝe konieczność sztywnego zaprojektowania struktury katalogów, poniewaŝ nie podlegają one procesowi wersjonowania. Ponadto brak transakcji przy wstawianiu plików moŝe w szczególnych sytuacjach prowadzić do powaŝnych problemów. Ciekawą zaletą, ale równieŝ wadą, jest przechowywanie przez CVS kompletnych plików w ich kolejnych wersjach. Zaletą, bo łatwo naprawić repozytorium w przypadku awarii, wadą, gdyŝ trzymanie w ten sposób duŝego projektu moŝe owocować duŝym apetytem systemu na przestrzeń dyskową. Pomimo duŝych moŝliwości CVS nie jest systemem zarządzania konfiguracją, a jedynie dobrym systemem zarządzania wersjami. Nie obsługuje rejestracji błędów i wiązania ich z poprawkami. Nie implementuje procedur kompilacji i tworzenia dystrybucji. Nie daje moŝliwości określania stanu poszczególnych modułów ani nie definiuje i nie wymusza Ŝadnego standardowego procesu rozwijania kodu. CVS jest dostępny na róŝne platformy. Istnieje wiele graficznych interfejsów ułatwiających pracę z CVS, takich jak WinCVS albo TortoiseCVS dla platformy Windows. Więcej informacji na temat samego narzędzia, jego najświeŝsze wersje oraz obszerną dokumentację uŝytkową moŝna znaleźć na stronie projektu pod adresem Relatywnie nowym, takŝe darmowym, systemem, który powstał głownie z myślą o naprawieniu problemów występujących w CVS jest Subversion (znany takŝe pod nazwą SVN). Jest on alternatywą bezpieczną (o bezpieczeństwo dba moduł SSL serwera Apache) i pozbawioną braków swego poprzednika, takich jak brak kontroli wersji struktury katalogów. Narzędzie jest wciąŝ rozwijane i sprawdziło się w praktyce podczas realizacji projektu grupowego w roku akademickim 2005/06 w Katedrze InŜynierii Systemów i Baz Danych. Podobnie jak w przypadku CVS, na rynku dostępnych jest wiele aplikacji wspomagających, jak chociaŝby graficzny interfejs TortoiseSVN. Więcej informacji na 110

111 temat tego narzędzia, jego najświeŝsze wersje oraz obszerną dokumentację uŝytkową moŝna znaleźć na stronie projektu pod adresem Reliable Software Code CoOp Na tle innych aplikacji, bardzo ciekawą alternatywą jest komercyjne narzędzie Reliable Software o nazwie Code CoOp. Jest to program o idei zgodnej z narzędziami pokroju CVS, z jedną zasadniczą róŝnicą, polegającą na kompletnym braku centralnego serwera (repozytorium) do przechowywania wersji zasobów. Zawartość repozytorium projektu jest replikowana na wszystkich maszynach biorących udział w projekcie. Wymiana plików odbywa się za pomocą poczty elektronicznej lub poprzez współdzielone katalogi w sieci LAN. KaŜda zatwierdzona zmiana w kodzie źródłowym jest rozsyłana do wszystkich uczestników projektu. Aplikacja działa jedynie w środowisku Windows i integruje się ze środowiskami programistycznymi (m.in. Visual Studio 2003/05) poprzez interfejs MS SCC API. Rysunek 6-5 Główne okno systemu Code CoOp Więcej informacji na temat narzędzia oraz wersje demonstracyjne wraz z obszerną dokumentacją uŝytkową moŝna znaleźć na stronie producenta pod adresem 111

112 6.3.3 Zestawienie cech PoniŜsza tabelka zawiera rozbudowane porównanie bardzo licznej grupy narzędzi do kontroli wersji kodu, wśród których znajdują się takŝe opisywane wyŝej systemy. Porównanie zostało opracowane na podstawie materiałów udostępnianych przez firmę Reliable Software [wwwreli]. Jaśniej zacieniowane pola oznaczają tylko częściowe posiadanie danej cechy przez narzędzie. Wspomaganie cyklu Ŝycia Zarządzanie wydaniami Wsparcie procesu wytwórczego Zastosowanie w korporacjach Wbudowane śledzenie błędów Współdzielenie plików Powrót w dowolnym momencie Praca w trybie off-line Scalanie Działanie oparte o zmianę Atomowe zatwierdzanie zmian Wieloplatformowość Raportowanie Powiadamianie poprzez Rozgałęzianie Zmiana nazwy / przenoszenie Kompresja / delty Rozproszenie pracy Integracja z narzędziami IDE Integracja z SCC API Do $200 za licencję CVS Subversion QVCS-Pro QVCS Ent. Code Co-op W przedziale $200 - $500 za licencję CS-RCS Pro Vault CS-RCS Browser Team Coherence Pro Visual SourceSafe W przedziale $500 - $1000 za licencję Evolution SurroundSCM Team Coherence Ent Firefly Borland Starteam Perforce SpectrumSCM Accurev Pro Ponad $1000 za licencję Razor Borland Starteam Ent Bitkeeper Accurev Enterprise Serena Changeman Pro Wyjaśnienie poszczególnych cech: Integracja z SCC API narzędzie jest oferuje interfejs kompatybilny ze standardem MS SCC API Integracja z narzędziami IDE narzędzie integruje się z innymi środowiskami wytwórczymi nie wspierającymi MS SCC API (np. Borland Delhi) Rozproszenie pracy narzędzie wspiera pracę w warunkach rozproszonych Kompresja / delty narzędzie kompresuje pliki przy ich dystrybucji, przesyłane są jedynie fragmenty zmienione (nie całe wersje plików) Zmiana nazwy / przenoszenie - narzędzie umoŝliwia zmianę nazw plików i ich przenoszenie w strukturze katalogów 112

113 Rozgałęzianie narzędzie umoŝliwia tworzenie niezaleŝnych ścieŝek rozwoju plików Powiadamianie poprzez narzędzie powiadamia wszystkich zainteresowanych o zmianach dokonanych na plikach Raportowanie narzędzie generuje raporty na temat stanu projektu Wieloplatformowość narzedzie dostępne na wielu platformach (Windows, Linux) Atomowe zatwierdzanie zmian kaŝda zmiana wykonywana jest jako atomowa transakcja Działanie oparte o zmianę narzędzie pozwala na zatwierdzenie wielu zmian w jednej operacji typu check- Scalanie narzędzie posiada wbudowane mechanizmy scalania Praca w trybie offl-ine narzędzie umoŝliwia pracę nad plikami bez połączenia z repozytorium Powrót w dowolnym momencie narzędzie umoŝliwia cofnięcie zmian w dowolnym momencie Współdzielenie plików narzędzie umoŝliwia współdzielenie plików pomiędzy projektami Wbudowane śledzenie błędów narzędzie posiada wbudowaną funkcjonalność zarzadzania problemami Zastosowanie w korporacjach narzędzie przystosowane do pracy w bardzo duŝych zespołach Wsparcie procesu wytwórczego narzedzie wspomaga process wytwórczy i pozwala go modyfikować Zarządzanie wydaniami narzędzie wspomaga process budowania i wydawania wersji oprogramowania Wspomaganie cyklu Ŝycia narzędzie znajduje zastosowanie w całym procesie wytwórczym Rozkład cech poszczególnych produktów wyraźnie dzieli porównywane systemy na te tańsze, ale oferujące mniejszą funkcjonalność oraz te zdecydowanie droŝsze, które w zamian za wysoką cenę idą bardziej w kierunku zintegrowanych systemów zarządzania konfiguracją. 6.4 Podsumowanie Na rynku istnieje wiele aplikacji wspomagających zarządzanie bazą problemów, jednak nawet w przypadku ich stosowania istotne jest wypracowanie własnych standardów pomocnych przy kategoryzacji pojawiających się defektów i propozycji zmian. Podczas standaryzacji niezbędna jest współpraca testerów z programistami, a niejednokrotnie równieŝ z analitykami. Niemniej jednak doświadczenia współczesnych projektów informatycznych wskazują, Ŝe juŝ samo uŝycie rejestru problemów: wspomaga i formalizuje komunikację umoŝliwia wyznaczenie zakresu zmian w elementach konfiguracji wspomaga zarządzanie projektem informatycznym przez delegację zadań, planowanie ich rozpoczęcia oraz planowanie i sprawdzanie pracochłonności wspiera proces zbierania pomiarów (liczba problemów, pracochłonność) umoŝliwia ocenę bieŝącego stanu projektu (np. liczba problemów zgłoszonych róŝnica pomiędzy liczbą zgłoszonych a zamkniętych) 113

114 pozwala na poprawę technologii przez analizę większej liczby problemów i zdefiniowanie mechanizmów mających na celu niedopuszczenie do powstawania tych samych problemów w przyszłości Pośrednim celem powyŝszego rozdziału było takŝe ukazanie zaleŝności pomiędzy procesem zarządzania problemami i kontrolą wersji zasobów projektu. Jak wiadomo, baza wiedzy o problemach stanowi integralny element konfiguracji projektu i powinna podlegać tym samym zasadom wersjonowania co kod źródłowy czy dokumentacja. Celowi temu posłuŝyło przedstawienie idei działania narzędzi do kontroli wersji. Przedmiotem praktycznej części mojej pracy będzie m.in. wykorzystanie moŝliwości, jakie dają dwa z opisywanych tutaj narzędzi do kontroli wersji przy realizacji rozproszonego narzędzia do gromadzenia danych o problemach. 114

115 7. Narzędzie wspomagające proces zarządzania problemami For every complex problem there is a solution that is simple, neat, and wrong. H. L. Mencken 7.1 Wprowadzenie Jednym z głównych celów mojej pracy dyplomowej jest wytworzenie narzędzia wspomagającego proces zarządzania problemami w projektach informatycznych. Zebrane i opracowane w poprzednich rozdziałach podstawy teoretyczne miały w załoŝeniu nie tylko prezentować wartość badawczą, ale takŝe być po części podporządkowane temu celowi. Zaproponowany ogólny model problemu w połączeniu z obserwacjami wynikającymi z analizy narzędzi tego typu miał pozwolić na budowę systemu, który będzie funkcjonalnie kompletny i jednocześnie znajdzie zastosowanie przy wspomaganiu procesu zarządzania problemami w rzeczywistych projektach. Głównym celem przy projektowaniu narzędzia była chęć pokazania praktycznej wartości wiedzy zgromadzonej i usystematyzowanej w części teoretycznej mojej pracy dyplomowej. Powstały system jest konkretną implementacją ściśle określonego podzbioru pojęć i koncepcji zaprezentowanych w Rozdziałach 2-5 oraz czerpie bardzo wiele z doświadczeń i praktycznych rozwiązań oferowanych przez systemy juŝ dostępne na rynku. Przy formułowaniu tematu pracy dyplomowej przyjąłem dodatkowe dwa wymagania odnośnie rozproszonego modelu pracy systemu oraz jego niezaleŝności od centralnego pojemnika danych. W moim odczuciu były to podstawowe cechy, które powinno posiadać narzędzie wyróŝniające się na tle rozwiązań obecnie dostępnych na rynku. W dobie wszechobecnego Internetu moŝliwość pracy grupowej w warunkach rozproszonych wydawała się oczywista, z kolei zdecentralizowanie warstwy danych miało w załoŝeniu sprzyjać podtrzymaniu takiego modelu pracy takŝe przy braku niezbędnej infrastruktury technicznej, czy teŝ stałego dostępu do zasobów sieci. Ze względu na własne doświadczenia druga z wymienionych cech była przeze mnie traktowana priorytetowo. W trakcie pracy nad rozmaitymi projektami akademickimi i komercyjnymi osobiście odczułem brak odpowiedniego wsparcia narzędziowego dla małych i średnich zespołów projektowych nie mających dostępu do centralnego serwera przechowującego bazę danych o problemach. 115

116 Chęć spełnienia wyŝej postawionych załoŝeń stała się jednocześnie przyczyną poruszenia w praktycznej części mojej pracy wielu zagadnień specyficznych dla oprogramowania o architekturze rozproszonej. Postawione wymagania były źródłem konkretnych decyzji projektowych, z których najwaŝniejszą była integracja warstwy danych opracowywanego systemu z narzędziami do kontroli wersji. MoŜliwości, jakie dają tego typu narzędzia okazały się odpowiedzią na problemy związane z rozproszeniem i replikacją zdecentralizowanej bazy danych i jednocześnie nakreśliły ogólną koncepcję logiki działania systemu. Wykorzystanie plików XML jako pojemnik danych było logiczną konsekwencją decyzji o integracji z narzędziami do kontroli wersji ze względu na ich najlepszą współpracę z plikami tekstowymi. Nie bez znaczenia miał teŝ fakt, Ŝe format ten stał się w ostatnich latach niepisanym standardem zapisu i przekazu ustrukturalizownaych danych w formie tekstowej, zwłaszcza w Internecie. Obie decyzje projektowe zostały podjęte we wczesnych etapach nakreślania wizji mającego powstać systemu, a ich konsekwencje pojawiają się zarówno w specyfikacji wymagań jak i projekcie narzędzia. Niniejszy rozdział jest głownie poświęcony technicznym aspektom pracy dyplomowej. Moim celem jest zaprezentowanie rozwiązania ze szczególnym uwzględnieniem wpływu wyŝej opisanych decyzji projektowych na kształt i sposób działania powstałego narzędzia. Rozdział zawiera wiele technicznych szczegółów realizowanego systemu jednak nie naleŝy traktować go jako kompletny projekt systemu. Rozdział zawiera przedstawienie ciekawszych aspektów realizowanego projektu, konkretnych problemów technicznych oraz ich rozwiązań. Efekty prac nad systemem zostały opisane na końcu niniejszego rozdziału w postaci instrukcji obsługi narzędzia, opisu procedury jego testowania oraz wniosków z jego stosowania w rzeczywistym projekcie. 7.2 Specyfikacja wymagań Celem tego podpunktu jest przedstawienie zawartości specyfikacji wymagań systemowych, której kompletna wersja znajduje się w Załączniku BAGGU Specyfikacja Wymagań Systemowych. Pełny dokument rozpoczyna się określeniem rozpatrywanego problemu, w ramach którego definiowane są główne cele i zakres projektowanego systemu oraz identyfikowani są wszyscy jego udziałowcy. W dalszej części dziedzina problemowa podlega bardziej szczegółowej analizie mającej na celu wyznaczenie granic systemu, wyspecyfikowanie zdarzeń biznesowych oraz umieszczenie 116

117 systemu w szerszym kontekście. Specyfikację zamyka opis przypadków uŝycia oraz zbiór ostatecznie wyspecyfikowanych wymagań wobec mającego powstać narzędzia Cele biznesowe Przed przystąpieniem do analizy dziedziny problemowej zazwyczaj ustalane są konkretne cele, których spełnienie będzie wyznacznikiem sukcesu danego przedsięwzięcia. W przypadku projektu realizowanego w ramach praktycznej części mojej pracy dyplomowej ostatecznie uznałem następujące cele za nadrzędne: 1. Systematyzacja i wspomaganie procesu zarządzania problemami w projektach informatycznych 2. UniezaleŜnienie procesu zarządzania problemami od konkretnego projektu 3. Odwzorowanie modelu problemu w postaci narzędzia 4. Usprawnienie procesu zarządzania problemami 5. UmoŜliwienie prowadzenia procesu zarządzania problemami w zespołach rozproszonych 6. Wykorzystanie moŝliwości narzędzi do kontroli wersji 7. UniezaleŜnienie rejestru problemów od centralnego pojemnika danych 8. Wykonanie pracy dyplomowej KaŜdy z wymienionych wyŝej celów został w Załączniku BAGGU Specyfikacja Wymagań Systemowych opisany pod kątem efektów biznesowych, jakie przyniesie ich osiągnięcie. Ponadto, z kaŝdym celem zostały powiązane konkretne kryteria akceptacji, które pozwolą ocenić ich faktyczne osiągnięcie na koniec projektu Zakres problemu Proces zarządzania problemami w projektach informatycznych nie jest zagadnieniem trywialnym. Oprócz oczywistych aspektów takich jak ujawnianie się problemów i propozycji zmian w cyklu Ŝycia oprogramowania oraz ich wpływu na projekt jako całość, pojawia się takŝe cały szereg innych kwestii o niepomijalnym znaczeniu. Projektowane oprogramowania powinno w załoŝeniu pokrywać jak najszerszy, zgodny z wymaganiami, zakres całego procesu. Diagram kontekstu na Rysunku 7-1 stara się w poglądowy sposób umiejscowić dziedzinę problemową wraz ze stowarzyszonymi z nią systemami: 117

118 Rysunek 7-1 Diagram kontekstu problemu Zarządzanie problemami nie moŝe być rozpatrywane w oderwaniu od innych procesów zachodzących w projekcie informatycznym. Obsługa i rozwiązywanie problemów ma bezpośredni wpływ na harmonogram i budŝet (zasoby) projektu. Identyfikowane defekty i zmiany prowadzą do modyfikacji zarówno w końcowym systemie jak i wszelkich produktach pośrednich oraz niekiedy wymuszają przedłuŝenie lub ponowne przebycie wybranych faz projektu (np. testowanie). Jednocześnie wszelkie działania objęte procesem zarządzania problemami muszą być zbieŝne z potrzebami klienta i udziałowców systemu oraz być w zgodzie z zawartym kontraktem, uwzględniać zakres projektu oraz moŝliwości zespołu projektowego Udziałowcy Określając zbiór udziałowców przyszłego systemu musimy spojrzeć na dziedzinę problemową z punktu widzenia oprogramowania, które w określonym zakresie ma się wkomponować w jej działanie. Zasadniczo z procesem zarządzania problemami mają do czynienia trzy grupy udziałowców. Pierwszą z nich są klienci oraz uŝytkownicy powstającego produktu. Drugą grupę tworzą aktywni uczestnicy projektu, czyli kierownicy projektu, analitycy, programiści, testerzy oraz przedstawiciele klienta. Ostatnią grupę stanowią udziałowcy nieoŝywieni, ale mający decydujący wpływ na przebieg projektu, a zwłaszcza na aspekty związane z zarządzaniem problemami. Do tej grupy naleŝy oczywiście sam produkt, formalne uzgodnienie jego zakresu w postaci kontraktu oraz wszelkie narzędzia wspomagające dane przedsięwzięcie informatyczne 118

119 po stronie wykonawcy. Wszystkie wymienione grupy stanowią udziałowców systemu, których indywidualne punkty widzenia naleŝy uwzględnić przy specyfikowaniu wymagań. NaleŜy jednak zaznaczyć, Ŝe ze względu na specyfikę dziedziny problemowej pojedyncza osoba moŝe reprezentować kilku udziałowców (np. programista moŝe być takŝe testerem, a klient moŝe być jednocześnie uŝytkownikiem). Istnienie takich powiązań pomiędzy udziałowcami nie zmienia jednak faktu, iŝ kaŝdy z nich musi być rozpatrzony oddzielnie, jako autonomiczna jednostka mająca swój pogląd na system. Schemat na Rysunku 7-2 przedstawia umiejscowienie udziałowców względem granicy problemu oraz wzajemne interakcje pomiędzy nimi. Zewnętrzny okrąg symbolizuje granicę projektu, z kolei wewnętrzny definiuje granicę mającego powstać systemu. Rysunek 7-2 Umiejscowienie udziałowców względem granicy projektu i systemu Dokument specyfikacji wymagań zawiera kompletny opis punktów widzenia kaŝdego zidentyfikowanego udziałowca. Jak widać na Rysunku 7-2 do grupy udziałowców znajdujących się bezpośrednio w obrębię granic systemu naleŝą Kierownik projektu, Analityk, Programista, Tester oraz Przedstawiciel Klienta (w dalszej części projektu 119

120 nazywany po prostu Klientem). Wymienieni udziałowcy tworzą rdzeń zespołu projektowego wytwarzającego system i to właśnie dla tej grupy osób kierowane jest mające powstać narzędzie. W dalszej części specyfikacji wymagań udziałowcy ci będą nazywani ogólnie członkami zespołu. Uogólnienie takie ma na celu zwiększenie przejrzystości modelu biznesowego omawianej dziedziny przy jednoczesnym oderwaniu jej od problemu nadawania i egzekwowania uprawnień oraz zakresu odpowiedzialności w ramach projektu informatycznego Zdarzenia biznesowe i biznesowe przypadki uŝycia Kolejnym etapem, po określeniu bezpośrednich udziałowców systemu, było zamodelowanie dziedziny problemowej za pomocą opisu zdarzeń biznesowych, jakie mają w niej miejsce. W wyniku takiej analizy zidentyfikowałem i opisałem 8 zdarzeń biznesowych, które zachodzą na granicy rozpatrywanego obszaru problemowego: 1. Członek zespołu rozpoczyna nowy projekt 2. Członek zespołu dołącza do projektu 3. Członek zespołu rezygnuje z uczestnictwa w projekcie 4. Kierownik projektu ustala role w projekcie 5. Członek zespołu zgłasza problem 6. Członek zespołu uzupełnia informacje o problemie 7. Członek zespołu zmienia stan problemu 8. Członek zespołu zmienia odpowiedzialność za problem Zidentyfikowane zdarzenia posłuŝyły do zamodelowania wywoływanych przez nie biznesowych przypadków uŝycia. KaŜdy biznesowy przypadek uŝycia został w Specyfikacji Wymagań Systemowych słownie opisany i zobrazowany za pomocą diagramu DFD (Data Flow Diagram), na którym jawnie zaznaczono granicę systemu. Umieszczenie systemu w kontekście pozwoliło na szczegółowe wyspecyfikowanie przypadków uŝycia systemu, które zostały później szczegółowo opisane w projekcie systemu Wymagania wobec systemu W ostatniej części dokumentu specyfikacji wymagań w wyniku szczegółowej analizy projektowanemu systemowi postawione zostało 20 konkretnych wymagań. Wymagania zostały podzielone na dwie grupy wymagania funkcjonalne oraz niefunkcjonalne. KaŜde z nich zostało dokładnie opisane, wraz z określeniem kryterium 120

121 akceptacji oraz źródłem jego pochodzenia. PoniŜsze załoŝenia zostały zidentyfikowane jako nadrzędne w stosunku do pozostałych wymagań: System musi wspierać pracę grupową System musi umoŝliwiać pracę w warunkach rozproszonych System musi być niezaleŝny od centralnego pojemnika danych Warstwa danych systemu winna być oparta o pliki XML Jest to zestaw wymagań wynikających bezpośrednio z celów postawionych na początku mojej pracy dyplomowej. Kolejne wymagania odnoszą się juŝ bezpośrednio do funkcjonalności systemu i przyczyniły się do zamodelowania konkretnych przypadków uŝycia systemu. Nadrzędnym wymaganiem w tym wypadku jest konieczność zapewnienia kompletności funkcjonalnej systemu. Wyrazem tego załoŝenia jest następujące wymaganie: Identyfikator: F1 Priorytet: 1 Status: Zaakceptowany Tytuł: System powinien zapewnić moŝliwość wspomagania procesu zarządzania problemami Opis: Wymaganie wywodzi się bezpośrednio z celów biznesowych systemu. Wytworzenie i wdroŝenie systemu ma na celu wspomaganie procesu zarządzania problemami przez gromadzenie danych na temat projektów i napotkanych w ich trakcie problemów. System musi udostępniać funkcjonalność w zakresie dodawania, edycji oraz usuwania danych istotnych z punktu widzenia tego procesu. Kryterium akceptacji Pomyślne przejście testów walidacyjnych odnoszących się do kompletności funkcjonalnej systemu w myśl wymagań specyfikujących zakres funkcjonalności. Powiązania z celami biznesowymi Wymaganie to jest kluczowe do wypełnienia wszystkich celów biznesowych systemu. Źródło: Powiązane wymagania: Powiązanie z przypadkami uŝycia systemu Wymaganie powiązane jest z przypadkiem uŝycia Przeglądanie listy projektów Klient Wymaganie jest nadrzędne w stosunku do F2 F9, które szczegółowo definiują zakres funkcjonalności systemu w dziedzinie wspomagania procesu zarządzania problemami. Przy specyfikowaniu wymagań niefunkcjonalnych pomocny okazał się typ systemu, jaki ma powstać. Nie ma to być system bankowy, w którym dane muszą być w sposób szczególny chronione, a ich wymiana odbywać się w sposób zapewniający stuprocentową poufność i integralność. Nie jest to równieŝ system czasu rzeczywistego o twardych wymaganiach czasowych. Reakcja systemu na odpowiednie Ŝądanie powinna się mieścić w czasie typowym dla tego typu aplikacji, ale nie jest to kryterium o najwyŝszym priorytecie. 121

122 Dodatkowo na realizację projektu zostały nałoŝone 3 ograniczenia dotyczące terminu realizacji, liczebności zespołu oraz dostępności wykorzystywanych narzędzi wytwórczych. 7.3 Analiza wymagań i ograniczeń oraz dyskusja rozwiązań Pierwsza część projektu systemu koncentruje się na analizie wymagań zgromadzonych w specyfikacji oraz na opisie rozwiązań i kompromisów, jakie musiały zostać podjęte na drodze do ich spełnienia. Ten fragment projektu systemu dotyczy głownie zakresu danych gromadzonych przez system oraz szeroko pojętych aspektów związanych z bezpieczeństwem. Te dwa zagadnienia okazały się szczególnie waŝne w kontekście rozproszonego modelu projektowanego systemu, dlatego teŝ zostały one tutaj przytoczone w całości Bezpieczeństwo Ze względu na charakter projektowanego narzędzia pod pojęciem bezpieczeństwa (ang. security) rozumiana jest zdolność systemu do zachowywania integralności gromadzonych danych oraz zapobieganie nieupowaŝnionemu dostępowi do nich. PoniŜej zostały opisane rozwiązania przyjęte w zakresie tak rozumianego bezpieczeństwa. W przypadku aplikacji takich jak system BAGGU mniejsze znaczenie mają aspekty bezpieczeństwa odnoszące się do wpływu oprogramowania na jego środowisko zewnętrzne (ang. safety) Autoryzacja i uwierzytelnianie Przyjęty w załoŝeniach rozproszony model danych czyni kwestię kontroli dostępu i uwierzytelniania uŝytkowników niezwykle trudną w porównaniu do systemów scentralizowanych. Brak centralnego pojemnika danych utrudnia lub wręcz uniemoŝliwia zastosowanie autoryzacji uŝytkowników bazującej na zestawieniu osoby uŝytkownika (np. login, numer identyfikacyjny) i danych umoŝliwiających potwierdzenie jego toŝsamości (np. poprzez hasło). W tradycyjnym podejściu dane umoŝliwiające pomyślną identyfikację oraz autoryzację uŝytkownika przechowywane są w neutralnym miejscu (bazie danych, serwerze aplikacji), co daje względną pewność o ich bezpieczeństwie i poprawności. W modelu rozproszonym toŝsamość uŝytkownika oraz związane z nią uprawnienia muszą być przechowywane lokalnie, co stwarza bardzo powaŝne wątpliwości, 122

123 co do ich autentyczności. Problem ten dotyczy zresztą wszystkich danych współdzielonych i dystrybuowanych przez system (dane projektu, dane o problemach). W związku z wyŝej opisanymi trudnościami konieczne jest opracowanie mechanizmu, który stanowiłby kompromis pomiędzy potrzebami bezpieczeństwa aplikacji i wykonalnością techniczną zastosowanego modelu danych. Wyjściem z sytuacji okazuje się wykorzystanie mechanizmów uwierzytelniania oferowanych przez system operacyjny, w którym będzie pracowało narzędzie BAGGU. Wbudowane w system Windows mechanizmy identyfikacji i uwierzytelniania wydają się środkiem wystarczającym do skutecznej identyfikacji uŝytkownika narzędzia. KaŜdy uŝytkownik systemu operacyjnego posiada osobiste konto identyfikowane poprzez unikalną nazwę (NAZWA_KOMUPTERA \ nazwa_uŝytkownika). W momencie uruchomienia aplikacji na lokalnej maszynie, system BAGGU przejmuje toŝsamość zalogowanego uŝytkownika i posługując się jego loginem podpisuje wszystkie dodawane i modyfikowane dane, co obrazuje Rysunek 7-3. Rysunek 7-3 Model uwierzytelniania uŝytkowników oparty o konta Jak widać powyŝsze rozwiązanie sprawdza się takŝe w przypadku, gdy z narzędzia korzystają osoby na pojedynczym komputerze (pod warunkiem posiadania przez nich oddzielnych kont w systemie). Warto jednak zaznaczyć, Ŝe zaprezentowany mechanizm rozwiązuje jedynie problem identyfikacji toŝsamości uŝytkownika. Problem nadawania i egzekwowania uprawnień musi zostać rozwiązany w logice systemu. Opisane wyŝej rozwiązanie posiada jedną zasadniczą wadę, mianowicie utrudnia identyfikację uŝytkownika pracującego na więcej niŝ jednej stacji roboczej. Zgodnie z załoŝeniami uŝytkownik uruchamia aplikację na konkretnym komputerze posiadając własne konto w systemie operacyjnym. W przypadku, gdy osoba ta posiada konta na wielu maszynach, system BAGGU traktuje kaŝde konto jako oddzielnych uŝytkowników systemu (ze względu na inną nazwę komputera i bardzo często takŝe odmienną nazwę 123

124 samego konta). Nie ma idealnego rozwiązanie powyŝszego problemu, istnieją jednak następujące moŝliwości: Osłabienie warunku identyczności kont stosowanym przez system. W takim przypadku, logika aplikacji powinna utoŝsamiać ze sobą konta o tej samej nazwie bez wymogu identyczności nazwy komputera (konta COMP1 / Adam byłoby toŝsame z kontem COMP2 / Adam itd.). Jest to jednak rozwiązanie kompromisowe, które narzucałoby konieczność identycznego nazywania kont uŝytkowników na kaŝdej stacji roboczej Wykorzystanie Active Directory w serwerowych systemach Windows. Technologia ta umoŝliwia centralnie przechowywanie kont uŝytkowników lokalnej sieci. UŜytkownik logując się na dowolnej stacji roboczej zawsze uzyskuje dostęp do zasobów systemowych za pośrednictwem tego samego konta, które jest uwierzytelniane i pobierane z serwera Integralność danych Drugim, obok mechanizmu uwierzytelniania uŝytkowników, wymogiem stawianym bezpiecznym aplikacjom jest skuteczne zapobieganie naruszania integralności danych gromadzonych przez system. Projektowane narzędzie ze względu na zastosowanie plików XML jako nośników danych staje się wyjątkowo podatne na nieupowaŝnione lub przypadkowe modyfikacje struktur danych. Jawność plików XML stwarza moŝliwość niekontrolowanej ich edycji bez pośrednictwa narzędzia, co z kolei moŝe prowadzić do uszkodzenia lub sfałszowania zgromadzonych danych. Biorąc pod uwagę specyfikę projektowanego narzędzia i jego architektury, głównymi zagroŝeniami dla integralności danych gromadzonych przez system są: system kontroli wersji w momencie jednoczesnej modyfikacji pojedynczego pliku przez więcej niŝ jednego uŝytkownika moŝe nastąpić konflikt. Narzędzia do kontroli wersji (patrz rozdział 5) często posiadają wbudowane mechanizmy automatycznego rozwiązywania takich sytuacji poprzez scalanie modyfikacji dokonanych przez kaŝdą ze stron. Mechanizmy te jednak nie wnikają w treść scalanych plików, co przy zastosowaniu języka XML moŝe prowadzić do nieumyślnego naruszenia poprawności struktury pliku. Jako Ŝe projektowane narzędzie nie ma wpływu na decyzje ani mechanizmy stosowane przez 124

125 współpracujący system kontroli wersji, naleŝy brać pod uwagę opisaną tutaj moŝliwość naruszenia poprawności danych. niekontrolowana edycja plików jawność plików XML oraz ich tekstowy format w znaczącym stopniu naraŝa dane gromadzone w ten sposób na nieupowaŝnioną manipulację. Projektowane narzędzie musi być świadome tego, Ŝe dane odczytywane z tak łatwo dostępnego źródła mogą być celowo zmodyfikowane. Oczywisty staje się fakt, iŝ logika systemu musi starać się być odporna na tego typu zagroŝenia. Warto jednak zaznaczyć, Ŝe o ile pierwszy problem moŝna uznać za bardzo istotny, o tyle próby nieautoryzowanej manipulacji danymi w docelowym środowisku pracy narzędzia wydają się być mało prawdopodobne. Wydaje się, Ŝe członkowie zespołu projektowego, a więc uŝytkownicy narzędzia, realizując wspólne przedsięwzięcie, nie powinni mieć ani potrzeby ani motywacji do naruszania wiarygodności i fałszowania danych gromadzonych w systemie. Rozwiązanie przedstawionych wyŝej problemów nie jest kwestią trywialną. Jednym z moŝliwych podejść jest zastosowanie mechanizmów potwierdzania autentyczności danych gromadzonych w plikach w oparciu o sumy kontrolne. Rozwiązanie to moŝe opierać się na nadawaniu elementom danych w pliku (całemu plikowi lub pojedynczym węzłom XML) specjalnego atrybutu zwanego sumą kontrolną. Wartość sumy kontrolnej jest wynikiem działania funkcji, której sposób działania jest zaszyty wewnątrz aplikacji. Funkcja ta w jedynie sobie znany sposób generuje sumę kontrolną w oparciu o szereg czynników (m.in. takich jak wartość danych, data modyfikacji pliku itp.). KaŜda zmiana danych dokonywana przez system powinna wiązać się z aktualizacją sumy kontrolnej zmienianego fragmentu pliku. W ten sposób, przy ponownym odczycie pliku przez system, wbudowane mechanizmy kontroli będą w stanie stwierdzić, czy dana informacja jest poprawna czy teŝ nie. Weryfikacja danych odbywa się poprzez ponowne obliczenie sumy kontrolnej dla odczytanych danych (stosując tę samą funkcję) i konfrontację jej wartości z tą odczytaną z pliku. W momencie napotkania rozbieŝności, system moŝe mieć wątpliwości, co do autentyczności i poprawności odczytanych danych. Oczywiście wszelkie modyfikacje danych wykonywane poza aplikacją skutkują brakiem aktualizacji sumy kontrolnej. Aby mechanizm ten był skuteczny, funkcja generująca sumy kontrolne musi być na tyle złoŝona, aby generowane przez nią wartości nie były przewidywalne i moŝliwe do odgadnięcia na podstawie powtarzanej obserwacji danych. 125

126 Problem ten wykracza znacząco poza ramy niniejszej pracy dyplomowej, jednak wprowadzenie opisywanych mechanizmów, chociaŝ w uproszczonej formie, do projektowanego narzędzia umoŝliwiłoby logice aplikacji wykrywanie i reagowanie na nieprawidłowości w odczytywanych danych Warstwa danych Jak wiadomo warstwa danych zapewnia trwałość danych dla systemu. W zaleŝności od charakteru konkretnej aplikacji trwałość ta moŝe być realizowana przez relacyjną bazę danych, system katalogowy, system plików, czy obiektową bazę danych. U podstaw załoŝeń projektowanego narzędzia leŝało załoŝenie, Ŝe system BAGGU nie będzie wymagał scentralizowanego pojemnika danych do przechowywania informacji o problemach w projekcie informatycznym. ZałoŜenie to zmniejsza moŝliwość zastosowania wszelkich rozwiązań opartych o tradycyjne, scentralizowane serwery baz danych. Owszem, moŝliwe byłoby zastosowanie technologii rozproszonych baz danych z zaawansowanymi mechanizmami replikacji, jednak biorąc pod uwagę stopień skomplikowania i rozmiar gromadzonych w przypadku systemu BAGGU danych, rozwiązanie takie wydaje się nadmiarowe i zbyt skomplikowane w stosunku do potrzeb. Ponadto wprowadzenie dodatkowego wymogu uruchamiania lokalnej instancji serwera bazy danych na kaŝdej maszynie uczestnika projektu kłóci się z załoŝeniem o maksymalnej prostocie obsługi i instalacji systemu. Podsumowując, zaproponowane rozwiązanie bazujące na lokalnie replikowanych przez system kontroli wersji plikach XML zapewnia decentralizację warstwy danych, ale jednocześnie stwarza szereg utrudnień, których dokładny opis znajduje się poniŝej. W załoŝeniu system BAGGU ma za zadanie gromadzić dane na temat problemów pojawiających się w trakcie projektu informatycznego. Zgodnie z wcześniejszymi rozwaŝaniami w Rozdziale 4 do takich danych naleŝą niewątpliwie zgłoszenia o błędach (defekty) oraz propozycje zmian. NaleŜy jednak pamiętać, Ŝe aby skutecznie wspomagać proces zarządzania problemami konieczne jest takŝe przechowywanie informacji na temat samego procesu i jego organizacji. Ponadto, przy rozproszonym modelu danych konieczne staje się określenie, które dane są współdzielone przez wszystkich uczestników projektu, a które słuŝą jedynie do wspomagania procesu replikacji na lokalnych maszynach. Wszystkie wymienione wyŝej aspekty przedstawione są na Rysunku

127 Rysunek 7-4 Ogólna koncepcja zakresu gromadzonych danych Jak widać kompletna baza danych pojedynczego projektu składa się z następujących elementów: Dane projektu wszelkie informacje nie będące opisem problemów, ale konieczne w procesie zarządzania problemami w projekcie. Do takich informacji naleŝy np. nazwa projektu, skład zespołu projektowego oraz zakres ich ról i podział obowiązków. Do danych projektu naleŝą takŝe wszelkie informacje o uprawnieniach poszczególnych uŝytkowników systemu. Z oczywistych względów opisane tutaj dane są współdzielone przez wszystkich uczestników i konieczna jest ich replikacja. Defekty i Zmiany wszystkie informacje na temat konkretnych problemów (zgłoszeń), podobnie jak dane projektu muszą ulegać dystrybucji. Konfiguracja projektu dane specyficzne dla rozproszonego modelu danych, w którym konieczne jest przechowywanie indywidualnych ustawień dla konkretnego, lokalnego środowiska uczestnika projektu. Najlepszym przykładem takich danych jest informacja o lokalizacji lokalnej kopii repozytorium (lokalny katalog roboczy) czy informacje na temat skąd i w jaki sposób pozyskiwać dane (ustawienia narzędzia do wersjonowania kodu). Ze względu na indywidualny i wybitnie lokalny charakter tych danych nie mogą one podlegać tym samym zasadom przechowywania i dystrybucji, co dane projektu i problemy, nie mniej jednak stanowią one integralną część bazy danych projektu. 7.4 Model logiczny systemu Na realizowany system został nałoŝony konkretny zestaw wymagań, który ma bezpośredni wpływ na decyzje podjęte w procesie jego analizy i projektowania. Jedną z najwaŝniejszych decyzji na tym etapie było zdefiniowanie ogólnej architektury 127

128 oprogramowania, której celem jest wskazanie logicznej struktury i wzajemnej zaleŝności składników wchodzących w skład realizowanego systemu. PoniŜej została opisana ogólna koncepcja działania systemu wraz z opisem najwaŝniejszych jej składników Wizja architektoniczna Zasadniczo system BAGGU jest narzędziem realizowanym w architekturze trójwarstwowej, przy czym warstwa danych reprezentowana jest przez system plików XML. Diagram 7-5 przedstawia ogólne załoŝenia architektoniczne systemu: Warstwa prezentacji sytemu zostanie zrealizowana jako aplikacja okienkowa pracująca pod kontrolą systemu operacyjnego Windows. BAGGU Logika biznesowa systemu zrealizowana będzie w technologii obiektowej, a jej szerszy opis znajduje się w punkcie 4. Warstwa danych oparta jest o pliki XML i będzie współdzielona z narzędziami typu source-control. Rolą systemu będzie tworzenie, modyfikowanie i dbanie o integralność danych zawartych w plikach, z kolei zadanie ich replikacji i dystrybucji zostanie przekazane na narzędzie do wersjonowania kodu. Rysunek 7-5 Ogólna architektura systemu Jednym z podstawowych celów powstającego systemu jest umoŝliwienie pracy grupowej przy jednoczesnym uniezaleŝnieniu się od centralnego serwera aplikacji i bazy danych. Aby sprostać tego typu wymaganiom system BAGGU musi oferować skuteczne metody replikacji lokalnie gromadzonych danych. Rolę pojemnika danych aplikacji będą pełniły pliki XML. Kwestia ich dystrybucji w środowisku rozproszonym rozwiązywana jest poprzez wykorzystanie przez system BAGGU narzędzi typu source-control oferujących zewnętrzny interfejs (linia poleceń, zewnętrzna biblioteka DLL). Schemat na Rysunku 7-6 przedstawia ogólną koncepcję współdziałania systemu z tego typu narzędziami: 128

129 Nad kontrolą wersji i dystrybucją plików z danymi pomiędzy uczestnikami projektu czuwa narzędzie typu source-control. Warstwa danych systemu BAGGU komunikuje się z nim za pośrednictwem dobrze zdefiniowanego intefejsu. KaŜde odwołanie do danych poprzedzone jest wydobyciem z repozytorium najnowszej ich wersji (check-out), z kolei kaŝda modyfikacja wiąŝe się z ich aktualizacją w repozytorium i propagacją wśród uczestników projektu (check-in). Problem dystrybucji danych i rozwiązywania konfliktów (relatywnie prosty ze względu na strukturalność plików XML) rozwiązywany jest całkowicie przez wybrane narzędzie do wersjonowania kodu. Wszelkie dane gromadzone przez BAGGU przechowywane są jako pliki XML o zdefiniowanej strukturze. PoniewaŜ proces dystrybucji i replikacji danych o problemach kontrolowany jest przez zewnętrzne narzędzie, z punktu widzenia BAGGU nie jest istotne czy praca odbywa się lokalnie czy w warunkach rozproszonych. W szczególnym przypadku moŝliwy jest nawet scenariusz jedno- stanowiskowy, w którym warstwa danych nie korzysta z Ŝadnego narzędzia do wersjonowania kodu i dane stanowisko pełni rolę jedynego repozytorium danych. Rysunek 7-6 Sposób współpracy narzędzia z systemem kontroli wersji Na rynku istnieje obecnie bardzo wiele narzędzi typu source-control, do których funkcjonalności moŝna uzyskać dostęp za pośrednictwem dobrze zdefiniowanych interfejsów zewnętrznych. Przyjęcie powyŝszego rozwiązania uniezaleŝnia warstwę danych systemu BAGGU od kontekstu uŝycia. W zaleŝności od wybranego narzędzia do wersjonowania kodu, moŝliwa jest praca zarówno w scenariuszu scentralizowanym (z centralnym repozytorium kodu - CVS) jak i rozproszonym (Reliable Software Code CoOp synchronizacja kodu za pomocą ). Zaprezentowana architektura systemu spełnia podstawowe wymagania postawione narzędziu przy jednoczesnym zwiększeniu jego uniwersalności. Ponadto ze względu na prostą i dobrze zdefiniowaną strukturę zapisu danych w formacie XML, wszystkie obecne na rynku narzędzia słuŝące do wersjonowania kodu nie powinny mieć problemów z ich obsługą. Pliki XML są zwykłymi plikami tekstowymi, co dodatkowo przy ich strukturalności czyni ich dystrybucję i ewentualne scalanie przy konfliktach (merging) operacją relatywnie prostą. Warto w tym momencie wspomnieć o nowatorstwie proponowanego rozwiązania. W chwili pisania pracy dyplomowej nie są mi znane systemy wspomagające proces 129

130 zarządzania problemami, które jako pojemnik danych wykorzystywałyby lokalnie replikowane pliki XML. W zdecydowanej większości (patrz Rozdział 6 Przegląd rozwiązań dostępnych na rynku ) są to systemy oparte o centralny serwer bazy danych. Tym samym zastosowane w dyplomie podejście ma wybitnie prototypowy charakter i naleŝy brać ten fakt pod uwagę przy definiowaniu zakresu funkcjonalności systemu Zakres systemu Ustalenie granic projektowanego systemu było przedmiotem analizy wymagań. W kontekście procesu zarządzania problemami w projekcie informatycznym granica ta przebiega na styku zespołu projektowego i klienta. W celu maksymalnego ukierunkowania powstającego oprogramowania na potrzeby zespołu projektowego, klient został włączony bezpośrednio do zespołu projektowego. W wyniku tej decyzji projektowej klient staje się aktorem bezpośrednio inicjującym przypadki uŝycia aplikacji Aktorzy i przypadki uŝycia Z opisu problemu oraz konkretnych decyzji projektowych wynika istnienie następujących aktorów mających swój bezpośredni lub pośredni udział w trakcie funkcjonowania projektowanego systemu: Project member (członek zespołu) osoba będąca aktywnie zaangaŝowana w proces zarządzania problemami w projekcie informatycznym. Członkiem zespołu jest klient, kierownik projektu, wykonawca oraz tester. Członek zespołu (w zaleŝności od ról pełnionych w projekcie) rejestruje problemy w bazie problemów, uzupełnia dane na ich temat oraz podejmuje decyzje o ich dalszej obsłudze w trakcie całego cyklu Ŝycia problemu w projekcie. Pojedyncza osoba moŝe być członkiem zespołu w wielu, równolegle prowadzonych projektach. Client (klient) w ogólności osoba rozumiana jako odbiorca systemu, pod pojęciem klienta w kontekście projektu informatycznego rozumie się wszystkie osoby mające styczność z produktem, a więc osoby, które mogą być źródłem problemów w trakcie projektu (uŝytkownicy, zleceniodawcy, sponsorzy). Klient zgłasza napotkane problemy do bazy zagadnień i moŝe śledzić proces ich obsługi. Na końcu cyklu Ŝycia problemu klient moŝe zweryfikować i zaakceptować rozwiązanie problemów, które zgłosił. Project manager (kierownik projektu) osoba zarządzająca projektem, posiada wszystkie moŝliwości członka zespołu poszerzone o moŝliwość zarządzania uprawnieniami pozostałych członków zespołu. Kierownik moŝe bez ograniczeń modyfikować dane i status problemów. KaŜdy projekt posiada co najmniej jednego kierownika projektu. Osoba rozpoczynająca nowy projekt staje się automatycznie jego kierownikiem. Developer (wykonawca) w ogólności osoba opracowująca i wdraŝająca rozwiązania zgłaszanych problemów (analityk, projektant, programista). Wykonawca ma moŝliwość zgłaszania problemów oraz zmiany danych i statusu przypisanych do siebie problemów oraz podejmowania się rozwiązania jeszcze nie przypisanych problemów. Tester osoba badająca jakość wytwarzanego oprogramowania i weryfikująca rozwiązania znanych problemów. Tester ma moŝliwość zgłaszania nowych i zmiany danych juŝ istniejących problemów. Tester moŝe równieŝ weryfikować i zamykać rozwiązane problemy. 130

131 Z kolei funkcjonalna specyfikacja wymagań na projektowany system wymaga zaimplementowania w nim następujących przypadków uŝycia: Rysunek 7-4 Diagram przypadków uŝycia Inicjatorem wszystkich przypadków uŝycia systemu jest Project member (Członek zespołu). Rdzeń funkcjonalności systemu stanowią przypadki uŝycia Przeglądanie listy projektów, Przeglądanie listy problemów oraz Podgląd problemu, które grupują logicznie operacje dokonywane na projektach i problemach w nich rejestrowanych. Przypadki te są rozszerzane przez szczegółowe przypadki uŝycia dotyczące konkretnych aspektów procesu zarządzania problemami w projektach informatycznych. Szczegółowy opis kaŝdego przypadku uŝycia i jego przebiegu został zawarty w Załączniku BAGGU Model i Projekt Systemu w punkcie

132 7.5 Projekt narzędzia Decyzje projektowe Biorąc pod uwagę wymagania stawiane systemowi oraz specyfikę projektu prowadzonego na potrzeby praktycznej części pracy dyplomowej zostały podjęte następujące wstępne decyzje projektowe: Rolę pojemnika danych będą pełniły pliki XML o logicznej strukturze odzwierciedlającej relacyjną bazę danych o problemach Wprowadzenie zabezpieczeń integralności danych omawianych w punkcie zostanie pominięte, jako funkcjonalność, która nie jest kluczowa dla osiągnięcia głównych celów części praktycznej dyplomu. Problem zostaje jednak zasygnalizowany i wymieniony jako funkcjonalność wysoce poŝądana w kolejnych wersjach systemu. Realizowany system będzie ukierunkowany na umoŝliwienie współpracy z moŝliwie jak najszerszym zbiorem narzędzie kontroli wersji, nie mniej jednak ograniczenia nałoŝone na proces implementacji wymuszają podjęcie konkretnych decyzji co do poŝądanego zakresu kompatybilności. W opracowywanym w ramach pracy dyplomowej prototypie narzędzia główny nacisk będzie kładziony na wykorzystanie następujących narzędzi: o Reliable Software Code CoOp o CVS Są to przykłady narzędzi pracujących w dwóch odmiennych modelach danych scentralizowanym i zdecentralizowanym co daje moŝliwość zaprezentowania działania realizowanego systemu w róŝnych środowiskach Technologia Projektowany system będzie aplikacją okienkową, typu stand-alone, działającą pod kontrolą systemu operacyjnego Windows. Narzędzie zostanie wykonane na bazie platformy technologicznej Microsoft.NET (Windows Forms) w wersji 2.0. Językiem programowania uŝytym do implementacji systemu będzie C#, równieŝ w wersji Środowisko wytwórcze W trakcie realizacji systemu wykorzystywane będą następujące środki implementacyjne i narzędziowe: 132

133 system operacyjny: Windows XP Professional SP 2 oprogramowanie: pakiet Microsoft Office 2003 narzędzie UML: JUDE Community 2.4.x platforma technologiczna: Microsoft.NET 2.0 (2005) narzędzie wytwórcze: Microsoft Visual Studio 2005 język programowania: C# 2.0 wersjonowanie kodu: Reliable Software Code CoOp 4.x Biorąc pod uwagę charakter projektu środowisko wytwórcze zostało w całości skompletowane z darmowych, lub udostępnianych na licencji akademickiej, narzędzi i technologii. Jedynie w przypadku narzędzia Reliable Software Code CoOp uŝyta zostanie kopia oprogramowania na posiadanej przeze mnie prywatnej licencji komercyjnej Środowisko docelowe Docelowym środowiskiem działania systemu będzie dowolna maszyna klasy PC o architekturze zgodnej z x86 pracująca pod kontrolą systemu operacyjnego Windows XP. Ze względu na zastosowaną technologię wytwórczą, w docelowym systemie operacyjnym konieczna jest obecność Microsoft.NET Framework w wersji 2.0 lub nowszej. Spełnienie wyŝej wymienionych załoŝeń pozwoli na uruchomienie systemu i pracę z lokalnymi danymi. W przypadku pracy z projektami rozproszonymi konieczne jest zainstalowanie dodatkowego oprogramowania, zaleŝnego od wykorzystywanego narzędzia do kontroli wersji: Reliable Software Code CoOp 4.x narzędzie to musi zostać zainstalowane wraz z rozszerzeniem Command-Line Interface. Aplikacja ta w przypadku projektów rozproszonych wymaga takŝe klienta poczty zgodnego ze standardem MAPI CVS konieczne jest istnienie serwera z zainstalowanym repozytorium CVS, z kolei na maszynie klienta musi zostać zainstalowany dowolny klient CVS (np. WinCVS lub TortoiseCVS) Projekt systemu i klas Model projektu Jedną z kluczowych funkcjonalności realizowanego systemu ma być moŝliwość kierowania procesem zarządzania problemami w projekcie informatycznym. Logika narzędzia musi zatem zawierać wszelkie aspekty z tym związane, ze szczególnym 133

134 uwzględnieniem wcześniej podjętych decyzji odnośnie zakresu gromadzonych danych oraz sposobu ich przechowywania. Przy projektowaniu tej części logiki biznesowej nie bez znaczenia pozostaje takŝe aspekt współpracy narzędzia z systemami kontroli wersji. Struktura logiczna projektów obsługiwanych przez system musi uwzględniać wszystkie te czynniki przy jednoczesnym zapewnieniu dostatecznego stopnia rozszerzalności modelu w przyszłości. Na potrzeby realizacji prototypu narzędzia podjęta została decyzja o zaimplementowaniu w nim trzech rodzajów projektów, przy czym przez rodzaj projektu naleŝy w tym momencie rozumieć sposób obsługi warstwy danych. Są to: projekt lokalny (local project) Lokalny projekt to taki, w którym wszelkie dane gromadzone są na lokalnej maszynie i nie podlegają dalszej dystrybucji. Jest to najprostszy przypadek, kiedy całość danych projektu przechowywana jest w jednym miejscu. Ten typ projektu nie wyklucza jednak uczestnictwa w nim więcej niŝ jednego uŝytkownika pracującego na lokalnej maszynie (po warunkiem posiadania przez nich oddzielnych kont uŝytkownika). Cechą charakterystyczną tego typu projektu jest zupełny brak współpracy z jakimkolwiek systemem kontroli wersji projekt Code CoOp (Code CoOp project) Projekt, w którym systemem kontroli wersji uŝywanym przy replikacji i dystrybucji danych jest narzędzie Reliable Software Code CoOp. Baza danych systemu BAGGU dołącza się do juŝ istniejącego lub nowego projektu w tym narzędziu i za jego pomocą wszelkie dane rozsyłane są wśród uczestników za pośrednictwem poczty elektronicznej lub poprzez foldery współdzielone w sieci lokalnej projekt CVS (CVS project) Projekt, w którym systemem kontroli wersji uŝywanym przy replikacji i dystrybucji danych jest darmowe narzędzie CVS. Baza danych systemu BAGGU dołącza się do juŝ istniejącego lub nowego repozytorium na wskazanym serwerze CVS. Dane projektu są na stałe przechowywane na serwerze, a ich lokalna kopia jest tworzona na czas pracy z aplikacją. W momencie jakichkolwiek modyfikacji zmiany przesyłane są z powrotem na serwer, skąd pozostali uczestnicy mogą pobierać najświeŝsze wersje danych Zgodnie z załoŝeniami przedsięwzięcia realizowane narzędzie musi zostać zaprojektowane w sposób, który umoŝliwi jego ewentualną rozbudowę o moŝliwość 134

135 współpracy z innymi dostępnymi na rynku rozwiązaniami typu source-control. Wymóg ten został spełniony poprzez wprowadzenie do logiki biznesowej abstrakcyjnej klasy bazowej Projekt, która w załoŝeniu reprezentuje dowolny rodzaj projektu. Konkretne, implementowane przez narzędzie, projekty reprezentowane są w tym modelu przez klasy dziedziczące, odpowiednio LocalProject, CodeCoOpProject oraz CVSProject. Nazwy i funkcjonalność zaimplementowanych projektów odzwierciedlają wykorzystywane przez nie technologie, gdyŝ kaŝda z tych klas posiada rozwiązania specyficzne dla siebie załoŝenia i sposób działania. W przyszłości moŝna rozszerzyć system np. o moŝliwość współpracy z serwerami FTP jako repozytorium danych o problemach. W takiej sytuacji konieczne byłoby zaimplementowanie kolejnej klasy (FTPProject), która implementowałaby zachowanie projektu z zastosowaniem serwera plików. Podsumowując, całość logiki systemu zawsze operuje na abstrakcyjnym projekcie bazowym, nie wnikając w szczegóły implementacyjne poszczególnych klas potomnych. W klasach dziedziczących znajdują się konkretne rozwiązanie techniczne specyficzne dla danego typu projektu. Przy okazji definiowania zakresu danych zaprezentowanego w punkcie 8.4 pojedynczy projekt został podzielony na dwie zaleŝne od siebie części fragment współdzielony (dane projektu) oraz fragment lokalny (konfiguracja). Podział ten został przeniesiony do modelu logicznego systemu w postaci zaleŝności dwóch klas omawianej wcześniej klasy Project oraz klasy ProjectCofig, która reprezentuje lokalną część konfiguracyjną pojedynczego projektu. Podobnie jak klasa reprezentująca dane projektu, klasa ProjectConfig równieŝ stanowi abstrakcyjną klasę bazową dla klas potomnych reprezentujących poszczególne rodzaje projektów. Związek typu 1-1 pomiędzy tymi klasami odwzorowuje, fakt, iŝ kaŝdy projekt musi posiadać konfigurację, z kolei pojedyncza konfiguracja zawsze dotyczy konkretnego projektu. Model projektu w logice biznesowej systemu BAGGU został zaprezentowany na Rysunku 7-8. Oprócz opisywanych wyŝej klas Project oraz ProjectConfig na diagramie zostały zawarte klasy reprezentujące członków danego projektu (ProjectMember) oraz problemy w nim zarejestrowane (Problem opisana szerzej w punkcie 8.7.2). Obie te klasy z oczywistych względów są połączone z projektem poprzez silną agregację. Kolejnym waŝnym elementem tej części modelu systemu jest klasa kontenerowa ProjectContainer, której głównym zadaniem jest przechowywanie i reprezentowanie zbioru projektów oraz udostępnianie warstwie interfejsu uŝytkownika mechanizmów do ich zarządzania. 135

136 Rysunek 7-5 Szczegółowy diagram klas przedstawiający model projektu w narzędziu BAGGU 136

137 Model problemu Jednym z zasadniczych celów praktycznej części mojej pracy dyplomowej jest zastosowanie opracowanego w Rozdziałach 3 oraz 4 modelu problemu w konkretnej implementacji. Zasadniczo model problemu w systemie BAGGU nie odbiega znacząco od rozwiązań przedstawianych wcześniej w części teoretycznej mojej pracy. Jedyne modyfikacje dotyczą zawęŝenia zakresu atrybutów problemu oraz rezygnacja z mechanizmów powiązywania załączników. Trzonem modelu pozostała abstrakcyjna klasa bazowa Problem, po której dziedziczą klasy reprezentujące defekty (Bug) oraz prośby o zmianę (ChangeRequest). Podejście takie umoŝliwia logice biznesowej jednakowe traktowanie problemów przy jednoczesnym uwzględnieniu ich indywidualnego charakteru (np. przy wyświetlaniu). Cykl Ŝycia problemu został zamodelowany przy pomocy klasy reprezentującej stan. Klasa State stanowi abstrakcyjną klasę bazową dla klas reprezentujących konkretne stany, w jakich moŝe się znaleźć problem. KaŜdy obiekt dziedziczący po klasie State posiada jednoznaczną nazwę oraz zbiór stanów, które mogą po nim następować (atrybut possibletransitions). Pojedyncza instancja klasy Problem w danym momencie powiązana jest z konkretną instancją klasy State, co jednoznacznie determinuje jej aktualny stan oraz moŝliwe dalsze kroki w cyklu Ŝycia. Opisywane tutaj rozwiązanie wykorzystuje często stosowany wzorzec projekty State [GAMM1995]. Rozwiązanie konkretnego problemu zostało zamodelowane analogicznie do stanu poprzez klasę abstrakcyjna Resolution oraz jej klasy potomne reprezentujące moŝliwe rozwiązania problemu. Diagram klas modelu problemu został zaprezentowany na Rysunku 7-9. Pozostałe elementy diagramu reprezentują odpowiednio komentarze do problemu (Comment) oraz historię jego modyfikacji (History). Oba elementy powiązane są z problemem poprzez silną agregację, gdyŝ razem stanowią integralną całość informacji na temat problemu. 137

138 Rysunek 7-6 Szczegółowy diagram klas przedstawiający modelu problemu w narzędziu BAGGU Model warstwy danych Pojemnikiem danych dla systemu są pliki XML. Zgodnie z załoŝeniami projektowymi warstwy danych, w modelu biznesowym systemu moŝna wyróŝnić trzy klasy, które reprezentują obiekty trwałe, tzn. takie których wartości muszą zostać zachowane po zakończeniu pracy aplikacji. Są to odpowiednio dane projektu (klasa Project), konfiguracja projektu (klasa ProjectConfig) oraz dane problemów (klasa Problem). 138

139 W celu maksymalnej unifikacji sposobu zapisu danych do plików XML do modelu systemu została wprowadzona abstrakcyjna klasa XMLFile, której głównym zadaniem jest reprezentowanie dowolnego pliku XML oraz definiowanie zakresu operacji moŝliwych do wykonania na tym pliku. Klasa ta posiada pojedynczy atrybut określający fizyczne połoŝenie danego pliku na dysku (atrybut filepath) oraz definiuje 4 abstrakcyjne metody słuŝące do manipulowania na danych XML. Są to odpowiednio: read (odczyt) metoda ma na celu otworzenie pliku wskazywanego przez atrybut filepath, parsowanie jego zawartości oraz odczyt wartości danych i ich zapisanie do atrybutów obiektu write (zapisz) metoda ma na celu zapisanie aktualnych wartości obiektu do pliku XML wskazanego przez atrybut filepath. verify (weryfikuj) metoda ma na celu sprawdzenie poprawności struktury pliku XML Klasa XMLFile jest abstrakcyjną klasą bazową dla wszystkich wymienionych wyŝej klas trwałych. Klasy dziedziczące po niej muszą implementować wszystkie 4 metody w sposób, który odzwierciedla strukturę i zawartość informacyjną poszczególnych obiektów. Dzięki zastosowaniu takiej konstrukcji instancje klas trwałych potrafią utrwalić się za pomocą specyficznych dla siebie plików XML, a logika biznesowa nie musi wnikać w szczegóły tej operacji. Na poniŝszym diagramie został przedstawiony fragment diagramu klas odpowiedzialny za opisaną wyŝej warstwę danych systemu. Rysunek 7-7 Szczegółowy diagram klas przedstawiający model warstwy danych w narzędziu BAGGU 139

140 7.5.6 Dynamika systemu Implementacja narzędzia BAGGU, bazującego na modelu problemu stworzonym w Rozdziale 4, wymagała takŝe opracowania modelu dynamicznego dla systemu. Bardzo istotnym zagadnieniem przy projektowaniu dynamiki systemu było przeistoczenie zaproponowanego cyklu Ŝycia problemu na konkretny model dynamiczny zaprezentowanej wcześniej klasy Problem. Diagram na Rysunku 7-11 przedstawia moŝliwe stany instancji klasy Problem oraz zakres moŝliwych przejść pomiędzy poszczególnymi stanami. Wszystkie przejścia zaznaczone na diagramie oznaczają zmianę stanu problemu, przy czym przejście pomiędzy stanami jest moŝliwe tylko w wypadku, gdy członek zespołu inicjujący zmianę pełni w zespole projektowym odpowiednią rolę. Warunek ten został wyraŝony poprzez podanie w nawiasach kwadratowych zbioru ról, które danej zmiany mogą dokonać. Na diagramie zastosowano następujące oznaczenia: PM Project Manager (kierownik projektu) D Developer (wykonawca) D przypisany Developer (wykonawca), do którego jest przypisany problem T Tester C Client (klient) Diagram stanów klasy Problem stanowi syntezę wcześniej prezentowanych diagramów w Rozdziale 3 (Rysunki 3-3 oraz 3-4) wyraŝoną w języku UML. Jedynym odstępstwem od modelu teoretycznego jest brak stanu archiwalny, spowodowany faktem, Ŝe narzędzie BAGGU w wersji implementowanej w ramach dyplomu nie przewiduje funkcjonalności związanej z archiwizowaniem zgłoszeń. Projekt aplikacji zawiera takŝe diagramy sekwencji obrazujące najwaŝniejsze przypadki uŝycia realizowane przez system (punkt 3.7 w Załączniku BAGGU Model i Projekt Systemu ). 140

141 Rysunek 7-8 Diagram stanu klasy Problem Projekt warstwy danych Opisany w modelu systemu zakres gromadzonych danych posłuŝył do opracowania konkretnego rozwiązania, którego główne załoŝenia przedstawia Rysunek Struktura plików dla pojedynczego projektu w systemie BAGGU została zasadniczo rozbita na dwa części: katalog projektów (project directory) lokalny katalog, w którym zainstalowana jest aplikacja BAGGU katalog roboczy projektu (project root directory) lokalizacja lokalnej kopii repozytorium projektu w systemie kontroli wersji W katalogu projektów przechowywane są pliki konfiguracyjne wszystkich projektów, do których naleŝy uŝytkownik lokalnej maszyny. KaŜdy taki plik konfiguracyjny wskazuje na miejsce, w którym znajdują się zasoby kontrolowane przez 141

142 system kontroli wersji. We wskazywanym katalogu obok innych plików projektu (kodu źródłowego, dokumentacji itp.) tworzony jest dedykowany podkatalog (\baggu), w którym system BAGGU przechowuje dane na temat projektu oraz zgromadzone problemy. W ten sposób baza danych systemu BAGGU staje się integralną częścią repozytorium projektu informatycznego i moŝe podlegać mechanizmom kontroli wersji wybranego narzędzia typu source-control. Rysunek 7-12 Struktura plików pojedynczego projektu w systemie BAGGU Projekt interfejsu uŝytkownika Centralnym elementem aplikacji będzie okno główne zawierające następujące elementy: panel sterowania za jego pomocą uŝytkownik uzyska dostęp do wszelkiej funkcjonalności aplikacji takiej jak tworzenie i dołączanie do projektów, dodawanie problemów, zmiana konfiguracji itp. Panel sterowania będzie zrealizowany zarówno w postaci standardowego menu u góry okna jak i dedykowanego zbioru przycisków (ang. toolbar) lista wyboru projektu za jej pomocą uŝytkownik będzie miał moŝliwość przełączania się pomiędzy wszystkimi projektami, do których naleŝy. wyszukiwarka problemów będzie to zestaw pól umoŝliwiających filtrację problemów wyświetlanych w liście problemów. Wyszukiwarka będzie obejmowała zakres najczęściej uŝywanych kryteriów wyszukiwawczych takich jak ID problemu, stan czy teŝ osoba przypisana do problemu. 142

143 lista problemów będzie to tabelka, w której wyświetlane będą wszystkie problemy zarejestrowane w aktualnie wybranym przez uŝytkownika projekcie. Tabelka będzie zbudowana z kilku kolumn zawierających najistotniejsze informacje o problemach (ID, stan, tytuł). Tabelkę będzie moŝna dowolnie sortować względem kaŝdej z kolumn. Mechanizm filtracji w wyszukiwarce problemów będzie odpowiednio zawęŝał listę wyświetlanych problemów w zaleŝności od kryteriów podanych przez uŝytkownika. Wybór konkretnego wiersza tabelki spowoduje otwarcie oddzielnego okna z informacjami szczegółowymi na temat wybranego problemu) PowyŜszy opis dotyczy jedynie ogólnych załoŝeń dotyczących funkcjonalności głównego okna aplikacji. Rysunek 7-13 przedstawia zestaw formatek implementowanych przez warstwę prezentacji systemu. Zaprezentowany diagram obrazuje takŝe ścieŝki, jakie są konieczne do przejścia, aby dojść do konkretnej formatki. Rysunek 7-13 Schemat formatek systemu Interfejs uŝytkownika został opracowany w całości w języku angielskim ze względu na potencjalne zastosowanie narzędzia w projektach komercyjnych i prowadzonych na uczelni. Zastosowanie języka angielskiego w warstwie prezentacji zwiększyło uniwersalność systemu i poszerzy zakres jego potencjalnych odbiorców. 143

144 7.6 Opis implementacji Zaprezentowana w poprzednich punktach specyfikacja wymagań, analiza dziedziny problemowej i ostateczny projekt techniczny stanowiły podstawę do implementacji narzędzia mającego wspomagać proces zarządzania problemami w projekcie informatycznym. Część praktyczna mojej pracy dyplomowej była realizowana w formie projektu. Przedsięwzięcie to obejmowało większość czynności wykonywanych w ramach rzeczywistych projektów informatycznych, w tym takŝe proces zarządzania problemami. W trakcie trwania całego projektu wszelkie napotkane problemy były skrupulatnie rejestrowane. Na początku projektu, ze względu na brak stosownego narzędzia problemy zapisywane były w pliku programu Microsoft Excel. Od momentu osiągnięcia przez aplikację minimalnego zakresu funkcjonalności zgromadzone zagadnienia zostały przeniesione do bazy danych systemu BAGGU. Testowa wersja aplikacji została zainstalowana na komputerze uŝywanym w trakcie implementacji. PoniŜej znajduje się krótka charakterystyka powstałego oprogramowania w formie uproszczonej instrukcji jego instalacji oraz obsługi Instalacja narzędzia System BAGGU dostarczany jest w postaci pojedynczego pliku instalacyjnego po uruchomieniu, którego na ekranie pojawi się standardowy kreator, który prowadzi uŝytkownika przez kolejne kroki procesu instalacji. Instalację systemu moŝna dokonywać tylko na koncie uŝytkownika z uprawnieniami administratora na lokalnym komputerze i tylko na komputerach pracujących pod kontrolą systemu operacyjnego Windows 2000 lub XP. Do poprawnego działania aplikacji wymagane jest takŝe wcześniejsze zainstalowanie Microsoft.NET Framework w wersji 2.0 lub nowszej, o czym uprzedzi instalator w stosownym momencie. Ponadto, aby korzystać z integracji systemu BAGGU z CVS lub Code CoOp konieczne jest oddzielne zainstalowanie tych aplikacji na lokalnym komputerze. Przed zainstalowaniem niniejszej aplikacji zaleca się usunięcie wszystkich zainstalowanych juŝ wersji BAGGU (patrz punkt 7.6.2). Instalacja rozpoczyna się automatycznie po uruchomieniu pliku Setup.exe. 144

145 7-14 Ekran kreatora instalacji systemu Cały proces instalacji jest bardzo prosty i w zasadzie sprowadza się do wyboru docelowej lokalizacji aplikacji na dysku. Po zakończeniu instalacji na pulpicie oraz w menu Start pojawią się skróty pozwalające uruchomić aplikację Usuwanie narzędzia W procesie instalacji system BAGGU automatycznie rejestruje się w systemie Windows jako zainstalowana aplikacja. Jej usunięcie z systemu sprowadza się do uruchomienia narzędzia Dodaj/Usuń programy (ang. Add/Remove Programs) dostępnego z poziomu Panelu Srerowania (ang. Conrol Panel). Wybranie BAGGU z listy zainstalowanych aplikacji i nakazanie jego odinstalowanie spowoduje całkowite usunięcie aplikacji z systemu Pierwsze uruchomienie aplikacji Po uruchomieniu aplikacji na ekranie pojawi się główne okno systemu BAGGU. Opis jego najwaŝniejszych funkcji został zawarty na Rysunku Warto zaznaczyć, Ŝe przy pierwszym uruchomieniu systemu, zalogowany uŝytkownik nie jest jeszcze członkiem Ŝadnego projektu. 145

146 Za pomocą menu górnego uzyskujemy dostęp do wszystkich najwaŝniejszych funkcji systemu. Menu podzielone jest tematycznie na grupy funkcji dotyczących programu, projektu, problemów oraz pomocy. Za pomocą listy projektów uzyskujemy dostęp do wszystkich projektów, w których członkiem jest zalogowany uŝytkownik. Za pomocą rozmaitych filtrów moŝliwe jest zawęŝenie listy wyświetlanych problemów. Główny obszar okna jest przeznaczony na listę problemów zarejestrowanych w aktualnie wybranym projekcie Główne okno systemu Tworzenie nowego projektu W systemie utworzony został projekt lokalny o nazwie BAGGU i od tej pory wszelkie problemy były rejestrowane za pomocą narzędzia. Rozpoczęcie nowego projektu w systemie BAGGU odbywa się poprzez wybór odpowiedniej opcji z menu Project/Create new project (Rysunek 7-16). Wybór konkretnej opcji jest uzaleŝniony od rodzaju projektu, jaki chcemy utworzyć Menu tworzenia nowego projektu Tworzenie projektu lokalnego Przy tworzeniu projektu lokalnego, konieczne jest jedynie określenie jego nazwy oraz wskazanie miejsca na dysku, gdzie będą przechowywane dane problemów. Lokalizacja projektu (ang. Root directory) moŝe być dowolnym katalogiem na dysku lokalnym lub współdzielonym katalogiem w sieci lokalnej (LAN). 146

147 7-17 Okno tworzenia nowego projektu lokalnego Tworzenie projektu CVS Przy tworzeniu projektu typu CVS, oprócz określenia jego nazwy i wskazania miejsca na dysku konieczne jest takŝe podanie parametrów umoŝliwiających dostęp do repozytorium CVS danych połączenia oraz lokalizacji zainstalowanego klienta CVS. Warto zaznaczyć, Ŝe tworzenie nowego projektu BAGGU w repozytorium CVS tak naprawdę oznacza dołączanie plików BAGGU do juŝ istniejącego projektu CVS. Przed przystąpieniem do tworzenia nowego projektu BAGGU w repozytorium CVS musi juŝ istnieć odpowiednio skonfigurowany projekt. Konieczne jest określenie miejsca, gdzie zainstalowany jest klient CVS (np. Tortoise CVS, WinCVS) na lokalnej maszynie Przycisk Test umoŝliwia sprawdzenie poprawności podanych parametrów dostępowych do repozytorium CVS Parametry dostępowe do repozytorium CVS obejmują informacje o sposobie autoryzacji, adresie serwera, nazwie uŝytkownika oraz lokalizacji repozytorium na serwerze 7-18 Okno tworzenia nowego projektu CVS Tworzenie projektu Code CoOp Podobnie jak w przypadku projektów CVS, przy tworzeniu projektu typu Code CoOp, oprócz określenia jego nazwy i wskazania miejsca na dysku konieczne jest takŝe podanie parametrów umoŝliwiających dostęp do projektu Code CoOp. Warto zaznaczyć, 147

148 Ŝe tworzenie nowego projektu BAGGU w systemie Code CoOp tak naprawdę oznacza dołączanie plików BAGGU do juŝ istniejącego projektu Code CoOp. Przed przystąpieniem do tworzenia nowego projektu BAGGU w aplikacji Code CoOp musi juŝ istnieć odpowiednio skonfigurowany projekt. Konieczne jest określenie miejsca, gdzie zainstalowany jest Code CoOp na lokalnej maszynie 7-19 Okno tworzenia nowego projektu Code CoOp Dołączanie do istniejącego projektu Dołączanie do juŝ istniejącego projektu odbywa się poprzez wybór odpowiedniej opcji z menu Project/Join existing project (Rysunek 7-20). Wybór konkretnej opcji jest uzaleŝniony od rodzaju projektu, do jakiego chcemy dołączyć Menu dołączania do istniejącego projektu Zasadniczo dołączanie do istniejącego projektu odbywa się analogicznie do tworzenia nowego projektu. Bez względu na rodzaj projektu, system poprosi o wskazanie miejsca lokalizacji pliku projektu, do którego chcemy dołączyć. Plik projektu jest plikiem XML o nazwie NAZWA_PROJEKTU.xml i jest zawsze umieszczonym w katalogu /baggu w miejscu lokalizacji projektu, do którego dołączamy. Pozostałe parametry podawane przy dołączaniu do projektu są analogiczne do tych opisywanych przy okazji tworzenia projektów. 148

149 7.6.6 Rezygnacja z uczestnictwa w projekcie Rezygnacja z uczestnictwa w projekcie w systemie BAGGU odbywa się poprzez wybór opcji Project/Defect from project (Rysunek 7-21). Wybór tej opcji spowoduje usunięcie zalogowanego uŝytkownika z listy członków aktualnie wybranego projektu i usunięcie z dysku lokalnego wszystkich danych projektu Menu rezygnacji z udziału w projekcie Opcja rezygnacji z udziału w projekcie jest dostępna tylko w przypadku, gdy wybrany jest jakiś projekt. W przypadku, gdy zalogowany uŝytkownik jest ostatnim członkiem projektu, system zapyta czy cały projekt ma zostać zakończony i permanentnie usunięty Ustalanie ról w obrębie projektu Ustalanie ról w obrębie projektu w systemie BAGGU jest dostępne tylko dla uŝytkowników posiadających rolę Kierownika Projektu (Project Manager) w konkretnym projekcie. Przejście do formularza zarządzania projektem odbywa się poprzez wybór opcji Project/Project members (Rysunek 7-22) Menu ustalania ról w projekcie Wybór tej opcji spowoduje wyświetlenie okna z listą aktualnych członków projektu wraz z ich zakresem ról. Za pomocą tego okna (Rysunek 7-23) Kierownik Projektu dokonuje przydziału ról w obrębie projektu. 149

150 Wybór ról w obrębie projektu odbywa się poprzez ich zaznaczenie w wierszu danego uŝytkownika. System dba o to aby w danym projekcie był zawsze co najmniej jeden kierownik Okno ustalania ról w projekcie Przeglądanie listy problemów Wybór konkretnego projektu z listy projektów spowoduje odświeŝenie okna głównego systemu. Na liście problemów pokaŝą się wszystkie problemy zarejestrowane w ramach tego projektu, a mechanizmy filtracji zostaną uaktywnione i uzupełnione zgodnie z aktualnym stanem projektu. Z poziomu okna głównego uŝytkownik ma dostęp do kompletu informacji i funkcjonalności odnośnie aktualnie wybranego projektu, co zostało przedstawione i opisane na Rysunku Od momentu wybrania konkretnego projektu, wszystkie operacje wykonywane w systemie odnoszą się do wybranego projektu. Aktualnie wybrany projekt moŝna w kaŝdej chwili zmienić wybierając go z listy projektów Lista problemów zawiera wszystkie zarejestrowane w projekcie problemy. Kolorystyka wierszy zaleŝna jest od aktualnego stanu danego problemu 7-24 Główne okno systemu po wyborze konkretnego projektu 150

151 7.6.9 Rejestracja problemów W celu maksymalnego wykorzystania moŝliwości narzędzia, w projekcie wprowadziłem rygorystycznie przestrzegane wymaganie rejestracji kaŝdego, nawet najmniej istotnego, napotkanego problemu. Do bazy danych projektu dodawane były zarówno ujawniające się defekty, jak i pomysły na usprawnienie narzędzia i rozszerzenie jego funkcjonalności. W efekcie, w krótkim czasie rejestr problemów projektu szybko wypełniony został opisami sukcesywnie usuwanych defektów oraz sporą ilością propozycji na usprawnienie narzędzia w jego przyszłych wersjach. Przez rejestrację problemów rozumiane jest dodawanie defektów oraz próśb o zmiany do bazy danych konkretnego projektu. Dodawanie problemów w systemie BAGGU odbywa się na dwa sposoby poprzez menu Problem albo przyciski w pasku narzędzi (patrz Rysunek 7-25). Wybór konkretnej opcji jest uzaleŝniony od rodzaju problemu, który chcemy zarejestrować Sposoby rejestrowania problemów Rejestracja defektu Rejestracja defektu odbywa się poprzez wybranie opcji Problem/Report a Bug z menu głównego albo naciśnięcie przycisku w pasku narzędzi aplikacji. Po wybraniu tej opcji na ekranie pojawi się formularz zgłaszania defektu, którego opis znajduje się na Rysunku Rejestracja prośby o zmianę Rejestracja prośby o zmianę odbywa się poprzez wybranie opcji Problem/Add change request z menu głównego albo naciśnięcie przycisku w pasku narzędzi aplikacji. Po wybraniu tej opcji na ekranie pojawi się formularz zgłaszania prośby o zmianę, którego opis znajduje się na Rysunku

152 Podświetlone pola wskazują pola, których wypełnienie jest wymagane do rejestracji defektu Przycisk Add bug staje się dostępny dopiero w momencie uzupełnienia wszystkich wymaganych pól opisu defektu 7-26 Formularz rejestracji defektu Podświetlone pola wskazują pola, których wypełnienie jest wymagane do rejestracji prośby o zmianę Przycisk Add change request staje się dostępny dopiero w momencie uzupełnienia wszystkich wymaganych pól opisu prośby o zmianę 7-27 Formularz zgłaszania prośby o zmianę Podgląd problemów Dwukrotne kliknięcie (ang. double click) na wybranym wierszu listy problemów spowoduje ukazanie się okna podglądu danego problemu. Okno podglądu składa się zasadniczo z 4 elementów, do których dostęp uzyskuje się za pomocą zakładek umieszczonych na górze okna, co przedstawia Rysunek Warto w tym momencie 152

153 zaznaczyć, Ŝe wszelkie zmiany dokonywane na problemie, są fizycznie zapisywane dopiero po zamknięciu okna podglądu. Zakładka Status zawiera informacje na temat aktualnego stanu problemu oraz mechanizmy do jego kontrolowania Zakładka Details zawiera wszystkie informacje o problemie podane w trakcie jego rejestracji Zakładka danych problemu 7-28 Zakładki w podglądzie problemu Zakładka Details zawiera wszystkie informacje o problemie podane w trakcie jego rejestracji i jest analogiczna do formularzy wyświetlanych przy dodawaniu problemów do projektu. W zaleŝności od rodzaju problemu, wyświetlany jest tutaj formularz defektu albo formularz prośby o zmianę Zakładka statusu problemu Zakładka Status zawiera informacje na temat aktualnego stanu problemu oraz mechanizmy do jego kontrolowania. Bez względu na rodzaj problemu składa się z dwóch części panelu aktualnego stanu problemu oraz mechanizmu modyfikacji stanu problemu, co zostało przedstawione na Rysunku Zakładka Comments zawiera wszystkie komentarze dodane do problemu oraz formularz dodawania nowych komentarzy Zakładka History zawiera informacje na temat historii zmian danego problemu Aktualne wartości atrybutów determinujących stan problemu wyświetlane są w górnej części zakładki i nie podlegają bezpośredniej edycji Wartości moŝliwych zmian statusu problemu są uzaleŝnione od jego aktualnego stanu i są zgodne z cyklem Ŝycia problemu implementowanym przez narzędzie Zmiana statusu problemu odbywa się za pośrednictwem mechanizmów w dolnej części zakładki. Za ich pośrednictwem moŝliwa jest zmiana priorytetu, stanu, przypisania oraz rozwiązania problemu 7-29 Zakładka statusu problemu 153

PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>

PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU> Załącznik nr 4.4 do Umowy nr 35-ILGW-253-.../20.. z dnia... MINISTERSTWO FINANSÓW DEPARTAMENT INFORMATYKI PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT WERSJA numer wersji

Bardziej szczegółowo

PLAN ZARZĄDZANIA KONFIGURACJĄ OPROGRAMOWANIA PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>

PLAN ZARZĄDZANIA KONFIGURACJĄ OPROGRAMOWANIA PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU> Załącznik nr 4.6 do Umowy nr 35-ILGW-253-.../20.. z dnia... MINISTERSTWO FINANSÓW DEPARTAMENT INFORMATYKI PLAN ZARZĄDZANIA KONFIGURACJĄ OPROGRAMOWANIA PROJEKT WERSJA

Bardziej szczegółowo

Etapy życia oprogramowania

Etapy życia oprogramowania Modele cyklu życia projektu informatycznego Organizacja i Zarządzanie Projektem Informatycznym Jarosław Francik marzec 23 w prezentacji wykorzystano również materiały przygotowane przez Michała Kolano

Bardziej szczegółowo

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania Etapy życia oprogramowania Modele cyklu życia projektu informatycznego Organizacja i Zarządzanie Projektem Informatycznym Jarosław Francik marzec 23 Określenie wymagań Testowanie Pielęgnacja Faza strategiczna

Bardziej szczegółowo

Model referencyjny doboru narzędzi Open Source dla zarządzania wymaganiami

Model referencyjny doboru narzędzi Open Source dla zarządzania wymaganiami Politechnika Gdańska Wydział Zarządzania i Ekonomii Katedra Zastosowań Informatyki w Zarządzaniu Zakład Zarządzania Technologiami Informatycznymi Model referencyjny Open Source dla dr hab. inż. Cezary

Bardziej szczegółowo

Wstęp do zarządzania projektami

Wstęp do zarządzania projektami Wstęp do zarządzania projektami Definicja projektu Projekt to tymczasowe przedsięwzięcie podejmowane w celu wytworzenia unikalnego wyrobu, dostarczenia unikalnej usługi lub uzyskania unikalnego rezultatu.

Bardziej szczegółowo

Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie

Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie informatycznej. Zadaniem systemu jest rejestracja i przechowywanie

Bardziej szczegółowo

Wstęp do zarządzania projektami

Wstęp do zarządzania projektami Wstęp do zarządzania projektami Definicja projektu Projekt to tymczasowe przedsięwzięcie podejmowane w celu wytworzenia unikalnego wyrobu, dostarczenia unikalnej usługi lub uzyskania unikalnego rezultatu.

Bardziej szczegółowo

Zarządzanie i realizacja projektów systemu Microsoft SharePoint 2010

Zarządzanie i realizacja projektów systemu Microsoft SharePoint 2010 Zarządzanie i realizacja projektów systemu Microsoft SharePoint 2010 Geoff Evelyn Przekład: Natalia Chounlamany APN Promise Warszawa 2011 Spis treści Podziękowania......................................................

Bardziej szczegółowo

Inżynieria oprogramowania II

Inżynieria oprogramowania II Wymagania funkcjonalne, przypadki użycia Inżynieria oprogramowania II Problem i cel Tworzenie projektów bez konkretnego celu nie jest dobre Praktycznie każdy projekt informatyczny powstaje z uwagi na jakiś

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH Modeling and analysis of computer systems Kierunek: Informatyka Forma studiów: Stacjonarne Rodzaj przedmiotu: Poziom kwalifikacji: obowiązkowy

Bardziej szczegółowo

Wprowadzenie do metodologii modelowania systemów informacyjnych. Strategia (1) Strategia (2) Etapy Ŝycia systemu informacyjnego

Wprowadzenie do metodologii modelowania systemów informacyjnych. Strategia (1) Strategia (2) Etapy Ŝycia systemu informacyjnego Etapy Ŝycia systemu informacyjnego Wprowadzenie do metodologii modelowania systemów informacyjnych 1. Strategia 2. Analiza 3. Projektowanie 4. Implementowanie, testowanie i dokumentowanie 5. WdroŜenie

Bardziej szczegółowo

Praca magisterska Jakub Reczycki. Opiekun : dr inż. Jacek Rumiński. Katedra Inżynierii Biomedycznej Wydział ETI Politechnika Gdańska

Praca magisterska Jakub Reczycki. Opiekun : dr inż. Jacek Rumiński. Katedra Inżynierii Biomedycznej Wydział ETI Politechnika Gdańska System gromadzenia, indeksowania i opisu słownikowego norm i rekomendacji Praca magisterska Jakub Reczycki Opiekun : dr inż. Jacek Rumiński Katedra Inżynierii Biomedycznej Wydział ETI Politechnika Gdańska

Bardziej szczegółowo

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki

Bardziej szczegółowo

Rozdział 5: Zarządzanie testowaniem. Pytanie 1

Rozdział 5: Zarządzanie testowaniem. Pytanie 1 Pytanie 1 Dlaczego niezależne testowanie jest ważne: A) Niezależne testowanie jest w zasadzie tańsze niż testowanie własnej pracy B) Niezależne testowanie jest bardziej efektywne w znajdywaniu defektów

Bardziej szczegółowo

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH Kierunek: Informatyka Modeling and analysis of computer systems Forma studiów: Stacjonarne Rodzaj przedmiotu: obowiązkowy w ramach specjalności:

Bardziej szczegółowo

Małopolska Agencja Rozwoju Regionalnego S.A.

Małopolska Agencja Rozwoju Regionalnego S.A. Małopolska Agencja Rozwoju Regionalnego S.A. Przestrzeń Twojego sukcesu! Projekt Określone w czasie działanie podejmowane w celu stworzenia niepowtarzalnego produktu lub usługi Projekt - cechy słuŝy realizacji

Bardziej szczegółowo

Cykle życia systemu informatycznego

Cykle życia systemu informatycznego Cykle życia systemu informatycznego Cykl życia systemu informatycznego - obejmuję on okres od zgłoszenia przez użytkownika potrzeby istnienia systemu aż do wycofania go z eksploatacji. Składa się z etapów

Bardziej szczegółowo

Waterfall model. (iteracyjny model kaskadowy) Marcin Wilk

Waterfall model. (iteracyjny model kaskadowy) Marcin Wilk Waterfall model (iteracyjny model kaskadowy) Marcin Wilk Iteracyjny model kaskadowy jeden z kilku rodzajów procesów tworzenia oprogramowania zdefiniowany w inżynierii oprogramowania. Jego nazwa wprowadzona

Bardziej szczegółowo

Opis metodyki i procesu produkcji oprogramowania

Opis metodyki i procesu produkcji oprogramowania Opis metodyki i procesu produkcji oprogramowania Rational Unified Process Rational Unified Process (RUP) to iteracyjny proces wytwarzania oprogramowania opracowany przez firmę Rational Software, a obecnie

Bardziej szczegółowo

Usługa: Testowanie wydajności oprogramowania

Usługa: Testowanie wydajności oprogramowania Usługa: Testowanie wydajności oprogramowania testerzy.pl przeprowadzają kompleksowe testowanie wydajności różnych systemów informatycznych. Testowanie wydajności to próba obciążenia serwera, bazy danych

Bardziej szczegółowo

Wstęp do zarządzania projektami

Wstęp do zarządzania projektami Wstęp do zarządzania projektami Definicja projektu Projekt to tymczasowe przedsięwzięcie podejmowane w celu wytworzenia unikalnego wyrobu, dostarczenia unikalnej usługi lub uzyskania unikalnego rezultatu.

Bardziej szczegółowo

Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem przedsięwzięcia z wykorzystaniem metod sieciowych PERT i CPM

Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem przedsięwzięcia z wykorzystaniem metod sieciowych PERT i CPM SZKOŁA GŁÓWNA HANDLOWA w Warszawie STUDIUM MAGISTERSKIE Kierunek: Metody ilościowe w ekonomii i systemy informacyjne Karol Walędzik Nr albumu: 26353 Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH I KARTA PRZEDMIOTU CEL PRZEDMIOTU PRZEWODNIK PO PRZEDMIOCIE C1. Podniesienie poziomu wiedzy studentów z inżynierii oprogramowania w zakresie C.

Bardziej szczegółowo

RACHUNKOWOŚĆ ZARZĄDCZA

RACHUNKOWOŚĆ ZARZĄDCZA RACHUNKOWOŚĆ ZARZĄDCZA wykład XI dr Marek Masztalerz Uniwersytet Ekonomiczny w Poznaniu 2011 EKONOMICZNY CYKL śycia PRODUKTU 1 KOSZTY CYKLU śycia PRODUKTU OKRES PRZEDRYNKOWY OKRES RYNKOWY OKRES POSTRYNKOWY

Bardziej szczegółowo

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming Jarosław Kuchta Wymagania jakości w Agile Programming Wady klasycznych metod zapewnienia jakości Duży narzut na dokumentowanie Późne uzyskiwanie konkretnych rezultatów Trudność w odpowiednio wczesnym definiowaniu

Bardziej szczegółowo

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz Wykład 8 Testowanie w JEE 5.0 (1) Autor: 1. Rola testowania w tworzeniu oprogramowania Kluczową rolę w powstawaniu oprogramowania stanowi proces usuwania błędów w kolejnych fazach rozwoju oprogramowania

Bardziej szczegółowo

Plan zarządzania projektem

Plan zarządzania projektem Plan zarządzania projektem Opracował: Zatwierdził: Podpis: Podpis: Spis treści: 1. Wst p... 2 1.1 Cel... 2 1.2 Zakres... 2 1.3 Przeznaczenie dokumentu... 2 1.4 Organizacja dokumentu... 2 1.5 Dokumenty

Bardziej szczegółowo

Jakość w procesie wytwarzania oprogramowania

Jakość w procesie wytwarzania oprogramowania Jarosław Kuchta Jakość Oprogramowania http://www.eti.pg.gda.pl/katedry/kask/pracownicy/jaroslaw.kuchta/jakosc/ J.Kuchta@eti.pg.gda.pl Względny koszt wprowadzania zmian w zależności od fazy realizacji projektu

Bardziej szczegółowo

Metodyka projektowania komputerowych systemów sterowania

Metodyka projektowania komputerowych systemów sterowania Metodyka projektowania komputerowych systemów sterowania Andrzej URBANIAK Metodyka projektowania KSS (1) 1 Projektowanie KSS Analiza wymagań Opracowanie sprzętu Projektowanie systemu Opracowanie oprogramowania

Bardziej szczegółowo

Analityk i współczesna analiza

Analityk i współczesna analiza Analityk i współczesna analiza 1. Motywacje 2. Analitycy w IBM RUP 3. Kompetencje analityka według IIBA BABOK Materiały pomocnicze do wykładu z Modelowania i Analizy Systemów na Wydziale ETI PG. Ich lektura

Bardziej szczegółowo

bo od managera wymaga się perfekcji

bo od managera wymaga się perfekcji bo od managera wymaga się perfekcji MODELOWANIE PROCESÓW Charakterystyka modułu Modelowanie Procesów Biznesowych (BPM) Modelowanie procesów biznesowych stanowi fundament wdroŝenia systemu zarządzania jakością

Bardziej szczegółowo

Feature Driven Development

Feature Driven Development Feature Driven Development lekka metodyka tworzenia oprogramowania Kasprzyk Andrzej IS II Wstęp Feature Driven Development (FDD) to metodyka tworzenia oprogramowania, która wspomaga zarządzanie fazami

Bardziej szczegółowo

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017 Wykład 12 7 czerwca 2017 Czym jest UML? UML składa się z dwóch podstawowych elementów: notacja: elementy graficzne, składnia języka modelowania, metamodel: definicje pojęć języka i powiazania pomiędzy

Bardziej szczegółowo

Zarządzanie konfiguracją produktu w całym cyklu Ŝycia. Aleksandra Grzywak-Gawryś Warsztaty Rola IRIS w branŝy kolejowej

Zarządzanie konfiguracją produktu w całym cyklu Ŝycia. Aleksandra Grzywak-Gawryś Warsztaty Rola IRIS w branŝy kolejowej Zarządzanie konfiguracją produktu w całym cyklu Ŝycia Aleksandra Grzywak-Gawryś Warsztaty Rola IRIS w branŝy kolejowej - plan prezentacji 1 2 3 4 5 Zarządzanie konfiguracją - definicje Problemy z konfiguracją

Bardziej szczegółowo

KIERUNKOWE EFEKTY KSZTAŁCENIA

KIERUNKOWE EFEKTY KSZTAŁCENIA WYDZIAŁ INFORMATYKI I ZARZĄDZANIA Kierunek studiów: INFORMATYKA Stopień studiów: STUDIA II STOPNIA Obszar Wiedzy/Kształcenia: OBSZAR NAUK TECHNICZNYCH Obszar nauki: DZIEDZINA NAUK TECHNICZNYCH Dyscyplina

Bardziej szczegółowo

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 6 Modelowanie przypadków uŝycia i czynności. Materiały dla studentów

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 6 Modelowanie przypadków uŝycia i czynności. Materiały dla studentów Zakład Elektrotechniki Teoretycznej i Informatyki Stosowanej Wydział Elektryczny, Politechnika Warszawska Laboratorium modelowania oprogramowania w języku UML Ćwiczenie 6 Modelowanie przypadków uŝycia

Bardziej szczegółowo

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation)

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation) Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation) Zarządzanie wymaganiami Ad hoc (najczęściej brak zarządzania nimi) Niejednoznaczna, nieprecyzyjna komunikacja Architektura

Bardziej szczegółowo

OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA

OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA Projekt to metoda na osiągnięcie celów organizacyjnych. Jest to zbiór powiązanych ze sobą, zmierzających

Bardziej szczegółowo

Narzędzia Informatyki w biznesie

Narzędzia Informatyki w biznesie Narzędzia Informatyki w biznesie Przedstawiony program specjalności obejmuje obszary wiedzy informatycznej (wraz z stosowanymi w nich technikami i narzędziami), które wydają się być najistotniejsze w kontekście

Bardziej szczegółowo

Projektowanie systemu sprzedaŝy ubezpieczeń dla T. U. Generali zgodnie z metodyką User-Centered Design

Projektowanie systemu sprzedaŝy ubezpieczeń dla T. U. Generali zgodnie z metodyką User-Centered Design Case Study Projektowanie systemu sprzedaŝy ubezpieczeń dla T. U. Generali zgodnie z metodyką User-Centered Design Zadanie Naszym zadaniem było zaprojektowanie interfejsu aplikacji do sprzedaŝy ubezpieczeń

Bardziej szczegółowo

STRATEGICZNE ZARZĄDZANIE KOSZTAMI

STRATEGICZNE ZARZĄDZANIE KOSZTAMI STRATEGICZNE ZARZĄDZANIE KOSZTAMI dr Marek Masztalerz Uniwersytet Ekonomiczny w Poznaniu 2011 EKONOMICZNY CYKL śycia PRODUKTU 1 KOSZTY CYKLU śycia PRODUKTU OKRES PRZEDRYNKOWY OKRES RYNKOWY OKRES POSTRYNKOWY

Bardziej szczegółowo

Zasady organizacji projektów informatycznych

Zasady organizacji projektów informatycznych Zasady organizacji projektów informatycznych Systemy informatyczne w zarządzaniu dr hab. inż. Joanna Józefowska, prof. PP Plan Definicja projektu informatycznego Fazy realizacji projektów informatycznych

Bardziej szczegółowo

Zarządzanie Projektami zgodnie z PRINCE2

Zarządzanie Projektami zgodnie z PRINCE2 Zarządzanie Projektami zgodnie z PRINCE2 Opis Metodyka PRINCE2 powstała na bazie doświadczeń z wielu lat dobrych praktyk zarządzania projektami. Metodyka ta oferuje elastyczne i łatwe do adaptacji podejście

Bardziej szczegółowo

Wstęp. Inżynieria wymagań. Plan wykładu. Wstęp. Wstęp. Wstęp. Schemat procesu pozyskiwania wymagań

Wstęp. Inżynieria wymagań. Plan wykładu. Wstęp. Wstęp. Wstęp. Schemat procesu pozyskiwania wymagań Wstęp Inżynieria wymagań Schemat procesu pozyskiwania wymagań identyfikacja źródeł wymagań Organizacja i Zarządzanie Projektem Informatycznym pozyskiwanie pozyskiwanie pozyskiwanie Jarosław Francik marzec

Bardziej szczegółowo

PYTANIA PRÓBNE DO EGZAMINU NA CERTYFIKAT ZAAWANSOWANY REQB KLUCZ ODPOWIEDZI. Część DODATEK

PYTANIA PRÓBNE DO EGZAMINU NA CERTYFIKAT ZAAWANSOWANY REQB KLUCZ ODPOWIEDZI. Część DODATEK KLUCZ ODPOWIEDZI Część DODATEK 8.1 9.4 PYTANIA PRÓBNE DO EGZAMINU NA CERTYFIKAT ZAAWANSOWANY REQB Na podstawie: Syllabus REQB Certified Professional for Requirements Engineering, Advanced Level, Requirements

Bardziej szczegółowo

Podrozdziały te powinny zawierać informacje istotne z punktu widzenia przyjętego celu pracy

Podrozdziały te powinny zawierać informacje istotne z punktu widzenia przyjętego celu pracy Uwaga: 1. Praca powinna być napisana z użyciem formy bezosobowej np. wykonano. Nazwa rozdziału Zawartość Liczba stron 1. Wstęp Rozdział ten powinien zawierać zarys najważniejszych elementów pracy Krótki

Bardziej szczegółowo

Zakres wykładu. Podstawy InŜynierii Oprogramowania

Zakres wykładu. Podstawy InŜynierii Oprogramowania Zakres wykładu Pojęcia podstawowe InŜynierii Oprogramowania Proces wytwarzania oprogramowania Artefakty procesu wytwarzania i ich modele Jakość oprogramowania Literatura: [1] Sacha K., InŜynieria oprogramowania,

Bardziej szczegółowo

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

Bardziej szczegółowo

Wprowadzenie w tematykę zarządzania projektami/przedsięwzięciami

Wprowadzenie w tematykę zarządzania projektami/przedsięwzięciami Wprowadzenie w tematykę zarządzania projektami/przedsięwzięciami punkt 2 planu zajęć dr inż. Agata Klaus-Rosińska 1 DEFINICJA PROJEKTU Zbiór działań podejmowanych dla zrealizowania określonego celu i uzyskania

Bardziej szczegółowo

Praktyczne aspekty stosowania metody punktów funkcyjnych COSMIC. Jarosław Świerczek

Praktyczne aspekty stosowania metody punktów funkcyjnych COSMIC. Jarosław Świerczek Praktyczne aspekty stosowania metody punktów funkcyjnych COSMIC Jarosław Świerczek Punkty funkcyjne Punkt funkcyjny to metryka złożoności oprogramowania wyznaczana w oparciu o określające to oprogramowanie

Bardziej szczegółowo

PROJEKT INTERFEJSU UśYTKOWNIKA PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>

PROJEKT INTERFEJSU UśYTKOWNIKA PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU> Załącznik nr 4.5 do Umowy nr 35-ILGW-253-.../20.. z dnia... MINISTERSTWO FINANSÓW DEPARTAMENT INFORMATYKI PROJEKT INTERFEJSU UśYTKOWNIKA PROJEKT WERSJA numer wersji

Bardziej szczegółowo

Wprowadzenie w tematykę zarządzania przedsięwzięciami/projektami. dr inż. Agata Klaus-Rosińska

Wprowadzenie w tematykę zarządzania przedsięwzięciami/projektami. dr inż. Agata Klaus-Rosińska Wprowadzenie w tematykę zarządzania przedsięwzięciami/projektami dr inż. Agata Klaus-Rosińska 1 DEFINICJA PROJEKTU Zbiór działań podejmowanych dla zrealizowania określonego celu i uzyskania konkretnego,

Bardziej szczegółowo

Inżynieria Programowania Zarządzanie projektem. Plan wykładu. Motto. Motto 2. Notatki. Notatki. Notatki. Notatki.

Inżynieria Programowania Zarządzanie projektem. Plan wykładu. Motto. Motto 2. Notatki. Notatki. Notatki. Notatki. Inżynieria Programowania Zarządzanie projektem Arkadiusz Chrobot Katedra Informatyki, Politechnika Świętokrzyska w Kielcach Kielce, 3 października 2013 Plan wykładu 1. Wstęp 2. Czynności zarządzania 3.

Bardziej szczegółowo

1. WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI

1. WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI KARTA PRZEDMIOTU przedmiotu Stopień studiów i forma Rodzaj przedmiotu Grupa kursów Zaawansowane techniki analizy systemowej oparte na modelowaniu warsztaty Studia podyplomowe Obowiązkowy NIE Wykład Ćwiczenia

Bardziej szczegółowo

PLAN WDROśENIA SYSTEMU PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>

PLAN WDROśENIA SYSTEMU PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU> Załącznik nr 4.3 do Umowy nr 35-ILGW-253-.../20.. z dnia... MINISTERSTWO FINANSÓW DEPARTAMENT INFORMATYKI PLAN WDROśENIA SYSTEMU PROJEKT WERSJA numer wersji

Bardziej szczegółowo

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:

Bardziej szczegółowo

Rozpoczęcie, inicjacja (ang. inception

Rozpoczęcie, inicjacja (ang. inception Wydział Informatyki PB Analogia do budowanego domu Inżynieria oprogramowania II Wykład 2: Proces tworzenia oprogramowania (na podstawie Unified Process) Marek Krętowski pokój 206 e-mail: mkret@ii.pb.bialystok.pl

Bardziej szczegółowo

ISO 27001 w Banku Spółdzielczym - od decyzji do realizacji

ISO 27001 w Banku Spółdzielczym - od decyzji do realizacji ISO 27001 w Banku Spółdzielczym - od decyzji do realizacji Aleksander Czarnowski AVET Information and Network Security Sp. z o.o. Agenda ISO 27001 zalety i wady Miejsce systemów bezpieczeństwa w Bankowości

Bardziej szczegółowo

Inżynieria Programowania Zarządzanie projektem

Inżynieria Programowania Zarządzanie projektem Inżynieria Programowania Zarządzanie projektem Katedra Informatyki, Politechnika Świętokrzyska w Kielcach Kielce, 12 października 2015 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4

Bardziej szczegółowo

Przepływy danych. Oracle Designer: Modelowanie przepływów danych. Diagramy przepływów danych (1) Diagramy przepływów danych (2)

Przepływy danych. Oracle Designer: Modelowanie przepływów danych. Diagramy przepływów danych (1) Diagramy przepływów danych (2) Przepływy danych Oracle Designer: Modelowanie przepływów danych Cele: zobrazowanie funkcji zachodzących w organizacji, identyfikacja szczegółowych informacji, przetwarzanych przez funkcje, pokazanie wymiany

Bardziej szczegółowo

Faza Określania Wymagań

Faza Określania Wymagań Faza Określania Wymagań Celem tej fazy jest dokładne określenie wymagań klienta wobec tworzonego systemu. W tej fazie dokonywana jest zamiana celów klienta na konkretne wymagania zapewniające osiągnięcie

Bardziej szczegółowo

Analiza i projekt systemu pracy grupowej z zastosowaniem metodyki SCRUM w technologii SharePoint Karolina Konstantynowicz

Analiza i projekt systemu pracy grupowej z zastosowaniem metodyki SCRUM w technologii SharePoint Karolina Konstantynowicz Analiza i projekt systemu pracy grupowej z zastosowaniem metodyki SCRUM w technologii SharePoint Karolina Konstantynowicz Promotor dr inż. Szymon Supernak Warszawa, 22.05.2014 Plan prezentacji 1. Cel i

Bardziej szczegółowo

Jacek Kszczanowicz Politechnika Koszalińska r. Analiza ryzyka

Jacek Kszczanowicz Politechnika Koszalińska r. Analiza ryzyka Nr indeksu: 14051 Analiza ryzyka Niepowodzenie projektów informatycznych jest ich nieodłącznym atrybutem. To czy dany projekt informatyczny zakończy się sukcesem mało kiedy jest pewne. Na każdym jego etapie

Bardziej szczegółowo

Promotor: dr inż. Krzysztof Różanowski

Promotor: dr inż. Krzysztof Różanowski Warszawska Wyższa Szkoła Informatyki Prezentacja do obrony pracy dyplomowej: Wzorcowa polityka bezpieczeństwa informacji dla organizacji zajmującej się testowaniem oprogramowania. Promotor: dr inż. Krzysztof

Bardziej szczegółowo

WARUNKI I ZASADY SERWISU APLIKACJI (OPROGRAMOWANIA UśYTKOWEGO) KRAJOWEGO REJESTRU KARNEGO

WARUNKI I ZASADY SERWISU APLIKACJI (OPROGRAMOWANIA UśYTKOWEGO) KRAJOWEGO REJESTRU KARNEGO Załącznik nr 1 do umowy Nr... z dnia... na serwis aplikacji Krajowego Rejestru Karnego w roku 2008. WARUNKI I ZASADY SERWISU APLIKACJI (OPROGRAMOWANIA UśYTKOWEGO) KRAJOWEGO REJESTRU KARNEGO 1. Wstęp Niniejszy

Bardziej szczegółowo

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0> Wersja [Uwaga: Niniejszy wzór dostarczony jest w celu użytkowania z Unified Process for EDUcation. Tekst zawarty w nawiasach kwadratowych i napisany błękitną kursywą

Bardziej szczegółowo

Wykład 1 Inżynieria Oprogramowania

Wykład 1 Inżynieria Oprogramowania Wykład 1 Inżynieria Oprogramowania Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowaniaiteracyjno-rozwojowy cykl oprogramowania Autor: Zofia Kruczkiewicz System Informacyjny =Techniczny SI

Bardziej szczegółowo

KIERUNKOWE EFEKTY KSZTAŁCENIA

KIERUNKOWE EFEKTY KSZTAŁCENIA KIERUNKOWE EFEKTY KSZTAŁCENIA WYDZIAŁ INFORMATYKI I ZARZĄDZANIA Kierunek studiów: INFORMATYKA Stopień studiów: STUDIA II STOPNIA Obszar Wiedzy/Kształcenia: OBSZAR NAUK TECHNICZNYCH Obszar nauki: DZIEDZINA

Bardziej szczegółowo

Charakterystyka oprogramowania obiektowego

Charakterystyka oprogramowania obiektowego Charakterystyka oprogramowania obiektowego 1. Definicja systemu informatycznego 2. Model procesu wytwarzania oprogramowania - model cyklu Ŝycia oprogramowania 3. Wymagania 4. Problemy z podejściem nieobiektowym

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: moduł specjalności obowiązkowy: Inżynieria oprogramowania Rodzaj zajęć: laboratorium PROJEKT ZESPOŁOWY DYPLOMOWY IO Team Project SE Forma studiów:

Bardziej szczegółowo

Udane wdrożenie systemu IT

Udane wdrożenie systemu IT Udane wdrożenie systemu IT Maciej Guzek CMMS Department Marketing & Sales Manager mguzek@aiut.com.pl To nie takie proste Czego klient potrzebował Co klient zamówił Co zrozumiał analityk Co opisywał projekt

Bardziej szczegółowo

Zdalne monitorowanie i zarządzanie urządzeniami sieciowymi

Zdalne monitorowanie i zarządzanie urządzeniami sieciowymi Uniwersytet Mikołaja Kopernika w Toruniu Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Infomatyki Stosowanej Piotr Benetkiewicz Nr albumu: 168455 Praca magisterska na kierunku Informatyka

Bardziej szczegółowo

Usługa: Audyt kodu źródłowego

Usługa: Audyt kodu źródłowego Usługa: Audyt kodu źródłowego Audyt kodu źródłowego jest kompleksową usługą, której głównym celem jest weryfikacja jakości analizowanego kodu, jego skalowalności, łatwości utrzymania, poprawności i stabilności

Bardziej szczegółowo

Faza strategiczna. Synteza. Analiza. Instalacja. Faza strategiczna. Dokumentacja. kodowanie implementacja. produkt konserwacja

Faza strategiczna. Synteza. Analiza. Instalacja. Faza strategiczna. Dokumentacja. kodowanie implementacja. produkt konserwacja Faza strategiczna określenie wymagań specyfikowanie projektowanie kodowanie implementacja testowanie produkt konserwacja Faza strategiczna Analiza Synteza Dokumentacja Instalacja Faza strategiczna (ang.

Bardziej szczegółowo

Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty

Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty przedmiotu Stopień studiów i forma: Rodzaj przedmiotu Kod przedmiotu Grupa kursów Zaawansowane techniki analizy

Bardziej szczegółowo

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś (często stosowany w praktyce do projektów o niewielkiej złożoności) wymagania specyfikowanie kodowanie

Bardziej szczegółowo

Launch. przygotowanie i wprowadzanie nowych produktów na rynek

Launch. przygotowanie i wprowadzanie nowych produktów na rynek Z przyjemnością odpowiemy na wszystkie pytania. Prosimy o kontakt: e-mail: kontakt@mr-db.pl tel. +48 606 356 999 www.mr-db.pl MRDB Szkolenie otwarte: Launch przygotowanie i wprowadzanie nowych produktów

Bardziej szczegółowo

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat Grzegorz Ruciński Warszawska Wyższa Szkoła Informatyki 2011 Promotor dr inż. Paweł Figat Cel i hipoteza pracy Wprowadzenie do tematu Przedstawienie porównywanych rozwiązań Przedstawienie zalet i wad porównywanych

Bardziej szczegółowo

AKADEMIA GÓRNICZO-HUTNICZA

AKADEMIA GÓRNICZO-HUTNICZA AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki KATEDRA INFORMATYKI Event Visualizator sprawozdanie z przebiegu projektu wersja 1.1 z dnia 15.06.2011 Kierunek,

Bardziej szczegółowo

Projektowanie systemów informatycznych. wykład 6

Projektowanie systemów informatycznych. wykład 6 Projektowanie systemów informatycznych wykład 6 Iteracyjno-przyrostowy proces projektowania systemów Metodyka (ang. methodology) tworzenia systemów informatycznych (TSI) stanowi spójny, logicznie uporządkowany

Bardziej szczegółowo

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15. Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop. 2017 Spis treści Wstęp 15 Podziękowania 23 Listy kontrolne 25 Tabele 27 Rysunki 29 Część I Proces budowy oprogramowania

Bardziej szczegółowo

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką? ROZDZIAŁ1 Podstawy inżynierii oprogramowania: - Cele 2 - Zawartość 3 - Inżynieria oprogramowania 4 - Koszty oprogramowania 5 - FAQ o inżynierii oprogramowania: Co to jest jest oprogramowanie? 8 Co to jest

Bardziej szczegółowo

technologii informacyjnych kształtowanie , procesów informacyjnych kreowanie metod dostosowania odpowiednich do tego celu środków technicznych.

technologii informacyjnych kształtowanie , procesów informacyjnych kreowanie metod dostosowania odpowiednich do tego celu środków technicznych. Informatyka Coraz częściej informatykę utoŝsamia się z pojęciem technologii informacyjnych. Za naukową podstawę informatyki uwaŝa się teorię informacji i jej związki z naukami technicznymi, np. elektroniką,

Bardziej szczegółowo

Nowoczesny Bank Spółdzielczy to bezpieczny bank. Aleksander Czarnowski AVET Information and Network Security Sp. z o.o.

Nowoczesny Bank Spółdzielczy to bezpieczny bank. Aleksander Czarnowski AVET Information and Network Security Sp. z o.o. Nowoczesny Bank Spółdzielczy to bezpieczny bank Aleksander Czarnowski AVET Information and Network Security Sp. z o.o. Bezpieczeństwo nie jest przywilejem banków komercyjnych System prawny na podstawie

Bardziej szczegółowo

2.4.2 Zdefiniowanie procesów krok 2

2.4.2 Zdefiniowanie procesów krok 2 2.4.2 Zdefiniowanie procesów krok 2 Ustalenie mapy procesów wbrew pozorom nie jest takie łatwe. Często organizacje opierają się na obowiązującej strukturze organizacyjnej, a efekt jest taki, Ŝe procesy

Bardziej szczegółowo

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz

Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, Zofia Kruczkiewicz Tematy seminariów wg Roger S. Pressman, Praktyczne podejście do oprogramowania, WNT, 2004 Zofia Kruczkiewicz 1. Przedstaw znaczenie oprogramowania we współczesnym świecie x 1 2. Jaki wpływ na ludzi, komunikację

Bardziej szczegółowo

Maciej Oleksy Zenon Matuszyk

Maciej Oleksy Zenon Matuszyk Maciej Oleksy Zenon Matuszyk Jest to proces związany z wytwarzaniem oprogramowania. Jest on jednym z procesów kontroli jakości oprogramowania. Weryfikacja oprogramowania - testowanie zgodności systemu

Bardziej szczegółowo

Zakład Ubezpieczeń Społecznych Departament Zamówień Publicznych ul. Szamocka 3, 5, 01-748 Warszawa tel: 22 667 17 04, faks: 22 667 17 33

Zakład Ubezpieczeń Społecznych Departament Zamówień Publicznych ul. Szamocka 3, 5, 01-748 Warszawa tel: 22 667 17 04, faks: 22 667 17 33 Zakład Ubezpieczeń Społecznych Departament Zamówień Publicznych ul. Szamocka 3, 5, 01-748 Warszawa tel: 22 667 17 04, faks: 22 667 17 33 993200/370/IN-402/2012 Warszawa, dnia 22.05.2012 r. Informacja dla

Bardziej szczegółowo

Szczegółowy plan szkolenia

Szczegółowy plan szkolenia Szczegółowy plan szkolenia ISTQB Advanced Level Syllabus Test Manager (version 2012) (19 October 2012) Harmonogram zajęć (5 dni szkoleniowych: 9:00 17:00) Dzień 1. 0. Wprowadzenie do syllabusa poziom zaawansowany

Bardziej szczegółowo

In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania

In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania prowadzący: dr inż. Krzysztof Bartecki www.k.bartecki.po.opole.pl Proces tworzenia oprogramowania jest zbiorem czynności i

Bardziej szczegółowo

ŚCIEŻKA: Zarządzanie projektami

ŚCIEŻKA: Zarządzanie projektami ŚCIEŻKA: Zarządzanie projektami Ścieżka dedykowana jest każdej osobie, która chce rozwijać siebie i swoją organizację - w szczególności: Kadrze menedżerskiej i kierowniczej przedsiębiorstw Kierownikom

Bardziej szczegółowo

Diagramu Związków Encji - CELE. Diagram Związków Encji - CHARAKTERYSTYKA. Diagram Związków Encji - Podstawowe bloki składowe i reguły konstrukcji

Diagramu Związków Encji - CELE. Diagram Związków Encji - CHARAKTERYSTYKA. Diagram Związków Encji - Podstawowe bloki składowe i reguły konstrukcji Diagramy związków encji (ERD) 1 Projektowanie bazy danych za pomocą narzędzi CASE Materiał pochodzi ze strony : http://jjakiela.prz.edu.pl/labs.htm Diagramu Związków Encji - CELE Zrozumienie struktury

Bardziej szczegółowo

Świat rzeczywisty i jego model

Świat rzeczywisty i jego model 2 Świat rzeczywisty i jego model Świat rzeczywisty (dziedzina problemu) Świat obiektów (model dziedziny) Dom Samochód Osoba Modelowanie 3 Byty i obiekty Byt - element świata rzeczywistego (dziedziny problemu),

Bardziej szczegółowo

Narzędzia informatyczne wspierające przedsięwzięcia e-commerce

Narzędzia informatyczne wspierające przedsięwzięcia e-commerce Narzędzia informatyczne wspierające przedsięwzięcia e-commerce Zarządzanie projektami e-commerce, Meblini.pl, UE we Wrocławiu Wrocław, 11-03-2018 1. Cykl życia projektu 2. Pomysł / Planowanie 3. Analiza

Bardziej szczegółowo

Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym

Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym konceptualnym modelem danych jest tzw. model związków encji (ERM

Bardziej szczegółowo

Projektowanie BAZY DANYCH

Projektowanie BAZY DANYCH Projektowanie BAZY DANYCH Podstawowe pojęcia Encją jest każdy przedmiot, zjawisko, stan lub pojęcie, czyli każdy obiekt, który potrafimy odróżnić od innych obiektów ( np. pies, rower,upał). Encje podobne

Bardziej szczegółowo

Projekt przejściowy 2016/2017 BARTOSZ JABŁOŃSKI

Projekt przejściowy 2016/2017 BARTOSZ JABŁOŃSKI Projekt przejściowy 2016/2017 BARTOSZ JABŁOŃSKI Kto, co, jak i kiedy Kto? dr inż. Bartosz Jabłoński bartosz.jablonski@pwr.edu.pl s. P0.2, C-16 http://jablonski.wroclaw.pl O co chodzi? Celem przedmiotu

Bardziej szczegółowo

Podstawowe zasady projektowania w technice

Podstawowe zasady projektowania w technice Podstawowe zasady projektowania w technice Projektowanie w technice jest działalnością twórczą z określonym udziałem prac rutynowych i moŝe dotyczyć głównie nowych i modernizowanych: produktów (wyrobów

Bardziej szczegółowo

Procedura zarządzania ryzykiem w Państwowej WyŜszej Szkole Zawodowej w Elblągu

Procedura zarządzania ryzykiem w Państwowej WyŜszej Szkole Zawodowej w Elblągu Procedura zarządzania ryzykiem w Państwowej WyŜszej Szkole Zawodowej w Elblągu Załącznik nr 2 do zarządzenia Celem procedury jest zapewnienie mechanizmów identyfikowania ryzyk zagraŝających realizacji

Bardziej szczegółowo