Ми пишемо тести, щоб перевірити правильність поведінки програми.
Перевірка правильності поведінки програми за допомогою перевірки вмісту вихідних висловлювань за допомогою очей - це посібник , а точніше - візуальний процес.
Ви можете це аргументувати
візуальна інспекція працює , я перевіряю, що код виконує те, що він мав робити, для цих сценаріїв, і коли я можу побачити, що це правильно, ми добре піти.
По-перше, це здорово, що вас цікавить, чи працює код чи ні. Це гарна річ. Ти попереду кривої! На жаль, проблеми з цим як підходом є.
Перша проблема з візуальним оглядом полягає в тому, що ви трапили аварію при зварюванні далеко від того, що не зможете знову перевірити правильність свого коду.
Друга проблема полягає в тому, що використовувана пара очей щільно поєднується з мозком власника очей. Якщо автору коду також належать очі, які використовуються в процесі візуального огляду, процес перевірки правильності має залежність від знань про програму, інтерналізовану в мозку зорового інспектора.
Новій парі очей важко зайти і перевірити правильність коду просто тому, що вони не є партнером з мозку оригінального кодера. Власникові другої пари очей доведеться поговорити з оригінальним автором коду, щоб повністю зрозуміти код, про який йде мова. Бесіда як засіб обміну знаннями є сумнівно ненадійною. Точка, яка є суперечкою, якщо оригінальний кодер недоступний для нових пар очей. У цьому випадку нова пара очей повинна прочитати оригінальний код.
Читання коду інших людей, який не охоплюється одиничними тестами, складніше, ніж зчитування коду, що має пов'язані одиничні тести. У кращому випадку читання коду інших народів - хитра робота, в гіршому - це найжорсткіше завдання в інженерії програмного забезпечення. Існує причина, що роботодавці, рекламуючи вакансії, наголошують, що проект є зеленим полем (або абсолютно новим). Писати код з нуля простіше, ніж змінювати існуючий код і тим самим робить рекламоване завдання виглядати більш привабливим для потенційних співробітників.
За допомогою тестування одиниць ми ділимо код на його складові частини. Потім для кожного компонента ми викладаємо стійло, вказуючи, як програма повинна вести себе . Кожен тестовий блок розповідає про те, як ця частина програми повинна діяти за певним сценарієм. Кожен тест на одиницю - це як у договорі, що описує, що має статися з точки зору клієнтського коду.
Це означає, що нова пара очей має дві нитки живої та точної документації щодо коду, про який йдеться.
Спочатку у них є сам код, реалізація, як це робилося ; по-друге, вони мають усі знання про те, що оригінальний кодер описаний у наборі формальних заяв, які розповідають про те, як повинен поводитися цей код .
Одиничні тести фіксують та формально описують знання, якими володів оригінальний автор, коли впроваджували клас. Вони надають опис того, як поводиться цей клас під час використання клієнтом.
Ви правильно ставите під сумнів корисність цього, оскільки можна писати одиничні тести, які є марними, не охоплюють весь код, про який йде мова, застаріли чи застаріли тощо. Як ми можемо гарантувати, що одиничні тести не лише імітують, але покращуються в процесі знаного, сумлінного автора, який візуально перевіряє вихідні заяви свого коду під час виконання? Спочатку напишіть одиничний тест, а потім введіть код, щоб зробити цей тест. Коли ви закінчите, нехай комп’ютери виконують тести, вони швидкі, вони чудово виконують повторювані завдання, які ідеально підходять для роботи.
Переконайтесь у якості тесту, переглядаючи їх щоразу, коли ви торкаєтесь коду, який вони перевіряють, та запускаючи тести для кожної збірки. Якщо тест не вдався, виправте його негайно.
Ми автоматизуємо процес запуску тестів, щоб вони виконувалися кожного разу, коли ми робимо збірку проекту. Ми також автоматизуємо генерацію звітів про покриття коду, які детально визначають, який відсоток коду охоплюється та використовується тестами. Ми прагнемо до високих відсотків. Деякі компанії не дозволять перевіряти зміни коду для контролю вихідного коду, якщо вони не мають достатньо одиничних тестів, щоб описати зміни в поведінці коду. Зазвичай друга пара очей буде розглядати зміни коду спільно з автором змін. Рецензент пройде через зміни, щоб гарантувати, що зміни зрозумілі та достатньо охоплені тестами. Тож процес огляду є ручним, але коли тести (одиничні та інтеграційні тести та, можливо, тести прийняття користувача) проходять цей посібник з перегляду вручну, стають частиною процесу автоматичного збирання. Вони запускаються кожного разу при реєстрації зміни. Aбезперервна інтеграція сервер виконує це завдання як частину процесу збирання.
Тести, які автоматично запускаються, підтримують цілісність поведінки коду та допомагають запобігти наступним змінам бази коду від порушення коду .
Нарешті, надання тестів дозволяє вам агресивно перефактувати код, оскільки ви можете зробити поліпшення великих кодів безпечними, знаючи, що ваші зміни не порушують існуючих тестів.
Існує застереження для тестування керованої розробки, і це те, що вам потрібно написати код з оком, щоб зробити його перевіреним. Це включає в себе кодування до інтерфейсів та використання таких методів, як залежність введення, для інстанцізації об'єктів, що співпрацюють. Перевірте роботу Кента Бека, який дуже добре описує TDD. Знайдіть кодування до інтерфейсів та вивчітьдизайн-візерунки