ГРЕШКИ В СОФТУЕРА
Интелектуалните човешки способности, използвани при разработването на софтуерни системи. Понятия за прости и сложни системи, малки и големи системи. Неправилният превод на информация от едно представяне в друго е основна причина за грешки при разработването на софтуер. Модел на превод и източници на грешки.
Интелектуалните способности на човек
Dijkstra [2.1] идентифицира три човешки интелектуални способности, използвани при разработването на PS:
- груба сила,
- способност за абстрахиране
- способност за математическа индукция.
Способността на човек да изброява е свързана с възможността за последователно превключване на вниманието от един обект към друг, което ви позволява да разпознаете желания обект. Тази способност е много ограничена - средно човек може уверено (без да се отклонява) да сортира в рамките на 1000 обекта (елементи). Човек трябва да се научи да действа, имайки предвид това ограничение. Средството за преодоляване на това ограничение е способността му да абстрахира, благодарение на което човек може да комбинира различни обекти или случаи в едно понятие, да замени много елементи с един елемент (от различен вид). Способността на човека за математическа индукция му позволява да се справя с безкрайни последователности.
При разработването на PS човек се занимава със системи. Под система разбираме набор от взаимодействащи (във връзка) помежду си елементи. PS може да се разглежда като пример за система. Логически свързан набор от програми е друг пример за система. Всяка отделна програма също е система. Да разбереш една система означава да преминеш смислено през всички начини на взаимодействие между нейните елементи. Поради ограниченията на човек ще правим разлика между изброяванепрости и сложни системи [2.2]. Под проста разбираме система, в която човек може уверено да премине през всички начини на взаимодействие между нейните елементи, а под сложна имаме предвид система, в която той не е в състояние да направи това. Няма ясна граница между прости и сложни системи, така че можем да говорим за междинен клас системи: такива системи включват програми, за които програмистският фолклор твърди, че „всяка дебъгвана програма има поне една грешка“.
Когато разработваме PS, не винаги можем да сме сигурни за всички връзки между неговите елементи поради възможни грешки. Следователно е полезно да можете да оцените сложността на една система по броя на нейните елементи: броя на потенциалните пътища на взаимодействие между нейните елементи, т.е. н! , където n е броят на неговите елементи. Наричаме система малка, ако n е голямо, ако n>gt; 7. При n=7 имаме междинен клас системи. Малката система винаги е проста, но голямата може да бъде както проста, така и сложна. Задачата на технологията за програмиране е да научи как да прави големи системи прости.
Получената оценка на простите системи по броя на елементите се използва широко в практиката. Така че за ръководителя на екипа е много желателно да няма повече от шест подчинени, които да си взаимодействат помежду си. Също така е много важно да се спазва правилото: „всичко, което може да се каже, трябва да бъде казано в шест абзаца или по-малко“. Ще се опитаме да следваме това правило в това ръководство: всяко изброяване на взаимосвързани твърдения (набор от препоръки, списък с изисквания и т.н.) ще бъде съответно групирано и обобщено. Полезно е да го следвате, когато разработвате PS.
Неправилният превод като причина за грешки в софтуера
Когато разработваме и използваме PS, ние многократно се сблъскваме с[2.3, стр. 22-28] с преобразуване (превод) на информация от една форма в друга (виж фиг. 2.1). Клиентът формулира своите нужди в PS под формата на някои изисквания. Въз основа на тези изисквания разработчикът създава външно описание на софтуера, като използва спецификацията (описанието) на дадения хардуер и, евентуално, спецификацията на основния софтуер. Въз основа на външното описание и спецификация на езика за програмиране се създават текстове на PS програми на този език. Според външното описание на PS се разработва и потребителска документация. Текстът на всяка програма е изходната информация за всяка нейна трансформация, по-специално при коригиране на грешка в нея. Потребителят, въз основа на документацията, извършва редица действия за прилагане на PS и интерпретира получените резултати. Навсякъде тук, както и в редица други процеси на разработка на PS, се извършва посоченият превод на информация.
Ориз. 2.1. Груба схема за разработване и приложение на ПС.
На всеки от тези етапи преводът на информация може да бъде направен неправилно, например поради неразбиране на оригиналното представяне на информацията. Възникнала на един от етапите на разработване на PS, грешка в представянето на информация се превръща в нови грешки в резултатите, получени на следващите етапи на развитие, и в крайна сметка ще се окаже в PS.
Модел на превод
За да разберете същността на грешките в превода, разгледайте модела [2.3, стр. 22-28], показан на фиг. 2.2. На него човек превежда информация от представяне A в представяне B. При това той извършва четири основни стъпки на превод:
Фиг.2.2. модел на превод.
той получава информацията, съдържаща се в представяне А чрез неговия четец R;
Тойсъхранява получената информация в своята памет М;
той избира от паметта си информацията, която трябва да бъде преобразувана, и информацията, описваща процеса на преобразуване, извършва превода и изпраща резултата към неговия записващ механизъм W;
използвайки този механизъм, той улавя изглед B.
2.4. Основните начини за справяне с грешки.
Като се вземат предвид разгледаните особености на човешките действия по време на превод, могат да се посочат следните начини за справяне с грешките:
стесняване на пространството за преброяване (опростяване на създадените системи),
осигуряване на необходимото ниво на обучение на разработчиците (това са функциите на мениджърите на екипа за разработка),
осигуряване на недвусмисленост на тълкуването на представянето на информацията,
контрол на коректността на превода (включително контрол на еднозначността на тълкуването).
Упражнения към лекция 2.
2.1. Какво представляват простите и сложните системи?
2.2. Какво представляват малките и големите системи?
Литература към лекция 2.
2.1. Е. Дейкстра. Бележки за структурираното програмиране / W. Dahl, E. Dijkstra, K. Hoor. Структурно програмиране. - М.: Мир, 1975. - С. 7-19.
2.2. Е.А. Жоголев. Технологични основи на модулното програмиране. // Програмиране, 1980, #2. - С. 44-49.
Г. Майерс. Надеждност на софтуера. - М.: Мир, 1980.