Podcast o Dokumentacja oprogramowania i jej zasady

Dokumentacja oprogramowania i jej zasady: Przewodnik dla studentów

Podcast

Dokumentacja oprogramowania i jej zasady0:00 / 13:02
0:001:00 zbývá
Tomáš...czyli najlepszy programista na świecie napisze genialny kod, ale jeśli nie doda do niego ani linijki wyjaśnienia, to tak naprawdę jest to prawie bezużyteczne?
KarolínaDokładnie tak! To jak wynaleźć najlepszy silnik na świecie, a potem wyrzucić instrukcję obsługi. Nikt go nie naprawi, nikt go nie ulepszy i nikt nie wie, jak go używać!

Dokumentacja oprogramowania i jej zasady

Délka: 13 minut

Přepis

Tomáš: ...czyli najlepszy programista na świecie napisze genialny kod, ale jeśli nie doda do niego ani linijki wyjaśnienia, to tak naprawdę jest to prawie bezużyteczne?

Karolína: Dokładnie tak! To jak wynaleźć najlepszy silnik na świecie, a potem wyrzucić instrukcję obsługi. Nikt go nie naprawi, nikt go nie ulepszy i nikt nie wie, jak go używać!

Tomáš: To świetne porównanie! Witajcie w Studyfi Podcast, gdzie dziś zagłębimy się w świat inżynierii oprogramowania.

Karolína: No to przejdźmy od razu do rzeczy. Sporo ludzi uważa, że pisanie komentarzy w kodzie to strata czasu. „Przecież wiem, co napisałem” – mówią sobie.

Tomáš: Tak, znam to. „Mój kod przecież sam się tłumaczy.” Jasne…

Karolína: Dokładnie. Tyle że to działa tylko do momentu, aż odejdziesz od projektu na tydzień. Albo wystarczy urlop. Potem wracasz, patrzysz na swój własny kod i pytasz: co autor miał na myśli?

Tomáš: A przecież ten autor to ty sam! To zdarzyło mi się więcej razy, niż bym chciał przyznać.

Karolína: To zdarza się każdemu. A to tylko jeden powód. Dzisiejsze oprogramowanie to praca zespołowa. Komentarze to wiadomości dla twoich kolegów, żeby mogli kontynuować twoją myśl. Bez nich jest to prawie niemożliwe.

Tomáš: A co jeśli chcę użyć mojego kodu jako biblioteki dla innych? Czyli dać im narzędzie, ale nie pokazywać, jak dokładnie działa w środku.

Karolína: Świetna uwaga! W takim przypadku wysokiej jakości dokumentacja jest absolutnie kluczowa. Bez niej twoja wspaniała biblioteka byłaby praktycznie bezużyteczna.

Tomáš: No dobrze, więc musimy dokumentować. Czy to znaczy, że do każdego projektu muszę napisać setki stron tekstu? Brzmi jak koszmar.

Karolína: Wcale nie! I to jest w tym piękne. Poziom dokumentacji różni się w zależności od projektu. To nie jest żaden dogmat. Chodzi o efektywność.

Tomáš: Co masz na myśli?

Karolína: Wyobraź sobie, że pracujesz w małym zespole, wszyscy siedzicie w jednym pokoju i rozwijacie prostą aplikację. Domena jest znana. W takim przypadku jako dokumentacja architektury może wam wystarczyć zdjęcie szkicu z tablicy.

Tomáš: Naprawdę? Tylko zdjęcie z telefonu?

Karolína: Dokładnie tak. Czemu nie, jeśli to ma sens dla wszystkich i oszczędza czas? Ale teraz wyobraź sobie odwrotność. Duży, rozproszony zespół, nowa, skomplikowana technologia, nieznany obszar... Tam już będziesz potrzebować znacznie więcej.

Tomáš: Na przykład słownik pojęć, szczegółowe modele, jak komponenty komunikują się ze sobą i tak dalej?

Karolína: Dokładnie. Celem nie jest stworzenie jak największej ilości dokumentacji, ale właściwej dokumentacji dla danego projektu.

