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



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

Zaawansowane programowanie w C++ (PCP)

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

System kontroli wersji SVN

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Zaawansowane programowanie w C++ (PCP)

Praca Dyplomowa Magisterska

Programowanie poprzez testy z wykorzystaniem JUnit

Spis treści. Wprowadzenie 15

Wzorce projektowe strukturalne cz. 1

Szablony funkcji i szablony klas

(Średnio)zaawansowane programowanie w C++

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

( rednio)zaawansowane programowanie w C++

Uniwersytet Rzeszowski

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Podstawy programowania. Wprowadzenie

Podstawy programowania w Qt4

Dobre praktyki w zakresie zarządzania ładem architektury korporacyjnej

Język ludzki kod maszynowy

INFORMATOR TECHNICZNY WONDERWARE

Programowanie w Ruby

Wartości domyślne, szablony funkcji i klas

Narzędzia podnoszące jakość procesu wytwarzania i wdrażania

Testowanie aplikacji. Kurs języka Ruby

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Elementy i funkcjonalno

Wprowadzenie do środowiska Qt Creator

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Szablony funkcji i klas (templates)

Obsługa wyjątków. Język C++ WW12

Zaawansowane programowanie w C++

Git, Bitbucket, IntelliJ IDEA

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Aplikacje internetowe oparte na kluczowych technologiach Java Enterprise(Servlet,JSP,JDBC, )

Programowanie MorphX Ax

1.Wstęp. 2.Generowanie systemu w EDK

LABARATORIUM 9 TESTY JEDNOSTKOWE JUNIT 3.8

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Ciągłe dostarczanie oprogramowania : kompletny przewodnik / Eberhard Wolff. Gliwice, cop Spis treści

Testy automatyczne. Korzystające z junit

Microsoft Management Console

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w języku C++

Projekt: Mikro zaprogramowane na sukces!

szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.

Zaawansowane programowanie w C++ (PCP)

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Język JAVA podstawy. wykład 1, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Gospodarowanie mieniem Województwa

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

O autorze... 9 Wprowadzenie... 11

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

Programowanie zespołowe

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

Międzyplatformowy interfejs systemu FOLANessus wykonany przy użyciu biblioteki Qt4

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Projekt ATENA - system wspomagaj cy zarz dzanie szkoª lub zespoªem szkóª przedlicealnych

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

METODY PROGRAMOWANIA

Tworzenie oprogramowania

Tworzenie natywnych aplikacji na urządzenia mobilne - PhoneGap Tomasz Margalski

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Programowanie komputerowe. Zajęcia 7

Od wymagań do Javy w mgnieniu oka

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Technologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Zaawansowane programowanie w C++ (PCP)

Zagadnienia. Inżynieria Oprogramowania

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Inżynieria oprogramowania (Software Engineering)

Środowisko programisty. Środowisko programisty 1/35

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do Behaviordriven

WYKŁAD 1 SYSTEMY CMS CZĘŚĆ 1

Agile Project Management

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

76.Struktura oprogramowania rozproszonego.

Zaawansowane aplikacje internetowe - laboratorium

SAP Screen Personas. Ma gorzata Sztokfisz, SAP Polska Tomasz Jag o, SAP Polska 24 Maja 2013

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

TESTOWANIE OPROGRAMOWANIA

Konfiguracja historii plików

Programowanie funkcyjne. Wykªad 13

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

O PROJEKCIE I WNIOSKU DLA POCZĄTKUJĄCYCH I TYCH, KTÓRZY CHCĄ UPORZĄDKOWAĆ WIEDZĘ MARCIN DADEL

Programowanie w internecie nazwa przedmiotu SYLABUS A. Informacje ogólne

1. Wprowadzenie do C/C++

Transkrypt:

( rednio) zaawansowane programowanie w C++ (ZPR) Wykªad 8 - tworzenie oprogramowania, testowanie Robert Nowak 2015Z ( rednio) zaawansowane programowanie w C++ (ZPR) 1/35

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

Metodologie lekkie (agile) ( rednio) zaawansowane programowanie w C++ (ZPR) 3/35

Pewne fakty zwi zane z tworzeniem oprogramowania Najcz stsze przyczyny niepowodzenia projektu (przedstawione na wykªadzie 1): niestabilne wymagania optymistyczna estymacja kosztów (gªównie czasu) realizacji projektów R. Glass, Frequently Forgotten Facts about Software Engineering, 2001 Sterowanie projektem: koszt czas jako± zakres ( rednio) zaawansowane programowanie w C++ (ZPR) 4/35

