460 likes | 618 Views
Zarządzanie konfiguracją oprogramowania. Autor: Łukasz Olek. Plan wykładów. Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML, cz. I Język UML, cz. II Metody formalne Wzorce projektowe Zarządzanie konfiguracją Wprowadzenie do testowania
E N D
Zarządzanie konfiguracją oprogramowania Autor: Łukasz Olek
Plan wykładów Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML, cz. I Język UML, cz. II Metody formalne Wzorce projektowe Zarządzanie konfiguracją Wprowadzenie do testowania Automatyzacja wykonywania testów Programowanie Ekstremalne Ewolucja oprogramowania i refaktoryzacja
Wprowadzenie - problemy • Różnorodność artefaktów • specyfikacja wymagań • kod źródłowy • testy jednostkowe • prototyp • projekt • …
Wprowadzenie - problemy • Równoległa, wspólna praca nad fragmentami kodu
Wprowadzenie - problemy • Wiele wersji artefaktów: • identyfikacja, przechowywanie
Wprowadzenie - problemy • Wersje artefaktów, a wersje produktu
Wprowadzenie - problemy • Analizowanie historii: • Kto? Kiedy? Jaka zmiana?
Wprowadzenie - problemy • Praca nad nową wersją systemu i poprawianie błędów w starej
Wprowadzenie • Narzędzia wspomagające zarządzanie konfiguracją oprogramowania: • CVS, Subversion, SourceSafe • Procedury: • kodowania • wydawania nowej wersji • poprawiania defektów • łączenia różnych zmian
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
System CVS • Centralny serwer • Pracownicy „komunikują” się za jego pośrednictwem
Lokalna przestrzeń robocza • Lokalna (prywatna) kopia wybranych elementów repozytorium • Zmiany wprowadzane lokalnie - synchronizowane na żądanie
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
Początkowe pobieranie artefaktów • pobieranie artefaktów(ang. checkout)
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
Cykl aktualizacji/wysyłanie zmian • aktualizacja/wysyłanie zmian(ang. update/commit)
Równoległe uaktualnianie artefaktów up-to-date check failed!
Równoległe uaktualnianie artefaktów • Jak CVS wykonuje komendę update? • zmiany po stronie lokalnej przestrzeni roboczej • zmiany w repozytorium ? *
Równoległe wprowadzanie zmian • Zmiany lokalne i z repozytorium nie nakładają się: Zmiany są łączone Zmiany lokalne Zmiany z repozytorium
Równoległe wprowadzanie zmian • Zmiany lokalne i z repozytorium nakładają się: Konflikt! Użytkownik sam wybiera właściwą wersję Zmiany lokalne Zmiany z repozytorium
Rozwiązywanie konfliktu int main(int argc, char **argv) { if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); <<<<<<< driver.c exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); ======= exit(!!nerr); >>>>>>> 1.6 } Twoja wersja Wersja z repozytorium
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
Nadawanie etykiet • Pozwala posługiwać się nazwami, zamiast numerami wersji: • oznaczanie wydań (np.: R_1.0, R_2.0) • oznaczanie kodu w przypadku większych zmian
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
Rozgałęzianie/łączenie gałęzi • Rozdzielenie pracy nad pewną częścią kodu: • rozwój nowych funkcji/poprawki do starej wersji • dłuższe eksperymenty na kodzie
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wzorce zarządzania konfiguracją
Struktura plików projektu • Różnorodność artefaktów: • kod źródłowy • skompilowany kod • testy jednostkowe • dokumenty • projekt UML • dodatkowe biblioteki • grafika • Jak to ogarnąć?
Struktura plików projektu - Java skompilowany kod - tylko lokalnie! • bin • doc • design • images • lib • src • org.blabla.* • tests dokumentacja UML pliki graficzne wykorzystywane w kodzie dodatkowe biblioteki: *.jar kod źródłowy aplikacji, podział na pakiety kod źródłowy testów jednostkowych
Plan wykładu • Wprowadzenie • Operacje systemu CVS: • pobieranie artefaktów • wysyłanie zmian • aktualizacja • nadawanie etykiet • rozgałęzianie/łączenie gałęzi • Struktura plików projektu • Wybrane wzorce zarządzania konfiguracją
Wybrane wzorce zarządzania konfiguracją • Główna liniaMainline • Linia wydaniaRelease Line • Gałąź przed wydaniemRelease-Prep Codeline • Gałęzie dla zadańBranch per Task
Główna linia (ang. Mainline) • Wiele gałęzi - drzewo może się rozrastać w nieskończoność
Główna linia (ang. Mainline) • Zamiast tego: utrzymuj „gałąź bazową”
Linia wydania (ang. Release Line) • Linia reprezentująca logiczne grupowanie dostarczonej funkcjonalności Poprawki dla klienta wersji 1.0 Wybrana funkcjonalność Nowa funkcjonalność - niestabilna
Gałąź przed wydaniem (ang. Release-Prep Codeline) • Część osób wcześniej skończy pracę nad wersją • Aby ich nie blokować do czasu wydania, stwórz gałąź przed wydaniem
Gałęzie dla zadań (ang. Branch per Task) • Wiele zmian wprowadzanych w ramach dłuższego zadania może tymczasowo naruszyć spójność kodu • Dla większych zadań twórz osobne gałęzie
Podsumowanie • Odpowiednie zarządzanie konfiguracją jest niezbędne do efektywnej pracy zespołowej • Komendy systemu CVS (checkout, update, commit) • rozwiązywanie konfliktów • Wybrane wzorce zarządzania konfiguracją
Literatura • http://cvsbook.red-bean.com/ • Steve Berczuk, Brad Appleton: Software Configuration Management Patterns