2017-01-31 4 views
0

У меня есть побочный проект, который я люблю кодировать, я провожу время с ним, когда смогу, так как я все еще заканчиваю учебу в университете. Когда я начал это, я едва знал хорошие практики программирования и TDD, среди прочего, я только закодировал это для удовольствия.Должен ли я продолжать тестировать код или реализовывать больше функций?

Несколько итераций, рефакторов, улучшений и накопленных знаний после этого привели меня к написанию модульных тестов и интеграционных тестов, которые я мог бы, прежде чем внедрять новые функции. Тем не менее, мне все еще не хватает времени, чтобы действительно сделать все тестов, чтобы иметь приемлемый охват кода ... хотя программное обеспечение работает good.

Поэтому, когда у меня есть время потратить на этот проект, я хочу реализовать новые функции (на этот раз да, параллельно выполняйте параллельные тесты), не делая много тестов, которые, скажем, очень скучны, и многие из них трудно сделать из-за насмешек и прочего ...

Должен ли я продолжать добавлять функциональность или я должен закончить все тесты раньше?

Я определяется этим, что программное обеспечение должно быть в бета версии, пока покрытие кода разумным не будет достигнута. В это время он находится на версии 0.9-beta.

Если я добавлю новые функции, должен ли я следовать семантической версии, сохраняя beta? Например, следующие итерации 0.10-beta,и т. Д. До тех пор, пока испытания не будут выполнены, когда, наконец, он превратится в не бета-версии.

Если вы хотите, чтобы проверить мой проект, вот ссылка:octaviospain.github.io/Musicott

+1

Забудьте о покрытии кода. Высокий охват кода обычно превращается в цель (вместо того, чтобы быть просто метрикой с низким значением), и когда это происходит, на качество тестов влияет. Программист начинает писать неестественные, запутанные тестовые примеры, чтобы запустить непокрытый код. Вместо этого сконцентрируйтесь на написании тестов, которые описывают функциональность. Время от времени запускайте тестовый набор с охватом кода. Если тесты ясны и покрывают ожидаемую функциональность, тогда покрытие кода говорит вам, что непокрытый код на самом деле не нужен. Удалите его вместо того, чтобы писать тесты, чтобы получить его. – axiac

+0

Ну, 8% - низкий уровень покрытия кода. Напиши больше тестов, но не используйте линейное покрытие кода как руководство для тестирования. Написание тестов даже после того, как вы написали проверенный код, поможет вам лучше понять поток приложений. – axiac

+0

@axiac благодарю вас за ответ, я хотел иметь более высокий охват кода, чтобы сделать проект более привлекательным, как и много проектов с открытым исходным кодом на github, с CI _passing_ на зеленом, зеленом покрытии и так далее. Я понимаю, что включение в цель не является правильным способом проверки моего кода. – ottogarcia

ответ

5

Письменные тесты для существующего кода не являются разработкой, основанной на испытаниях. Для такого побочного проекта я бы сделал это, только если вас беспокоит, что ваш код может работать неправильно. Что вы могли бы сделать и что я рекомендовал бы, если вы хотите протестировать свой существующий код, это написать приемочные тесты.

Приемочные испытания - это тесты, которые охватывают историю пользователей, что означает последовательность действий, которые пользователь хотел бы выполнить, и проверить, соответствует ли поведение всей вашей системы требованиям. Поскольку приемочные тесты - это, в основном, тесты от конца до конца, вам не нужно издеваться над своей системой. Наличие этих приемочных испытаний даст вам уверенность в том, что ваша система правильно реагирует на общий ввод пользователя.

После этого вы можете сосредоточиться на добавлении новых функций с использованием цикла TDD. Я бы рекомендовал использовать приемочные испытания там. Начните с написания приемочного теста, который охватывает всю функцию или историю пользователя, а затем повторите цикл Red-Green-Refactor до тех пор, пока ваше принятие не пройдет. К тому времени вы знаете, что функция работает правильно, и вы можете начать работу над следующим.

Если вы хотите узнать больше о приемочных испытаниях, я рекомендую прочитать «Растущее объектно-ориентированное программное обеспечение, ориентированное на тесты». Иногда становится немного скучно, авторы повторяются несколько раз, но это стоит того, чтобы читать.

+0

Спасибо за ваш ответ. Я не думал о приемочных тестах напрямую, но вместо этого в системных тестах, поскольку это приложение, в которое вводится пользовательский ввод в графическом интерфейсе. Я думаю, что результат будет таким же, как вы говорите: пишите тесты, которые охватывают прецедент/пользователь/историю, чтобы достичь правильной функциональности. Я не упомянул, что пытался сделать тесты TDD для существующего кода. Я пытался сказать, что я не делал TDD в подходящий момент, и я хотел написать тесты после того, как был написан хороший код. – ottogarcia

1

По-моему, вы не должны пытаться писать все тесты на одном дыхании, потому что это было бы слишком много времени и ужасающая задача. Помимо написания тестов для уже написанного кода на самом деле не квалифицируется как TDD (IMHO), так как ваши тесты не вызывают дизайн вашего кода и не влияют на качество кода (если вы не рефакторинг). Просто не забудьте написать тесты для любого дальнейшего кода, который вы правильно. С учетом сказанного, всякий раз, когда вы начинаете работать над определенной функцией, убедитесь, что вы пишете некоторые тесты интеграции/регрессии на высоком уровне, которые гарантируют, что вы не сломаете что-либо слишком критичное.

Все это основано на предположении, что ваш код написан достаточно прилично, чтобы быть testable. Если это не так, тогда вам нужно сначала укусить пулю и реорганизовать код, связанный с этой функцией, прежде чем приступать к работе над ней.

Смежные вопросы