Советы по самостоятельному тестированию?
В общем, мне интересно, есть ли у кого-нибудь какие-либо советы для обеспечения того, чтобы ваш код хорошо тестировался, не получая никакой помощи от кого-либо еще в ограниченные сроки?
В прошлом мне всегда удавалось найти кого-то, кто бы проводил тестирование моего кода, или чтобы специальная группа по обеспечению качества проверила все и обнаружила все ошибки.
Я обычно очень осторожен, но я всегда нахожу там вещи, которые мне не хватает, и когда я проверяю их, я просто не вижу их.
Однако в моей нынешней работе мне дали два PHP-веб-приложения для написания в очень ограниченные сроки, и мне сказали, что мне нужно сделать все тестирование самостоятельно, несмотря на мои отзывы, что это не очень хорошая идея.
Мне было интересно, если бы кто-то еще имел эту проблему раньше и мог бы предложить некоторое понимание?
Я подумал, что, возможно, было бы неплохо написать план быстрого тестирования перед кодированием каждой области, а также дважды проверить требования перед выполнением тестирования.
8 ответов
Конечно, юнит-тестирование, будь то тестирование вначале или нет, должно быть вашей первой линией защиты, гарантирующей, что каждый компонент вашего приложения работает так, как вы думаете. Тем не менее, тип тестирования, о котором вы говорите, когда может быть полезно найти другую пару глаз, больше относится к области приемочных тестов - работает ли приложение в целом так, как должно; это работает для различных странных сценариев или поведения, и т. д.
Один из полезных подходов - представить себе персонажей: сначала протестируйте приложение как себя, а затем протестируйте его снова, представив, что вам 85 лет, вы плохо видите и плохо пользуетесь мышью. Вы можете нажать на самую яркую или самую большую вещь, предполагая, что это то, что вы должны делать, а может и не быть. Теперь представьте, что вам 12 лет и вы спешите. Вы никоим образом не собираетесь читать инструкции. Это все еще работает?
Для какого-либо конкретного поля, каковы крайние случаи того, что человек может напечатать? Что произойдет, если вы введете только пробелы? Только цифры в текстовом поле? Что произойдет, если вы введете HTML? Javascript? Что-то в незападном алфавите? Что если вы наберете что-то действительно длинное?
Ключ не только в том, чтобы проверить "счастливый путь", когда пользователь просматривает приложение так, как вы думали. Пройдите приложение так, как никто никогда не должен. Потому что... они будут.
Другой важный момент - никогда ничего не игнорировать. Легко заставить странный экран подойти и сказать себе: "О, это просто случайность". Вы должны заметить себя и отследить все, что не так, как должно быть.
Всегда есть ограничения на то, сколько тестов вы можете сделать. В рамках ограничений вам, очевидно, нужно создавать тесты. Очевидно, что вы хотите сначала построить тесты для наиболее важных областей (безопасность, возможность повреждения, потеря данных, функциональность).
Помимо функциональной спецификации, вы вряд ли получите много справки, чтобы решить, что тестировать. Но вы можете получить автоматическую помощь в виде инструментов тестирования покрытия. Эти инструменты сообщают вам, какой код вы тестировали, и, следовательно, какой код вы НЕ тестировали. Изучив непроверенный код, вы можете определить, является ли он более или менее критичным и, следовательно, более или менее заслуживает того, чтобы тестировать его перед выпуском. Инструменты покрытия тестирования также сообщают вам соотношение тестируемого кода к общему коду и являются лучшей отраслевой практикой, гарантирующей, что это соотношение составляет 70% или выше. Вы можете использовать эти данные, чтобы договориться с вашим боссом о большем количестве времени, используя простое средство: "У нас только 15% тестового покрытия... посмели ли мы его опубликовать?"
Средство тестирования покрытия, которое работает с PHP, можно найти здесь: Semantic Designs PHP Test Coverage Tool
Следует иметь в виду, что у разработчика есть естественная тенденция тестировать "лучший путь" для своего кода. Другими словами, вы написали это, так что вы знаете, что должны нажимать на определенные места, печатать определенные вещи, и поэтому вы проверяете это. Это, конечно, важно.
Здесь есть несколько хороших предложений, но большинству (но не всем) кажется, что пропущено отрицательное тестирование. По сути, вам нужно проверить границы и проверить злонамеренные. Как уже отмечалось, поместите код скрипта в такие поля, как:
<script>alert('abc')</script>
Становится очевидным, что вы не смогли правильно кодировать, если получили предупреждение! Еще одна вещь, чтобы сделать это:
abc' or 'a' = 'a'
Это потенциально может показать проблемы внедрения SQL в таких вещах, как аутентификация. Вы также можете проверить внедрение SQL с такими вещами, как:
abc'; drop table users; select * from dual where 'a' = '
Если ваш стол только что ушел, у вас есть проблема! Существует огромное количество примеров, но, по крайней мере, вам нужно потратить некоторое время на тестирование OWASP top 10.
Другие места, где вы хотите протестировать, это такие вещи, как очень большие числа, особенно когда ожидаются целочисленные входные данные на 32-битной платформе, отрицательные значения, нет значений и т. Д. В основном, проверьте, что нужные потоки работают, а затем сделайте все возможное, чтобы разбить,
Ваш работодатель явно не считает, что тестирование важно. Вы должны уйти и найти подходящую работу.
Ненавижу это говорить, но думаю, что в твоем случае Алекс Тингл прав. Это невозможная ситуация.
JacobM и Santi правы в упоминании модульного тестирования, приемочного тестирования и разработки на основе тестирования. Я бы добавил в этот список инструменты покрытия кода и статического анализа.
Но хотя TDD или базовое модульное тестирование, как правило, окупаются за счет сокращения времени тестирования, снижения частоты дефектов и простоты обслуживания, они не помогут вам выполнить поставленные задачи вовремя в смертельном режиме. Это особенно верно, если у вас нет опыта написания автоматических тестов.
Вежливо сформулированный, ваш начальник просит вас нести технические долги. Правильно сформулированный, он просит вас игнорировать профессиональную этику.
Улыбнитесь, скажите "да, сэр", сделайте все возможное в отведенное время и обновите свое резюме.
Я думаю, что TDD это именно то, что вы ищете. Сначала пишите тесты, затем пишите код, который проходит тесты. Вам не нужен кто-то еще, кроме вас (хотя бы некоторая помощь с тестами), и вы будете иметь более четкое представление о том, что должен делать инструмент, даже до того, как начнете кодировать его.
Я согласен с предыдущим ответом о значении и эффективности разработки через тестирование и модульного тестирования. Если все сделано правильно, процесс TDD, в котором вы пишете свои модульные тесты перед тем, как писать производственный / поставляемый код, поможет вам сосредоточиться и поможет проверить ваш дизайн и интерфейсы. Кроме того, другие разработчики смогут четко и последовательно работать над тем, как использовать и использовать ваш код очень простым способом. Просто имейте в виду, что модульное тестирование не то же самое и не является заменой для полного интеграционного тестирования. При таком подходе вам все равно может понадобиться написать полный план тестирования интеграции.
Я работаю в.NET, и у меня не было ничего, кроме хороших результатов в работе с NUnit.
Я не работал в PHP раньше, но из того, что я видел, вы можете рассмотреть SimpleTest или PHPUnit.
Учитывая требования вашего босса, которые вы должны соблюдать, пока работаете на него и до тех пор, пока не сможете изменить его мнение, вы дали правильный ответ в вопросе.