Model wodospadowy Wodospadowy (tradycyjny) model tworzenia oprogramowania: 1. analiza 2. projektowanie Koszt 3. implementacja 4. testowanie 5. wdro»enie 6. piel gnacja Wady: du»e ryzyko niepowodzenia projektu dªugi czas sprz»enia zwrotnego Przyczyny: Czas wykªadniczy (wzgl dem czasu) wzrost kosztów zmian w projekcie. ( rednio) zaawansowane programowanie w C++ (ZPR) 5/35

Metodologie lekkie (extreme programming, SCRUM) Mo»liwo±ci uzyskania innej krzywej kosztu zmian w czasie: prostota projektu automatyczne testy nastawienie na ci gªe zmiany w projekcie polepszenie komunikacji Wªa±ciwo±ci: krótki czas sprz»enia zwrotnego Koszt mniejsze ryzyko niepowodzenia projektu Czas ( rednio) zaawansowane programowanie w C++ (ZPR) 6/35

Cykl tworzenia oprogramowania - SCRUM ( rednio) zaawansowane programowanie w C++ (ZPR) 7/35

Zmniejszenie kosztów zmian - dziaªaj cy prototyp Utrzymywanie dziaªaj cej wersji przez caªy czas trwania projektu. testowanie automatyczne: jednostkowe podczas implementacji - zapewnienie pokrycie kodu testami je»eli znajdzie si bª d, to nale»y napisa test, który go wychwyci funkcjonalne ci gªa integracja ( rednio) zaawansowane programowanie w C++ (ZPR) 8/35

Zmniejszanie kosztów zmian - kod ¹ródªowy Kody ¹ródªowe dobrej jako±ci przez caªy czas trwania projektu. zmiana struktury programu bez zmiany funkcjonalno±ci (refactoring) wzorce projektowe Komentarze - poprawiaj czytelno± kodu. Komentarz mówi DLACZEGO, kod mówi JAK. nale»y opisywa odpowiedzialno± moduªów (plików), klas, metod ka»dy byt powinien mie pojedyncz odpowiedzialno± nale»y opisywa niebanalne algorytmy dokumentacja projektowa cz sto powinna by generowana z kodu ( rednio) zaawansowane programowanie w C++ (ZPR) 9/35

Zmniejszanie kosztów zmian - zarz dzanie denicja tego co to znaczy,»e zadanie zostaªo wykonane (projekt, implementacja, testy jednostkowe, testy funkcjonalne, wdro»enie) jawne sterowanie projektem jawna lista zada«kolektywne prawo do zmian kodu (narz dzia zarz dzaj ce wersjami) kolektywne szacowanie zªo»ono±ci zada«nastawienie na zmiany planowanie czasu pracy dyskusja z u»ytkownikiem lub wªa±cicielem biznesowym podsumowania, wyci ganie wniosków ( rednio) zaawansowane programowanie w C++ (ZPR) 10/35

Zmniejszanie kosztów zmian - wsparcie odbiorcy oprogramowania Zaanga»owanie odbiorcy oprogramowania: pozwala unikn tworzenia rozwi za«, które nie b d u»ywane 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

PRINCE2 - projekty w sterowalnym ±rodowisku zarz dzanie strategiczne: odpowiedzialne za sukces projektu, m.in. ci gªa zasadno± biznesowa zarz dzanie operacyjne: delegowanie zada«, monitorowanie, alokacja zasobów ( rednio) zaawansowane programowanie w C++ (ZPR) 12/35

( rednio) zaawansowane programowanie w C++ (ZPR) 13/35

Testowanie moduªów: zagadnienia ogólne Rola Testowania: klient upewnia si,»e projekt dziaªa zgodnie z zaªo»eniami 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 pisanie testów powinno by proste wiele maªych testów (test-case), które mo»na grupowa (test-suits) mo»liwo± wyboru ilo±ci wy±wietlanej informacji w razie niepowodzenia testu 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

Miara jako±ci testów pokrycie kodu testami testowanie mutacyjne TODO: biblioteki ( rednio) zaawansowane programowanie w C++ (ZPR) 15/35

Tworzenie testów - poziomy boost/test/test_tools.hpp - dostarcza zestawu makrodenicji poziom informacja licznik bª dów wykonywanie testu WARN ostrze»enie bez zmian kontynuowane CHECK bª d zwi kszany kontynuowane REQUIRE bª d krytyczny zwi kszany przerywane zazwyczaj nale»y u»ywa 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 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 <= 0.001 BOOST_WARN_CLOSE(x, y, 0.1); // (x-y)/x <= 0.001 oraz (x - y)/y <= 0.001 ( rednio) zaawansowane programowanie w C++ (ZPR) 17/35

