Lekcja 5.4: Zarządzanie Konfiguracją (Configuration Management)

W dynamicznym świecie tworzenia oprogramowania, gdzie zmiany są nieuniknione, utrzymanie porządku i kontroli nad wszystkimi elementami projektu jest kluczowe.

Dotyczy to nie tylko kodu źródłowego, ale również wszystkich produktów pracy związanych z testowaniem.

Właśnie tutaj wkracza zarządzanie konfiguracją (Configuration Management - CM).

W tej lekcji przyjrzymy się, czym jest CM w kontekście testowania, dlaczego jest ważne i jak pomaga zapewnić spójność i identyfikowalność w procesie testowym.

Wyobraź sobie, że budujesz skomplikowany model z klocków LEGO.

Masz instrukcję (plan testów), różne rodzaje klocków (przypadki testowe, skrypty), narzędzia (środowisko testowe) i notatki o postępach (wyniki, raporty).

Zarządzanie konfiguracją to system, który pozwala Ci dokładnie wiedzieć, jakiej wersji instrukcji używasz, które klocki zostały już użyte, gdzie są przechowywane, jak są ze sobą połączone i jak śledzić wszelkie zmiany wprowadzane w modelu lub instrukcji.

Bez tego systemu, szybko zapanowałby chaos, a Ty nie byłbyś pewien, czy Twój model jest zgodny z pierwotnym planem.

W tej lekcji, bazując na sylabusie ISTQB Foundation Level v4.0 (sekcja FL-5.4 K2), omówimy:

  • Definicję zarządzania konfiguracją w kontekście testowania.
  • Elementy konfiguracji (Configuration Items - CI) związane z testowaniem.
  • Znaczenie identyfikacji, nadzorowania i śledzenia produktów pracy testowej.
  • Pojęcie konfiguracji bazowej (baseline).
  • Rolę zarządzania konfiguracją w zapewnieniu powtarzalności i identyfikowalności testów.

Zrozumienie i stosowanie zasad zarządzania konfiguracją jest niezbędne do utrzymania kontroli nad procesem testowym, zwłaszcza w złożonych projektach i środowiskach, gdzie wiele elementów ulega ciągłym zmianom.

1. Czym Jest Zarządzanie Konfiguracją w Kontekście Testowania? (FL-5.4 K2)

Sylabus ISTQB definiuje zarządzanie konfiguracją jako „uporządkowany proces umożliwiający identyfikowanie, nadzorowanie i śledzenie produktów pracy”.

W kontekście testowania, te produkty pracy obejmują wszystko, co jest tworzone, używane i modyfikowane w ramach procesu testowego.

Główne cele zarządzania konfiguracją w testowaniu to:

  • Identyfikacja: Jednoznaczne nazwanie i opisanie wszystkich elementów, które podlegają kontroli (elementów konfiguracji).
  • Kontrola (Nadzór): Zarządzanie zmianami wprowadzanymi w elementach konfiguracji, zapewnienie, że zmiany są autoryzowane, udokumentowane i komunikowane.
  • Śledzenie (Status Accounting): Rejestrowanie i raportowanie statusu elementów konfiguracji oraz wprowadzanych w nich zmian na przestrzeni czasu.
  • Audyt (Verification and Audit): Sprawdzanie, czy konfiguracja produktu jest zgodna z wymaganiami i dokumentacją oraz czy proces CM jest przestrzegany.

Dzięki CM zespół testowy może mieć pewność, że testuje właściwą wersję oprogramowania, używając odpowiednich wersji przypadków testowych, w poprawnie skonfigurowanym środowisku, a wyniki testów są jednoznacznie powiązane z konkretną konfiguracją.

2. Elementy Konfiguracji (Configuration Items - CI) w Testowaniu

Element konfiguracji (CI) to dowolny produkt pracy, który jest zarządzany w ramach procesu CM.

