Глава 19
Конструирование, тестирование
и развертывание продукта
Существует много форм воплощения проектных решений, но одна из них, которая считается конечной формой материализации проекта, предназначена для развертывания продукта у пользователей. Все неопределенности снимаются, когда программное обеспечение компонуется ради демонстрации функций, внешнего вида, поведения, требуемых пользовательских действий, помощи, обучения, времени отклика, надежности, практичности и других программных возможностей.
Этап реализации называют по-разному — сборкой, программированием, конструированием и, помимо прочего, разработкой. Здесь используется термин "конструирование". Рамки этапа конструирования охватывают проект реализации, реализацию, тестирование компонент, системное тестирование и другие виды тестов, пользовательские приемочные испытания, а также окончательную оценку продукта на предмет удовлетворения требований (рис. 19.1)
В процессе конструирования основная цель состоит в том, чтобы завершить переход от проекта и прототипа к завершающему продукту, который по-прежнему удовлетворяет критериям и ожиданиям, установленным на более ранних этапах. При конструировании возможно проведение завершающих итераций и тонкая настройка компонент ПИ, однако если проектная бригада работала с усердием, не следует ожидать многочисленных итераций проектных решений. Может существовать и немало проблем практичности, причем не должно быть никаких препятствий, серьезно влияющих на сроки, ограничения и требования.
В этой главе рассматриваются следующие вопросы.
Обеспечение плавного перехода от проектирования к этапу конструирования.
Проект реализации, программирование и тестирование компонент.
Системное и другие виды тестирования.
Трудности, решения и уроки
Уступки, компромиссы и неожиданности.
Развертывание.
Конструирование продукта согласно проекта.
Ко времени завершения конструирования готов рабочий продукт, который удовлетворяет установленным для него требованиям и критериям.
проектирования к этапу конструирования
Требования находят свое воплощение в документации и конкретных проектные решениях. Конкретные проектные решения материализуются в виде спецификаций макетов, раскадровки, прототипов и информации, все еще находящейся в голова: участников проектной бригады. Объем работ по созданию ЕЙ может изменяться ог 30 до 50% от общего объема работ по программному продукту в зависимости от тип; продукта, его аппаратной и программной архитектуры, а также от инфраструктуры Разработчики программных продуктов обычно сталкиваются с большими объемам! программирования ПИ, строгими требованиями к ПИ, ограничениями на сроки или ограниченными профессиональными ресурсами, которые влияют на продуктивность конструирования ПИ.
Полезное правило. Никогда не получается выполнить задание настолько легко, как представляется.
Эксперты утверждают, что фактическое календарное время программирования составляет всего 15% от всего срока разработки. Это может быть справедливо для некоторых небольших проектов, однако уложиться в данную цифру для средне- и крупномасштабных проектов вряд ли удастся.
Качественный проект сокращает этап конструирования. Существует много осложняющих факторов, которые превращают скромную оценку в значительно большую цифру, — порядок величины роста в логике, деталях и сложности не должен удивлять. Кроме того, при работе со сложными и требовательными языками программирования и средствами реализации обычно приходится сталкиваться с некоторыми странностями в поведении языков и средств. Анализ подобного поведения требует времени и ухищрений, а также концентрации внимания на некоторых элементах управления или перерисовки экранов. К счастью, "странности" в языках и средствах прорабатываются на ранних этапах либо для них имеются известные решения, основанные на опыте.
Проектная бригада учитывает то, какие профессиональные навыки необходимы и какими навыками обладают члены бригады в отношении применяемых в проекте языков и средств разработки. Бригада также должна знать и чутко реагировать на такие факторы, как сжатые сроки разработки, стабильность требований, полнота и качество исходных проектных решений.
Полезное правило. ПО пользовательского интерфейса аналогично любому другому ПО — только сложнее.
Переход от спецификации ПИ. Конструирование ПИ точно в соответствии с документально оформленной спецификацией — сложная задача, но немного все же остается на долю воображения. Даже очень детализированную и хорошо написанную спецификацию трудно прочесть и понять из-за объема информации, который необходим, чтобы объяснить статический и динамический внешний вид и поведение ПИ, ввод пользовательской информации, а также методы взаимодействия пользователя с системой, имеющиеся в наличии для доступа к возможностям ПО.
После того как желаемый результат осознан, проектная бригада должна совершить решающий прыжок, чтобы преобразовать требуемый результат в конкретные действия, которые необходимо выполнить с использованием имеющихся в распоряжении бригады языков и средств конструирования. Зачастую этим прыжком приходится преодолевать очень большую пропасть средств и ограничений, которые с легкостью поддерживают именно нежелательный результат.
Переход от прототипов ПИ. Самый легкий способ перехода — от существующих прототипов. Однако даже при разработке интерактивных прототипов с использованием предполагаемых средств разработки продукта могут существовать методы создания прототипов, обладающие следующими особенностями.
Прототип спроектирован, но еще не реализован каким-либо способом.
Прототип реализован как имитационная модель ПИ, но даже приблизительно не похож на подход к реализации ПИ.
Реализован полноценный прототип (т.е. основные алгоритмы и/или структуры данных работают, но не считаются приемлемыми для реализации в рамках продукта по тем или иным причинам).
Полезное правило.
Позаботьтесь о том, чтобы разработка функциональных прототипов, анализ и подгонка наиболее трудных алгоритмов и структур данных выполнялись теми, кто должен их реализовывать.
Поскольку языки и средства обычно представляют собой не совсем то, что говорится о них в рекламе, позаботьтесь, чтобы пределы их использования и присущие им ограничения были осознаны и адекватным образом учтены в планах.
Оцените, какая часть ПО прототипов может быть повторно использована для продукта и опирайтесь на соответствующие предположения.
Трудные случаи. Труднее всего передать информацию, которая остается в головах разработчиков. Несмотря на объем и сложность проектных деталей, всегда остается некоторая информация, не представленная в спецификации или прототипе. Разработка оказывается в еще худшей ситуации, когда проектировщики переходят на другие проекты, а их знания и проектные замыслы уходят вместе с ними. Компенсировать потерянные знания всегда трудно.
Полезное правило. В течение этапа конструирования проектировщиков следует держать поблизости.
Лучший случай. В лучшем случае в наличии имеется спецификация и прототип, а первые проектировщики — носители недокументированных знаний — являются частью бригады по реализации. Подобную ситуацию следует планировать и управлять ею. Это помогает передаче знаний и четкому установлению ответственности за проект.
Детали, детали и еще раз детали. На данном этапе разработки все вопросы, касающиеся других видов ПО, применимы и в случае ПО пользовательского интерфейса (сюда относятся объем работы, качество, производительность, навыки, сроки). Приходится иметь дело со всеми аспектами поведения ПО, включая особые ситуации, комбинации входной и выходной информации, обработку ошибок и сообщения. Вопросы глубины и широты прототипирования больше не актуальны. Также затрагиваются проблемы взаимодействия с не интерфейсными функциями и функциями поддержки.
Полезное правило.
Остерегайтесь компромиссов, вызванных неожиданностями и сжатыми сроками.
Избегайте идти на компромисс в отношении целостности проекта и требований.
Проект реализации, программирование и тестирование компонент
Даже в предположении, что для построения ПИ имеется вся необходимая и достаточная проектная информация, еще нужно пройти немалый путь, чтобы завершить конструирование и развертывание продукта у пользователей. Требуется выполнить проект реализации, программирование, компонентное тестирование и другие виды тестирования, которые призваны продемонстрировать, удовлетворяет ли продукт требованиям и может ли он считаться готовым к развертыванию.
Зачастую продукты подходят к запланированному сроку завершения испытаний со многими нерешенными проблемами. Проблемы могут быть связаны с дефектами функций, ПИ, практичности, производительности и другими типами недостатков. Зачастую некоторые требования удовлетворяются частично, в результате чего обычно выносится формальное и окончательное положительное или отрицательное решение о том, приступать ли к развертыванию продукта, а если приступать, то при каких условиях.
Проект реализации. Проект реализации, направленный на создание ПИ, который обеспечивает доступ к возможностям ПО с использованием различных методов, касается способов осуществления этой задачи с помощью алгоритмов, методов, структур данных и источников данных набора инструментальных средств программирования и разработки. В конечном счете, проект реализации использует один или несколько языков программирования, инструкции языка, компоненты набора инструментальных средств, а также команды и ресурсы баз данных и ОС.
Рассматриваемые вопросы включают внутреннюю структуру, модульность, поток управления, межмодульные интерфейсы и логику для конкретных функциональных и информационных возможностей ПО, а также возможностей программного ПИ. На этом уровне необязательно рассмотрение конкретных инструкций, достаточно общих подходов к способам решения представленных вопросов.
Полезное правило. Чтобы удовлетворить требования, исследуйте альтернативы и осуществляйте итерации.
Реализация. Выбор, организация, написание и упорядочение инструкций и комментариев языка программирования и ОС для достижения конкретного результата обычно называют программированием. Для разработки программных инструкций и ресурсов наподобие графических файлов применяются предназначенные для этого инструментальные наборы средств разработки программ. Использование программных инструкций и инструментальных средств позволяет материализовать проект реализации и проект ПИ.
На пути выполнения этой работы встречается множество трудностей (выбор и написание соответствующих инструкций и обращений к ОС, методы и детали реализации, эффективность использования ресурсов и т.д.). Типичные задачи включают использование правил именования, приемов программирования, библиотек повторно используемых компонент и методов, контроль и управление изменениями ПО, а также отслеживание дефектов.
Даже использование средств разработки ПИ на основе графических языков программирования четвертого и пятого поколений (4GL и 5GL соответственно) не исключает написания программ, реализующих следующие функции.
Открытие, установка состояния и закрытие экрана или окна.
Размещение экрана или окна по отношению к другому экрану или окну.
Установка фокуса и установка состояния выбора.
Инициализация элемента управления.
Проверка допустимости значения поля (для ввода и вывода данных).
Тестирование содержимого элементов управления.
Разблокирование и блокирование элементов управления.
Поведение, связанное с обработкой событий, инициируемых клавиатурой или указателем.
Обратная связь с пользователями, обработка ошибок и сообщения.
Полезное правило.
Создание прототипов на ранних этапах разработки помогает выявить ограничения языков и средств, а также проверить методы работы ПИ. Начинать создание прототипов следует как можно раньше.
Чтобы удовлетворить требования, исследуйте альтернативы и осуществляйте итерации.
На этапе конструирования разработчики преодолевают ежедневные проблемы контроля программного кода, резервного копирования ПО, использования известных платформ разработки, эффективности, сопровождения и документирования ПО. На данном этапе продолжаются проверки за столом, ревизии качества и сквозной контроль программного кода.
Полезное правило. Позаботьтесь об использовании средств управления версиями для управления программным кодом ПИ и другими составляющими программного продукта.
По возможности следует предвосхищать проблемы (например, время отклика, подверженное ошибкам ПО и надежность). При проявлении ограничений ОС или языка программирования необходимо разработать обходные пути.
Полезное правило. Каждому языку программирования и инструментальному средству присущи свои проблемы.
Наращивание программного кода. Фактическая разработка проводится с использованием наращиваемого и сквозного подхода к конструированию. Аналогично тому, как проект и прототипы ПИ разрабатываются итеративно с наращиванием возможностей, должен разрабатываться и реальный продукт. Другими словами, сперва осуществляется небольшой шаг в разработке с последующим тестированием, затем чуть больший шаг в разработке с тестированием всего, что разработано на текущий момент, и так до тех пор, пока разработка не будет выполнена полностью. Необходимо сосредоточиться на качестве программного кода, качестве ПИ, практичности, времени отклика, надежности и удовлетворении других требований. Если это еще не сделано, позаботьтесь о документировании специальных алгоритмов и методов по мере разработки ПО. Впоследствии вам может потребоваться модифицировать программный код.
Тестирование компонент. Точное определение компонентного тестирования (иногда называемого также блочным или модульным тестированием) гласит, что это тестирование, которое требует сквозной проверки в предполагаемой среде использования корректности таких возможностей продукта, как функции продукта, ПИ, доступ к базе данных, API (Application Programming Interface — интерфейс прикладного программирования) и т.д. При этом необходима интеграция со всеми аспектами программного пакета или системы. В действительности требуется продемонстрировать, что конкретная функция работает в соответствии с ее спецификацией и/или так, как предполагается и требуется.
Зачастую бывает трудно создать реальную пользовательскую среду вследствие состояния связанного с ней ПО, недостаточного знакомства со средствами разработки и отсутствия доступа к реальным производственным базам данных или сетям. Время, необходимое для настройки подобной среды, может быть непомерно большим из-за ограниченных ресурсов или недостаточного знания особенностей среды.
Полезное правило. Если реальная среда не может быть создана на ранних этапах разработки, необходимо учесть в календарном плане время на создание среды, на выполнение дополнительных тестов и на управление непредвиденными ситуациями.
Если, например, доступ к некоторой функции осуществляется с помощью Web-броузера, компонентное тестирование функции не может считаться законченным до тех пор, пока она не будет протестирована в среде этого Web-броузера. Для тестирования функциональных возможностей достаточно оценки функций в рамках программы просмотра апплетов, которая, однако, не в состоянии продемонстрировать ограничений методов доступа ПИ, диктуемых Web-броузером.
Многие дефекты ПИ чрезвычайно трудно устранить. Иногда проблемы возникают из-за взаимодействия между возможностями языка, системы и инструментария, временами причина проблем кроется в последовательности и синхронизации инструкций.
Полезное правило. Выявляйте и разрешайте проблемы по ходу разработки, в особенности это касается предполагаемой пользовательской среды. Если проблему не удается решить сразу, документируйте ее и вновь вернитесь к ней позднее.
Критерии завершения компонентного тестирования. Применительно к каждой программной компоненте необходимо уметь оценить завершенность этапа компонентного тестирования. Чтобы исключить неоднозначности, применяются следующие специфические критерии успешного выхода из процесса компонентного тестирования:
запланированные пользовательские функции доступны посредством ПИ (т.е. ко всем доступным пользователям возможностям можно обратиться посредством использования экранов, команд, связей, наборов клавиш и т.д.)
и все возможности ПИ работают на уровне компонентных тестов (т.е. функции выполняются корректно с точки зрения лучшего разработчика и его коллеги – тестировщика)
и доступ к помощи/обучению/EPS (Electronic Publishing System — электронная издательская система) интегрирован в систему и работает корректно (справочная и другая пользовательская информация доступна и корректна)
и увеличение дефектов минимально (отсутствие известных дефектов независимо от серьезности)
и наращивание программного кода минимально и обусловлено только исправлением дефектов (программы не разрастаются без видимой причины)
и испытания практичности были проведены совместно с пользователями и их результаты соответствовали установленным критериям (например, удовлетворенности пользователей задачей и т.д.)
и производительность (время отклика) была оценена или измерена и оказалась в пределах, установленных критериями
и разработчик уверен, что ПО готово к началу системного тестирования (разработчик и его коллега-тестировщик не могут больше обнаружить дефектов в программном коде)
и время, выделенное на программирование, истекло (в противном случае все оборачивается улучшением/уточнением кода без необходимости).
Распространенные проблемы программирования. Представляется, что некоторые дефекты поведения ПИ с завидной регулярностью повторяются во многих программных продуктах.
Фокус клавиатуры не устанавливается именно в тех местах экрана, в которых требуется пользователю.
Использование клавиши табуляции приводит к потере фокуса клавиатуры на экране (иногда он больше не возвращается).
Упущена обратная связь по времени отклика (песочные часы) или индикация хода процесса.
Нестандартное поведение для клавиши <Enter> или указателя мыши при двойном щелчке.
Данные вопросы специально включаются в информацию по проекту или прототипу вместе с подходом, посвященным тому, каким образом окончательная реализация справляется с этими проблемами.
Подобный подход минимизирует потери от тривиальных дефектов ПИ и помогает держать в центре внимания функции, практичность, производительность и надежность.
Полезное правило. Обратите внимание на этап сертификации продукта, который призван продемонстрировать, что все стандарты, инструкции и детали, касающиеся ПИ, реализованы корректно.
Ориентированная на пользователей проектная бригада несет ответственность и отчитывается за успешное выполнение данного этапа до выхода из этапа компонентного тестирования.
Оценка практичности в процессе программирования и компонентного тестирования. Как обычно, в процесс программирования и компонентного тестирования вовлекаются пользователи. Всегда существуют подробности, которые необходимо обсудить с пользователями (например, обновляемая графика и компоновка, подгонка размеров полей и столбцов, а также несметное количество других проектных фрагментов и неожиданностей, которые могут не рассматриваться пользователями детально). Участие пользователей приносит ощутимую выгоду при необходимости идти на уступки и принимать решения на очень низком уровне детализации проекта, учитываются рекомендации пользователей относительно важных деталей проекта. Подробности рассматриваются с низкой или высокой точностью в зависимости от ситуации. По возможности используются эвристические, неформальные и формальные методы оценки.