Tworzenie testów - wyj tki NO_THROW( stat ) THROW(stat, except) EXCEPTION(stat, except, p) nie powinno generowa wyj tków rzuca wyj tkiem danego typu spodziewane gen. wyj tku, który speªnia predykat struct MyException : public std::exception {//przykªadowy wyj tek int i_; MyException(int i) : i_(i) {} }; void f() { throw MyException(1); } //testowany kod //przykªadowy warunek dla wyj tku bool iscritical(const MyException& ex) { return ex.i_ == 2; } BOOST_CHECK_NO_THROW( f() ); //nie powinno rzuca wyj tków BOOST_REQUIRE_THROW( f(), std::exception );//spodziewany wyj tek //spodziewany wyj tek odp. typu oraz speªniaj cy warunek BOOST_CHECK_EXCEPTION( f(), MyException, iscritical ); ( rednio) zaawansowane programowanie w C++ (ZPR) 18/35

Generowane wiadomo±ci warning in <nazwa>: condition <opis> is not satised error in <nazwa>: test <opis> failed fatal error in <nazwa>: critical test <opis> failed MESSAGE( p, msg ) je»eli warunek faªszywy to generuje wiadomo± 'msg' int i = 1; BOOST_CHECK_MESSAGE(i == 2,"mialo byc i == 2, a jest i == " << i); //BOOST_ERROR( msg ) = BOOST_CHECK_MESSAGE( false, msg ) BOOST_ERROR("nie powinien sie tutaj znalezc"); //BOOST_FAIL( msg ) = BOOST_REQUIRE_MESSAGE( false, msg ) BOOST_FAIL("dalsze wykonywanie testu nie ma sensu"); ( rednio) zaawansowane programowanie w C++ (ZPR) 19/35

Test - obiekt klasy test_case #define BOOST_TEST_CASE( fun ) \ make_test_case(callback0<>(fun),boost_test_stringize(fun)) void test_1 () { //tutaj co± testuje } BOOST_TEST_CASE( &test_1 );//tworzy obiekt typu test_case BOOST_AUTO_TEST_CASE( nazwa ){ //tworzy obiekt typu test_case //tutaj co± testuje } ( rednio) zaawansowane programowanie w C++ (ZPR) 20/35

Organizacja testów - zbiór testów (test_suite) //Reprezentuje zbiór testów (wzorzec kompozytu) class test_suite : public test_case { public: void add( test_case* tc, //Metoda dodaje nowy test do zbioru unit_test_counter expected_failures = 0, int timeout = 0 ); //np. do wykrywania p tli niesk. /*... */ }; //Makrodefinicja tworz ca test_suite BOOST_TEST_SUITE( nazwa ); //Przykªad u»ycia test_suite* init_unit_test_suite( int, char* [] ) { //Zamiast main test_suite* test= BOOST_TEST_SUITE("nazwa"); test->add(boost_test_case(&test1)); test->add(boost_test_case(&test2)); return test; } ( rednio) zaawansowane programowanie w C++ (ZPR) 21/35

Zarz dzanie testami - Unit Test Framework linia komend zmienne ±rodowiskowe (np. BOOST_TEST_LOG_LEVEL ) kod testów (klasa unit_test_log, singleton) nazwa opcje opis build_info yes no platforma, itp. log_level all... warning error... ilo± wy±w. komunikatów nothing report_level no conrm short detailed wielko± komunikatu output_format HRF XML HRF: dla czªowieka show_progress yes no pokazuje post p random 0 1 2... testy losowo mytest --build_info=yes --log_level=all --report_level=detailed mytest --show_progres=yes --log_level=nothing ( rednio) zaawansowane programowanie w C++ (ZPR) 22/35

boost/test/minimal.hpp nie potrzebuje biblioteki binarnej boost_unit_test_framework dostarcza BOOST_CHECK(p) BOOST_REQUIRE(p) BOOST_ERROR(msg) BOOST_FAIL(msg) //Przykªad u»ycia #include <boost/test/minimal.hpp> int test_main(int, char* [] ) { //tak musi si nazywa gªówna funkcja BOOST_CHECK(1 == 2 ); BOOST_ERROR("blad"); BOOST_FAIL("blad krytyczny"); return 0; } ( rednio) zaawansowane programowanie w C++ (ZPR) 23/35

Opis narz dzia SCons www.scons.org opis projektu to skrypt Pythona bardzo ªatwo rozszerzalny automatyczna analiza zale»no±ci wsparcie dla: C++, Java, Fortran, Yacc, Lex, Qt, LaTeX, Subversion, msvc (zast puje.vcproj,.sln) i in. Linux, AIX, Windows NT, Mac OS X, Solaris i in. wsparcie dla kompilacji równolegªej detekcja zmiany zawarto±ci plików przy u»yciu sygnatury MD5 (lub tradycyjnie timestamps) ( rednio) zaawansowane programowanie w C++ (ZPR) 24/35

SCons - tworzenie aplikacji # plik SConstruct Program(source=['calc.cpp', 'main.cpp'], target = prog) Windows (Visual Studio Command Prompt): cl /Fo calc.obj /c calc.cpp /nologo cl /Fo main.obj /c main.cpp /nologo link /nologo /OUT:prog.exe calc.obj main.obj Linux (gnu g++): g++ -o calc.o -c calc.cpp g++ -o main.o -c main.cpp g++ -o prog calc.o main.o ( rednio) zaawansowane programowanie w C++ (ZPR) 25/35

SCons - tworzenie biblioteki # plik SConstruct SharedLibrary(source=['x.cpp', y.cpp'], target = bib) Windows (Visual Studio Command Prompt): cl /Fo x.obj /c x.cpp /nologo cl /Fo y.obj /c y.cpp /nologo link /nologo /dll /out:bib.dll /implib:bib.lib x.obj y.obj Linux (gnu g++): g++ -o x.os -c -fpic x.cpp g++ -o y.os -c -fpic y.cpp g++ -o libbib.so -shared x.os y.os ( rednio) zaawansowane programowanie w C++ (ZPR) 26/35

System zarz dzania wersjami, repozytorium serwer plików, przechowuje kolejne wersje plików i katalogów, umo»liwia wycofywanie zmian i prac grupow ( rednio) zaawansowane programowanie w C++ (ZPR) 27/35

Repozytorium - blokowanie ( rednio) zaawansowane programowanie w C++ (ZPR) 28/35

Repozytorium - rozstrzyganie koniktów ( rednio) zaawansowane programowanie w C++ (ZPR) 29/35

Repozytorium - serwer lokalny i zdalny (publikowanie) local push server update plik pull plik commit A plik ( rednio) zaawansowane programowanie w C++ (ZPR) 30/35

Debugger program sªu» cy do uruchamiania innych programów zatrzymywania dziaªania badanego programu w okre±lonym miejscu wykonywanie pojedynczych instrukcji wy±wietlanie zawarto±ci zmiennych Przykªady: GNU debugger (gdb), Microsoft Visual Studio, inne ( rednio) zaawansowane programowanie w C++ (ZPR) 31/35

Narz dzie do wysyªania komunikatów (Boost.Log) badaniu stanu aplikacji cz sto jedyny dost pny mechanizm do ±ledzenia bª dów (gdy nie ma mo»liwo±ci u»ycia debuggera) #include <boost/log/trivial.hpp> int main(int, char*[]) { BOOST_LOG_TRIVIAL(debug) << "A debug severity message"; BOOST_LOG_TRIVIAL(info) << "An informational severity message"; BOOST_LOG_TRIVIAL(warning) << "A warning severity message"; BOOST_LOG_TRIVIAL(error) << "An error severity message"; return 0; } obserwatorzy: konsola, plik, NT Event Loggers, UNIX Syslog alternatywne rozwi zania: pahteios, glog, log4cxx, log4cpp ( rednio) zaawansowane programowanie w C++ (ZPR) 32/35

Przykªad ±rodowiska do tworzenia aplikacji - bioweb lighttpd fcgi kompilacja: SCons testowanie jednostkowe: Boost.Test, testunit, junit testowanie funkcjonalne: Splinter generowanie dokumentacji: doxygen ( rednio) zaawansowane programowanie w C++ (ZPR) 33/35

Ci gªa integracja (Continuos integration) - jenkins obserwacja zmian w repozytorium, uruchamianie budowania, testów jednostkowych, testów funkcjonalnych wiele obsªugiwanych repozytoriów narz dzia do budowania dla ró»nych ±rodowisk rozbudowany zbiór wtyczek, mechanizmy uªatwiaj ce ich instalacj interfejs u»ytkownika - przegl darka www ( rednio) zaawansowane programowanie w C++ (ZPR) 34/35

Dodatkowa lektura (http://staff.elka.pw.edu.pl/~rnowak2/rnbib.html): R. Nowak, Badanie pokrycia kodu c++ testami jednostkowymi, Programista, no. 6, pp. 10 13, 2012. Dzi kuj ( rednio) zaawansowane programowanie w C++ (ZPR) 35/35