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/14 12:24]
jsi08
pl:miw:2009:miw09_hqed_audit_1 [2019/06/27 15:50] (aktualna)
Linia 19: Linia 19:
 ==== Statyczne linkowanie ==== ==== Statyczne linkowanie ====
  
-Jednym z ważnych celów projektu było statyczne zbudowanie aplikacji z Qt4. Powody ​są dwa+Jednym z ważnych celów projektu było statyczne zbudowanie aplikacji z Qt4. Powody: ​
  
-  * Zlikwidowanie potrzeby instalowania Qt4 użytkownika końcowego, czyli duże ułatwienie dla niego;+  * 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;   * Uniknięcie problemów ze zgodnością nowych wersji Qt;
  
  
-W tej kwestii udało mi się skompilować ​Qt4 statycznie (w wersjach: 4.2.3, 4.3.0, 4.5.2), ​także ​program ​dał się skompilować ​(rozmiar wzrósł do 5.9 MB z 3.8 MB), niestety ​po jego uruchomieniu otrzymałem w konsoli błąd: '​segmetion fault'​. +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ł nawet do 13h (dla wersji 4.5.2, pełna kompilacja z przykładami).  +
  
 +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 ==== ==== Audyt kodu ====
  
 === Dostęp do CVS-a === === Dostęp do CVS-a ===
-Dużym ​problemem ​dla projektu były problemy ​z dostępem do CVS-a. Quota na koncie na Charonie była mniejsza niż zajmował ​pełny kod źródłowy na CVS-ie. Dodatkowo w pewnym momencie ​ten dostęp został zablokowany. Brak pełnego dostępu do CVS-a spowodował,​ że z pewnych rzeczy ​trzeba było zrezygnować ​jakbezpośrednie poprawianie ​warningów, ​czy jakiekolwiek zajmowanie się komentarzami.+Dużym ​utrudnieniem ​dla projektu był problem ​z dostępem do CVS-a. Quota na koncie na Charonie była mniejsza niż zajmował ​cał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 === === Analiza ostrzeżeń kompilacji ===
Linia 41: Linia 39:
  
   było: void fun(..., int param, ...)   było: void fun(..., int param, ...)
-  ​zamiast: void fun(..., int, ...)+  ​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łąd kompilacji.+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 == == niebezpieczna konwersja ==
-Kompilator wskazał 12 linijek z tym błędem, jednak sprowadzało się do zmiany w 2 linijkach:+Kompilator wskazał 12 linijek z tym błędem, jednak sprowadzało się do zmiany w 2 linijkach ​kodu:
  
   było: char* cFormats[] = {"​...",​ "​...",​ "​...",​ "​..."​} ​   było: char* cFormats[] = {"​...",​ "​...",​ "​...",​ "​..."​} ​
-  ​zamiast: const char *cFormats[],​+  ​jest: const char *cFormats[],​
  
 Wcześniejszy zapis umożliwiał zmianę czegoś zadeklarowanego jako stałe (niejawna konwersja z 'const char *' do 'char *'). Wcześniejszy zapis umożliwiał zmianę czegoś zadeklarowanego jako stałe (niejawna konwersja z 'const char *' do 'char *').
  
 == niezainicjowana zmienna == == niezainicjowana zmienna ==
-11 wystąpień. Tu trzeba zainicjować zmienną, ustawić na 0, NULL lub jakąś inną początkową wartość.+11 wystąpień. Tu trzeba ​było zainicjować zmienną, ustawić na 0, NULL lub jakąś inną początkową wartość.
  
 == Błędne nawiasowanie == == Błędne nawiasowanie ==
 3 ostrzeżenia. Chodziło o to, żeby iloraz logiczny ​ wziąć w nawiasowanie,​ co zapewnia czytelność:​ 3 ostrzeżenia. Chodziło o to, żeby iloraz logiczny ​ wziąć w nawiasowanie,​ co zapewnia czytelność:​
-dla:+
   było: ((s && r)) || q && p    było: ((s && r)) || q && p 
-  ​zamiast: (s && r) || (q && p) +  ​jest: (s && r) || (q && p) 
 i i
   było: t && (s && r) || (q && p)    było: t && (s && r) || (q && p) 
