Projektowanie Oprogramowania Systemów - 1 sem.


Zasady prowadzenia i zaliczenia projektu:

  • Projekt realizowany jest w wymiarze 15 godz./sem., tj. 2x45 min. w drugiej połowie semestru (nie dotyczy realizacji zdalnej).
  • Za projekt przydzielane są punkty, można otrzymać max. 100 punktów. Po zakończeniu semestru punkty przekazuję prowadzącemu wykład.
  • Obowiązują grupy 3 lub 4 osobowe.

Projekt

Element projektu podlegający ocenie

Przykładowe narzędzia, biblioteki, oprogramowanie

% oceny

1. Opracowanie wymagań, modele UML
  • zidentyfikować klienta, użytkowników końcowych i inne zainteresowane strony tematu (stakeholders);
  • zgromadzić i przeanalizować szczegółowe wymagania funkcjonalne i pozafunkcjonalne zadań;
  • określić scenariusze użycia i stworzyć nadającą się do czytania specyfikację funkcjonalną;
  • opcjonalnie zawrzeć w niej diagramy UML scenariuszy użycia;
  • stworzyć model UML kluczowych elementów projektowanego rozwiązania;
  • przeanalizować możliwość użycia dodatkowych bibliotek i narzędzi do realizacji zadania;
  • opracować krótką specyfikację techniczną podsumowującą te informacje wraz z harmonogramem pracy;
  • przedstawić specyfikację do zaliczenia;
  • przygotować harmonogram pracy oraz kamienie milowe.
Microsoft Visio

10

2. Napisanie oprogramowania

Oprogramowanie realizującego przetwarzanie obrazów (po uzgodnieniu z prowadzącym, można realizować inny, własny projekt )

Założenia:

  • program uruchamiany z linii poleceń;
  • program z pliku *.ini powinien odczytać ścieżki źródłowe i docelowe (do analizy pliku ini można wykorzystać dowolną darmową bibliotekę, np. iniParser);
  • program odczytuje wszystkie pliki z obrazami ze ścieżki źródłowej;
  • program wykonuje przetworzenie odczytanych obrazów (wielowątkowo) - detekcja konturów;
  • przetworzone obrazy zapisujemy w folderze docelowym;
  • w folderze docelowym zapisujemy matrycę miniatur plików źródłowych oraz matrycę miniatur obrazów docelowych (jeden plik zawierać powinien sklejone ze sobą zmniejszone obrazki źródłowe, drugi plik - sklejone obrazki po przetworzeniu, aby można było szybko zobaczyć efekty działania programu).
Proponuję najpierw zapoznać się z poszczególnymi elementami projektu:
  • analiza pliku INI;
  • odczytywanie, zapisywanie i wyświetlanie obrazów w OpenCV;
  • zasady operacji na macierzach/obrazach w OpenCV;
  • wybranie i sprawdzenie metody przetwarzania obrazów.
Uwagi dodatkowe:
  • w pliku INI podajemy ścieżkę do folderu z plikami wejściowymi - progam powinien przeczytać wszystkie pliki z tego folderu;
  • program powienien umożliwiać pracę z dużą liczbą plików >500;
  • obrazki miniaturki powinny mieć zachowane proporcje wysokość/szerokość;

Zdjęcia testowe do testowania oprogramowania (ZIP)

 

Visual Studio 2013 i C++ wraz z biblioteką OpenCV

20*

3. Wykorzystanie narzędzia do pracy grupowej
  • uzyskać dostęp do repozytorium systemu kontroli wersji (zewnętrzny hosting GitHub, Bitbucket.);
  • wyznaczyć osobę odpowiedzialną za utrzymanie porządku w repozytorium (maintainer);
  • zaplanować strukturę repozytorium mając na uwadze używane środowisko IDE, język programowania, dodatkowe artefakty (grafiki UI, specyfikacje itp.).
GIT + GitHub

10

4. Wykorzystanie systemu śledzenia błędów
  • uzyskać dostęp do repozytorium systemu śledzenia błędów (zewnętrzny hosting GitHub, Bitbucket.);
  • wyznaczyć osobę odpowiedzialną za utrzymanie porządku w repozytorium (maintainer).
  • wykryte podczas cykli testowania błędy raportować do systemu śledzenia błędów;
  • opcjonalnie zastosować metodę test-driven development do zapewnienia jakości;
  • zademonstrować użycie testów jednostkowych do walidacji kluczowych elementów oprogramowania.
Bugzilla

10

5. Wykorzystanie wątków Windows

10

6. Wykorzystanie IPC Windows

10

7. Wykonanie dokumentacji projektu
  • podczas implementacji zaangażować odpowiedni nakład pracy na dokumentowanie API (komentarze zgodne z Doxygen) oraz inne komentarze w kodzie, wyjaśniające szczególnie zagmatwane algorytmy, mechanizmy, zależności;
  • generować dokumentację HTML z komentarzy Doxygen na bieżąco, a nie po zakończeniu projektu;
  • przedstawić dokumentację do zaliczenia.
    Doxygen

    10

    8. Wykonanie profilowania projektu (hotspot'y)
    • użyć profiler do wykrycia hot spotów w opracowanym programie i przeprowadzić próbę ich optymalizacji.
    Visual Studio Profiler

    10

    9. Wykonanie wykrywania błędów
    • Sprawdzić integralność danych w programie, np.:
      • wykryć "memory leak"
      • wykryć wykraczanie wskaźników (np. korzystając z makra _ASSERTE( _CrtCheckMemory( ) ); w trybie DEBUG) 
    Visual Studio + CrtCheckMemory

    10

    * = Warunek konieczny. Do zaliczenia przedmiotu wymagane jest poprawne działanie oprogramowania.
    Powyższą specyfikację opracowano w oparciu o materiały mgr inż. A. Ciarkowskiego.


    Przykładowe oprogramowanie przydatne do realizacji projektu:

    • Visual Studio
    • Microsoft Visio
    • Git 
    • TortoiseGit
    • TortoiseSVN
    • Doxygen
    • Wtyczka do obsługi SVN w Visual Studio - AnkhSVN
    • Wtyczka DoxygenComments w Visual Studio
    • Biblioteka C++ Boost:
      • Konfiguracja projektu Visual C++:
      • "C++->General->Additional Include Files" dodajemy $(BOOST_ROOT),
      • "Linker->General->Additional Library Directories" dodajemy $(BOOST_ROOT)/lib$(PlatformArchitecture)-msvc-$(VisualStudioVersion)
    • Biblioteka OpenCV:
      • Konfiguracja projektu Visual C++:
      • "C++->General->Additional Include Files" dodajemy $(OPENCV_ROOT)\include,
      • "Linker->General->Additional Library Directories" dodajemy $(OPENCV_ROOT)\$(PlatformTarget)\vc12\lib lub $(OPENCV_ROOT)\$(PlatformTarget)\vc12\staticlib (w zależności od tego czy używamy bibliotek dll czy statycznych)
      • "Linker->Input->Additional Dependencies" opencv_< biblioteka > $(OPENCV_VERSION_SUFFIX)[d].lib, np. opencv_core$(OPENCV_VERSION_SUFFIX).lib w konfiguracji "Release" oraz opencv_core$(OPENCV_VERSION_SUFFIX)d.lib w konfiguracji "Debug".