W testowaniu, elementami konfiguracji mogą być:

  • Przedmiot testów: Konkretna wersja testowanego oprogramowania, modułu, komponentu.
  • Testware (Produkty pracy testowej):
    • Plany testów
    • Strategie testów
    • Specyfikacje projektowania testów
    • Warunki testowe
    • Przypadki testowe (manualne i automatyczne)
    • Skrypty testowe
    • Dane testowe
    • Procedury testowe
  • Środowisko testowe:
    • Sprzęt (serwery, urządzenia klienckie)
    • Oprogramowanie systemowe (systemy operacyjne, bazy danych, serwery aplikacyjne)
    • Narzędzia testowe (wersje i konfiguracje)
    • Konfiguracja sieci
  • Wyniki testowania:
    • Dzienniki testów (logi)
    • Raporty o defektach
    • Raporty z wykonania testów
    • Raporty postępu i raporty końcowe
  • Dokumentacja związana: Wymagania, specyfikacje, dokumentacja użytkownika (wersje używane jako podstawa testów).

Każdy z tych elementów powinien mieć unikalny identyfikator, przypisaną wersję oraz zdefiniowane relacje z innymi elementami.

Na przykład, konkretny przypadek testowy (CI) może być powiązany z konkretnym wymaganiem (CI) i testować określoną wersję oprogramowania (CI).

Sylabus podkreśla, że w przypadku złożonych elementów konfiguracji, jak środowisko testowe, CM pozwala zarejestrować jego elementy składowe (np. wersje systemu operacyjnego, bazy danych, bibliotek) oraz relacje między nimi.

Jest to kluczowe dla zapewnienia powtarzalności testów – musimy wiedzieć dokładnie, w jakich warunkach test został wykonany.

3. Identyfikacja, Nadzorowanie i Śledzenie

Proces CM opiera się na trzech fundamentalnych działaniach:

  • Identyfikacja: Każdy element konfiguracji (CI) musi być jednoznacznie zidentyfikowany, nazwany i opisany. Nadaje mu się unikalny identyfikator i wersję. Określa się również relacje między CI (np. ten przypadek testowy testuje tę wersję modułu).
  • Nadzorowanie (Kontrola zmian): Wszelkie zmiany wprowadzane do CI muszą być kontrolowane. Obejmuje to proces zgłaszania propozycji zmian, ich ocenę, zatwierdzanie lub odrzucanie, implementację zatwierdzonych zmian oraz weryfikację ich poprawności. Zapewnia to, że zmiany są wprowadzane w sposób uporządkowany i autoryzowany.
  • Śledzenie (Rejestrowanie stanu): Stan każdego CI oraz historia wprowadzanych w nim zmian muszą być rejestrowane i dostępne. Pozwala to na odtworzenie dowolnej poprzedniej konfiguracji oraz śledzenie ewolucji produktu i testware.

Te działania są zazwyczaj wspierane przez specjalistyczne narzędzia do zarządzania konfiguracją (np. systemy kontroli wersji jak Git, SVN; narzędzia do zarządzania cyklem życia aplikacji - ALM).

4. Konfiguracja Bazowa (Baseline)

Konfiguracja bazowa (baseline) to formalnie zatwierdzona i zdefiniowana wersja jednego lub więcej elementów konfiguracji w danym punkcie czasu.

Stanowi ona punkt odniesienia dla dalszych prac i może być zmieniona tylko poprzez formalny proces kontroli zmian.

Przykłady konfiguracji bazowych w testowaniu:

  • Zatwierdzona wersja planu testów.
  • Zestaw przypadków testowych gotowych do wykonania dla danej iteracji.
  • Wersja oprogramowania przekazana do testów akceptacyjnych.
  • Konfiguracja środowiska testowego używana podczas testów wydajności.

Ustanowienie konfiguracji bazowej zapewnia stabilny punkt odniesienia i pomaga w zarządzaniu zmianami.

Wszyscy członkowie zespołu wiedzą, która wersja jest aktualnie obowiązująca.

5. Rola CM w Powtarzalności i Identyfikowalności Testów

