Erori si riscuri
Erori, avertismente, exceptii
Ø & 535g63f nbsp; & 535g63f nbsp; punerea problemei:
Fig. Modul de perceptie mesaj de roare
ü & 535g63f nbsp; Utilizatorul nu doreste sa apara nici un mesaj de eroare
ü & 535g63f nbsp; Multe mesaje de eroare sint ambigue, incorecte sau absurde, ducind la bulversarea utilizatorilor:
Fig. Derutare utilizator
ü & 535g63f nbsp; Ce inteles au urmatoarele mesaje de eroare pentru utilizatorul obisnuit? Ce comunica ele?
§ & 535g63f nbsp; 404 not found
§ & 535g63f nbsp; Fatal error 312: aborting
§ & 535g63f nbsp; Syntax error near line 1025
§ & 535g63f nbsp; Internal compiler error
§ & 535g63f nbsp; Segmentation fault: core dumped
Fig. Mesaj de eroare de neinteles pentru utilizatori obisnuiti
Fig. Cum poare remedia utilizatorul situatia ? Ce a gresit ?
ü & 535g63f nbsp; utilizatorul trebuie instruit astfel incit sa nu comita greseli in nici o situatie
ü & 535g63f nbsp; mesajele de eroare nu trebuie sa apara in cadrul aplicatiei!
Ø & 535g63f nbsp; & 535g63f nbsp; aparitia mesajelor de eroare
ü & 535g63f nbsp; se utilizeaza caseta de dialog modala de tip buletin
ü & 535g63f nbsp; executia programului nu poate continua fara ca utilizatorul sa actioneze
Fig. Asteptare actiune utilizator
ü & 535g63f nbsp; ar trebui ca un program, chiar daca afiseaza un mesaj de eroare, sa poata corecta problema de unul singur (acest lucru este adevarat, uneori, la afisarea avertismentelor)
ü & 535g63f nbsp; nu trebuie utilizat un dialog ca suport pentru mesaje de eroare sau confirmari
ü & 535g63f nbsp; casetele de mesaje de eroare opresc prosteste executia programului; aplicatia nu ofera flexibilitate
ü & 535g63f nbsp; un mesaj de eroare inseamna incapacitatea programatorului de a implementa aplicatia in mod corespunzator
ü & 535g63f nbsp; mesajele de eroare trebuie sa fie destinate utilizatorului obisnuit si nu programatorului sau testerului aplicatiei
Fig. Afisare mesaje pur tehnice
ü & 535g63f nbsp; software-ul nu trebuie sa respinga datele introduse de utilizator prin intermediul mesajelor de eroare.
ü & 535g63f nbsp; oamenilor nu le place sa li se spuna ca au gresit, mai ales din partea unei masini
ü & 535g63f nbsp; trebuie avuta in vedere psihologia utilizatorului - a se evita termeni de genul "kill", "terminate", "abort", "destroy"
Ø & 535g63f nbsp; & 535g63f nbsp; a cui este greseala?
ü & 535g63f nbsp; intotdeauna se da vina pe utilizator, desi aplicatia este cea care nu poate continua executia
Fig. Utilizatorul crede ca a gresit dar aplicatia a generat eroarea
ü & 535g63f nbsp; trebuie sa facem in asa fel incit erorile sa fie imposibile:
§ & 535g63f nbsp; utilizarea unor controale grafice in loc de introducerea numerica/textuala
§ & 535g63f nbsp; folosirea diverselor butoane - radio sau de selectie
§ & 535g63f nbsp; afisarea de tooltip-uri, ajutoare (help-uri)
§ & 535g63f nbsp; folosirea unor "agenti de interfata"
Ø & 535g63f nbsp; & 535g63f nbsp; feedback-ul
ü & 535g63f nbsp; & 535g63f nbsp; trebuie sa utilizam feedback-ul pozitiv
ü & 535g63f nbsp; & 535g63f nbsp; erorile utilizatorilor se pot converti in rezultate corecte, raportate ca succes
ü & 535g63f nbsp; & 535g63f nbsp; "Daca nu ai ceva frumos de spus, atunci nu spune nimic."
ü & 535g63f nbsp; & 535g63f nbsp; utilizatorii nu trebuie umiliti de catre software, in nici o situatie:
Fig. Umilire utilizator
ü & 535g63f nbsp; & 535g63f nbsp; utilizatorul nu trebuie sa fie confuz:
Fig. O intrebare are nevoie de un raspuns
Fig. Utilizatorul nu tine minte sfaturile unei casete de dialog ce stie tot
Ø & 535g63f nbsp; & 535g63f nbsp; rezolvarea exceptiilor
ü & 535g63f nbsp; aplicatia trebuie sa fie pregatita pentru a rezolva exceptiile care pot surveni:
Fig. Incapacitate rezolvare exceptii
ü & 535g63f nbsp; o exceptie nu trebuie privita ca o eroare, ci ca o problema care trebuie solutionata de software, nu de utilizator
ü & 535g63f nbsp; mesajele de eroare trebuie rezervate doar pentru urgentele reale:
Fig. Afisare inutila mesaj de exceptie
Ø & 535g63f nbsp; & 535g63f nbsp; gestiunea exceptiilor
ü & 535g63f nbsp; exceptii care trebuie tratate:
§ & 535g63f nbsp; Alerte - atentioneaza utilizatorul asupra actiunilor programului
§ & 535g63f nbsp; Confirmari - dau autoritate utilizatorului de a trece mai departe (la/peste o actiune)
ü & 535g63f nbsp; apar in interfata ca dialoguri modale (de cele mai multe ori) sau nemodale
ü & 535g63f nbsp; programul trebuie sa aiba initiativa si sa nu intrebe utilizatorul frecvent asupra deciziilor care trebuie sa le ia (scaderea aparitiei casetelor de confirmare):
Fig. Proiectare defectuoasa caseta de confirmare
ü & 535g63f nbsp; software-ul nu trebuie sa anunte lucrurile evidente sau sa considere erori situatii de succes:
Fig. Aparitie casete de confirmare inutile
Fig. Succes raportat ca eroare
ü & 535g63f nbsp; & 535g63f nbsp; responsabilitatea nu trebuie pasata utilizatorului, ci rezolvata de catre program
ü & 535g63f nbsp; & 535g63f nbsp; actiunile trebuie realizate de aplicatie, fara a-l intreba pe utilizator
ü & 535g63f nbsp; & 535g63f nbsp; utilizatorul trebuie informat pentru a evita greselile:
Fig. Instiintare utilizator ca la introducere parola actiaarea tastei Capslock poate genera eroare
ü & 535g63f nbsp; & 535g63f nbsp; orice actiune a utilizatorului trebuie sa fie reversibila:
Fig. Incapacitate program de a realiza Undo
Ø & 535g63f nbsp; & 535g63f nbsp; sfaturi:
ü & 535g63f nbsp; & 535g63f nbsp; mesajele de eroare nu impiedica utilizatorul sa comita in continuare greseli!
ü & 535g63f nbsp; & 535g63f nbsp; "Clientul (utilizatorul) intotdeauna are dreptate."
ü & 535g63f nbsp; & 535g63f nbsp; interfata trebuie sa fie politicoasa, clarificatoare, de ajutor
Fig. Afisare mesaje politicoase
§ & 535g63f nbsp; programul nu trebuie sa lase ce este gresit pe seama utilizatorului, ci trebuie sa rezolve erorile de unul singur
ü & 535g63f nbsp; & 535g63f nbsp; mesajele de eroare afisate trebuie sa fie corecte
Fig. Unde e mesajul de eroare interna ?
Fig. Aplicatiile nu trebuie sa considere erorile date perfect valide
Fig. Utilizatorul nu trebuie sa raspunda la o caseta de dialog informativa
Fig. Text caseta de dialog care mentioneaza un buton inexistent - Help?
Ø & 535g63f nbsp; & 535g63f nbsp; protectia aplicatiei
ü & 535g63f nbsp; & 535g63f nbsp; varianta actuala
§ & 535g63f nbsp; aplicatia trebuie sa aiba grija de integritatea datelor
§ & 535g63f nbsp; datele trebuie sa fie transformate in date valide de la momentul introducerii lor
§ & 535g63f nbsp; din moment ce sint valide, datele nu mai trebuie sa fie re-verificate ulterior
ü & 535g63f nbsp; & 535g63f nbsp; varianta ideala
§ & 535g63f nbsp; aplicatia trebuie sa aiba grija de imunitatea datelor
§ & 535g63f nbsp; programul trebuie sa fie imun la inconsistente si goluri de informatii
§ & 535g63f nbsp; software-ul trebuie sa rezolve orice probleme referitoare la date eronate si sa fie tolerant la defecte
§ & 535g63f nbsp; programele trebuie sa fie "constiente" de contextul activitatii (nu trebuie sa fie "oarbe")
§ & 535g63f nbsp; utilizatorul trebuie sa primeasca un feedback pozitiv auzibil, nu doar unul video
§ & 535g63f nbsp; nu este greseala programatorului, dar el este responsabil pentru erorile utilizatorului
§ & 535g63f nbsp; aplicatia nu trebuie sa para stupida!
Fig. Recuperarea dupa dezastru a unei aplicatii
Fig. Incapacitatea program de autoprotectie la greseli utilizator
Studiu de caz
Ø & 535g63f nbsp; & 535g63f nbsp; Erorile/avertismentele raportate de compilatoare:
ü & 535g63f nbsp; de cele mai multe, se raporteaza doar mesaje seci de genul "syntax error" (la compilarea programului sursa) sau "segmentation fault" (la rularea programului compilat).
ü & 535g63f nbsp; deseori, mesajele afisate de compilator nu au legatura cu reala problema aparuta.
ü & 535g63f nbsp; lipseste un mecanism de prevenire a erorilor cauzate de memorie (nealocare, depasire), mai ales in cazul limbajelor care manipuleaza pointeri (e.g. C ori C++).
ü & 535g63f nbsp; mesajele raportate nu-l ajuta prea mult pe programator sa remedieze eroarea survenita sau macar sa-si dea seama ce a gresit.
ü & 535g63f nbsp; unele compilatoare/interpretoare nu detecteaza erorile decit in momentul rularii (vezi Python).
ü & 535g63f nbsp; putine medii de programare ajuta la prevenirea erorilor (e.g. greseli minore precum " " in loc de " ").
ü & 535g63f nbsp; nu se ofera posibilitati de feedback decit in momentul compilarii/rularii programului
Ø & 535g63f nbsp; & 535g63f nbsp; Inconsistenta limbajelor de programare:
ü & 535g63f nbsp; cuvintul static in C++ desemneaza trei lucruri diferite.
ü & 535g63f nbsp; implicit, unele variabile sint pasate prin referinta, altele prin valoare.
ü & 535g63f nbsp; diferenta de semantica intre macro-uri si functii este mare, dar sintactic ele sint apelate similar.
ü & 535g63f nbsp; unele limbaje folosesc in loc de else if constructia elsif
ü & 535g63f nbsp; in unele limbaje sirul vid sau continind spatii este considerat ca reprezentind valoarea numerica 0, dar daca sirul contine caractere TAB este considerat ca fiind sir, nu ca intreg.
ü & 535g63f nbsp; in PHP, conventiile de numire a functiilor sint multiple: a se compara, de exemplu, numele functiilor predefinite fopen() addslashes() array_values() domxml_open_file() get_meta_tags() getprotobyname()
Riscurile interfetelor-utilizator
Riscuri ale calculatoarelor si tehnologiei:
Ø & 535g63f nbsp; presupunerea ca inginerii software pot proiecta sisteme lipsite de riscuri
Ø & 535g63f nbsp; lipsa de standarde guvernamentale si industriale
Ø & 535g63f nbsp; prea des se atribuie omului eroarea comisa de software
Software-ul poate conduce la pierderea vietii sau proprietatii, fiind componenta de baza a sistemelor de supraveghere a vietii, a aeronavelor sau automobilelor.
Software-ul poate duce la pierderea securitatii si intimitatii, fiind componenta de baza a sistemelor bancare, a sistemelor de securitate organizationala sau individuala, a Internetului.
Fig. Exemplu de risc interfata utilizator
Exemple dezastre cauzate de interfete
Ø & 535g63f nbsp; iulie 1988, USS Vincennes doboara avionul de pasageri Iran Air 655 (290 de persoane au decedat)
ü & 535g63f nbsp; Sistemul informatic AEGIS al vasului Vincennes receptioneaza un mesaj de la avionul iranian decodificindu-l gresit ca fiind militar (modul de decodificare II), in realitate transmisiunea efectuindu-se prin modul III (civil).
ü & 535g63f nbsp; Greseli ale interfetei: altitudinea avioanelor detectate de radar nu era afisata in mod implicit, sistemul AEGIS era incapabil de a afisa marimea avionului detectat de radar, un mod de transmisie odata recunoscut nu mai putea fi schimbat.
Ø & 535g63f nbsp; 26 aprilie 1994, avionul chinezesc Airbus A300/600 spre Nagoya se prabuseste (264 de morti)
ü & 535g63f nbsp; Co-pilotul in mod accidental seteaza avionul pe pilot automat care provoaca luarea in inaltime a avionului. Pilotul si co-pilotul incearca sa treaca din nou pe modul manual de pilotaj, dar se intirzie prea mult din cauza optiunilor de configurare si avionul nu mai poate fi redresat.
ü & 535g63f nbsp; Greseli ale interfetei: confuzia provocata co-pilotului de instrumentele de la bord, incapacitatea interfetei de a oferi raspunsuri la momente cruciale.
Ø & 535g63f nbsp; erorile sistemului THERAC-25
ü & 535g63f nbsp; Cazuri inregistrate: 3 iunie 1985, Kennestone, 26 iulie 1985, Ontario ("H-tilt" unrecovable error), 21 martie 1996, ETCC (operatorul corecteaza optiunea "X" semnalata ca fiind gresita cu optiunea "E", obtine "Malfunction 54" la care conform manualului se raspunde cu "P", pacientul moare dupa 5 saptamini datorita radiatiilor provocate de echipament), alte inca 500 de cazuri.
Intrebari la care trebuie sa raspundem:
Ø & 535g63f nbsp; De ce se acorda mai multa atentie hardware-ului decit software-ului? De ce se considera software-ul mai bun decit hardware-ul, acesta din urma verificindu-se sau inlocuindu-se mai frecvent?
Ø & 535g63f nbsp; De ce nu se studiaza mai in detaliu interactiunea om-calculator in situatii-limita, de criza?
Ø & 535g63f nbsp; De ce nu se supravegheaza mai profund comportamentul aplicatiei si modul de operare a interfetei?
Ce trebuie sa faca utilizatorul?!
|