1 / 61

Разработка на критични системи

Разработка на критични системи. Цели. Да обясни как възстановяването след грешки и избягването им допринася за разработката на надеждни с-ми. Да опише характеристиките на надежден софтуерен процес. Да направи въведение в техниките за избягване на грешки.

brigid
Download Presentation

Разработка на критични системи

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Разработка на критични системи

  2. Цели • Да обясни как възстановяването след грешки и избягването им допринася за разработката на надеждни с-ми. • Да опише характеристиките на надежден софтуерен процес. • Да направи въведение в техниките за избягване на грешки. • Да опише механизмите за възстановяване след грешки и използването за това на разнообразие и излишък.

  3. Теми • Надежден процес • Надеждно програмиране • Нечувствителност към грешки • Архитектури за възстановяване

  4. Надеждност на софтуера • Като цяло, клиентите очакват целият софтуер да бъде надежден. Но за некритични приложения, те може да приемат и някои грешки. • Някои приложения имат много високи изисквания по отношение на надеждност и трябва да се използват специални софтуерни техники, за да се постигнат.

  5. Достигане на надеждност • Избягване на грешки • С-мата е разработена по такъв начин, че се избягват човешки грешки и по този начин се минимизират грешките в с-мата • Процесът на разработка е така организиран, че грешките в системата се откриват и поправят преди доставката на клиента. • Откриване на грешките • Използват се техники за верификация и валидиране, за да се открият и премахнат грешките преди предаването на с-мата • Нечувствителност към грешки • С-мат е проектирана така, че софтуерна грешка да не води до срив на с-мата.

  6. Разнообразие и излишък • Излишък Пази се повече от 1 версия на компонента така, че ако тя се скапе да има на разположение последната работеща версия • Разнообразие Една и съща функционалност се осъществява по различни начини, така че да не се сринат по един същ начин или в един и същ момент • Но, добавянето на разнообразие и излишък увеличава сложността и с това увеличава вероятността за грешки. • Някои инженери препоръчват простота и екстензивен V & V като по ефективен път за постигане на надеждност.

  7. Примери за разнообразие и излишък • Излишък.Където е критична достъпността (напр. в с-ми за електронна търговия), компаниите обикновено поддържат бекъп сървъри и при срив превключват автоматично на тях. • Разнообразие.Могат да се реализират различни сървъри, които използват различни операционни с-ми (напр. Windows и Linux), за да бъде с-мата устойчива срещу външни атаки.

  8. Софтуер без грешки • Съвременните методи на софтуерното инженерство позволяват производството на с-ми без грешки, като това важи най-малко за относително малки с-ми. • Софтуер без грешки означава, че софтуерът отговаря на спецификациите си. това не означава, че софтуерът винаги работи правилно, защото може да има грешки в спецификациите. • Разходите за производство на такъв софтуер са много високи. Това е изгодно само в изключителни ситуации. Често е по-евтино да се приемат грешки и да се плати за техните последствия.

  9. Разработка на софтуер без грешки • Надежден софтуерен процес • Управление на качеството. • Формални спецификации • Статична верификация • Силно типизиране • Strong typing • Безопасно програмиране • Защитена информация (капсулиране)

  10. Разходи за отстраняване на грешките a

  11. Надеждни процеси • С цел да се осигури минимален брой грешки, е важно да имаме добре дефиниран, повторяем софтуерен процес. • Добре дефинираният повторяем процес е този, който не зависи изцяло от индивидуалните способности; а може да бъде изпълнен от различни хора. • Ясно е, че процесът трябва да изисква значителни усилия за V&V за откриване на грешките.

  12. Характеристики на надеждния процес

  13. Дейности по избягване и нечувствителност към грешки • Инспекция на изискванията • Управление на изискванията • Проверка на модела • Инспекция на проекта и на кода • Статичен анализ • Планиране и управление на тестовете • Управление на конфигурацията.

  14. Надеждно програмиране • Да се използват програмни конструкции и техники, които допринасят за избягването на грешки и нечувствителност към такива. • Проектиране на прости решения • Защита на информацията от неправомерен достъп. • Минимизиране на използването на опасни програмни структури

  15. Защита на информацията • Информацията трябва да е достъпна само за тези части от програмата, които имат нужда от нея. Това предизвиква създаването на обекти или абстрактни типове от данни, които поддържат състояние и имат операции в/у това състояние. • Това води до избягване на грешки по 3 причини: • намалява се вероятността от случайна повреда на информацията; • информацията е оградена от "защитни стени" което намалява вероятността от разпространение на проблемите; • тъй като информацията е локализирана, по-малко е вероятно разработчикът да направи грешки и е по-вероятно проверяващият да ги открие.

  16. Спецификация на опашка в Java

  17. Декларация на Signal в Java

  18. Безопасно програмиране • Дефектите в програмите са обикновено последица от грешки на програмиста. • Тези грешки възникват, защото хората често не могат да проследят връзките м/у променливите в програмата. • Някои програмни структури са по-предразположени към грешки от останалите, така че избягването им намалява грешките при програмирането.

  19. Структурно програмиране • За първи път предложено през 1968 като подход, който прави програмите по-лесни за разбиране, с което се избягват програмните грешки. • Програмиране без goto • Цикъла Whileи операторът If са единствените управляващи структури. • Проектиране отгоре-надолу • Важна стъпка, която накара хората да се замислят и да дискутират въпросите на програмирането.

  20. Структури предразположени към грешки • Числа с плаваща запетая Неточността им е присъща. Може да доведе до неправилни сравнения. • Указатели Указатели, които сочат към неправилно място в паметта могат да повредят данните. Използването на псевдоними може да направи програмите трудни за разбиране и промяна. • Динамично заемане на памет Заемането на памет по време на изпълнение може да предизвика препълване на паметта. • Паралелизъм Може да предизвика коварни грешки поради недовидяно взаимодействие м/у паралелните процеси. • Рекурсия Грешките тук могат да доведат до препълване на паметта.

  21. Структури предразположени към грешки • Прекъсвания Те могат да причинят прекъсването на критични операции и правят програмата трудно разбираема. • Наследяване Кодът не е локализиран. Това може да доведе до неочаквано поведение, когато се правят промени и създава проблеми на разбирането. • Използване на псевдоними Използването на повече от 1 име за един и същ обект. • Масиви без граници Ако не се прави проверка на границите на масива, може да се получи препълване на буфер. • Обработка на входа по подразбиране Действие на въвеждане на данни, което се извършва независимо от входа на програмата.

  22. Обработка на изключенията • Програмното изключение е грешка или неочаквано събитие като прекъсване на захранването. • Обработката на прекъсванията позволява такива събития да бъдат обработени без да се налага непрекъсната проверка на състоянието, за да се открие изключението. • Използването на нормални управляващи структури за откриване на изключението изисква много допълнителни оператори, което води до претрупване и е потенциално предразположено към грешки.

  23. Изключения в Java 1

  24. Изключения вJava 2

  25. Термостат • Изключенията могат да се използват като нормална програмна техника, а не само като начин постигане на нечувствителност към грешки. • Пример. Термостат на фризер, който поддържа температурата в даден интервал. • Включва и изключва компресора на фризера. • Включва аларма, ако се надмине максимално разрешената температура. • Използва изключенията като нормална техника за програмиране.

  26. Термостат 1

  27. Термостат 2

  28. Нечувствителност към грешки • Софтуерните с-ми трябва да могат да се възстановяват в критични ситуации. • Нечувствителността към грешки е нужно когато има изискване за достъпност или когато срив нас-мата има висока цена. • Нечувствителност към грешки означава, че с-мата може да продължи да работи въпреки появяването на грешка. • Дори когато за с-мата е било доказано, че отговаря на спецификацията си, тя трябва да е нечувствителна към грешки, защото може да има неточности в спецификацията или процесът на валидиране да е бил неправилен.

  29. Действия за постигане на нечувствителност • Откриване на грешката С-мата трябва да открие, че настъпила грешка (неправилно състояние). • Оценка на вредите Трябва да се определят частите от системното състояние, засегнати от грешката. • Възстановяване С-мата трябва да се възстанови до познато безопасно състояние. • Поправка на грешката С-мата трябва да се промени, за да се предотврати ново появяване на грешката. Тъй като много софтуерни грешки са мимолетни, това често не е необходимо.

  30. Откриване на грешката и оценка на вредите • Първият етап е да се определи, че се проявила или ще се прояви грешка ( грешно състояние на с-мата). • Откриването на грешка включва дефинирането на ограничения, на които трябва да отговарят всички допустими състояния и да се проверява състоянието за удовлетворяване на тези ограничения.

  31. Ограничения за инсулинова помпа

  32. Откриване на грешката • Превантивно откриване Механизмът за откриване на грешката се включва преди да се извърши промяна на състоянието. Ако се открие грешно състояние, промяната не се извършва. • Ретроспективно откриване Механизмът за откриване на грешката се включва след промяната на състоянието. То се използва, когато неправилна последователност от правилни действия води до грешно състояние или когато превантивното откриване е твърде е ресурсоемко.

  33. Разширение на с-мата от типове • Превантивното откриване на грешки в действителност разширява с-мата от типове, като до се добавят допълнителни ограничения като част от дефиницията на типа. • Тези ограничения се реализират чрез дефиниране на базови операции в дефиницията на класа.

  34. PositiveEvenInteger 1

  35. PositiveEvenInteger 2

  36. Оценка на вредите • Анализира се системното с-яние, за да се прецени степента на увреждане предизвикано от срива на с-мата • Оценката трябва да провери, кои части от пространството на с-янието е било засегнато. • Обикновено се основава на "функции на валидност", които могат да се приложат за елементите на с-янието, за да оценят дали стойностите им са в зададен интервал.

  37. Robust array 1

  38. Robust array 2

  39. Техники за оценка на вредата • При пренасяне на данни се използват контролни суми. • За проверка на интегритета на структурите от данни се използват допълнителни указатели. • За незавършващи процеси се използват наблюдаващи (Watch dog) таймери. Ако известно време няма отговор, се предполага, че има проблем.

  40. Възстановяване от грешка и поправяне • Възстановяване напред Прилага поправките към повреденото състояние • Възстановяване назад Възстановява с-мното с-яние към познато безопасно с-яние • Възстановяването напред е обикновено специфично за приложението – изисква се познание на областта, за да се изчислят възможни корекции на с-янието. • Възстановяването назад е по=просто.Поддържат се подробност за безопасните с-яния и с някое от тях се замества повреденото състояние.

  41. Възстановяване напред • Повреда на кодирани данни • Кодиращи техники, които добавят излишък, могат да се използват при поправяне на данни повредени по време на пренос. • Допълнителни указатели • Когато се използват допълнителни указатели в структурите данни (напр. дву-свързан списък), то повреденият списък или файлова с-ма може да се изгради наново, ако има достатъчен брой неповредени указатели. • Често се използват при баси от данни и файлови с-ми.

  42. Възстановяване назад • Транзакциите са често използван метод. Промените не се прилагат докато не завърши изчислението. Ако се настъпи грешка, с-мата се оставя в с-янието преди транзакцията. • Периодични контролни точки позволяват с-мата да се върне в "добро" с-яние.

  43. Безопасна процедура за сортировка • Операция за сортиране, която следи собственото си изпълнение и оценява, дали сортировката е била коректно изпълнена. • Тя поддържа копие на входните данни и ако възникне грешка последните не са повредени. • Основава се на идентифициране и обработка на изключения • Тя е възможна в този случай, защото се знае условието за 'правилна' сортировка. Но в много случаи е трудно да се напишат проверки за правилност.

  44. Safe sort 1

  45. Safe sort 2

  46. Архитектура, нечувствителна към грешки • Защитното програмиране не може да се справя със с-ми, включващи взаимодействие м/у софтуера и хардуера • Неразбирането на изискванията може да доведе до това, че проверките и свързания с код са некоректни. • Когато с-мите имат силни изисквания за достъпност, може да се изисква специфична архитектура, проектирана да бъде нечувствителна към грешките. • Това важи из хардуера и софтуера.

  47. Нечувствителност нас хардуера • Използва се троен излишък на модулите (TMR). • Иам3 идентични компоненти, които получават един и същ вход и изходите им се сравняват • Ако един изход е различен, той се отхвърля и се приема срив на компонентата. • Основава се на това, че повечето грешки са причинени от сривове в компонентите, не от проектни грешки и вероятността за едновременен срив на 2 компоненти е много ниска.

  48. Надеждност на хардуер с TMR

  49. Избор на изхода • У-вото за сравняване на изходите е сравнително просто. • То сравнява входните (за него) сигнали и ако един е различен, го отхвърля. Изборът на истинския изход се решава от болшинството еднакви сигнали. • У-вот е свързано с управлението на грешките, което може да се опита да поправи грешащото у-во или да го изключи от с-мата.

  50. Софтуерни архитектури, нечувствителни към грешки • Успехът TMR се базира на 2 предположения: • Хардуерните компоненти нямат общи проектни грешки; • Компонентите дефектират случайно и вероятността за едновременна грешка е много ниска. • Никое от тези предположения не е вярно за софтуера: • Не е възможно де се копира компонентата, тъй като тя може да има проектни грешки • Следователно едновременния отказ на компонентите е напълно възможен и неизбежен. • Следователно софтуерните с-ми трябва да са разнообразни (с различни компоненти).

More Related