Чи бувають безпомилкові програми?
Із серії парадокси програмування
- Звичайно! - Чи вирішить хтось. - Щоб здати програму, треба спочатку виловити всі помилки! І тільки тоді запускати її у виробництво.
Я сам раніше точно так само думав. І був упевнений, що прав.
... Величезний машинний зал. Працює ЄС 1020. Я - молодий фахівець.
Підходжу до ведучого програмісту і звітую: - Володя! Я виправив останню помилку і хочу здати програму.
Володя поправляє окуляри і поблажливо окидає мене поглядом.
- Ніколи так не говори! Останню помилку ніхто ніколи не знаходить!
Правильніше сказати - ти знайшов передостанню!
Мені не подобалася така трактовка. Я продовжував вважати, що помилок у мене більше немає. Але впродовж півроку мені довелося в моїй, здавалося б, простенької програмі виправляти ще три несподівано виявившись помилки.
Мій перший начальник стверджував: - безпомилково програм не cуществует. Якщо помилки не знаходяться, значить, програма ще не побувала в тих умовах, які б їх виявили.
Чи не особливо я тоді довіряв його словами. Але на практиці доводилося все більше і більше переконуватися в їх правильності.
Безпомилкова програма - це таке ж поняття, як абсолютно тверде тіло. Системи стають все складніше. У них, як голки в копиці сіна, загубилися помилки. Їх дуже складно виявити, а ще складніше виправити. Буває, що колись зроблена помилка, відноситься до самого початку роботи над програмним комплексом, до його ядра. Прибрати її, чи не зачепивши основних напрямків, просто неможливо. Виправитися щось одне, а перестане працювати багато іншого.
Це не вигідно, і фірма йде на те, щоб залишити помилку. Прикладом служить Microsoft Word. Є певне досить складне поєднання слів, яке змушує редактор аварійно завершитися.
Колись, коли ще з Заходу хлинули комп'ютери і програмне забезпечення, ми розробляли свої системи і бази даних. Була завершена чергова версія складної розрахункової програми, і я її передав замовникові.
З'явилося багато нових ретельно налагоджених режимів робіт.
Одним сірим похмурим ранком лунає телефонний дзвінок. Мені пояснюють, що при певних діях програма просто «вилітає», нічого не порахувавши. Я в подиві і починаю перевіряти. Всі режими працюють і досить добре. Дзвоню і пояснюю. Мені кажуть, що знімається програму не
в розрахунковій частині, а коли просто натискаєш клавішу «введення» на порожньому екрані.
Я б таке перевірити просто не додумався. Виявляється, в одному з полів у мене була випадкова інформація. А поле потім використовувалося. У попередній же версії воно обнуляється.
Я в той час щиро вважав, що на такі ляпсуси здатні тільки ми. Якби я, наприклад, до тестування поставився б більш серйозно, то так нерозумно б не помилився. Як я був не правий! Відстежити будь-яким тестом все неможливо. Особливо добре виживають грубі помилки і в місцях, на самому видному місці.
Просто найпростіше не завжди перевіряється. Воно ж має працювати за замовчуванням!
Роблять такі помилки і програмісти великих систем зі світовим ім'ям.
При випуску нової версії часто перестає працювати те, що працювало без всяких проблем. Офіційні користувачі починаю слати «захоплені» відгуки авторам. Через якийсь час з'являється перше оновлення, в якому виправлено безліч виявлених недоліків і зроблено трошки нових.
Потім з'являється друге оновлення, третє. Версія знаходить стабільність.
Справедливо вважається, що купувати треба не абсолютно нову версію, а ту, на яку вже вийшли оновлення.
Отже, помилки - це природно для працюючої програми. І не треба їх боятися. Мислення у всіх людей різний, і автори не в змозі врахувати всього різноманіття спритності наших рук. При виявленні помилки в купленій програмі треба насамперед спробувати обійти її, опрацювати в іншому режимі. А, може, це зовсім не помилка, а просто наш некоректний підхід до використання програми! Якщо вже ляпсус явний - має сенс написати авторам. А якщо не хочеться, не пишіть! Про явний недолік обов'язково напишуть й інші, або самі автори схаменуться.
Іноді буває дуже важко розкрутити їх на коректуру. Вони наполегливо доводять, що потрібно використовувати інший метод.
Зрештою, перемагає самий наполегливий і завзятий.
Так піднімемо наші мишки за успіх у програмуванні!
А безпомилковий модуль - це занадто романтично ...