Zarządzanie konfiguracją odgrywa kluczową rolę w zapewnieniu dwóch ważnych cech procesu testowego:

  • Powtarzalność (Repeatability): Możliwość ponownego wykonania testu w dokładnie takich samych warunkach i uzyskania tych samych wyników (chyba że w międzyczasie wprowadzono zmiany). CM zapewnia powtarzalność poprzez precyzyjne wersjonowanie i kontrolę wszystkich elementów konfiguracji (oprogramowania, testware, środowiska).
  • Identyfikowalność (Traceability): Możliwość śledzenia powiązań między różnymi produktami pracy. CM, w połączeniu z narzędziami wspierającymi, pozwala na śledzenie relacji np. między wymaganiem, przypadkiem testowym, wykonaniem testu, znalezionym defektem i wersją kodu, w której defekt został naprawiony. Jest to kluczowe dla analizy pokrycia, oceny wpływu zmian i raportowania.

Bez skutecznego zarządzania konfiguracją, trudno jest zagwarantować, że testujemy właściwą rzecz, we właściwy sposób, we właściwym środowisku, a wyniki, które uzyskujemy, są wiarygodne i możliwe do odtworzenia.

Podsumowanie

Zarządzanie konfiguracją jest niezbędnym procesem wspierającym testowanie oprogramowania.

Poprzez identyfikację, nadzorowanie i śledzenie wszystkich kluczowych elementów (przedmiotu testów, testware, środowiska, wyników), CM zapewnia porządek, kontrolę i spójność w dynamicznym środowisku projektowym.

Umożliwia ustanawianie stabilnych punktów odniesienia (konfiguracji bazowych) oraz gwarantuje powtarzalność i identyfikowalność testów.

Chociaż wdrożenie pełnego procesu CM może wydawać się skomplikowane, jego korzyści w postaci zwiększonej kontroli, redukcji błędów i poprawy komunikacji są nieocenione, zwłaszcza w większych i bardziej złożonych projektach.

Najczęściej Zadawane Pytania (FAQ)

Czy zarządzanie konfiguracją to to samo co kontrola wersji?
Kontrola wersji (np. za pomocą Git) jest ważnym elementem zarządzania konfiguracją, ale CM to szerszy proces. Obejmuje on nie tylko wersjonowanie plików, ale także identyfikację elementów, kontrolę zmian, śledzenie statusu i audyt całego systemu konfiguracji, w tym relacji między elementami.
Kto jest odpowiedzialny za zarządzanie konfiguracją w projekcie?
Odpowiedzialność może być różna w zależności od organizacji i projektu. Czasami istnieje dedykowana rola Menedżera Konfiguracji. W innych przypadkach odpowiedzialność jest rozłożona – programiści zarządzają kodem, testerzy testware, administratorzy środowiskami, a kierownik projektu nadzoruje całość. Ważna jest współpraca.
Czy CM jest potrzebne w małych projektach lub zespołach zwinnych?
Tak, chociaż poziom formalności może być mniejszy. Nawet w małych projektach ważne jest wersjonowanie kodu i testware oraz wiedza, która wersja jest testowana. W Agile, gdzie zmiany są częste, dobre praktyki CM (np. użycie systemów kontroli wersji, automatyzacja budowania i wdrażania) są kluczowe dla utrzymania porządku.
Jakie narzędzia wspierają zarządzanie konfiguracją?
Istnieje wiele narzędzi: systemy kontroli wersji (Git, SVN), narzędzia do budowania i ciągłej integracji (Jenkins, GitLab CI, GitHub Actions), narzędzia do zarządzania repozytoriami (Artifactory, Nexus), narzędzia ALM (Jira, Azure DevOps), a także dedykowane systemy CM (np. Ansible, Chef, Puppet dla infrastruktury).
Co się stanie, jeśli zaniedbamy zarządzanie konfiguracją?
Zaniedbanie CM może prowadzić do wielu problemów: testowanie niewłaściwej wersji oprogramowania, używanie nieaktualnych przypadków testowych, niemożność odtworzenia błędów, konflikty między zmianami, utrata ważnych danych, chaos w dokumentacji, trudności w audycie i ogólny brak kontroli nad projektem.
Czy dane testowe też powinny podlegać zarządzaniu konfiguracją?
Tak, zwłaszcza jeśli dane testowe są złożone, trudne do odtworzenia lub mają kluczowe znaczenie dla powtarzalności testów. Wersjonowanie danych testowych lub skryptów generujących te dane jest dobrą praktyką, aby zapewnić spójność między wykonaniami testów.
Jak CM wiąże się z zarządzaniem defektami?
CM jest kluczowe dla efektywnego zarządzania defektami. Raport o defekcie powinien zawierać informacje o wersji oprogramowania i środowisku (elementach konfiguracji), w których defekt wystąpił. Pozwala to programistom na odtworzenie problemu, a testerom na weryfikację poprawki w odpowiedniej konfiguracji.
Czy tworzenie konfiguracji bazowej spowalnia projekt?
Proces formalnego zatwierdzania konfiguracji bazowej może wydawać się dodatkowym krokiem, ale w dłuższej perspektywie często oszczędza czas, zapobiegając chaosowi i błędom wynikającym z pracy na niestabilnych lub niezatwierdzonych wersjach. Zapewnia stabilny fundament dla kolejnych etapów pracy.
Co to jest identyfikowalność (traceability) w kontekście CM?
Identyfikowalność to możliwość śledzenia powiązań między różnymi elementami konfiguracji przez cały cykl życia projektu. Na przykład, możliwość powiązania wymagania z przypadkiem testowym, wynikiem testu, zgłoszonym defektem i wersją kodu, która go naprawia. CM dostarcza mechanizmów wersjonowania i relacji, które to umożliwiają.
Jak zacząć wdrażać CM w projekcie testowym?
Zacznij od podstaw: zidentyfikuj kluczowe elementy konfiguracji (kod, testware), wprowadź system kontroli wersji (np. Git) dla tych elementów, ustal zasady nazewnictwa i wersjonowania. Następnie stopniowo rozszerzaj proces o kontrolę zmian, zarządzanie środowiskami i śledzenie statusu, wykorzystując odpowiednie narzędzia.

