( rednio) zaawansowane programowanie w C++ (ZPR)

Tworzenie oprogramowania (‘rednio) zaawansowane programowanie w C++ (ZPR) Wykªad 8 - tworzenie oprogramowania, testowanie Robert Nowak 2015Z (‘red...
Author: Sylwia Czajka
6 downloads 1 Views 820KB Size
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 |