Tomáš: Dobrze, powiedzmy, że mamy bardziej złożony projekt. Co konkretnie powinniśmy uwzględnić w dokumentacji architektury?

Karolína: Powinniśmy uwzględnić kilka podstawowych widoków systemu. Po pierwsze, widok statyczny – z jakich części składa się aplikacja. Możesz to sobie wyobrazić jako plan budynku. Tutaj są klasy, tutaj są pakiety.

Tomáš: Rozumiem. A dalej?

Karolína: Po drugie, zachowanie dynamiczne. Czyli jak te poszczególne części komunikują się ze sobą. To tak jakby obserwować, jak ludzie w tym budynku przechodzą z pokoju do pokoju. Do tego świetnie nadają się na przykład diagramy sekwencji z UML.

Tomáš: A co z perspektywą użytkownika? Jego przecież nie interesuje, jakie mamy klasy.

Karolína: Dokładnie! To jest trzeci kluczowy widok. Do tego służą tak zwane „use case”, czyli przypadki użycia. One opisują, co system robi z perspektywy użytkownika, jakie funkcje mu oferuje. To jest widok funkcjonalny.

Tomáš: Czyli mamy różne modele, różne widoki... Czy nie może się zdarzyć, że będziemy mieli tego za dużo? Że w tej dokumentacji w końcu się pogubimy?

Karolína: Może, i to jest ogromne ryzyko! Im więcej masz dokumentacji i im w więcej miejscach powtarzasz te same informacje, tym więcej pracy masz z jej aktualizacją.

Tomáš: A tym większa szansa, że gdzieś będzie błąd lub niespójność. W jednym dokumencie będzie wersja A, w drugim wersja B.

Karolína: Dokładnie tak! Dlatego ja osobiście preferuję minimalistyczne, efektywne podejście. Istnieją też bardzo naukowe metody, na przykład z Software Engineering Institute, które patrzą na dokumentację prawie jak na osobną dyscyplinę naukową.

Tomáš: Czyli mniej znaczy czasem więcej, jeśli nie chcesz skończyć z dokumentacją, która jest dłuższa i bardziej skomplikowana niż sam kod?

Karolína: Dokładnie to ująłeś. Celem jest zrozumiałość i efektywność, a nie stosy papieru.

Tomáš: To wszystko brzmi jak mnóstwo pracy. Czy istnieją jakieś narzędzia, które ułatwiłyby nam tę, przyznajmy, czasem nieprzyjemną pracę?

Karolína: Oczywiście. Nie musimy wszystkiego pisać ręcznie. Istnieją świetne narzędzia, które potrafią generować dokumentację bezpośrednio z kodu źródłowego. Na przykład Java ma narzędzie o nazwie JavaDoc.

Tomáš: Czyli jeśli piszę komentarze w odpowiedni sposób bezpośrednio w kodzie, program sam mi z tego potem stworzy ładną dokumentację?

Karolína: Dokładnie tak! To jeden z najefektywniejszych sposobów. Kolejną technologią, która w tym bardzo pomaga, jest XML. Ale o tym opowiemy więcej na przykład następnym razem.

Tomáš: Dobrze, więc omówiliśmy projekt i specyfikację... ale teraz przychodzi mi do głowy jedna rzecz, którą programiści, których znam, absolutnie uwielbiają. Dokumentacja.

Karolína: Tak, strzał w dziesiątkę! Poprosić programistę o napisanie dokumentacji to chyba jak poprosić kota, żeby wziął kąpiel. Po prostu nie chcą tego robić.

Tomáš: To świetne porównanie! Ale dlaczego to jest właściwie takie ważne, skoro wszyscy tego tak nienawidzą?

Karolína: Bo oprogramowanie nigdy nie żyje w próżni. Nie robimy tego tylko dla siebie. Wyobraź sobie to tak... zespół utrzymania potrzebuje wiedzieć, jak system jest zbudowany, żeby móc go naprawić. Testerzy z kolei muszą wiedzieć, co dokładnie system ma robić, żeby mogli sprawdzić, czy robi to prawidłowo.

Tomáš: I oczywiście klienci...

