Чи може проектування за контрактом (DbC) бути способом програмувати обороно?
Чи один спосіб програмування в деяких випадках кращий, ніж інший?
Чи може проектування за контрактом (DbC) бути способом програмувати обороно?
Чи один спосіб програмування в деяких випадках кращий, ніж інший?
Відповіді:
Дизайн за допомогою контракту та оборонне програмування є в деякому сенсі протилежними один одному: у DbC ви визначаєте договори між співробітниками і програмуєте, припускаючи, що колабораціоністи виконують свої контракти. В оборонному програмуванні ви програмуєте за умови, що ваші співробітники порушують договори.
Справжній квадратний рутовий порядок, написаний у стилі DbC, зазначає у своєму договорі, що вам заборонено переходити у від'ємному числі, а потім просто припускати, що він ніколи не може зустріти негативне число. Справжній квадратний рут, написаний захисно, припускає, що він передається від'ємним числом і вживає відповідних заходів безпеки.
Примітка. Звичайно, можливо, що в DbC хтось інший перевірить контракт. Наприклад, у Ейфелі, система контрактів перевіряла б негативну кількість під час виконання і видала відповідне виняток. У Spec # довідник теореми перевірив би чи немає від'ємних чисел під час компіляції і не зможе збірку, якщо вона не зможе довести, що звичайна ніколи не буде передана від'ємним числом. Різниця полягає в тому, що програміст не проводить цю перевірку.
Чи може проектування за контрактом (DbC) бути способом програмувати обороно?
Так.
"Оборонне програмування" часто є приводом для того, щоб витрачати час. Він часто витрачає час на перевірку речей, що спричинить звичайні винятки. Замість винятків замість пунктів оброблення винятків пишуться додаткові заяви IF.
Визначте договір і виконайте його.
Коли хтось порушує контракт, програма - у звичайному ході подій - порушує і спричиняє нормальні винятки, з якими можна нормально працювати.
"Захисне програмування" та "Запобігання помилкам" можуть бути показані для додавання помилок (тому що перевірки запобігання помилкам самі по собі є помилковими), а не запобігають помилкам.
Обробка винятків може замовчувати, записувати та обробляти виняток набагато краще, ніж "Оборонне програмування".