Робусност (рачунарство)

У рачунарству, робусност је способност рачунарског система да се носи са грешкама током извршавања[1] [2]и да се носи са погрешним улазима. [2]Робусност може да обухвати многе области рачунарске науке, као што је робусно програмирање, робусно машинско учење и робусне безбедносне мреже. Формалне технике, као сто је фаз-тестирање, су од суштинског значаја за показивање робусности јер ова врста тестирања укључује неважеће или неочекиване улазе. Алтернативно, инјекција квара може да се користи за тестирање робусности. Разни комерцијални производи врше тестирање софтверских система користећи робусност и обично је саставни део анализе процене неуспеха.[3]

Увод уреди

У принципу, изградња робусних система који обухватају сваку тачку могућих грешака је тешка због велике количине могућих улазних и излазних комбинација.[4] Пошто би све улазне и излазне комбинације захтевале превише времена за тестирање, програмери не могу да пролазе кроз све случајеве детаљно. Уместо тога, програмер ће покушати да уопшти такве случајеве.[5] На пример, замислите унос неких целобројних вредности. Неки уноси могу саджати негативан број, нулу и позитиван број. Када се користе ови бројеви за тестирање софтвера на овај начин, програмер генерализује скуп свих целих бројева у три броја. Ово је ефикасније и изводљивији метод, али више склон грешкама. Генерализујући тестове је само један од примера ношења са неуспехом - конкретно, грешком због неважећег корисничког уноса. Системи могу да дају грешку због неких других разлога, као што је искључивање са мреже.

Без обзира, сложенији системи и даље треба достојанствено да управњају свим грешкама са којима се сусретну. Постоје многи примери таквих успешних система. Неки од најснажнијих система су еволутивнија и могу се прилагодити ситуацијама.[4]

Изазови уреди

Програми и софтвер су махом фокусирани на неки специфичан задатак и самим тим нису уопштени и флексибилни.[4] Међутим, запажања у системима као што је Интернет или биолошки системи демонстрирају прилагођавање њиховој околини. Један од начина на који се биолошки системи прилагођавају околини је кроз употребу редунданце.[4] Многи органи код људи су редундантни. Бубрези, на пример, људима је генерално потребан само један бубрег, али имају други бубрег који омогућава простор за неуспех. Овај исти принцип може да се односи и на софтвер, али постоје одређени изазови. Када се користи принцип вишка у рачунарству, слепо додавање кода се не препоручује. Слепо додавање кода само уводи нове грешке, чини систем комплекснијим и чини га тежим за разумевање.[6] Код који не даје никакво побољшање тренутном коду је нежељен. Нови код треба да има подједнаку функционалност, тако да ако процедура не ради, друга која обезбеђује исту функцију може да је замени. Да бисте то урадили, нови код мора да зна како и када да се пролагоди грешки.[4] То значи да више логике треба додати систему. Али, додавањем више логике систему, делова и повећавањем његове величине, систем постаје комплекснији. Стога, приликом прављења редундантних система, систем такође постаје комплекснији и програмери морају да размотре о балансирању комплексности система.

Тренутно, рачунарство не практикује изградњу робусних система.[4] Уместо тога, склони су да се фокусирају на прилагодљивост и ефикасност. Један од главних разлога зашто се не фокусирају на робусност је зато што је то тешко урадити у општем случају.[4]

Области уреди

Робусно програмирање уреди

Робусно програмирање је стил програмињања који се фокусира на руковање неочекиваним прекидима и неочекиваним акцијама.[7] Оно захтева да код рукује овим прекидима и акцијама грациозно показујући тачне и недвосмислене поруке о грешкама. Ове поруке о грешкама омогућују корисницима да лакше дебагује програм.

Принципи уреди

Параноја- Када прави софтвер, програмер претпоставља ће корисници покушати да разбију његов код.[7] Програмер такође претпоставља да је његов, односно њен, властити код може заказати или радити неправилно.[7]

Глупавост- Програмер претпоставља да ће кориснички унос бити погрешан, лажан и у погрешном формату.[7] Као последица тога, програмер враћа кориснику недвосмислену, интиутивну поруку о грешци која не захтева гледање кодова грешака. Порука о грешци треба да буде што прецизнија и да погрешно не наводи корисника тако да проблем може са лакоћом бити решен.

Опасна имплементација- Корисници не би требало да добију приступ библиотекама, структурама података или показивачима на структуре података.[7] Ове информације треба да се сакрију од корисника тако да их корисник не би случајно променио и створио грешку у коду. Када се такви интерфејси правилно направе, корисник их користи без проналажења рупа да измени интефејс. Интерфејс би требало да је правилно имплементиран тако да корисник нема потребу да га мења. Корисник због тога се фокусира искључиво на свој код.

Не може да се деси- Врло често, код је модификован и може створити могућност да се деси “немогући” случај. Немогући случајеви се стога претпостављају мало вероватним.[7] Програмер размишља о томе како да се бави овим случајевима који су мало вероватни, и спроводи обраду у складу са тим.

Робусно машинско учење уреди

Робусто машинско учење обично се односи на робусност алгоритама машинског учења. Алгоритам машинског учења се сматра робусним ако је грешка у тестирању у складу са грешкама у тренинг скупу или ако је обављање стабилно након додавања шума на скуп података.[8]

Робусан дизајн мрежа уреди

Робусан дизајн мрежа је истраживање о дизајну мрежа у случају променљивих или непрецизних захтева.[9] У том смислу, робусност у дизајну мрежа је широка као и у дизајну софтвера због огромних могућности промене уноса.

Референце уреди

  1. ^ A Model-Based Approach for Robustness Testing by Fernandez et al http://dl.ifip.org/db/conf/pts/testcom2005/FernandezMP05.pdf
  2. ^ а б 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. ^ а б в г д ђ е „Архивирана копија” (PDF). Архивирано из оригинала (PDF) 12. 08. 2017. г. Приступљено 01. 06. 2016. 
  5. ^ „Importance of Making Generalized Testcases - Software Testing Club - An Online Software Testing Community[[Категорија:Ботовски наслови]]”. Архивирано из оригинала 24. 6. 2016. г. Приступљено 1. 6. 2016.  Сукоб URL—викивеза (помоћ)
  6. ^ http://www.cse.sc.edu/~huhns/journalpapers/V6N2.pdf
  7. ^ а б в г д ђ 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. ^ „Архивирана копија” (PDF). Архивирано из оригинала (PDF) 09. 09. 2016. г. Приступљено 01. 06. 2016.