Wykład VII - semestr III Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik
Wytwarzanie oprogramowania
Model tworzenia oprogramowania 1 analiza 2 projektowanie 3 implementacja 4 testowanie 5 wdrożenie 6 pielęgnacja/rozwój
Złote zasady twórz intuicyjne i czytelne interfejsy, ale jednocześnie dostatecznie ogólne, aby można ich było użyć w różnych sytuacjach nie wymagaj, aby użytkownicy biblioteki/klasy robili rzeczy, które może ona sama zrobić minimalizuj liczbę argumentów, usuwaj zbędne argumenty i parametry metod, dla częstych wartości/operacji/typowych zachowań wprowadź wartości/ustawienia domyślne, metody pozwalające przedefiniować zachowanie (metody takie zwykle nie będą wywoływane) w dokumentacji udostępnianej publicznie opisuj zachowanie, a nie użytą implementację projektuj i implementuj mając zawsze na uwadze możliwość dalszego rozwoju aplikacji
Dekompozycja kodu Dekompozycja - to praktyka dzielenia kodu na mniejsze fragmenty. Każda funkcja czy metoda powinna realizować jedno zadanie. Wszystkie nietrywialne podzadania powinny być wydzielone do osobnych funkcji i metod (najczęściej prywatnych). Programowanie od ogółu do szczegółu. Jest to pisanie kodu z jednoczesnym dekomponowaniem go, bez uzupełniania szczegółów. Np. pisząc funkcję realizującą jakieś zadanie, używam w niej wywołań innych funkcji, która mają realizować podzadania, nie posiadając jeszcze ich implementacji. Po zakończeniu pisania głównej funkcji. Przystępujemy do uzupełniania szczegółów stosując teraz tę regułę na tym poziomie.
Refaktoryzacja Kolejne modyfikacje kodu, uzupełnienia funkcjonalności programu, nowe wymagania i usuwanie błędów powodują, że istniejący kod jest wzbogacany o kolejne linie. Kod może stać się gęsty, długi i nieczytelny. Refaktoryzacja (inaczej refaktoring) - jest wprowadzaniem zmian w kodzie/projekcie, w wyniku których zasadniczo nie zmienia się jego funkcjonalność. Celem refaktoryzacji jest więc nie wytwarzanie nowej funkcjonalności, ale utrzymywanie odpowiedniej, wysokiej jakości kodu. Możliwości: - refaktoryzacja poprzez dekompozycję - wyszukiwanie nowych wzorców, szablonów i ich implementacja - separacja warstw projektu. Refaktoryzacja jest kosztowna, ale jest istotnym elementem zarządzania projektem informatycznym. Koszt refaktoryzacji powinien być zrekompensowany dużo niższym kosztem wprowadzania późniejszych zmian w projekcie.
Wskaźniki czy referencje Referencja nie wnosi nowej funkcjonalności do języka C++ w stosunku do C. Jest to po prostu inna składnia tego co było już dostępne dzięki wskaźnikom. Referencje są czytelniejsze od wskaźników (nie używamy * i &), gdyż mają taką samą składnię jak zwykłe zmienne. Referencja jest bezpieczniejsza, gdyż zawsze związana jest z jakimś obiektem, nie może mieć wartości NULL. Kiedy zamienić wskaźnik na referencję? Jeżeli piszemy metodę/funkcję i w argumencie otrzymujemy referencję do obiektu, to możemy go czytać i modyfikować, ale nie możemy zwolnić powiązanej z nim pamięci. Jeżeli otrzymalibyśmy wskaźnik do obiektu, to czy po skorzystaniu z niego powinniśmy zwolnić pamięć zajmowaną przez ten obiekt? Zespół programistów może wprowadzić ustalenia w tej kwestii.
Metodologia pracy
Agile programming Metodologie lekkie (zwinne) - nadają się dla małych zespołów tworzących małe i średniej wielkości oprogramowanie, najczęściej dla biznesu (ważna szybkość dostarczania i dostosowanie do częstych zmian). Programowanie ekstremalne XP, Scrum, Crystal, Adaptive Software Development, DSDM, Feature Driven Development.
Programowanie ekstremalne (XP) Programowanie ekstremalne - to metodologia programowania spopularyzowana dzięki książce extreme Programming explained (Addison-Wesley, 1999). Składa się ona z zasad znajdujących zastosowanie we wszystkich fazach budowy oprogramowania. Główne zasady: ciągle planuj twórz niewielkie wersje nieustanie testuj. Napisz test jednostkowy przed napisaniem testowanego kodu. wykrywaj w czasie programowania sytuacje, kiedy refaktoryzacja przyniesie korzyści, i zrób ją właśnie wtedy. koduj w parach wspólna wizja i dzielenie się kodem. Należy unikać sytuacji, że tylko garstka osób ma całą wiedzę o projekcie.
Scrum Scrum - iteracyjna metodyka prowadzenia projektów. W metodyce tej rozwój produktu podzielony jest na mniejsze, trwające od tygodnia do miesiąca, iteracje zwane sprintami następującymi bezpośrednio po sobie. Po każdym sprincie zespół programistów posiada działającą wersję produktu.
Bugzilla Bugzilla oprogramowanie stworzone i używane przez Fundację Mozilla, umożliwiające szybkie tworzenie serwisu internetowego do raportowania błędów w dowolnym oprogramowaniu. Zgłoszeniom można nadawać różne statusy. Ponadto Bugzilla daje możliwość dodawania załączników i umieszczania własnych komentarzy. Kto z tego korzysta: Facebook, NASA, Mozilla, Ecplipse, Open Office, Apache, dystrybucje Linux i wiele innych.
Waga zgłoszenia Blocker zatrzymuje rozwój i/lub testy Critical wycieki pamięci, utraty danych, crashe Major duża utrata funkcjonalności Normal standardowy błąd, lekka utrata funkcjonalności Minor pomniejsza utrata funkcjonalności i proste błędy Trivial drobne błędy jak literówki itd.. Enhancement ulepszenia i porady
Koniec