Karolína: Dokładnie! Klienci potrzebują instrukcji obsługi, żeby wiedzieli, w co mają klikać. Każda rola potrzebuje innego widoku, innego typu informacji. Dokumentacja to ten most między nimi.

Tomáš: Dobrze, to ma sens. Czyli musimy mieć stosy papierów i dziesiątki dokumentów dla każdego projektu?

Karolína: Wcale nie! I to jest kluczowe. W świecie agile obowiązuje zasada, że forma nie jest tak ważna jak treść. Nie chodzi o to, żeby mieć metrowe stosy papieru, ale o to, czy w ogóle mamy tę informację i czy ją udostępniamy.

Tomáš: Czyli mniej znaczy czasem więcej?

Karolína: Dokładnie. W przypadku małego zespołu, który siedzi w jednym pokoju i wszyscy wiedzą, nad czym pracują, wystarczy na przykład kilka diagramów na tablicy i dobrze skomentowany kod. Natomiast w przypadku ogromnego międzynarodowego projektu z dziesiątkami zespołów... tam już potrzebujemy bardziej formalnej i szczegółowej dokumentacji.

Tomáš: Czyli zależy od kontekstu. Nie ma jednego uniwersalnego rozwiązania dla wszystkich.

Karolína: Bingo! To jest dokładnie to. Celem jest posiadanie *wystarczającej* dokumentacji, a nie *maksymalnej*. Chcemy efektywności, a nie biurokracji.

Tomáš: Fajnie, to rozumiem. Czy istnieją jakieś narzędzia, które ułatwiłyby nam tę niepopularną pracę?

Karolína: Oczywiście! Programiści są sprytni i leniwi, więc wymyślili sposoby, jak to zautomatyzować. Świetnym przykładem jest JavaDoc. To narzędzie dla języka Java.

Tomáš: Jak to działa?

Karolína: Prosto. Piszesz komentarze bezpośrednio w kodzie według określonych zasad. Potem uruchamiasz narzędzie JavaDoc i ono automatycznie generuje ci z tych komentarzy ładną, przejrzystą dokumentację techniczną w formacie HTML. Nie musisz nic pisać dwa razy.

Tomáš: To brzmi świetnie! A co z jakimiś ogólniejszymi standardami? Coś jak... przepis na dobrą dokumentację?

Karolína: Istnieje. Na przykład standard IEEE 1063. On w zasadzie mówi, co powinna minimalnie zawierać wysokiej jakości dokumentacja użytkownika. Jaką ma mieć strukturę, format, że musi być kompletna, dokładna... To taka wskazówka, żeby o niczym ważnym nie zapomnieć.

Tomáš: Czyli nie musimy na nowo wymyślać koła.

Karolína: Dokładnie. Możemy oprzeć się na sprawdzonych praktykach.

Tomáš: Wspomniałaś, że z JavaDocem nie musimy pisać rzeczy dwa razy. To chyba główna myśl, prawda?

Karolína: Zdecydowanie! Zasada ponownego użycia jest tutaj absolutnie kluczowa. Nie chcemy tworzyć dokumentów, które potem tylko leżą odłogiem. Staramy się wykorzystać to, co już mamy.

Tomáš: Jak na przykład co konkretnie?

Karolína: Pamiętasz, jak rozmawialiśmy o scenariuszach use case, gdzie opisujemy, jak użytkownik wchodzi w interakcję z systemem? Na przykład wypłata pieniędzy z bankomatu.

Tomáš: Jasne, te kroki, które się dzieją.

Karolína: Więc dokładnie te tekstowe scenariusze możesz wziąć, lekko je zmodyfikować, dodać kilka obrazków i masz gotowy rozdział do instrukcji obsługi. Zaoszczędziłeś mnóstwo pracy i zapewniłeś, że podręcznik odpowiada pierwotnym wymaganiom.

Tomáš: Wow, to sprytne. Czyli dokumentacja tak naprawdę nie musi być takim koszmarem. Chodzi raczej o sprytne podejście i wykorzystanie tego, co już istnieje.

