Manuals

Integracja z systemami śledzenia błędów / śledzenia problemów

Bardzo często w rozwoju oprogramowania zmiany powinny być związane z konkretnym błędem lub ID problemu. Użytkownicy systemów śledzenia błędów (trackerów problemów) chcieliby powiązać zmiany wykonane w Subversion z określonym ID w ich systemie śledzenia błędów. Większość trackerów przewiduje zatem dołączenie skryptu przechwytującego pre-commit, który przetwarza opisy zmian by znaleźć ID błędu, z którym wiąże się zatwierdzenie. Jest to nieco podatne na błędy, ponieważ opiera się na poprawnym wprowadzeniu opisu zmiany przez użytkownika, by skrypt pre-commit mógł przetworzyć go poprawnie.

TortoiseSVN wspomaga użytkownika na dwa sposoby:

  1. Gdy użytkownik wprowadzi opis zmiany, dobrze zdefiniowana linia, zawierająca numer wydania związanego z zatwierdzeniem może zostać dodana automatycznie. Zmniejsza to ryzyko, że użytkownik wpisze numer wydania w taki sposób, że narzędzie śledzenia błędów nie będzie w stanie poprawnie go przeanalizować.

    Lub TortoiseSVN może wyróżnić część wpisanego opisu zmiany, który jest uznawany przez tracker problemów. W ten sposób użytkownik wie, że komunikat w dzienniku może być przetworzony prawidłowo.

  2. Gdy użytkownik przegląda opisy zmian, TortoiseSVN tworzy połączenie z każdego ID błędu w opisie zmiany, który uruchamia przeglądarkę do wskazanego błędu.

Dodawanie numerów wydań do opisów zmian

Możecie zintegrować wybrane narzędzie śledzenia błędów w TortoiseSVN. Aby to zrobić, musicie zdefiniować kilka właściwości, które zaczynają się bugtraq:. Muszą one być ustawione na folderach: („Ustawienia projektu”)

Rysunek 4.70. Okno dialogowe atrybutów bugtraq

Okno dialogowe atrybutów bugtraq


kiedy edytujecie atrybuty bugtraq używany jest specjalny edytor atrybutu w celu ułatwienia ustawienia odpowiednich wartości.

Istnieją dwa sposoby integracji TortoiseSVN z trackerami problemów. Jednym z nich jest oparty na prostych ciągach znaków, drugi jest oparty na wyrażeniach regularnych. Atrybuty używane przez oba przypadki są:

bugtraq:url

W atrybucie tym należy ustawić adres URL narzędzia śledzenia błędów. Należy prawidłowo enkodowanym URI i zawierać %BUGID%. %BUGID% jest zastępowany numerem, który został wpisany. Pozwala to TortoiseSVN wyświetlić link w oknie dziennika, więc jeśli szukacie w dzienniku wersji można przejść bezpośrednio do narzędzia śledzenia błędów. Nie musicie podawać tego atrybutu, ale TortoiseSVN pokaże tylko numer wydania, a nie link do niego. Np. projekt TortoiseSVN używa http://issues.tortoisesvn.net/?do=details&id=%BUGID%.

Można również używać względnych adresów URL zamiast bezwzględnych. Jest to przydatne, gdy tracker problemów jest w tej samej domenie/serwerze jak repozytorium kodu źródłowego. W przypadku, gdy nazwa domeny się nie zmienia, nie musicie dostosować atrybutu bugtraq:url. Istnieją dwa sposoby na określenie względnego adresu URL:

If it begins with the string ^/ it is assumed to be relative to the repository root. For example, ^/../?do=details&id=%BUGID% will resolve to https://tortoisesvn.net/?do=details&id=%BUGID% if your repository is located on https://tortoisesvn.net/svn/trunk/.

A URL beginning with the string / is assumed to be relative to the server's hostname. For example /?do=details&id=%BUGID% will resolve to https://tortoisesvn.net/?do=details&id=%BUGID% if your repository is located anywhere on https://tortoisesvn.net.

