Tworzenie oprogramowania
(rednio) zaawansowane programowanie w C++ (ZPR) Wykªad 8 - tworzenie oprogramowania, testowanie
Robert Nowak
2015Z
(rednio) zaawansowane programowanie w C++ (ZPR)
1/35
Tworzenie oprogramowania
Podsumowanie kolokwium
Frekwencja: 89% ±rednia punktów zad1
54%
sprytne wska¹niki, zale»no±¢ cykliczna
zad2
84%
wyj¡tki
zad3
42%
dziedziczenie wielobazowe
pyt1
100%
czytelno±¢ kodu
pyt2
97%
komentarze
zad4
35%
komenda
zad5
77%
wizytator
±rednia punktów: 15.3 (61%)
(rednio) zaawansowane programowanie w C++ (ZPR)
2/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Metodologie lekkie (agile)
(rednio) zaawansowane programowanie w C++ (ZPR)
3/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Pewne fakty zwi¡zane z tworzeniem oprogramowania Najcz¦stsze przyczyny niepowodzenia projektu (przedstawione na wykªadzie 1):
I niestabilne wymagania I optymistyczna estymacja kosztów (gªównie czasu) realizacji projektów ∗
R. Glass, Frequently Forgotten Facts about Software Engineering, 2001
Sterowanie projektem:
I koszt I czas I jako±¢ I zakres (rednio) zaawansowane programowanie w C++ (ZPR)
4/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Model wodospadowy Wodospadowy (tradycyjny) model tworzenia oprogramowania: 1. analiza 2. projektowanie
Koszt
3. implementacja 4. testowanie 5. wdro»enie
Czas
6. piel¦gnacja Wady:
I du»e ryzyko niepowodzenia projektu I dªugi czas sprz¦»enia zwrotnego Przyczyny:
I wykªadniczy (wzgl¦dem czasu) wzrost kosztów zmian w projekcie. (rednio) zaawansowane programowanie w C++ (ZPR)
5/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Metodologie lekkie (extreme programming, SCRUM) Mo»liwo±ci uzyskania innej krzywej kosztu zmian w czasie:
I prostota projektu
Koszt
I automatyczne testy I nastawienie na ci¡gªe zmiany w projekcie
Czas
I polepszenie komunikacji Wªa±ciwo±ci:
I krótki czas sprz¦»enia zwrotnego I mniejsze ryzyko niepowodzenia projektu
(rednio) zaawansowane programowanie w C++ (ZPR)
6/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Cykl tworzenia oprogramowania - SCRUM
(rednio) zaawansowane programowanie w C++ (ZPR)
7/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Zmniejszenie kosztów zmian - dziaªaj¡cy prototyp
Utrzymywanie dziaªaj¡cej wersji przez caªy czas trwania projektu.
I testowanie automatyczne: I
jednostkowe I podczas implementacji - zapewnienie pokrycie kodu testami I je»eli znajdzie si¦ bª¡d, to nale»y napisa¢ test, który go wychwyci
I
funkcjonalne
I ci¡gªa integracja
(rednio) zaawansowane programowanie w C++ (ZPR)
8/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Zmniejszanie kosztów zmian - kod ¹ródªowy Kody ¹ródªowe dobrej jako±ci przez caªy czas trwania projektu.
I zmiana struktury programu bez zmiany funkcjonalno±ci (refactoring)
I wzorce projektowe Komentarze - poprawiaj¡ czytelno±¢ kodu. Komentarz mówi DLACZEGO, kod mówi JAK.
I nale»y opisywa¢ odpowiedzialno±¢ moduªów (plików), klas, metod
I ka»dy byt powinien mie¢ pojedyncz¡ odpowiedzialno±¢ I nale»y opisywa¢ niebanalne algorytmy I dokumentacja projektowa cz¦sto powinna by¢ generowana z kodu (rednio) zaawansowane programowanie w C++ (ZPR)
9/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Zmniejszanie kosztów zmian - zarz¡dzanie I denicja tego co to znaczy, »e zadanie zostaªo wykonane (projekt, implementacja, testy jednostkowe, testy funkcjonalne, wdro»enie)
I jawne sterowanie projektem I
jawna lista zada«
I
kolektywne prawo do zmian kodu (narz¦dzia zarz¡dzaj¡ce wersjami)
I
kolektywne szacowanie zªo»ono±ci zada«
I nastawienie na zmiany I
planowanie czasu pracy
I
dyskusja z u»ytkownikiem lub wªa±cicielem biznesowym
I
podsumowania, wyci¡ganie wniosków
(rednio) zaawansowane programowanie w C++ (ZPR)
10/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Zmniejszanie kosztów zmian - wsparcie odbiorcy oprogramowania
Zaanga»owanie odbiorcy oprogramowania:
I pozwala unikn¡¢ tworzenia rozwi¡za«, które nie b¦d¡ u»ywane I dostarcza dodatkow¡ kontrol¦ poprawno±ci Aby zrozumie¢ najwa»niejsze wymagania, programi±ci powinni pracowa¢ w organizacji, która zleciªa utworzenie oprogramowania, jako u»ytkownik aplikacji, przez 1-2 tygodnie. a
a
Hunt, Thomas, The Pragmatic Programmer, Addison-Wesley, 2000
(rednio) zaawansowane programowanie w C++ (ZPR)
11/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
PRINCE2 - projekty w sterowalnym ±rodowisku
I zarz¡dzanie strategiczne: odpowiedzialne za sukces projektu, m.in. ci¡gªa zasadno±¢ biznesowa
I zarz¡dzanie operacyjne: delegowanie zada«, monitorowanie, alokacja zasobów (rednio) zaawansowane programowanie w C++ (ZPR)
12/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Narz¦dzia
(rednio) zaawansowane programowanie w C++ (ZPR)
13/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Testowanie moduªów: zagadnienia ogólne Rola Testowania:
I klient upewnia si¦, »e projekt dziaªa zgodnie z zaªo»eniami I programista upewnia si¦, »e kod dziaªa tak jak on zakªada implementacja testów: jedna z pocz¡tkowych faz implementacji nowej klasy czy biblioteki
I pisanie testów powinno by¢ proste I wiele maªych testów (test-case), które mo»na grupowa¢ (test-suits)
I mo»liwo±¢ wyboru ilo±ci wy±wietlanej informacji w razie niepowodzenia testu
I mo»liwo±¢ ±ledzenia post¦pu przy du»ych i zªo»onych testach
biblioteki:
boost::test, cppunit, inne (rednio) zaawansowane programowanie w C++ (ZPR)
14/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Miara jako±ci testów
I pokrycie kodu testami I testowanie mutacyjne TODO: biblioteki
(rednio) zaawansowane programowanie w C++ (ZPR)
15/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Tworzenie testów - poziomy boost/test/test_tools.hpp - dostarcza zestawu makrodenicji poziom
WARN CHECK REQUIRE
informacja
licznik bª¦dów
wykonywanie testu
ostrze»enie
bez zmian
kontynuowane
bª¡d
zwi¦kszany
kontynuowane
bª¡d krytyczny
zwi¦kszany
przerywane
I zazwyczaj nale»y u»ywa¢ I I
CHECK (tak jak asercji)
WARN gdy mniej istotne ni» poprawno±¢ (np. wydajno±¢) REQUIRE gdy kontynuacja testu nie ma sensu
int* ptr = 0L; BOOST_WARN( sizeof(short) == sizeof(int) ); //ostrze»enie BOOST_CHECK( silnia(1) == 1 ); BOOST_REQUIRE( ptr != 0L ); BOOST_CHECK( *ptr == 2 ); //Ta linia nigdy si¦ nie wykona (rednio) zaawansowane programowanie w C++ (ZPR)
16/35
Tworzenie oprogramowania
Agile software developement Narz¦dzia
Tworzenie testów - warunki liczbowe BITWISE_EQUAL(a,b)
zgodno±¢ poszczególnych bitów
EQUAL(a,b)
równo±¢ (woªany operator==)
SMALL(val,)
dla zmiennopozycyjnych, warto±¢ bezwzgl¦dna mniejsza ni»
CLOSE(a,b,)
dla
zmiennopozycyjnych,
warto±ci
bezwzgl¦dna ró»nicy nie wi¦ksza ni»
% int a = 1, b = 2; //przykªady testów double x = 1.0, y = 1.001; BOOST_CHECK_BITWISE_EQUAL(0x27, 0x17); //ró»nica na 4 oraz 5 bicie BOOST_CHECK_EQUAL(a,b); BOOST_CHECK_SMALL( x - y, 0.001); //| x - y |