Robusnost (računarstvo)

U računarstvu, robusnost je sposobnost računarskog sistema da se nosi sa greškama tokom izvršavanja[1] [2]i da se nosi sa pogrešnim ulazima. [2]Robusnost može da obuhvati mnoge oblasti računarske nauke, kao što je robusno programiranje, robusno mašinsko učenje i robusne bezbednosne mreže. Formalne tehnike, kao sto je faz-testiranje, su od suštinskog značaja za pokazivanje robusnosti jer ova vrsta testiranja uključuje nevažeće ili neočekivane ulaze. Alternativno, injekcija kvara može da se koristi za testiranje robusnosti. Razni komercijalni proizvodi vrše testiranje softverskih sistema koristeći robusnost i obično je sastavni deo analize procene neuspeha.[3]

Uvod uredi

U principu, izgradnja robusnih sistema koji obuhvataju svaku tačku mogućih grešaka je teška zbog velike količine mogućih ulaznih i izlaznih kombinacija.[4] Pošto bi sve ulazne i izlazne kombinacije zahtevale previše vremena za testiranje, programeri ne mogu da prolaze kroz sve slučajeve detaljno. Umesto toga, programer će pokušati da uopšti takve slučajeve.[5] Na primer, zamislite unos nekih celobrojnih vrednosti. Neki unosi mogu sadžati negativan broj, nulu i pozitivan broj. Kada se koriste ovi brojevi za testiranje softvera na ovaj način, programer generalizuje skup svih celih brojeva u tri broja. Ovo je efikasnije i izvodljiviji metod, ali više sklon greškama. Generalizujući testove je samo jedan od primera nošenja sa neuspehom - konkretno, greškom zbog nevažećeg korisničkog unosa. Sistemi mogu da daju grešku zbog nekih drugih razloga, kao što je isključivanje sa mreže.

Bez obzira, složeniji sistemi i dalje treba dostojanstveno da upravnjaju svim greškama sa kojima se susretnu. Postoje mnogi primeri takvih uspešnih sistema. Neki od najsnažnijih sistema su evolutivnija i mogu se prilagoditi situacijama.[4]

Izazovi uredi

Programi i softver su mahom fokusirani na neki specifičan zadatak i samim tim nisu uopšteni i fleksibilni.[4] Međutim, zapažanja u sistemima kao što je Internet ili biološki sistemi demonstriraju prilagođavanje njihovoj okolini. Jedan od načina na koji se biološki sistemi prilagođavaju okolini je kroz upotrebu redundance.[4] Mnogi organi kod ljudi su redundantni. Bubrezi, na primer, ljudima je generalno potreban samo jedan bubreg, ali imaju drugi bubreg koji omogućava prostor za neuspeh. Ovaj isti princip može da se odnosi i na softver, ali postoje određeni izazovi. Kada se koristi princip viška u računarstvu, slepo dodavanje koda se ne preporučuje. Slepo dodavanje koda samo uvodi nove greške, čini sistem kompleksnijim i čini ga težim za razumevanje.[6] Kod koji ne daje nikakvo poboljšanje trenutnom kodu je neželjen. Novi kod treba da ima podjednaku funkcionalnost, tako da ako procedura ne radi, druga koja obezbeđuje istu funkciju može da je zameni. Da biste to uradili, novi kod mora da zna kako i kada da se prolagodi greški.[4] To znači da više logike treba dodati sistemu. Ali, dodavanjem više logike sistemu, delova i povećavanjem njegove veličine, sistem postaje kompleksniji. Stoga, prilikom pravljenja redundantnih sistema, sistem takođe postaje kompleksniji i programeri moraju da razmotre o balansiranju kompleksnosti sistema.

Trenutno, računarstvo ne praktikuje izgradnju robusnih sistema.[4] Umesto toga, skloni su da se fokusiraju na prilagodljivost i efikasnost. Jedan od glavnih razloga zašto se ne fokusiraju na robusnost je zato što je to teško uraditi u opštem slučaju.[4]

Oblasti uredi

Robusno programiranje uredi