bugtraq:warnifnoissue

Ustawcie go na true, jeśli chcecie by TortoiseSVN ostrzegał o pustym numerze wydania w polu tekstowym. Prawidłowe wartości to true/false. Jeśli nie zdefiniowana, zakładana jest false.

Numer zgłoszenia w polu tekstowym

W prostym podejściu, TortoiseSVN pokazuje użytkownikowi oddzielne pole gdzie mona wprowadzić ID błędu. Następnie osobna linia jest dołączona na początku/końcu do opisu zmiany wprowadzonego przez użytkownika.

bugtraq:message

Ten atrybut uaktywnia system śledzenia błędów w trybie pola wprowadzania. Jeśli ten atrybut jest ustawiony, to TortoiseSVN poprosi, aby wprowadzić numer wydania podczas zatwierdzania zmiany. Jest używany, aby dodać wiersz na końcu opisu zmiany. Musi on zawierać %BUGID%, który zastępowany jest numerem zatwierdzenia. Gwarantuje to, że dziennik zatwierdzeń zawiera odniesienie do numeru wydania, które jest zawsze w spójnym formacie i może być analizowane przez narzędzia śledzenia błędów aby skojarzyć numer wydania z danym zatwierdzeniem. Jako przykład można użyć Issue : %BUGID%, ale to zależy od wybranego narzędzia.

bugtraq:label

Ten tekst jest wyświetlany przez TortoiseSVN w oknie dialogowym zatwierdzenia jako etykieta pola edycji, w którym należy wpisać numer wydania. Jeśli nie jest ustawiony, będzie wyświetlany ID błędu / Nr zgłoszenia:. Należy pamiętać jednak, że okno nie będzie dopasowane do tego zapisu, dlatego należy utrzymać rozmiar etykiety poniżej 20-25 znaków.

bugtraq:number

Jeśli jest ustawiony na true tylko cyfry są dozwolone w polu tekstowym numeru wydania. Wyjątkiem jest przecinek, więc można wpisać kilka numerów oddzielonych przecinkiem. Prawidłowe wartości to true/false. Jeśli nie zdefiniowany, zakładana jest true.

bugtraq:append

Ten atrybut określa, czy ID błędu jest dołączany (true) na końcu wiadomości dziennika lub włożona (false) na początku wiadomości dziennika. Prawidłowe wartości to true/false. Jeśli nie zdefiniowana, zakłada się true, więc dotychczasowe projekty nie są uszkadzane.

Numery wydań przy użyciu wyrażeń regularnych

W podejściu wyrażeń regularnych, TortoiseSVN nie pokazuje oddzielnego pola wprowadzania, ale oznacza część opisu zmiany wprowadzonego przez użytkownika, który jest rozpoznawany przez tracker problemów. Jest to wykonywane, gdy użytkownik zapisuje opis zmiany w dzienniku. Oznacza to także, że ID błędu może być w dowolnym miejscu w wiadomości dziennika! Metoda ta jest znacznie bardziej elastyczna i została użyta w samym projekcie TortoiseSVN.

bugtraq:logregex

Ten atrybut uaktywnia system śledzenia błędów w trybie Regeks. Zawiera pojedyncze wyrażenie regularne lub dwa wyrażenia regularne oddzielone znakiem nowej linii.

Jeśli są ustawione dwa wyrażenia, to pierwsze jest używane jako filtr wstępny do znalezienia wyrażeń, które zawierają identyfikatory błędu. Drugie wyrażenie następnie wyciąga odsłonięte identyfikatory błędu z wyniku pierwszego regeksa. To pozwala na użycie listy identyfikatorów błędów i wyrażeń języka naturalnego, jeśli chcesz. Można na przykład wpisać kilka błędów i to zawrzeć ciąg taki jak: Ta zmiana rozwiązuje problemy # 23, # 24 i # 25 .

