олютно правильні програми. Мабуть, побудувати практичну технологію створення довільних абсолютно правильних програм неможливо. Але для деяких класів програм такі дослідження ведуться. Проте, найближчим часом не можна очікувати реальних синтезаторів і верифікаторів для скільки практичного застосування. p> 
 Технології налагодження програм    Одна з аксіом програмування свідчить: Будь-яка нетривіальна програма містить хоча б одну помилку. Практика показує справедливість цієї аксіоми. Як би добре не була підготовлена програма, які б методи не застосовувалися при побудові програми, слід виходити з "презумпції винності". 
  Для виявлення і усунення помилок виділяється цілий етап - налагодження програм. Більшість фахівців вважають, що налагодження (разом з тестуванням) займає 50% часу розробки програм. 
  Мета налагодження - змінити програму таким чином, щоб вона була в змозі вирішити заплановану завдання. 
  У процесі налагодження можна виділити наступні етапи: тестування, аналіз, внесення змін. Ці етапи повторюються багато разів до тих пір, поки не буде прийнято рішення про припинення налагодження та передачі програми в експлуатацію. 
				
				
				
				
			  Мета тестування - продемонструвати, що помилка у програмі є, так що, якщо результат прогону якого тесту співпадає з передбачуваним результатом, вважається, що мета тестування не досягнута. При тестувань може виконуватися не вся програма, а тільки її частина - від однієї заданої точки програми до іншої. Суттєвим для тестування є побудова тестових наборів, тобто тих значень, які є кодами для тестування. 
  Саме тестування поділяють на три фази: складання (Генерація) тестових наборів, виконання програми на цих наборах, оцінка результатів виконання програми. Для простих випадків всі три фази виконуються "вручну", без машини. Але серйозне тестування має, звичайно, включати в себе роботу на машині. До жаль, в загальному випадку повну систему тестових наборів побудувати автоматично неможливо. 
  Хоча мета тестування - Констатація наявності помилки, тим не менш, мета виконання кожного окремого тестового завдання - отримати коректний результат. Для цього, якщо результат виявився некоректним, а це визначається аналізом результату - наступним етапом налагодження, то виконуються які-небудь зміни, спрямовані на усунення виявленої некоректності. 
  Уявімо налагодження програми у вигляді контуру управління, в якому об'єктом управління є налагоджувати програму Р. Метою такої системи є підвищення рівня безпомилковості програми. p> На схемі, представленої на рис. 4.12, суб'єкт управління являє собою налагоджувальні засоби, включають крім програм ще й людини, що виконує багато неформалізовані дії. br/>В  
 
 
 
 
 
 
 Рис. 4.12. Схема налагодження 
   Т-це завдання на тестування, включає, природно, і тестовий набір. Блок М визначає коректність виконання тестового завдання, блок А визначає причину некоректності, бло...