Я хотел бы знать, каково общее влияние планирования ресурсов на программный проект, когда требования и дизайн проекта определяются автоматическими приемочными и модульными тестами, в отличие от более «традиционного» подхода к разработке программного обеспечения.
Как, по вашему опыту, в целом влияет на потребности в ресурсах для завершения проекта программного обеспечения в рамках TDD, в отличие от более «традиционных» методологий разработки? Мне кажется само собой разумеющимся, что качество повысится, а количество неопределенности уменьшится, потому что тестирование проводится раньше, но для проведения предварительных испытаний кажется, что для его выполнения потребуется больше часов разработчика. Насколько увеличиваются усилия по разработке или они действительно уменьшаются из-за заблаговременного устранения ошибок?
Сколько еще усилий требуется от клиента? Должны ли они изменить то, как они относятся к проекту, особенно если они привыкли к большому дизайну с самого начала? Увеличивается ли количество часов, необходимое клиенту, или оно действительно уменьшается?
Я полагаю, что оценки времени будут очень расплывчатыми в итеративном процессе TDD в начале проекта TDD (поскольку нет плана разработки программного обеспечения). Есть ли, скажем, 20% в проекте, когда доверие возрастает настолько, что клиенту может быть предоставлена более или менее стабильная оценка времени и денег?
Примечание: я не ищу здесь субъективных мнений или теорий, поэтому, пожалуйста, не спекулируйте. Я ищу больше опыта в TDD.
источник
Ответы:
Первое, что нужно сказать, это то, что TDD не обязательно повышает качество программного обеспечения (с точки зрения пользователя). Это не серебряная пуля. Это не панацея. Уменьшение количества ошибок - это не то, почему мы делаем TDD.
TDD делается в первую очередь потому, что он приводит к лучшему коду. В частности, TDD приводит к коду, который легче изменить .
Желаете ли вы использовать TDD или нет, зависит больше от ваших целей в проекте. Это будет краткосрочный консалтинговый проект? Вам необходимо поддержать проект после начала работы? Это тривиальный проект? В этих случаях дополнительные издержки могут не стоить того.
Тем не менее, по моему опыту, ценность предложения для TDD растет в геометрической прогрессии, поскольку время и ресурсы, участвующие в проекте, растут линейно.
Хорошие юнит-тесты дают следующие преимущества:
Побочным эффектом TDD может быть меньшее количество ошибок, но, к сожалению, по моему опыту, большинство ошибок (особенно самых неприятных) обычно вызваны неясными или плохими требованиями или не обязательно будут покрываться первым циклом модульного тестирования.
Обобщить:
Разработка на версии 1 может быть медленнее. Разработка на версии 2-10 будет быстрее.
источник
Есть глава в Создание программного обеспечения о разработке через тестирование, в которой цитируется статья, обсужденная здесь .
Являются ли эти результаты обобщенными для вашего случая - это, конечно, то, что утверждают сторонники TDD, очевидно, и недоброжелатели TDD будут утверждать, не соответствует действительности.
источник
У меня нет каких-либо исследовательских работ или статистических данных, которые можно было бы вам дать, но я поделюсь своим опытом работы в команде / организации, в которой исторически проводилось единичное тестирование с низким и средним уровнем охвата и отсутствовали сквозные тесты, и постепенно переместить планку туда, где мы сейчас находимся, с большим количеством подхода ATDD (но, как ни странно, не традиционного TDD).
В частности, это то, как сроки проекта использовались (и все еще действуют в других командах / продуктах в той же организации):
Это выглядит как нелепые накладные расходы, но на самом деле это очень часто, во многих организациях это просто маскируется отсутствием или неэффективным контролем качества. У нас есть хорошие тестировщики и культура интенсивного тестирования, поэтому эти проблемы обнаруживаются на ранних этапах и решаются заранее (большую часть времени), вместо того, чтобы им было позволено играть медленно в течение многих месяцев / лет. Затраты на обслуживание на 55-65% ниже, чем общепринятая норма 80% времени, затрачиваемого на отладку, что кажется разумным, потому что у нас было несколько юнит-тестов и межфункциональных команд (включая QA).
Во время первого выпуска нашей команды нашего последнего продукта мы начали модифицировать приемочные тесты, но они были не совсем готовы, и нам все еще приходилось полагаться на ручное тестирование. Релиз был несколько менее болезненным, чем другие, IMO частично из-за наших случайных приемочных тестов, а также частично из-за нашего очень высокого охвата модульных тестов по сравнению с другими проектами. Тем не менее, мы потратили почти 2 недели на регрессию / стабилизацию и 2 недели на проблемы после производства.
Напротив, каждый выпуск, начиная с этого первоначального выпуска, имел критерии раннего принятия и приемочные тесты, и наши текущие итерации выглядят так:
Другими словами, мы выросли с 55-65% затрат на обслуживание до 20-30% затрат на обслуживание. Та же команда, тот же продукт, главное отличие - прогрессивное улучшение и оптимизация наших приемочных испытаний.
Стоимость их обслуживания составляет в среднем 3-5 дней для аналитика QA и 1-2 дня для разработчика. Наша команда состоит из 4 разработчиков и 2 аналитиков QA, поэтому (не считая UX, управления проектами и т. Д.) Это максимум 7 человеко-дней из 60, что я бы округлил до 15% накладных расходов на внедрение, просто чтобы быть на безопасная сторона.
Мы тратим 15% каждого периода выпуска на разработку автоматических приемочных тестов, и в процессе можем сократить 70% каждого выпуска, проводя регрессионные тесты и исправляя ошибки, возникшие до и после выпуска.
Вы могли заметить, что вторая временная шкала намного более точна и также намного короче первой. Это то, что стало возможным благодаря предварительным критериям приемки и приемочным испытаниям, потому что это значительно упрощает «определение выполненного» и позволяет нам быть гораздо более уверенными в стабильности выпуска. Ни одна другая команда (пока) не преуспела с двухнедельным графиком выпуска, за исключением, возможно, при выполнении довольно тривиальных выпусков обслуживания (только для исправления ошибок и т. Д.).
Еще один интересный побочный эффект заключается в том, что мы смогли адаптировать график выпуска к потребностям бизнеса. Однажды нам пришлось продлить его примерно до 3 недель, чтобы совпасть с другим выпуском, и мы смогли сделать это, предоставив больше функциональных возможностей, но не потратив дополнительное время на тестирование или стабилизацию. В другой раз нам пришлось сократить его примерно до полутора недель из-за праздников и конфликтов ресурсов; нам пришлось взять на себя меньше разработок, но, как и ожидалось, мы смогли потратить соответственно меньше времени на тестирование и стабилизацию без каких-либо новых дефектов.
Таким образом, по моему опыту, приемочные тесты, особенно когда они проводятся в самом начале проекта или спринта, и когда они хорошо поддерживаются критериями приемки, написанными владельцем продукта, являются одними из лучших инвестиций, которые вы можете сделать. В отличие от традиционного TDD, который, как правильно отмечают другие, больше внимания уделяет созданию тестируемого кода, чем кода без дефектов - ATDD действительно помогает обнаруживать дефекты намного быстрее; это организационный эквивалент того, что целая армия тестеров каждый день проводит полный регрессионный тест, но намного дешевле.
Поможет ли вам ATDD в более долгосрочных проектах, выполненных в RUP или (тьфу) стиле «Водопад», проектах продолжительностью 3 месяца или более? Я думаю, что жюри все еще на этом. По моему опыту, самые большие и уродливые риски в долгосрочных проектах - это нереальные сроки и меняющиеся требования. Нереальные сроки приведут к тому, что люди будут использовать ярлыки, в том числе ярлыки для тестирования, а значительные изменения в требованиях, вероятно, сделают недействительным большое количество тестов, что потребует их переписывания и может привести к дополнительным затратам на реализацию.
Я почти уверен, что ATDD имеет фантастическую выгоду для Agile моделей или для команд, которые не являются официально Agile, но имеют очень частые графики выпуска. Я никогда не пробовал это на долгосрочном проекте, в основном потому, что я никогда не был в организации и даже не слышал об организации, готовой попробовать ее в таком проекте, поэтому вставьте здесь стандартный отказ от ответственности. YMMV и все такое.
PS В нашем случае от клиента не требуется никаких дополнительных усилий, но у нас есть преданный, постоянный владелец продукта, который на самом деле пишет критерии приемлемости. Если вы занимаетесь консалтинговым бизнесом, я подозреваю, что конечным пользователям будет гораздо сложнее написать полезные критерии приемлемости. Владелец продукта / менеджер продукта кажется довольно важным элементом для выполнения ATDD, и хотя я могу еще раз говорить только из собственного опыта, я никогда не слышал об успешной практике ATDD без кого-либо, кто мог бы выполнять эту роль.
источник
Требования к ресурсам
По моему опыту, стоимость обязательных предварительных тестов немедленно снижается путем определения четких критериев приемлемости заранее и последующей записи в тест. Мало того, что стоимость предварительного тестирования снижается, я также обнаружил, что в целом это ускоряет общую разработку. Хотя эти улучшения скорости могут быть уничтожены из-за плохого определения проекта или изменения требований. Тем не менее, мы все еще можем достаточно хорошо реагировать на такого рода изменения без серьезных последствий. ATDD также значительно сокращает усилия разработчика по проверке правильного поведения системы с помощью автоматизированного набора тестов в следующих случаях:
Это предполагает команду, которая знакома с процессами и практиками.
Участие клиентов
Они должны быть намного более вовлечены на постоянной основе. Я наблюдал огромное сокращение первоначальных инвестиций, но в настоящее время наблюдается гораздо больший спрос. Я не измерял, но я уверен, что это больше времени для клиента.
Тем не менее, я обнаружил, что отношения с клиентами значительно улучшаются после примерно пяти демонстраций, когда они видят, что их программное обеспечение медленно обретает форму. Время, затрачиваемое заказчиком, с течением времени несколько уменьшается, так как устанавливается взаимопонимание, все привыкнут к процессу и ожиданиям.
Оценка проекта
Я обнаружил, что обычно вопрос заключается в том, насколько четко задан вопрос, и могут ли технические специалисты оценить (включая оценку карты) проект. Предполагая, что проект хорошо проработан, и у вас есть разумное среднее значение скорости и стандартное отклонение, мы обнаружили, что легко получить достойную оценку. Очевидно, что чем крупнее проект, тем больше неопределенности, поэтому я обычно делю большой проект на небольшой, обещая продолжить позже. Это гораздо проще сделать, если вы установили связь с клиентом.
Например:
«Спринты» моей команды длились неделю, и у нас есть промежуточное среднее и стандартное. отклонение последних 14 недель. Если у проекта 120 баллов, мы имеем среднее значение 25 и стандартное значение. Отклонение от 6, тогда оценка завершения проекта составляет:
Мы используем 2 ст. Эмпирическое правило отклонения для нашей оценки достоверности 95%. На практике мы обычно завершаем проект по первому стандарту. отклонение, но над нашим средним. Обычно это связано с доработками, изменениями и т. Д.
источник
Это на самом деле не правда. Если ваши разработчики пишут юнит-тесты (и они должны это делать), тогда время должно быть примерно таким же или лучше. Я сказал лучше, так как ваш код будет полностью протестирован, и им придется писать только код для выполнения требований.
Проблема разработчиков заключается в том, что они стремятся реализовать даже то, что не требуется, чтобы сделать программное обеспечение как можно более универсальным.
Это не должно иметь значения. Тот, кто выполняет требования, должен делать это как можно лучше.
Если вы занимаетесь гибким способом разработки, то это не означает большой дизайн. Но чем лучше будут выполнены требования, архитектура и дизайн - тем выше будет качество кода и уменьшится время завершения работы программного обеспечения.
Поэтому, если им нравится делать BDUF, пусть делают это. Это сделает вашу жизнь проще как разработчик.
источник