- •Методология программной инженерии
- •Научный редактор: е.В. Ершов, доктор технич.Наук Введение
- •Раздел 1 методология и программная инженерия
- •Контрольные вопросы
- •Раздел 2 программная инженерия в жизненном цикле программных средств
- •2.3. Жизненный цикл профилей стандартов программных средств
- •Контрольные вопросы
- •Задания
- •3.3. Проектирование программного обеспечения (Software Design по swebok)
- •3.2. Программные требования (Software Requirements по swebok)
- •3.4. Конструирование программного обеспечения (Software Construction по swebok)
- •3.5. Тестирование программного обеспечения (Software Testing по swebok)
- •3.6. Сопровождение программного обеспечения (Software Maintenance по swebok)
- •3.8 Процесс программной инженерии (Software Engineering Process по swebok)
- •Контрольные вопросы
- •Задания
- •Список литературы
3.4. Конструирование программного обеспечения (Software Construction по swebok)
Термин конструирование программного обеспечения (software construction) описывает детальное создание рабочей программной системы посредством комбинации кодирования, верификации (проверки), модульного тестирования (unit testing), интеграционного тестирования и отладки.
Данная область знаний связана с другими областями. Наиболее сильная связь существует с проектированием (Software Design) и тестированием (Software Testing). Причиной этого является то, что сам по себе процесс конструирования программного обеспечения затрагивает важные аспекты деятельности по проектированию и тестированию. Кроме того, конструирование отталкивается от результатов проектирования, а тестирование (в любой своей форме) предполагает работу с результатами конструирования. Достаточно сложно определить границы между проектированием, конструированием и тестированием, так как все они связаны в единый комплекс процессов жизненного цикла и, в зависимости от выбранной модели жизненного цикла и применяемых методов (методологии), такое разделение может выглядеть по разному.
Хотя ряд операций по проектированию детального дизайна может происходить до стадии конструирования, большой объем такого рода проектных работ происходит параллельно с конструированием или как его часть. В свою очередь, на протяжении всей деятельности по конструированию, инженеры используют модульное и интеграционное тестирование. В процессе конструирования обычно создается большая часть активов программного проекта – конфигурационных элементов (configuration items). Поэтому в реальных проектах невозможно рассматривать деятельность по конструированию в отрыве от области знаний «Конфигурационного управления» (Software Configuration Management).
Так как конструирование невозможно без использования соответствующего инструментария, важную роль в конструировании играет область знаний «Инструменты и методы программной инженерии» (Software Engineering Tools and Methods).
Безусловно, вопросы обеспечения качества значимы для всех областей знаний и этапов жизненного цикла. В то же время, код является основным результирующим элементом программного проекта. Таким образом, явно напрашивается и присутствует связь обсуждаемых вопросов с областью знаний «Качество программного обеспечения» (Software Quality).
Фундаментальные основы конструирования программного обеспечения включают:
Минимизация сложности
Ожидание изменений
Конструирование с возможностью проверки
Стандарты в конструировании
Первые три концепции применяются не только к конструированию, но и проектированию, и лежат в основе современных методологий управления жизненным циклом программных систем.
3.5. Тестирование программного обеспечения (Software Testing по swebok)
Тестирование – деятельность, выполняемая для оценки и улучшения качества программного обеспечения. Эта деятельность, в общем случае, базируется на обнаружении дефектов и проблем в программных системах.
Тестирование программных систем состоит из динамической верификации поведения программ на конечном (ограниченном) наборе тестов, выбранных соответствующим образом из обычно выполняемых действий прикладной области и обеспечивающих проверку соответствия ожидаемому поведению системы:
динамичность (dynamic) предполагает выполнение тестируемой программы с заданными входными данными. При этом, величины, задаваемые на вход тестируемому программному обеспечению, не всегда достаточны для определения теста. Сложность и недетерминированность систем приводит к тому, что система может по разному реагировать на одни и те же входные параметры, в зависимости от состояния системы.
конечность (finite): даже для простых программ теоретически возможно столь большое количество тестовых сценариев, что исчерпывающее тестирование может занять многие месяцы и даже годы. Именно поэтому, с практической точки зрения, всестороннее тестирование считается бесконечным. Тестирование всегда предполагает компромисс между ограниченными ресурсами и заданными сроками, с одной стороны, и практически неограниченными требованиями по тестированию, с другой.
выбор (selection): многие предлагаемые техники тестирования отличаются друг от друга в том, как выбираются сценарии тестирования. Определение подходящего набора тестов для заданных условий является очень сложной проблемой. Обычно, для выбора соответствующих тестов совместно применяют техники анализа рисков, анализ требований и соответствующую экспертизу в области тестирования и заданной прикладной области.
ожидаемое поведение (expected behaviour): необходимо решить, какое наблюдаемое поведение программы будет приемлемо, а какое – нет. В противном случае, усилия по тестированию – бесполезны. Наблюдаемое поведение может рассматриваться в контексте пользовательских ожиданий, спецификации или в контексте предсказанного поведения на основе неявных требований или обоснованных ожиданий.
Общий взгляд на тестирование программного обеспечения последние годы активно эволюционировал, становясь все более конструктивным, прагматичным и приближенным к реалиям современных проектов разработки программных систем. Тестирование не рассматривается как деятельность, начинающаяся только после завершения фазы конструирования, тестирование рассматривается как деятельность, которую необходимо проводить на протяжении всего процесса разработки и сопровождения и является важной частью конструирования программных продуктов. Планирование тестирования должно начинаться на ранних стадиях работы с требованиями, необходимо систематически и постоянно развивать и уточнять планы тестов и соответствующие процедуры тестирования. Тестирование, наравне с управлением рисками, является тем инструментом, который позволяет действовать именно в таком ключе. Причем действовать достаточно эффективно. С другой стороны, необходимо осознавать, что даже если приемочные тесты показали положительные результаты, это совсем не означает, что полученный продукт не содержит ошибок. Этим вопросам, в частности, адресована область знаний «Сопровождение программного обеспечения» (Software Maintenance).
В области знаний «Качество программного обеспечения» (Software Quality) техники управления качеством четко разделены на статические (без выполнения кода) и динамические (с выполнением кода).
Модульное и интеграционное тестирование все чаще рассматривают как неотъемлемый элемент деятельности по конструированию.
