Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:2009:miw09_hqed_audit_1 [2009/10/13 19:48]
jsi08
pl:miw:2009:miw09_hqed_audit_1 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +~~ODT~~
 +
 ====== HQEd audit ====== ====== HQEd audit ======
  
Linia 8: Linia 10:
  
 ====== Projekt ====== ====== Projekt ======
-====== Sprawozdanie ====== + 
-====== ​Prezentacja ​======+===== Prezentacja ===== 
 + 
 +Prezentacja wyników pracy: [[pl:​miw:​2009:​miw09_hqed_audit_1:​slideshow|prezentacja]] 
 + 
 +===== Sprawozdanie ===== 
 + 
 +==== Statyczne linkowanie ​==== 
 + 
 +Jednym z ważnych celów projektu było statyczne zbudowanie aplikacji z Qt4. Powody:  
 + 
 +  * Zlikwidowanie potrzeby instalowania Qt4 dla użytkownika końcowego, czyli duże ułatwienie dla niego; 
 +  * Uniknięcie problemów ze zgodnością nowych wersji Qt; 
 + 
 + 
 +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). ​ 
 +==== Audyt kodu ==== 
 + 
 +=== Dostęp do CVS-a === 
 +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ć. 
 + 
 +=== Analiza ostrzeżeń kompilacji === 
 + 
 +== nieużywany parametr == 
 +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. 
 + 
 +== niebezpieczna konwersja == 
 +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 *'). 
 + 
 +== niezainicjowana zmienna == 
 +11 wystąpień. Tu trzeba było zainicjować zmienną, ustawić na 0, NULL lub jakąś inną początkową wartość. 
 + 
 +== Błędne nawiasowanie == 
 +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)  
 +
 +  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.  
 + 
 +== Brak klamr == 
 +To dwa najważniejsze ostrzeżenia,​ które także okazały się błędami logicznymi w programie. 
 + 
 +  * Umiejscowienie średnika w tym miejscu powodowało,​ że wszystko w klamrach wykona się niezależnie od spełnienia warunków if-a. 
 + 
 +  było: 
 +  if(...); 
 +  { 
 +    ... 
 +  } 
 +  jest: 
 +  if(..) 
 +  { 
 +    ... 
 +  } 
 + 
 +  * Brak klamr w tym miejscu powodował, że else z poziomu niższego odnosił się do if-a o poziom wyżej. 
 + 
 +  było: 
 +  if(...) 
 +    if(...) 
 +    { 
 +      ... 
 +    } 
 +    else 
 +    { 
 +      ... 
 +    } 
 +  jest: 
 +  if(...) 
 +  { 
 +    if(...) 
 +    { 
 +      ... 
 +    } 
 +    else 
 +    { 
 +      ... 
 +    } 
 +  } 
 + 
 + 
 +=== Błąd kompilacji === 
 + 
 +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.  
 +==== Testowanie Aplikacji ==== 
 + 
 +=== Konfiguracja na której testowana była aplikacja === 
 +  * Ubuntu 8.10, Qt ver. 4.4.3, Gnome ver. 2.24.1 
 +  * Ubuntu 9.04, Qt ver. 4.5.0, Gnome ver. 2.26.1 
 +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. 
 + 
 +=== Stworzone modele === 
 + 
 +== Thermostat == 
 + 
 +Zbudowałem model termostatu na podstawie już dobrze opisanego sytemu: [[hekate:​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): 
 + 
 +{{:​pl:​miw:​2009:​miw09_hqed_audit_1:​thermostat.png?​600|}} 
 + 
 +Wykonanie w HQEd (plik o ściągnięcia):​ 
 + 
 +{{:​pl:​miw:​2009:​miw09_xtt_drools:​thermostat.zip}} 
 + 
 +== ATM == 
 + 
 +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): 
 + 
 +{{:​pl:​miw:​2009:​miw09_hqed_audit_1:​atm.png?​600|}} 
 + 
 +Wykonanie w HQEd (plik o ściągnięcia):​ 
 + 
 +{{:​pl:​miw:​2009:​miw09_xtt_drools:​atm.zip}} 
 + 
 +=== Uwagi === 
 +  * Jeśli Podczas zapisywania pliku nie podamy rozszerzenia ('​.hml'​) w nazwie (chcąc by edytor sam ją automatycznie dodał), zostanie utworzony plik o nazwie wydłużonej o '​hml'​ i bez roszerzenia. Dodatkowo z każdym zapisaniem program będzie tworzył kolejny plik konkatenując nazwę o '​hml',​ zamiast zapisywać w starym. Jeżeli wpisze się ręcznie nazwę wraz z rozszerzeniem '​.hml',​ nie ma tego problemu. Jest to zależne od sytemu na którym używa się aplikacji. 
 +  * Nieintuicyjne ustawianie granic przedziału - należy najpierw zdefiniować dolny próg i dopiero wtedy zaznaczyć range (radio button cały czas aktywny) i podać górny próg, w przeciwnym razie wyskakuje błąd; 
 +  * Program zawsze pyta, czy zapisać zmiany - niezależnie od tego czy nastąpiły;​ 
 +  * Mało ergonomiczny interfejs – trzeba wykonać dużą ilość kliknięć aby cokolwiek wykonać;  
 +  * Wartość '​row'​ w 'cell editor'​ powinna zostać ograniczona - zbyt duża powoduje zakończenie programu wyjątkiem;​ 
 +  * Zakończenie pracy aplikacji wyjątkiem podczas konstruowania skomplikowanego wyrażenia. 
 +  * Część przeznaczona do rysowania modelu zmienia swój rozmiar dopiero po ponownym wczytaniu modelu; 
 +  * Tips na początku przyczepiony do nie wiadomo czego, poza oknem (może być to kwestia systemu na którym jest użytkowany);​ 
 + 
 +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.
  
  
pl/miw/2009/miw09_hqed_audit_1.1255456093.txt.gz · ostatnio zmienione: 2019/06/27 15:57 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0