Robusno programiranje je stil programinjanja koji se fokusira na rukovanje neočekivanim prekidima i neočekivanim akcijama.[7] Ono zahteva da kod rukuje ovim prekidima i akcijama graciozno pokazujući tačne i nedvosmislene poruke o greškama. Ove poruke o greškama omogućuju korisnicima da lakše debaguje program.

Principi uredi

Paranoja- Kada pravi softver, programer pretpostavlja će korisnici pokušati da razbiju njegov kod.[7] Programer takođe pretpostavlja da je njegov, odnosno njen, vlastiti kod može zakazati ili raditi nepravilno.[7]

Glupavost- Programer pretpostavlja da će korisnički unos biti pogrešan, lažan i u pogrešnom formatu.[7] Kao posledica toga, programer vraća korisniku nedvosmislenu, intiutivnu poruku o grešci koja ne zahteva gledanje kodova grešaka. Poruka o grešci treba da bude što preciznija i da pogrešno ne navodi korisnika tako da problem može sa lakoćom biti rešen.

Opasna implementacija- Korisnici ne bi trebalo da dobiju pristup bibliotekama, strukturama podataka ili pokazivačima na strukture podataka.[7] Ove informacije treba da se sakriju od korisnika tako da ih korisnik ne bi slučajno promenio i stvorio grešku u kodu. Kada se takvi interfejsi pravilno naprave, korisnik ih koristi bez pronalaženja rupa da izmeni intefejs. Interfejs bi trebalo da je pravilno implementiran tako da korisnik nema potrebu da ga menja. Korisnik zbog toga se fokusira isključivo na svoj kod.

Ne može da se desi- Vrlo često, kod je modifikovan i može stvoriti mogućnost da se desi “nemogući” slučaj. Nemogući slučajevi se stoga pretpostavljaju malo verovatnim.[7] Programer razmišlja o tome kako da se bavi ovim slučajevima koji su malo verovatni, i sprovodi obradu u skladu sa tim.

Robusno mašinsko učenje uredi

Robusto mašinsko učenje obično se odnosi na robusnost algoritama mašinskog učenja. Algoritam mašinskog učenja se smatra robusnim ako je greška u testiranju u skladu sa greškama u trening skupu ili ako je obavljanje stabilno nakon dodavanja šuma na skup podataka.[8]

Robusan dizajn mreža uredi

Robusan dizajn mreža je istraživanje o dizajnu mreža u slučaju promenljivih ili nepreciznih zahteva.[9] U tom smislu, robusnost u dizajnu mreža je široka kao i u dizajnu softvera zbog ogromnih mogućnosti promene unosa.

Reference uredi

  1. ^ A Model-Based Approach for Robustness Testing by Fernandez et al http://dl.ifip.org/db/conf/pts/testcom2005/FernandezMP05.pdf
  2. ^ a b 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 defines robustness as "The degree to which a system or component can function correctly in the presence of invalid inputs or stressful environmental conditions"
  3. ^ http://www.stanford.edu/~bakerjw/Publications/Baker%20et%20al%20(2008)%20Robustness,%20Structural%20Safety.pdf
  4. ^ a b v g d đ e „Arhivirana kopija” (PDF). Arhivirano iz originala (PDF) 12. 08. 2017. g. Pristupljeno 01. 06. 2016. 
  5. ^ „Importance of Making Generalized Testcases - Software Testing Club - An Online Software Testing Community[[Kategorija:Botovski naslovi]]”. Arhivirano iz originala 24. 6. 2016. g. Pristupljeno 1. 6. 2016.  Sukob URL—vikiveza (pomoć)
  6. ^ http://www.cse.sc.edu/~huhns/journalpapers/V6N2.pdf
  7. ^ a b v g d đ Robust Programming
  8. ^ http://www.researchgate.net/post/What_is_the_definition_of_the_robustness_of_a_machine_learning_algorithm is based on rich language it means it is easy to understand by the user.
  9. ^ „Arhivirana kopija” (PDF). Arhivirano iz originala (PDF) 09. 09. 2016. g. Pristupljeno 01. 06. 2016.