Oprogramowanie i wykorzystanie stacji roboczych Wykład 2

Transkrypt

Oprogramowanie i wykorzystanie stacji roboczych Wykład 2
Kontrola wersji
Kod ewoluuje. W czasie gdy projekt zmienia sie˛ z prototypu w wersje˛
ostateczna˛ przechodzi przez wiele cykli, w których programiści
badaja˛ nowe trendy, usuwaja˛ błedy
˛ i stabilizuja˛ swoje osiagni
˛ ecia.
˛
Oprogramowanie i wykorzystanie
stacji roboczych
Ewolucja kodu powoduje wiele problemów, które moga˛ być źródłem
konfliktów i dodatkowej pracy, zmniejszajac
˛ w ten sposób
efektywność.
Wykład 2
Jednym z ważniejszych problemów jest możliwość powrotu do starej
wersji.
Dr inż. Tomasz Olas
[email protected]
Równie ważna jest możliwość rejestracji zmian.
Kolejnym problemem jest śledzenie błedów.
˛
Cz˛esto otrzymywany
jest raport o błedzie
˛
w konkretnej wersji programu, podczas gdy jego
kod uległ już zmianie. Czasem można rozpoznać, że bład
˛ został już
usuniety,
˛ ale znacznie cz˛eściej nie ma takiej możliwości.
Instytut Informatyki Teoretycznej i Stosowanej
Politechnika Cz˛estochowska
Wykład 2
Wykład 2 – p. 1/17
Systemy kontroli wersji
Mechanizm automatycznej kontroli wersji
Reczna
˛
kontrola wersji - polega na okresowym tworzeniu kopii
bezpieczeństwa całego projektu. Do plików źródłowych dopisywane
sa˛ komentarze z historia˛ zmian.
Prace˛ z systemem kontroli wersji rozpoczyna sie˛ od rejestracji zbioru
plików źródłowych, to znaczy nakazania systemowi rozpocz˛ecia ich
archiwizacji wraz z historia˛ zmian.
Automatyczna kontrola wersji - polega na stosowaniu systemu
kontroli wersji (ang. version control system - VCS).
Nastepnie
˛
chcac
˛ wprowadzić zmiany do któregoś z plików projektu
należy go wymeldować (ang. check out).
SCCS (CSSC) - powstał w 1980 roku i w chwili obecnej jest już przestarzały.
Po zakończeniu pracy należy plik z powrotem zameldować (ang.
check in), co powoduje dokonanie zmian w archiwum.
RCS - obecnie najszerzej stosowany. Doskonale nadaje sie˛ dla pojedynczych
programistów i małych grup projektowych. Operuje na pojedynczych plikach.
CVS - powstał na poczatku
˛
lat 90 jako front end systemu RCS, ale stosowany przez
niego model kontroli wersji kwalifikował go jako zupełnie odrebny
˛
projekt. Nowe
implementacje nie korzystaja˛ już z RCS. Operuje w przeciwieństwie do RCS na
katalogach, czy też całych projektach.
Subversion - rozwiazuje
˛
problemy zwiazane
˛
z systemem CVS i ma najwieksze
˛
szanse
na jego zastapienie.
˛
Wykład 2 – p. 3/17
Wykład 2
CVS - tworzenie repozytorium
CVS
W przypadku CVS archiwum nazywa sie˛ repozytorium (ang.
repository).
Aby utworzyć repozytorium należy:
Ustawić zmienna˛ CVSROOT na odpowiednia˛ wartość:
Projekt znajdujacy
˛ sie˛ w repozytorium to moduł (ang. module).
export CVSROOT=katalog
Każdy plik w repozytorium ma przypisany numer wersji (ang.
revision number ). Za każdym razem, kiedy plik jest modyfikowany
(czyli zatwierdzane sa˛ zmiany), CVS zmienia (zwieksza)
˛
numer jego
wersji. Podczas dodawania pliku do repozytorium nadawany jest mu
numer 1.1. Pierwsze zatwierdzenie modyfikacji to numer 1.2, kolejne
to 1.3 itd.
Zainicjować cvs:
Numery rewizji ida˛ niezależnie dla każdego pliku. Istnieje możliwość
zaznaczenia, że zbiór plików w konkretnych rewizjach stanowi
wersje˛ pakietu jako całości poprzez symboliczne nazwy zwane
znacznikami (ang. tag).
cvs import modulename vendorname release
cvs init
W katalogu, który podaliśmy zostanie utworzony katalog
CVSROOT zawierajacy
˛ pliki niezbedne
˛
do prawidłowego
funkcjonowania repozytorium.
Utworzenie modułu:
Podstawowym programem systemu CVS jest program o nazwie cvs.
Wykład 2
Wykład 2 – p. 5/17
CVS - przykładowa sesja
Generowanie dokumentacji
Pobranie kopii modułu first:
Istnieje szereg narz˛edzi wspierajacych
˛
proces tworzenia
dokumentacji na podstawie komentarzy umieszczonych
bezpośrednio w plikach źródłowych:
cvs checkout first
Dokonanie zmian w plikach
javadoc
Zatwierdzenie zamian komenda˛ comit:
doc++
cvs commit -R first
doxygen
Doxygen jest systemem dokumentowania kodu dla jezyków
˛
C++, C, Java, IDL (Corba, Microsoft i KDE-DCOP), PHP.
Doxygen został utworzony dla systemu Linux, ale jest
dostepny
˛
również na inne systemy Unix, jak również dla
systemów Windows 9x/NT i Mac OS.
Wykład 2 – p. 7/17
Wykład 2
Doxygen
Doxygen - użycie
Doxygen wspiera tworzenie dokumentów poprzez:
Bezpośrednie generowanie dokumentacji z plików źródłowych.
Dzieki
˛ temu łatwiejsze jest utrzymywanie spójności
dokumentacji z plikami źródłowymi.
Umożliwia generowanie dokumentacji „on-line” (HTML), jak
również plików w formacie L A T E X ze zbioru
udokumentowanych plików źródłowych. Umożliwia również
generowanie plików z dokumentacja˛ w formatach RTF,
(MS-Word), PostScript, PDF, oraz plików pomocy systemu Unix
(man pages).
Doxygen może zostać tak skonfigurowany, że jest możliwe
tworzenie struktury z nieudokumentowanych plików źródłowych.
Relacje pomiedzy
˛
poszczególnymi elementami projektu moga˛
być automatycznie tworzone i wyświetlane w postaci grafu
zależności oraz diagramu dziedziczenia.
Doxygen używa pliku konfiguracyjnego do określenia swoich
ustawień. Każdy projekt powinien posiadać swój własny plik
konfiguracyjny.
Generowanie pliku konfiguracyjnego:
doxygen -g <config-file>
Format pliku konfiguracyjnego:
TAGNAME = VALUE or
TAGNAME = VALUE1 VALUE2 ...
Plik konfiguracyjny może być edytowany „recznie”,
˛
lub poprzez
graficzne narz˛edzie doxywizard.
Uruchamianie programu Doxygen:
doxygen <config-file>
Doxygen może zostać również użyty do tworzenia „normalnych”
dokumentów.
Wykład 2 – p. 9/17
Wykład 2
Doxygen - opcje pliku konfiguracyjnego
Doxygen - dokumentowanie kodu
PROJECT NAME - nazwa projektu dla którego generowana jest
dokumentacja,
Blok dokumentacji jest komentarzem w stylu jezyka
˛
C lub C++ z
dodatkowymi znacznikami.
INPUT - katalogi gdzie znajduja˛ sie˛ pliki źródłowe i nagłówkowe dla
Rozróżnia sie˛ dwa rodzaje opisów:
których bedzie
˛
generowana dokumentacja,
opis skrócony (brief description)
OUTPUT LANGUAGE - jezyk
˛
w jakim ma być wygenerowana
dokumentacja (polski - Polish).
opis szczegółowy (detailed description)
Komentarz umieszczamy zazwyczaj przed opisywana˛ funkcja,
struktura˛ danych itp.
OUTPUT DIRECTORY - katalog w którym zostanie umieszczona
dokumentacja,
HTML OUTPUT - generowana bedzie
˛
dokumentacja w formacie HTML
oraz analogiczne opcje - RTF OUTPUT, LATEX OUTPUT oraz
MAN OUTPUT.
Pierwsze zdanie (do kropki), służacy
˛ jako krótki ogólny opis. Potem
można umieścić troche˛ szczegółów (jeżeli potrzeba). Dobrym
zwyczajem jest opisanie wszystkich parametrów np. funkcji używajac
˛
konstrukcji @param, a zwracana˛ wartość poprzez @return:
@param nazwa opis_parametru
@return opis
Wykład 2 – p. 11/17
Wykład 2
Doxygen - opisy szczegółowe
Doxygen - opisy skrócone
Formaty opisów szczegółowych:
Format opisu skróconego może być jednym z poniższych:
/**
* ... opis szczegółowy ...
*/
/*! \brief opis skrócony
* kontynuacja opisu skróconego
*
* opis szczegółowy
* kontynuacja opisu szczegółowego
*/
/*!
* ... opis szczegółowy ...
*/
/// opis skrócony
/** opis szczegółowy */
/*!
... opis szczegółowy ...
*/
///
/// ... opis szczegółowy ...
///
//!
//!... opis szczegółowy ...
//!
/////////////////////////////////////////////////
/// ... opis szczegółowy ...
/////////////////////////////////////////////////
Wykład 2 – p. 13/17
Doxygen - opis zmiennych
Wykład 2
Doxygen - przykład opisu funkcji
Opis do zmiennych może być umieszczony za deklaracja˛ zmiennej:
int var; /*!< opis szczegółowy */
Przykład:
/**
* Funkcja nic nie robi (opis ogólny). Ta funkcja naprawd˛
e nic nie robi
* (opis szczegółowy).
* @param par1 naprawd˛
e wszystko jedno, co podasz
* @param par2 też nie ma znaczenia
* @return zawsze -18
* @see coś_robi
*/
int nic_nie_robi(int par1, char *par2)
{
return -18;
}
int var; /**< opis szczegółowy */
int var; //!< opis szczegółowy
//!<
int var; ///< opis szczegółowy
///<
int var; //!< opis skrócony
int var; ///< opis skrócony
Opis funkcji może być umieszczony zarówno przy deklaracji, jak
również przy definicji funkcji.
Wykład 2 – p. 15/17
Wykład 2
Doxygen - przykład
/// Opis dla pierwszej klasy
class First
{
};
/// Opis skrócony dla Second
/** Opis szczegółowy dla Second */
class Second: public First
{
public:
/// Opis zmiennej wartosc.
double wartosc;
Second();
};
/// Opis metody przy definicji.
Second::Second()
{
}
Wykład 2 – p. 17/17