Добрый день. Вопрос №1 Какова стоимость получения диплома о мини-МБА по данному курсу? Или ориентироваться на указанную на сайте? Вопрос №2 Возможно ли начать обучение без потери результатов, не отправив документы на зачисление, а отправку выполнить позже? |
Место верификации среди процессов разработки программного обеспечения
1.8. Документация, создаваемая на различных этапах жизненного цикла
Синхронизация всех этапов разработки происходит при помощи документов, которые создаются на каждом из этапов. Документация при этом создается и на прямом отрезке жизненного цикла - при разработке программной системы, и на обратном - при ее верификации. Попробуем на примере V-образного жизненного цикла проследить, какие типы документов создаются на каждом из отрезков и какие взаимосвязи между ними существуют (Рис 1.8).
Результатом этапа разработки требований к системе являются сформулированные требования к системе: документы, описывающие общие принципы работы системы, ее взаимодействие с "окружающей средой" - пользователями системы, а также, программными и аппаратными средствами, обеспечивающими ее работу. Обычно параллельно с требованиями к системе создается план верификации и определяется стратегия верификации. Эти документы определяют общий подход к тому, как будет выполняться тестирование, какие методики будут применяться, какие аспекты будущей системы должны быть подвергнуты тщательной проверке. Еще одна задача, решаемая при помощи определения стратегии верификации - определение места различных верификационных процессов и их связей с процессами разработки.
Верификационный процесс, работающий с системными требованиями - это процесс валидации требований, сопоставления их реальным ожиданиям заказчика. Забегая вперед, скажем, что процесс валидации отличается от приемо-сдаточных испытаний, выполняемых при передаче готовой системы заказчику, хотя может считаться частью таких испытаний. Валидация является средством доказать не только корректность реализации системы с точки зрения заказчика, но и корректность принципов, положенных в основу ее разработки.
Требования к системе являются основой для процесса разработки функциональных требований и архитектуры проекта. В ходе этого процесса разрабатываются общие требования к программному обеспечению системы, к функциям, которые она должна выполнять. Функциональные требования часто включают в себя определение моделей поведения системы в штатных и нештатных ситуациях, правила обработки данных и определения интерфейса пользователя. Текст требования, как правило, включает в себя слова "должна, должен" и имеет структуру вида "В случае, если значение температуры на датчике ABC достигает 30 и выше градусов Цельсия, система должна прекращать выдачу звукового сигнала". Функциональные требования являются основой для разработки архитектуры системы - описания ее структуры в терминах подсистем и структурных единиц языка, на котором производится реализация - областей, классов, модулей, функций и т.п.
На базе функциональных требований пишутся тест-требования - документы, содержащие определение ключевых точек, которые должны быть проверены для того, чтобы убедиться в корректности реализации функциональных требований. Часто тест-требования начинаются словами "Проверить, что" и содержат ссылки на соответствующие им функциональные требования. Примером тест-требований для приведенного выше функционального требования могут служить "Проверить, что в случае падения температуры на датчике ABC ниже 30 градусов Цельсия система выдает предупреждающий звуковой сигнал" и "Проверить, что в случае, когда значение температуры на датчике ABC выше 30 градусов Цельсия, система не выдает звуковой сигнал".
Одна из проблем, возникающая при написании тест-требований - принципиальная нетестируемость некоторых требований: например, требование "Интерфейс пользователя должен быть интуитивно понятным" невозможно проверить без четкого определения того, что является интуитивно понятным интерфейсом. Такие неконкретные функциональные требования обычно впоследствии видоизменяют.
Архитектурные особенности системы также могут служить источником для создания тест-требований, учитывающих особенности программной реализации системы. Примером такого требования является, например, "Проверить, что значение температуры на датчике ABC не выходит за 255".
На основе функциональных требований и архитектуры пишется программный код системы, для его проверки на основе тест-требований готовится тест-план - описание последовательности тестовых примеров, выполняющих проверку соответствия реализации системы требованиям. Каждый тестовый пример содержит конкретное описание значений, подаваемых на вход системы, значений, которые ожидаются на выходе, и описание сценария выполнения теста.
В зависимости от объекта тестирования тест-план может быть подготовлен либо в виде программы на каком-либо языке программирования, либо в виде входного файла данных для инструментария, который выполняет тестируемую систему и передает ей значения, указанные в тест-плане, либо в виде инструкций для пользователя системы, описывающей необходимые действия, которые нужно выполнить для проверки различных функций системы.
В результате выполнения всех тестовых примеров собирается статистика об успешности прохождения тестирования - процент тестовых примеров, для которых реальные выходные значения совпали с ожидаемыми, так называемых пройденных тестов. Непройденные тесты являются исходными данными для анализа причин ошибок и последующего их исправления.
На этапе интеграции осуществляется сборка отдельных модулей системы в единое целое и выполнение тестовых примеров, проверяющих всю функциональность системы.
На последнем этапе осуществляется поставка готовой системы заказчику. Перед внедрением специалисты заказчика совместно с разработчиками проводят приемо-сдаточные испытания - выполняют проверку критичных для пользователя функций согласно заранее утвержденной программе испытаний. При успешном прохождении испытаний система передается заказчику, в противном случае отправляется на доработку.
1.9. Типы процессов тестирования и верификации и их место в различных моделях жизненного цикла
1.9.1. Модульное тестирование
Модульное тестирование предназначено для небольших модулей (процедур, классов и т.п.). В ходе тестирования одного модуля, размер которого редко превышает 1000 строк, возможно проверить большую часть логических ветвей алгоритма, типичные граничные условия и т.п. В качестве критерия полноты тестирования используется полнота покрытия тестами ключевых элементов модуля (покрыты все требования, все операторы, все ветви логических условий, все компоненты логических условий и т.п.) [3]. Модульное тестирование обычно выполняется для каждого независимого программного модуля и является, пожалуй, наиболее распространенным видом тестирования, особенно для систем малых и средних размеров.
1.9.2. Интеграционное тестирование
При проверке каждого модуля системы по отдельности невозможно дать гарантии того, что эти модули будут работать вместе. Как правило, могут возникать (и возникают) проблемы, связанные с интеграцией модулей, с их взаимодействием. Для выявления таких проблем на ранних этапах разработки применяют интеграционное тестирование, т.е. тестирование модулей, объединенных в совместно работающие комплексы. Интеграция модулей и интеграционное тестирование, как правило, проводится в течение всего жизненного цикла разработки. Это позволяет облегчить процесс локализации проблем и дефектов. При откладывании интеграции на последние этапы жизненного цикла локализовать дефекты практически невозможно [3].
1.9.3. Системное тестирование
Логическим завершением интеграционного тестирования является системное тестирование. На этом этапе все модули системы объединены и работают вместе. Системное тестирование предназначено не для выявления проблем отдельных модулей - все они должны были быть устранены ранее, а для выявления проблем системы в целом, проблем использования системы в реальном окружении. Системные тесты учитывают такие аспекты системы, как устойчивость в работе, производительность, соответствие системы ожиданиям пользователя и т.п. Для определения полноты системного тестирования также используются иные способы - оценивается полнота выполнения всех возможных сценариев работы (как штатных, так и нештатных), полнота различных методов взаимодействия системы с внешним миром и т.п. [3]
1.9.4. Нагрузочное тестирование
Из системного тестирования часто выделяют как самостоятельную процедуру нагрузочное тестирование. В результате нагрузочного тестирования можно оценить, как будет изменяться производительность системы под различной нагрузкой. Данная информация позволяет принимать решения об области применения системы, ее масштабируемости. В результате нагрузочного тестирования зачастую пересматривается архитектура системы (если она не обеспечивает достаточного уровня производительности при заданной нагрузке) или отдельные архитектурные решения. С точки зрения заказчика системы нагрузочное тестирование является одним из способов проверки работы системы в условиях, приближеным к реальным.
1.9.5. Формальные инспекции
Формальная инспекция является одним из способов верификации документов и программного кода, создаваемых в процессе разработки программного обеспечения. В ходе формальной инспекции группой специалистов осуществляется независимая проверка соответствия инспектируемых документов исходным документам. Независимость проверки обеспечивается тем, что она осуществляется инспекторами, не участвовавшими в разработке инспектируемого документа.