Karolína: Dokładnie tak. To kolejny element układanki inżynierii oprogramowania. A skoro już jesteśmy przy układaniu... kolejnym kluczowym elementem jest sama implementacja i testowanie, którym przyjrzymy się następnym razem.

Tomáš: Czyli omówiliśmy, jak HTML nadaje strukturę stronie internetowej dla ludzi. Ale co jeśli potrzebujemy, żeby komputery też rozumiały znaczenie tych danych?

Karolína: Dokładnie tak, Tomášu! I właśnie tutaj na scenę wkracza XML, czyli Extensible Markup Language.

Tomáš: Rozszerzalny język znaczników... To brzmi ważnie.

Karolína: I tak jest! Wyobraź sobie to tak... w XML możesz tworzyć własne, zupełnie specyficzne znaczniki, tak zwane tagi. Więc zamiast ogólnego tagu masz na przykład <autor>, <nazwa> albo <wersja>. Od razu wiesz, o co chodzi.

Tomáš: Aha! Czyli te dane same niosą swój opis. To musi być absolutnie świetne do wyszukiwania i przetwarzania maszynowego.

Karolína: Dokładnie! Ale z tą swobodą wiąże się też duża odpowiedzialność. XML ma bowiem znacznie bardziej rygorystyczne zasady niż HTML.

Tomáš: Jakie zasady na przykład? Żadnych zapomnianych tagów zamykających?

Karolína: W żadnym wypadku! Wszystkie tagi muszą być sparowane. Co więcej, XML rozróżnia wielkie i małe litery, więc <Tag> i <tag> to dwie zupełnie inne rzeczy.

Tomáš: Rozumiem, jest to case-sensitive. Co dalej?

Karolína: Każdy dokument musi mieć dokładnie jeden element główny, który obejmuje wszystko inne. A wartości atrybutów muszą być zawsze w cudzysłowach. Żadnych wyjątków.

Tomáš: To wygląda prawie... matematycznie precyzyjnie. Ale skąd system wie, jaka struktura jest poprawna?

Karolína: Świetne pytanie! Do tego używa się DTD lub tak zwanego Schematu XML, które definiują dozwoloną strukturę. Ale do tego przejdziemy zaraz.

Tomáš: Dobrze, omówiliśmy naprawdę sporo. Ale mamy przed sobą ostatni duży temat... Javę. I przede wszystkim, jak nie zgubić się we własnym kodzie.

Karolína: Dokładnie tak! I to prowadzi nas do czegoś, co nazywa się Javadoc. To niesamowicie przydatne narzędzie od Sun Microsystems.

Tomáš: Javadoc... brzmi to prawie jak jakieś prawo. Co to dokładnie robi?

Karolína: Wyobraź sobie to tak. To narzędzie, które automatycznie generuje stronę internetową z dokumentacją bezpośrednio z komentarzy w twoim kodzie źródłowym. Dla dokumentacji API to absolutne wybawienie.

Tomáš: Czyli napiszę komentarz, a on stanie się częścią profesjonalnie wyglądającej strony internetowej? To świetnie.

Karolína: W zasadzie tak! Ale jest pewien haczyk. To narzędzie jest sprytne, ale nie umie czytać w myślach. Jeśli nazwiesz swoją klasę na przykład 'Pr' i nie napiszesz zrozumiałych komentarzy, to wynikowa dokumentacja będzie do niczego.

Tomáš: Jasne. Śmieci wchodzą, śmieci wychodzą. Czyli automatyzuje formatowanie, ale jakość treści nadal zależy od ciebie.

Karolína: Dokładnie tak. Pomoże ci to zbudować dom, ale cegły musisz dostarczyć sam. Dobre komentarze i sensowne nazwy to podstawa.

Tomáš: To idealna kropka nad i. Dobre nawyki są kluczowe. Karolino, to na dziś wszystko. Przeszliśmy przez wszystko od schematów XML aż po Javę. Wielkie dzięki, że nam to wszystko wyjaśniłaś.

Karolína: Cała przyjemność po mojej stronie! Dzięki za zaproszenie.

Tomáš: I dzięki wszystkim za wysłuchanie Studyfi Podcastu. Usłyszymy się następnym razem!