Я старший инженер, работающий в команде из четырех человек на домашнем приложение для управления контентом, которое управляет большой спортивной сетью США сайт. Мы приступили к этому проекту два года назад и выбрали Java как наша платформа, хотя мой вопрос не специфичен для Java. поскольку мы начали, в наших рядах произошел некоторый отскок. У каждого из нас есть значительная степень широты при принятии решения о реализации хотя важные решения принимаются консенсусом.
Наш - относительно молодой проект, однако мы уже в точке когда ни один разработчик не знает все о приложении. Главная причиной этого являются наши быстрые темпы развития, большинство из которых происходит в хрусте, ведущем к нашему спортивному сезону; и факт, что наше тестовое покрытие по существу 0.
Мы все понимаем теоретические преимущества TDD и соглашаемся в что методология улучшит нашу жизнь и код качество, если бы мы начали и застряли с ним через года. Это никогда не утихало, и теперь мы отвечаем за непроверенные кодовая база, которая по-прежнему требует большого расширения и активно используется в производстве и опирается на корпоративную структуру.
Столкнувшись с этой ситуацией, я вижу только два возможных решения: (1) ретроактивно писать тесты для существующего кода или (2) переписывать столько приложения, поскольку это практично, но фанатично придерживаясь TDD принципы. Я воспринимаю (1) по большому счету непрактично, потому что мы иметь адский график зависимостей внутри проекта. Почти никто из наших компоненты могут быть протестированы изолированно; мы не знаем все использование случаи; и случаи использования, скорее всего, изменятся во время тестирования из-за требований бизнеса или как реакция на непредвиденные проблемы. Для эти причины, мы не можем быть уверены, что наши тесты окажутся будь то высокое качество, как только мы закончим. Существует риск возглавить команду в ложное чувство безопасности, при котором тонкие ошибки будут ползти в без каких-либо замечаний. Учитывая мрачные перспективы в отношении ROI, мне было бы сложно, или наша команда привела бы к оправданию этого стремиться к управлению.
Метод (2) более привлекателен, поскольку мы будем следить за первым испытанием таким образом, создавая код, который почти 100% покрывал сразу летучая мышь. Даже если первоначальные усилия приводят к появлению островов во-первых, это даст нам значительный плацдарм на пути к охвата всего проекта и помочь разделить и изолировать различные компоненты.
Недостатком в обоих случаях является то, что наша команда по бизнесу производительность может значительно замедляться или испаряться полностью во время любого тестирования. Мы не можем позволить себе это делать во время бизнес-хруст, хотя он сопровождался относительной затишью которые мы могли бы использовать для наших целей.
В дополнение к выбору правильного подхода (либо (1), (2), либо другой по еще неизвестному решению), мне нужна помощь в ответе на следующий вопрос: Как моя команда может гарантировать, что наши усилия не будут в конечном итоге тратятся впустую неконтролируемыми испытаниями и/или неспособностью написать новые, как требования к бизнесу? Я открыт для широкого спектра предложения здесь, включают ли они морковь или палочки.
В любом случае, спасибо за то, что вы прочитали об этом самоубийстве.