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