-  ​zamiast: (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ń ​jest logicznie błędnym rozumowaniem. ​+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 == == Brak klamr ==
-To dwa najważniejsze ostrzeżenia,​ które okazały się błędami logicznymi w programie.+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.   * Umiejscowienie średnika w tym miejscu powodowało,​ że wszystko w klamrach wykona się niezależnie od spełnienia warunków if-a.
Linia 77: Linia 75:
     ...     ...
   }   }
-  ​zamiast:+  ​jest:
   if(..)   if(..)
   {   {
Linia 95: Linia 93:
       ...       ...
     }     }
-  ​zamiast:+  ​jest:
   if(...)   if(...)
   {   {
Linia 111: Linia 109:
 === Błąd kompilacji === === 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 plikach generowanych ​automatycznie z plików QTDesignera. Po edycji tych plików, problem zgodności został rozwiązany. ​ +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 ==== ==== Testowanie Aplikacji ====
  
Linia 121: Linia 118:
  
 === Stworzone modele === === Stworzone modele ===
 +
 == Thermostat == == Thermostat ==
  
-Zbudowałem model termostatu na podstawie ​juz dobrze opisanego sytemu:​[[hekate:​hekate_case_thermostat]]. Ponieważ został ​juz ten problem ​tam dość dobrze opisany dodam tylko, że zmieniłem miesiące ​aby odpowiadały porom roku na półkuli północnej.+Zbudowałem model termostatu na podstawie ​już dobrze opisanego sytemu: [[hekate:​hekate_case_thermostat]]. Ponieważ ​problem ten został ​już tam dość dobrze opisanydodam tylko, że zmieniłem miesiące ​tak, by odpowiadały porom roku na półkuli północnej.
  
 Wykonanie w HQEd (screen): Wykonanie w HQEd (screen):
Linia 135: Linia 133:
 == ATM == == ATM ==
  
-Zbudowałem model bankomatu ​trochę ​na podstawie już stworzonego modelu (dostępnego w aplikacji) i trochę ​na podstawie własnych pomysłów. ​Jak dane wejściowe ​otrzymuje ​pin wprowadzony przez użytkownika,​ prawidłowy z bazy danych, ​deklarowana kwota, dostępne środki na koncie ​jak i w bankomacie. Na podstawie tych danych daje jedną z odpowiedzi: ​ok, nieprawidłowy pin, brak środków na koncie, brak środków w bankomacie.+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 (screen):
Linia 144: Linia 142:
  
 {{:​pl:​miw:​2009:​miw09_xtt_drools:​atm.zip}} {{:​pl:​miw:​2009:​miw09_xtt_drools:​atm.zip}}
- 
-== Consonance vs Dissonance == 
  
 === Uwagi === === Uwagi ===
-  * Jeśli ​damy save i zapiszemy plik bez rozszerzenia, żeby ją edytor sam automatycznie dodał, ​zapisze bez kropki ​dodatkowo ​z każdym ​naciśnięciem save będzie tworzył kolejny plik konkatenując nazwę o rozszerzenie bez kropki, zamiast zapisywać w starym. Jeżeli się ręcznie ​wpisze ​nazwę z rozszerzeniem '​.hml',​ nie ma tego problemu. +  * 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' ​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
-  * Kiedy chce się sprawdzić czy wielkość zawiera się w przedziale poprzez funkcję in, 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. +  * 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ógw przeciwnym razie wyskakuje błąd; 
-  * Program zawsze pyta czy zapisać zmianyniezależnie od tego czy nastąpiły;​ +  * Program zawsze pytaczy zapisać zmiany ​niezależnie od tego czy nastąpiły;​ 
-  * Mało ergonomiczny interfejs – trzeba wykonać dużą ilość kliknięć aby cokolwiek wykonać  +  * Mało ergonomiczny interfejs – trzeba wykonać dużą ilość kliknięć aby cokolwiek wykonać 
-  * Wartość '​row'​ w 'cell editor'​ powinna zostać ograniczonazbyt duża powoduje ​zawieszenie ​programu+  * 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;   * 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)+  * 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.1255515879.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