На час написання цієї відповіді я зрозумів, що справа не в тестуванні, а в документації. Спершу слід прочитати проворний маніфест :
[Ми цінуємо] робоче програмне забезпечення над вичерпною документацією
Отже, ви повинні зробити свої технічні характеристики виконуваними, тобто записати їх як повністю автоматизований набір тестів.
Чи хороша ідея написання специфікацій на основі оповідань?
Так, імхо, це так. Це називається "поведінка, орієнтована на поведінку" або "специфікація на прикладі". У рубіні є чудовий огірок- інструмент, який дуже допомагає.
Проблема зараз полягає в тому, що оскільки так багато історій, не відразу зрозуміло для будь-якої частини системи, які історії стосуються цього.
Чому ти хочеш, щоб це було зрозуміло? Я маю на увазі, чи справді вам потрібна матриця відстеження "тест / код"? Перевага написання тестів як специфікації полягає в тому, що вам не потрібна окрема простежуваність "вимог / тестів", оскільки тести стають вимогами. Для цілей інтеграційного тестування ви повинні ставитися до свого програмного забезпечення в цілому, а не як до окремих частин.
Можливо, вам знадобиться інструмент покриття, щоб побачити, чи є "мертві" модулі, частини вашої системи, які не охоплені вашими тестами специфікацій. Але вам дійсно не важливо, яким специфікаціям відповідає цей конкретний код. Це має бути навпаки: з конкретної специфікації ви повинні знати, яка частина системи їй відповідає. Ви не повинні турбуватися про дублювання ваших специфікацій. І якщо ви застосуєте принцип DRY до свого коду, було б кілька десятків специфікацій, що виконують один і той же код.
Це працює в час розробників, кожен спринт розробників отримує специфікацію, що визначає, що їм потрібно зробити, і зміни, які вони потребують внести. Але з точки зору збереження цього списку історій і для тестування, його початок отримувати справді важкі помилки відстеження і взагалі просто підтримання специфікацій, тому що один фрагмент функціональності на екрані, можливо, був задокументований у багатьох різних місцях через те, що він розділений за сюжетом.
Не так вже й рідко, що сотні тестів на інтеграцію порушені однією невеликою зміною критичного модуля. Ось тут і кроки тестування.
Ви повинні структурувати свої тести як такі, щоб ви могли визначити, чи відповідає певний тест вимогам високого рівня чи просто тонкою його деталлю. Якщо остання, ви повинні відокремити цей тест від набору інтеграційних тестів. Метою одиничного тестування є локалізація помилок. Так що якщо ви введете помилку, буде одна і лише одна помилка тесту.
Ми написали розповіді неправильно?
Я думаю, що вам просто потрібно впорядкувати свої історії в епоси або за користувачем, наприклад, "Клієнт", "Помічник", або за функціями / екранами / робочими потоками ("Купівля", "Відшкодування").
І знову тестування специфікацій не є заміною одиничного тестування. Детальніше