Пахнет домашним заданием.
Нужно ли тестирование в области программного обеспечения?
Да. Абсолютно. На всех уровнях. За исключением нескольких специализированных доменов, мы еще не находимся на этапе, когда мы можем математически доказать, что наш код корректен по отношению к конкретным ошибкам (по крайней мере, не в разумные сроки), поэтому мы должны бросить камни в это, чтобы увидеть, если и где это ломается.
Если мы создаем программное обеспечение с большой осторожностью, то зачем нам тестировать?
Тестирование - это не только поиск ошибок кодирования. Также необходимо убедиться, что вы выполнили все свои требования и что вся система работает так, как ожидалось. Если у меня есть требование, чтобы неудачная транзакция возвращала определенный код ошибки, тогда мне нужно написать тест, чтобы убедиться, что функциональность существует и работает правильно.
И все это предполагает, что спецификация и дизайн являются полными, правильными и внутренне непротиворечивыми, что часто не соответствует действительности. Даже если вы соответствуете спецификации букв и следите за дизайном вплоть до последней точки и точки с запятой, если спецификация или дизайн плохие, во время интеграции будут проблемы. Зачастую системное или интеграционное тестирование - это когда вы обнаруживаете, что сама спецификация содержит ошибки и требует пересмотра (см. Историю войны ниже).
После тестирования мы можем быть уверены, что достигли этой цели (продукт / программное обеспечение работает как задумано), потому что мы провели тестирование для нее? Является ли это возможным?
Нет, не до 100%. Мы не можем протестировать каждую мыслимую комбинацию входных данных или путей выполнения в любом, кроме самого простого кода. Мы не можем объяснить все факторы окружающей среды. Мы не можем представить все возможные способы отказа.
Мы можем проверить до точки , где мы находимся достаточно уверены , что нет никаких больших проблем. Опять же, именно поэтому мы должны тестировать на всех уровнях. Напишите набор тестов, чтобы убедиться, что ваш код правильно обрабатывает граничные условия (неверный ввод, неожиданные результаты, исключения и т. Д.). Модульное тестирование, чтобы убедиться, что ваш код соответствует его требованиям. Системный тест для проверки сквозной обработки. Интеграционный тест, чтобы убедиться, что все компоненты говорят друг с другом правильно. Проведите юзабилити-тестирование, чтобы убедиться, что все работает так, что клиенты не хотят стрелять в вас.
Реальный сценарий - я работал над серверной системой, которая периодически отправляла обновления в службу графического интерфейса для отображения в таблице на экране. Во время проекта было добавлено требование добавить фильтрацию к дисплею (например, оператор мог выбрать отображение подмножества записей в таблице). Ошибка проектирования № 1 - фильтрация должна была выполняться службой графического интерфейса пользователя (у меня есть странное, антикварное представление о том, что функции управления дисплеем должны быть обязанностью программного обеспечения для управления дисплеем), но из-за политики и моей неспособности распознавать проблемы до того, как они станут проблемы , это требование было наложено на серверное обслуживание. Ну, ладно, нет проблем, я могу это сделать. Фильтровать изменения состояния, я получаю сообщение, а затем отправляю сообщение о создании или удалениикаждая строка в таблице , потому что именно так работает интерфейс (ошибка проектирования № 2 - невозможно отправить обновления для нескольких строк в одном сообщении; мы даже не могли отправить одно сообщение «очистить» или «удалить», чтобы очистить вся таблица).
Ну, все работает хорошо во время разработки; Тестирование модуля, системы и интеграции показывает, что я отправляю правильную информацию и правильно обрабатываю изменения фильтра. Затем мы приступаем к тестированию юзабилити, и все это сильно рушится , потому что объем данных был огромен. Сетевая задержка между моим бэкэнд-сервисом и графическим интерфейсом была порядка от .15 до .25 секунд. Неплохо, если вам нужно только отправить обновления для дюжины строк или около того. Смертельно, когда нужно отправлять обновления за несколько сотен. Мы начали получать сообщения об ошибках, что графический интерфейс зависал после изменения состояния фильтра; ну нет, то, что происходило, было то, что это занимало порядка нескольких минут обновить отображение, потому что протокол сообщения с обновлением одной кости за один раз не мог обработать реальный сценарий.
Обратите внимание, что все это могло бы и должно было быть предвидено всеми, от генерального подрядчика вплоть до маленького старого меня, если бы мы удосужились провести даже самый базовый анализ заранее. Единственная защита, которую я предложу, - это то, что мы закрывали второй год шестимесячного проекта, который собирался сдать почти сразу после поставки, и мы все отчаянно пытались увидеть его суть.
Что подводит нас к последней причине для тестирования - CYA. Реальные проекты терпят неудачу по разным причинам, многие из которых являются политическими, и не все действуют добросовестно, когда что-то идет не так. Пальцы заострены, обвинения выдвинуты, и в конце дня вы должны быть в состоянии указать на запись, показывающую, что, по крайней мере, ваш материал работал так, как предполагалось.
If we create a software with care in during its development period then why should we go for Test?
- потому что несмотря ни на что, даже самый опытный программист допускает ошибки.