Przykładowe Pytania Egzaminacyjne

Pytanie 1 (K1): Które z poniższych jest głównym celem zarządzania konfiguracją?

  • a) Wykonywanie testów wydajnościowych.
  • b) Identyfikowanie, nadzorowanie i śledzenie produktów pracy.
  • c) Pisanie przypadków testowych.
  • d) Raportowanie postępu projektu do kierownictwa.

Poprawna odpowiedź: b (Zarządzanie konfiguracją koncentruje się na identyfikacji, kontroli zmian i śledzeniu statusu elementów konfiguracji, czyli produktów pracy.)

Pytanie 2 (K1): Co to jest konfiguracja bazowa (baseline)?

  • a) Pierwsza wersja oprogramowania stworzona w projekcie.
  • b) Formalnie zatwierdzona wersja jednego lub więcej elementów konfiguracji w danym punkcie czasu.
  • c) Lista wszystkich defektów znalezionych w danej wersji.
  • d) Środowisko testowe używane do testów regresji.

Poprawna odpowiedź: b (Konfiguracja bazowa to stabilny, zatwierdzony punkt odniesienia dla dalszych prac, który może być zmieniony tylko przez formalny proces kontroli zmian.)

Pytanie 3 (K2): Dlaczego zarządzanie konfiguracją jest ważne dla powtarzalności testów?

  • a) Ponieważ pomaga znaleźć więcej defektów.
  • b) Ponieważ zapewnia, że testy są wykonywane przez tych samych testerów.
  • c) Ponieważ pozwala precyzyjnie kontrolować wersje oprogramowania, testware i środowiska, umożliwiając odtworzenie warunków testu.
  • d) Ponieważ automatyzuje proces raportowania wyników testów.

Poprawna odpowiedź: c (Powtarzalność testów wymaga możliwości odtworzenia dokładnych warunków wykonania, co jest możliwe dzięki wersjonowaniu i kontroli wszystkich elementów konfiguracji przez CM.)

Pytanie 4 (K1): Który z poniższych elementów jest typowym elementem konfiguracji (CI) w testowaniu?

  • a) Umiejętności testera.
  • b) Budżet projektu testowego.
  • c) Wersja używanego skryptu testowego.
  • d) Opinia klienta o produkcie.

Poprawna odpowiedź: c (Skrypty testowe są produktem pracy testowej (testware) i jako takie podlegają zarządzaniu konfiguracją, w tym wersjonowaniu.)