На момент написания этого ответа я понял, что дело не в тестировании, а в документации. Вы должны сначала прочитать проворный манифест :
[Мы ценим] рабочее программное обеспечение, а не полную документацию
Итак, вы должны сделать свои спецификации исполняемыми, т.е. написать их как полностью автоматизированный набор тестов.
Является ли написание спекуляций на основе историй хорошей идеей?
Да, имхо, это так. Это называется «поведенческая разработка» или «спецификация на примере». В рубине есть отличный инструмент огурец, который очень помогает.
Проблема сейчас в том, что из-за того, что существует так много историй, не сразу понятно, для какой части системы какие истории связаны с ней.
Почему вы хотите, чтобы это было понятно? Я имею в виду, вам действительно нужна матрица отслеживания "тест / код"? Преимущество написания тестов в качестве спецификации состоит в том, что вам не нужна отдельная трассируемость «требования / тесты», потому что тесты становятся требованиями. В целях интеграционного тестирования вы должны рассматривать свое программное обеспечение в целом, а не как отдельные части.
Вам может понадобиться инструмент покрытия, чтобы увидеть, есть ли «мертвые» модули, части вашей системы, не охваченные тестами спецификаций. Но вам действительно не важно, какой спецификации соответствует этот конкретный код. Должно быть наоборот: из конкретной спецификации вы должны знать, какая часть системы ей соответствует. Вам не нужно беспокоиться о дублировании ваших спецификаций. И если вы примените принцип DRY к своему коду, будут десятки спецификаций, выполняющих один и тот же код.
Это работает во времена разработчиков, каждый спринт разработчики просто получают спецификацию, описывающую то, что им нужно сделать и изменения, которые они должны сделать. Но с точки зрения поддержки этого списка историй и для тестирования, он начинает получать действительно серьезные ошибки отслеживания и в целом просто поддерживать спецификации, потому что одна часть функциональности на экране могла быть задокументирована в ряде разных мест из-за ее разделить на историю.
Нередко сотни интеграционных тестов ломаются из-за одного небольшого изменения в критическом модуле. Вот где начинается модульное тестирование.
Вы должны структурировать свои тесты как таковые, чтобы вы могли определить, удовлетворяет ли тот или иной тест требованию высокого уровня или его тонким деталям. Если последнее, вы должны отделить этот тест от вашего набора интеграционных тестов. Целью модульного тестирования является локализация ошибок. Так что, если вы введете ошибку, будет один-единственный провал теста.
Мы написали истории неправильно?
Я думаю, вам просто нужно организовать свои истории в эпопею либо по пользователю, например, «Клиент», «Помощник», либо по функциям / экранам / рабочим процессам («Покупка», «Возврат»).
И снова, тесты спецификаций не являются заменой юнит-тестированию. Читать далее