autor: Damian Dudziński, email: <damian.dudzinski(at)gmail.com>
Test the new version of HQEd.
Check quality, test, update manual, code and funcionality audit, in wiki description and s5 presentation.
Prezentacja wyników pracy: prezentacja
Jednym z ważnych celów projektu było statyczne zbudowanie aplikacji z Qt4. Powody:
W tej kwestii udało mi się skompilować statycznie zarówno Qt4 (w wersjach: 4.2.3, 4.3.0, 4.5.2), jak i program (rozmiar wzrósł do 5.9 MB z 3.8 MB). Niestety po jego uruchomieniu otrzymałem w konsoli błąd: 'segmetion fault'.
Kompilacja Qt4 jest bardzo czasochłonna, na moim komputerze zajmowała nawet do 13h (dla wersji 4.5.2, pełna kompilacja z przykładami).
Dużym utrudnieniem dla projektu był problem z dostępem do CVS-a. Quota na koncie na Charonie była mniejsza niż zajmował cały kod źródłowy na CVS-ie. Dodatkowo w pewnym momencie dostęp ten został zablokowany. Brak pełnego dostępu do CVS-a spowodował, że z pewnych rzeczy - takich jak bezpośrednie poprawianie ostrzeżeń kompilacji czy jakiekolwiek zajmowanie się komentarzami - trzeba było zrezygnować.
Tych ostrzeżeń kompilator wykrył aż 82, poprawa kodu sprowadza się do zmiany:
było: void fun(..., int param, ...) jest: void fun(..., int, ...)
Należy nie zapomnieć o pozostawieniu samego parametru, gdyż mogą istnieć wywołania funkcji z tym parametrem, które spowodują błędy kompilacji.
Kompilator wskazał 12 linijek z tym błędem, jednak sprowadzało się do zmiany w 2 linijkach kodu:
było: char* cFormats[] = {"...", "...", "...", "..."} jest: const char *cFormats[],
Wcześniejszy zapis umożliwiał zmianę czegoś zadeklarowanego jako stałe (niejawna konwersja z 'const char *' do 'char *').
11 wystąpień. Tu trzeba było zainicjować zmienną, ustawić na 0, NULL lub jakąś inną początkową wartość.
3 ostrzeżenia. Chodziło o to, żeby iloraz logiczny wziąć w nawiasowanie, co zapewnia czytelność:
było: ((s && r)) || q && p jest: (s && r) || (q && p)
i
było: t && (s && r) || (q && p) jest: (t && s && r) || (q && p)
Tu dokładność kompilatora okazała się bardzo potrzebna, bo okazało się, że jedno z nawiasowań było logicznie błędnym rozumowaniem.
To dwa najważniejsze ostrzeżenia, które także okazały się błędami logicznymi w programie.
było: if(...); { ... } jest: if(..) { ... }
było: if(...) if(...) { ... } else { ... } jest: if(...) { if(...) { ... } else { ... } }
Jedyny błąd kompilacji okazał się zależny od wersji qt. Skompilowanie programu w wersji qt 4.3.0 i niższej: 4.2.3 błędu nie pokazuje, natomiast pojawia się on przy wersjach 4.4.3 i wyższych. Błąd pojawiał się w pliku generowanym automatycznie z plików QTDesignera. Po edycji tych plików, problem zgodności został rozwiązany.
Potem były także zmiany wersji qt na wersje: 4.3.0 i 4.2.3 (dla Ubuntu 8.10) - na nich większych testów nie przeprowadzałem.
Zbudowałem model termostatu na podstawie już dobrze opisanego sytemu: hekate_case_thermostat. Ponieważ problem ten został już tam dość dobrze opisany, dodam tylko, że zmieniłem miesiące tak, by odpowiadały porom roku na półkuli północnej.
Wykonanie w HQEd (screen):
Wykonanie w HQEd (plik o ściągnięcia):
Zbudowałem model bankomatu zarówno na podstawie już stworzonego modelu (dostępnego w aplikacji) jak i na podstawie własnych pomysłów. Jako dane wejściowe przyjąłem: pin wprowadzony przez użytkownika, prawidłowy pin z bazy danych, deklarowaną kwotę do wypłacenia, dostępne środki na koncie oraz w bankomacie. Na podstawie tych danych program daje jedną z odpowiedzi: wypłacenie kwoty, nieprawidłowy pin, brak środków na koncie, brak środków w bankomacie.
Wykonanie w HQEd (screen):
Wykonanie w HQEd (plik o ściągnięcia):
Program jest cały czas w trakcie tworzenia, więc tego typu uwagi często dotyczą rzeczy, których jeszcze nie zrobiono, a nie błędów. Część błędów zależy bezpośrednio od platformy i zainstalowanej na niej wersji qt4.
\param nawa_parametru - opis
(nazwa parametru bez typu!)unused variable
internal
na output
, narzędzie powinno wyświetlić informacje o nieprawidłowym użyciu atrybutu w kolumnach kontekstu warunkowego w których ten atrybut się znajduje.Aby mieć możliwość korzystania z CVS to oprócz konta na charonie potrzebne jest skonfigurowanie systemu na wsłasnym komputerze:
export CVSROOT=:ext:kinio@charon.ia.agh.edu.pl/mnt/cvs/cvs-hades export CVS_RSH=ssh
kinio
zastąpić własną nazwą użytkownika.W celu uniknięcia powstawania bardzo niechcianych konfliktów w systemie kontroli wersji należy zastosować się do poniższych uwag:
cvs update
commit
komendą:cvs ci
commit
po zakończeniu pracy z pojedynczym plikiem cvs add filename
Log in with the same user/password as in wiki, you need to be in the appropriate cvs group at charon for this to work!
The DoxyGen doc for Hqed, automagically regenereted while you sleep Log in with the same user/password as in wiki, you need to be in the appropriate cvs group at charon for this to work!