Szolgálati közlemény
2009.10.21. 10:48 progos
Szólj hozzá!
Megmondani, mit kell tenni
2009.10.20. 11:00 progos
Kiegészítés az előző bejegyzéshez
A hibaüzenet nem arra való, hogy megmondjuk, milyen hiba történt. A felhasználó azzal többnyire nem sokra megy. Akkor jó a hibaüzenet, ha a probléma leírása mellett segít abban, hogy mit kell tenni a hiba megszüntetéséhez.
Az előző kódból egy másik részlet:
if (!this.uploadFileName.endsWith(".csv")) { addActionError("A dokumentum formátuma nem megfelelő"); return ERROR; }
Esettanulmány 1: kedves ügyfél megkapja az értesítést arról, hogy átveheti az új funkciót. Nekiáll tesztelni. Kapott egy url-t, egy leírást arról, hogy a feltöltendő táblázatot hogy kell kitölteni és egy "excel-minta.xls" fájlt. Beüti a böngészőjébe a megadott címet, belép, feltölti a mintát. A program azt mondja: "A dokumentum formátuma nem megfelelő". Fasza.
-"HOGY TESZTELTEK EZEK?"
Habitusától függő stílusban jelez, hogy használhatatlan a program. Garantáltan! Más eredménye nem lehet a tesztnek.
... } catch (final IOException e) { addActionError("Hiba történt a fájl olvasása közben!"); return ERROR; }
Esettanulmány 2: az előző problémát telefonon gyorsan lekezeljük, új dokumentációt küldünk, javítjuk a hibaüzenetet. Ügyfél folytatja a tesztelést. Tfh a szerveren nem írható a /tmp, ahova a rendszer mentené a feltöltött fájlokat. Üzenet a felhasználónak az űrlap fölött: "Hiba történt a fájl olvasása közben!". Király. Admin nem kapott értesítést, ügyfél nem kapott segítséget. Tudja, mi a probléma: "Hiba történt a fájl olvasása közben!". Ki vagyunk segítve.
Bonyolítja a problémát, hogy az IOException nyilvám ezer okból, ezer helyről jöhet a fekete dobozból. Igyekezni kell szétválasztani.
Szólj hozzá!
Címkék: usability hibakezelés
Megmondani, mi a hiba
2009.10.20. 09:05 progos
Az alábbi kódrészlet egy CSV-feltöltő funkció kódja. A probléma a vastaggal szedett résszel van.
try { if (!this.uploadFileName.endsWith(".csv")) { addActionError("A dokumentum formátuma nem megfelelő"); return ERROR; } ellenoriz(); feltolt(); return SUCCESS; } catch (final IOException e) { addActionError("Hiba történt a fájl olvasása közben!"); return ERROR; } catch (final Exception e) { LOGGER.error(e); addActionError(e.getMessage()); return ERROR; }
Tesztelés közben a következő hibaüzenetet kaptam a programból:
• 1
Mi is történt?
A fejlesztő nem nézte végig, hogy a blokk utasításai milyen esetben milyen hibát dobnak. Elintézte azzal, hogy valamilyen "Exception"-t. Nyilván munka végignézni a javadoc-ot, saját modulban a kódot, de a felhasználónak esélye sincs ilyesmire. Ahhoz, hogy közöljük vele, mit kell tennie, nekünk is utána kell néznünk, milyen hibák léphetnek fel.
Ha kiderítettük, az Exception milyen leszármazottait dobhatják a hívott metódusok, máris egyenként fülön lehet őket csípni és olyan információt adni a felhasználónak, amivel többet tud kezdeni, mint hogy felhívja a fejlesztőt.
Szólj hozzá!
Címkék: java hibakezelés
a NullPointerException transzparens kezelése
2009.10.13. 15:22 progos
Szólj hozzá!
Halasztott hiba
2009.07.30. 15:38 progos
Ma levelet küldünk. A címzett elengedhetetlen. A többi most nem érdekes.
// ...
private String feladoCim;
private String feladoNev;
private String kodolas;
// ...
public void kuld(final Collection<Felhasznalo> cimzettek) throws UnsupportedEncodingException, MessagingException {
final MimeMessage m = this.mailSender.createMimeMessage();
m.setFrom(new InternetAddress(feladoCim, feladoNev, kodolas));
this.mailSender.send(m);
}
hozzá a spring konfig:
<property name="feladoCim" value="jakab@gipsz.hu" />
<property name="feladoNev" value="Gipsz Jakab" />
<property name="kodolas" value="UTF-8" />
Megy? Megy. Örülünk? Túrót. Faszán konfigurálható, na de miért kell "ismeretlen kódolás" hibával vakarózni a hívóban? UTF-8 vagy van, vagy nincs. Ha nincs, az nem a híváskor derül ki, hanem induláskor.
// ...
private InternetAddress felado;
// ...
public void kuld(final Collection cimzettek) throws MessagingException {
final MimeMessage m = this.mailSender.createMimeMessage();
m.setFrom(this.felado);
this.mailSender.send(m);
}
az új spring konfig:
<property name="felado">
<bean class="javax.mail.internet.InternetAddress">
<constructor-arg index="0" value="jakab@gipsz.hu" />
<constructor-arg index="1" value="Gipsz Jakab" />
<constructor-arg index="2" value="UTF-8" />
</bean>
</property>
A spring a rendszer indításánál kipróbálja, hogy létrehozható-e a babszem. Ha nem, üvölt. In-dí-tás-kor! Nem a felhasználóval együtt. Az adminnal kettesben. Őt meg ezért fizetik.
Szólj hozzá!
Címkék: java oop spring hibakezelés inicializálás javamail
Hello World
2009.07.30. 13:55 progos
Egy árverő rendszer utolsó simításait végzem. A rendszert jól megterveztük, összeszokott, lojális, szorgalmas a csapat, mégis két napja fúrok-faragok-szögelek-átalakítok. Olyan hibákat javítgatok, amiknek az elkerüléséhez nem kéne projektenként tervezni, csak általános szabályokat betartani. Ezekről a józan ésszel belátható, könnyen betartható szabályokról fog szólni ez a blog.