Jeśli chcecie wychwycić identyfikatory błędów, użyte w wypowiedzi w powyższej wiadomości dziennika, można użyć następujących ciągów regeks, które są używane przez projekt TortoiseSVN: [Ip]roblemy?:?(\s*(,|i)?\s*#\d+)+ i (\d+).

Pierwsze wyrażenie wybiera problemy # 23, # 24 i # 25 z opisu zmiany. Drugi regeks wyciąga zwykłe liczby dziesiętne z wyjścia pierwszego regeksu, więc zwróci 23, 24 i 25 by ich użyć jako identyfikatorów błędu.

Rozsupłajmy nieco pierwsze wyrażenie, musi zaczynać się od słowa problem, możliwe z dużej litery. I może być zakończone opcjonalnym y (więcej niż jeden problem) i ewentualnie dwukropkiem. Za nim jest jedna lub więcej grup każda ma zero lub więcej wiodących białych znaków, opcjonalny przecinek lub i oraz opcjonalnie spacje. W końcu jest obowiązkowe # i obowiązkowa liczba dziesiętna.

Jeśli tylko jedno wyrażenie jest ustawione, to odsłonięte identyfikatory błędu muszą być dopasowany do grup ciągu regex. Przykład: [Pp]roblem(?:y) #?(\d+) Ta metoda jest wymagana przez kilka trackerów problemów, np. trac, ale trudniej jest zbudować wyrażenie. Zalecamy używanie tej metody wyłącznie, jeśli w dokumentacja systemu śledzenia błędów to zaleca.

Jeśli nie jesteście zaznajomieni z wyrażeniami regularnymi, prosimy spojrzeć na wprowadzenie na https://en.wikipedia.org/wiki/Regular_expression oraz dokumentację online i samouczek na http://www.regular-expressions.info/.

Nie zawsze łatwo jest uzyskać prawidłowy regeks, zatem aby pomóc w tym wprowadzono okno dialogowe testu dostępne z okna atrybutu bugtraq. Kliknijcie przycisk na prawo od pól edycji w celu przywołania go. Można w nim wpisać testowany tekst, i zmienić każdy regeks, aby zobaczyć wyniki. Jeśli wyrażenie jest nieprawidłowe, tło pola edycji zmienia się na czerwone.

Jeśli zarówno atrybut bugtraq:message jak i bugtraq:logregex są ustawiane, logregex ma pierwszeństwo.

Podpowiedź

Nawet jeśli nie masz trackera problemów z przechwyceniem pre-commit parsującym opis zmiany, nadal można korzystać z niego, aby przekształcić zagadnienia wymienione w opisie zmiany na linki!

I nawet jeśli nie potrzebujecie linków, numery wydań pojawią się jako osobna kolumna w oknie dziennika, co ułatwia znalezienie zmian, które odnoszą się do konkretnego wydania.

Niektóre atrybuty tsvn: wymagają wartości true/false. TortoiseSVN rozumie także yes jako synonim true i no jako synonim false.

Ustawienie atrybutów dla folderów

Te atrybuty muszą być ustawione na folderach by system działał poprawnie. Podczas zatwierdzenia pliku lub folderu atrybuty są odczytywane z tego folderu. Jeżeli atrybuty nie są tam ustawione, TortoiseSVN będzie przeszukiwać w górę drzewo folderów, aby je znaleźć, dopóki nie dotrze do folderu bez informacji o wersji albo korzenia drzewa (np. C:\). Jeśli możecie być pewni, że każdy użytkownik pobiera tylko np. z trunk/ a nie z któregoś folderów podrzędnych, to wystarczy jeśli ustawicie atrybuty na trunk/. Jeśli nie możemy być pewni, należy ustawić atrybuty rekurencyjnie dla każdego podkatalogu. Atrybut ustawiony głębiej w hierarchii projektu zastępuje ustawienia na wyższych poziomach (bliżej trunk/).

Od wersji 1.8 TortoiseSVN i Subversion używa tak zwanych atrybutów dziedziczonych, co oznacza że atrybut ustawiony na folderze jest automatycznie domyślnie ustawiany w folderach podrzędnych. Nie ma zatem potrzeby ustawiania zmiennej nigdzie poza folderem głównym.

Tylko do atrybutów projektu, czyli tsvn:, bugtraq: i webviewer: można użyć pola wyboru Rekursywne, aby ustawić atrybut do wszystkich podkatalogów w hierarchii, bez jednoczesnego ustawienia na wszystkich plikach.

Przy dodawaniu nowych podfolderów do kopii roboczej za pomocą TortoiseSVN, wszelkie atrybuty projektu obecne w folderze nadrzędnym będą również automatycznie dodawane do nowego folderu podrzędnego.

Brak informacji o trackerze problemów z przeglądarki repozytorium

Ponieważ integracja z systemami śledzenia błędów zależy od dostępu do atrybuitów Subversion, zobaczycie wyniki tylko podczas oglądania folderów pobranych do kopii roboczej. Wczytywanie atrybutów zdalnie stanowi powolną operację, więc nie będzie widać wyników działania tej funkcji w przeglądarce repozytorium, chyba że zacznie się przeglądanie na kopii roboczej. Jeśli uruchomi się przeglądarkę repozytorium wprowadzając adres URL repozytorium, nie zobaczy się tej funkcji.

Z tego samego powodu, właściwości projektu nie zostaną przekazane automatycznie, gdy folder podrzędny jest dodawany za pomocą przeglądarki repo.

Ta integracja z systemem śledzenia błędów nie jest ograniczona tylko do TortoiseSVN; może być wykonana z dowolnym klientem Subversion. By uzyskać więcej informacji, należy przeczytać Issue Tracker Integration Specification z repozytorium źródłowego TortoiseSVN. („Licencja” wyjaśnia, jak uzyskać dostęp do repozytorium.)

Pobieranie informacji z trackera problemów

Poprzednia część poświęcona była dodawaniu informacji o wydaniu do opisów zmian. Ale co, jeśli chcecie uzyskać informacje od trackera problemów? Okno dialogowe zatwierdzenia posiada interfejs COM, który pozwala na integrację zewnętrznych programów mogących łączyć się z trackerem. Zazwyczaj wykonane będzie zapytanie do trackera, aby uzyskać listę przypisanych do Was otwartych zagadnień, tak aby można było wybrać zagadnienia, które są przedmiotem niniejszego zatwierdzenia.

Taki interfejs jest oczywiście bardzo specyficzny dla systemu śledzenia błędów, więc nie możemy dostarczyć tej części, a opis jak stworzyć taki program wykracza poza zakres tego podręcznika. Definicję interfejsu i próbki wtyczek w C# i C++/ATL można uzyskać z folderu contrib w repozytorium TortoiseSVN. („Licencja” wyjaśnia, jak uzyskać dostęp do repozytorium.) Podsumowanie API znajduje się również w Rozdział 7, Interfejs IBugtraqProvider. Innym (roboczym) przykładem wtyczki np. w C # jest Gurtle, który implementuje wymagany interfejs COM do współpracy z trackerem wydań Google Code.

Dla celów ilustracji, załóżmy, że administrator systemu pod zapewnił dostęp do wtyczki trackera problemów, które masz zainstalowane oraz zostały już skonfigurowane niektóre z kopii roboczych do korzystania z wtyczki w oknie ustawień TortoiseSVN. Po otwarciu okna dialogowego zatwierdzenia z kopii roboczej, do której wtyczka została przypisana, pojawi się nowy przycisk w górnej części okna.

Rysunek 4.71. Przykładowe okno dialogowe zapytania trackera problemów

Przykładowe okno dialogowe zapytania trackera problemów


W tym przykładzie można wybrać jedno lub więcej otwartych zagadnień. Wtyczka może wtedy wygenerować specjalnie sformatowany tekst, który dodaje do wiadomości dziennika.

TortoiseSVN homepage