Личный кабинет        18.06.2019   

Качество программного обеспечения. программный качество цикл

На данный момент наиболее распространена и используется многоуровневая модель качества программного обеспечения, представленная в наборе стандартов ISO 9126. На верхнем уровне выделено 6 основных характеристик качества ПО, каждую из которых определяют набором атрибутов, имеющих соответствующие метрики для последующей оценки

20. Основные черты качественного по.

Программно-технические факторы качества - это нефункциональные требования к программе, которые обычно не описываются в договоре с заказчиком, но тем не менее являются желательным требованием, повышающим качество программы. Некоторые из факторов: понятность(назначение ПО должно быть понятным из самой программы и документации), полнота(все необходимые части программы должны быть представлены и полностью реализованы), правильность(все функции должны быть реализованы в соответствии со спецификацией), краткость(отсутствие лишней, дублирующей информации, повторяющиеся части должны быть преобразованы в функции, модули, библиотеки), то же касается и документации, портируемость (мобильность), лёгкость в адаптации программы к другому окружению: другой архитектуре, платформе, операционной системе, согласованность(во всей программе и в документации должны использоваться одни и те же соглашения, идентификаторы, форматы, обозначения), сопровождаемость (насколько сложно изменить программу для удовлетворения новых требований(модифицируемость). Это требование так же указывает, что программа должна быть хорошо документирована, не слишком запутана и иметь резерв роста по использованию ресурсов(память и процессор)), тестируемость(позволяет ли программа выполнить проверку приёмочных характеристик, поддерживается ли возможность измерения производительности), удобство использования(простота и удобство использования программы), надёжность(отсутствие отказов и сбоев в работе программы, а так же простота исправления дефектов, ошибок, поддержка рестара), эффективность(насколько рационально программа относится к ресурсам), безопасность(поддержка внештатных ситуаций).

21. Качество по: мобильность и модифицируемость.

Качество ПО - это такая характеристика программного обеспечения, которая описывает степень его соответствия требованиям.

Одними из требований к качественному ПО являются мобильность и модифицируемость.

Мобильность программного обеспечения - это способность программного обеспечения работать на различных аппаратных платформах или под управлением различных операционных систем.

модифицируемости, если он имеет структуру, позволяющую легко вносить требуемые изменения.

Модифицируемость ПО- это такое качество ПО, при котором ПО имеет структуру, позволяющую легко вносить изменения.

22. Качество по: правильность и надёжность.

Качество ПО - это такая характеристика программного обеспечения, которая описывает степень его соответствия требованиям.

Одними из требований к качественному ПО являются правильность и надёжность.

Программный продукт обладает свойством надежности, если можно ожидать, что он будет удовлетворительно выполнять необходимые функции в течение определенного времени.

Существуют следующие подходы по обеспечению надежности:

    предупреждение ошибок;

    самообнаружение ошибок;

    самоисправление ошибок;

    обеспечение устойчивости к ошибкам.

Правильность ПО – это качество ПО отвечать поставленным задачам и требованиям.

Качество программного обеспечения (ПО) определяется на основе изучения внешних и внутренних особенностей продукта. Внешнее качество определяется по тому, как оно работает в режиме реального времени, насколько продуктивно для пользователей. Вторая особенность фокусируется на внутренних аспектах, которые зависят от качества написанного кода. Пользователь больше сосредотачивается на том, как ПО работает на внешнем уровне, качество которого может поддерживаться только в том случае, если специалист написал хороший программный код.

Качество программного обеспечения

В настоящее время существует два важных подхода, которые используются для определения качества ПО:

  1. Управление дефектами.
  2. Атрибут качества.

Все, что не соответствует требованию клиента, попадает в разряд дефектов. Команда разработчиков, которая не в состоянии полностью понять требования клиента, будет допускать ошибки проектирования.

В управлении дефектами их категории определяются на основе серьезности. Количество проблем с ПО подсчитывается и принимаются меры, согласно установленной серьезности. Контрольные диаграммы могут быть созданы для измерения возможностей процесса разработки.

Качество программного обеспечения значительно улучшилось за последние два десятилетия. Одна из причин этого заключается в том, что компании используют новые технологии, такие как объектно-ориентированную разработку и инструменты CASE. Кроме того, можно наблюдать растущую важность внедрения методов управления на производстве.

Управление качеством ПО делится на три основных направления:

  1. Гарантия. Разработка основ организационных мероприятий и стандартов качества программного обеспечения..
  2. Планирование. Выбор соответствующих стандартов и адаптация под конкретный программный проект.
  3. Контроль. Определение процессов, которые гарантируют, что разработка ПО соответствует стандартам качества.

Политика организации SQA

Политика организации в отношении качества программного обеспечения должна выполнять следующие требования:

  • Соответствие целям и задачам организации.
  • Приверженность общим концепциям обеспечения качества.
  • Приверженность стандартам качества, принятым организацией.
  • Обязательства выделять адекватные ресурсы.
  • Стремление к постоянному улучшению качества и производительности организации.

Чтобы были выполнены все требования стандарта, компании назначают ответственного по качеству. Обязанности данного сотрудника:

  • Ответственность за подготовку годовой программы мероприятий и бюджета SQA.
  • Организация разработки планов развития системы SQA.
  • Общий контроль за выполнением ежегодной программы регулярных мероприятий и запланированных проектов развития.
  • Определение соответствия программы мероприятий характеристикам и объему услуг субподрядчика и закупок ПО, запланированных на будущий год.
  • Презентация и пропаганда вопросов SQA для исполнительного руководства.
  • Изучение предложений, подготовленных отделом SQA для ежегодной программы мероприятий, проверка потенциала предложения для достижения целей.

Концепции высокого уровня

Качественные характеристики - это концепции высокого уровня, которые отражают важные аспекты и не подвергаются прямой оценке качества программного обеспечения. Вместо этого в плане должны быть определены соответствующие показатели, которые можно использовать для определения одной или нескольких характеристик.

Например, при оценке синтаксического анализатора XML можно использовать набор тестов на соответствие XML W3C. Он включает в себя тесты, разработанные для удовлетворения всех направлений контроля, а также рекомендации W3C Extensible Markup Language (XML) с особым акцентом на требованиях к обработке ошибок в правильности или достоверности документов XML. Таким образом процент пройденных тестовых случаев используется, как метрика для оценки следующих характеристик рассматриваемого XML-анализатора:

  • Перспектива пользователя.
  • Функциональность.
  • Надежность и отказоустойчивость.

С точки зрения пользователя есть несколько важных характеристик, отвечающих на следующие вопросы:

  • Кто предоставляет полный спектр необходимых функций по назначению?
  • Надежно ли работает ПО для получения необходимых результатов при правильном использовании?
  • Функционирует ли программа безопасно и надежно в случае неправильного ввода?
  • Легко ли использовать программный продукт?
  • ПО функционирует быстро или кажется излишне медленным?
  • Хорошо ли сочетается программа с другим продуктом, который использует пользователь?

Считая, что вопросы качества пользователю важны, ИТ-группа, отвечающая за развертывание и обслуживание ПО, может столкнуться с другими проблемами:

  1. Защита от вредоносных атак.
  2. Качество использования вычислительных ресурсов.

Некачественными ресурсами считаются те, которые требует больше памяти и вычислительной мощности, чем необходимо.

ИСО обеспечивает эту модель двумя новыми категориями высшего уровня, связанными с технологическим обеспечением качества программного обеспечения.

Требования ISO 9126 к продукту

ISO 9126 является международным стандартом для оценки ПО. Он разделен на четыре части, в которых рассматриваются следующие темы:

  • Внешние показатели.
  • Внутренние показатели.
  • Модель качества.
  • Показатели качества программного обеспечения.

Первая часть ISO 9126 является расширением предыдущего стандарта, выполненного McCall (1977), Boehm (1978) и FURPS в определении набора характеристик качества.

  • Функциональность.
  • Надежность.
  • Юзабилити.
  • Ремонтопригодность.
  • Портативность.

Функциональность продукта

Функциональность является основной целью любого продукта или услуги. Чем больше возможностей использования товара, тем сложнее становится определить его функциональность. Для ПО может быть указан список того, что для него доступно.

Некоторые перечисленные характеристики ПО (например, удобство) присутствуют только в определенной степени, то есть не просто «включен» или «отключен». Многие люди путают общую функциональность процесса и программного продукта. Часто это связано с тем, что диаграммы потоков данных (DFD) и другие инструменты моделирования могут отражать функциональность процесса, как набор преобразованных данных в data out.

ISO 9126-1 и другие модели качества не помогают измерить общие затраты или выгоды процесса, а исследуют только программный компонент. Взаимосвязь между функциональными возможностями ПО в рамках общего бизнес-процесса выходит за рамки ISO 9126.

Следующие возможности атрибутов характеризуют полезность ПО в данной среде. Каждая из них может быть измерена только при наличии соответствующих программ системы.

Как только система программного обеспечения начинает функционировать, характеристика надежности определяет ее способность поддерживать предоставление своих услуг в определенных условиях в течение конкретных периодов времени. Одним из аспектов этой характеристики является отказоустойчивость. Например, если сеть отключается в течение 20 секунд, то система должна быть в состоянии восстановить и продолжить работу.

Способность учиться использовать систему (обучаемость) является одной из основных характеристик юзабилити.

КПД связан с системными ресурсами, применяемыми при предоставлении необходимой функциональности. Объем дискового пространства, память и сеть являются хорошими показателями КПД. Как и в случае ряда других критериев, существуют совпадения между ними. Например, удобство использования системы влияет на ее производительность.

Способность идентифицировать и исправить ошибку в программном компоненте - это то, к чему относится характеристика ремонтопригодности. На ее показатели влияет читаемость или сложность кода, а также модульность. Это то, что помогает идентифицировать причину неисправности, чтобы затем устранить ее.

Характеристики ремонтопригодности:

  • Анализируемость - выявляет основную причину отказа.
  • Изменчивость - определяет усилия, которые прилагаются к модификации кода для устранения ошибки.
  • Стабильность - демонстрирует, насколько стабильна система в работе, когда в нее вносятся изменения.
  • Тестируемость - определяет, сколько усилий идет на тестирование системы.
  • Переносимость - способность системы адаптироваться к изменениям в ее среде.
  • Адаптируемость - насколько легко система адаптируется к изменениям, внесенным в спецификации.
  • Скорость установки - насколько легко система может быть установлена.
  • Возможность замены - насколько легко можно заменить компонент системы.
  • Стоимость качества ПО. Она очень важна. Когда разработчик решит провести тестирование для своего продукта, он на самом деле собирается потратить время, деньги и усилия на ее проверку.
  • Пригодность - определяет, соответствуют ли функции ПО требованиям.
  • Точность - устанавливает правильность реализации функций.
  • Функциональная совместимость - взаимодействуя с другими компонентами системы.
  • Соответствие ПО необходимым законам и рекомендациям.
  • Обеспечение качества и безопасности программного обеспечения и обработки транзакций, связанных с данными.
  • Надежность - способность ПО работать в определенных условиях в течение обозначенного периода времени.
  • Зрелость - частота сбоев ПО.
  • Восстанавливаемость - представление о способности системы вернуться к полноценной работе после сбоя.

Портативность относится к тому, насколько хорошо ПО может адаптироваться к изменениям в его среде или с его требованиями. Объектно-ориентированные методы проектирования и реализации могут способствовать тому, насколько эти характеристики качества программного обеспечения присутствует в данной системе.

Стоимость процессов анализа

Стоимость качества рассчитывается путем анализа затрат на соответствие и несоответствие. Цена первого показателя связана с:

  1. Расходами на профилактику. Это сумма, потраченная на обеспечение правильного соблюдения всех методов. Она включает в себя обучение командам, проверки кода и любые другие действия, связанные с QA.
  2. Затратами на оценку. Это сумма денег, потраченная на планирование всех тестовых заданий, а затем на их выполнение, например, на разработку тестовых примеров.
  3. Расходы на несоответствие. Это затраты, которые возникают из-за внутренних и внешних сбоев.

Внутренние сбои - это расходы, которые появляются, когда тестовые примеры выполняются впервые на внутреннем уровне, при этом некоторые из них терпят неудачу. Расходы возникают, когда программист должен исправить все дефекты, выявленные в его фрагменте во время модульного или компонентного тестирования.

Внешние сбои - это расходы, которые возникают, когда дефект устанавливается заказчиком, а не тестером. Эти расходы намного больше, чем те, которые появляются на внутреннем уровне. Особенно это актуально, если усиливается программный сбой.

Дисциплинированный анализ процесса

Это процессорная оценка программного продукта. Она включает в себя выявление и характеристику текущей практики, определение сильных и слабых сторон, а также способность контролировать или избегать существенные причины плохого качества товара. Аудит программ может быть трех типов:

  1. Самооценка. Проводится внутри собственного персонала организации.
  2. Оценка сторонней организации.
  3. Оценка третьей стороной.

Аудит процесса ПО выполняется в открытой общей среде с целью улучшения его показателей и с использованием программ обеспечения качества программного обеспечения. Результаты такого аудита являются конфиденциальными для организации.

Что касается сбора данных, то используются четыре метода:

  1. Стандартный перечень вопросов зрелости.
  2. Индивидуальные и групповые интервью.
  3. Обзоры документов.

Подходы к качеству программного обеспечения

Проведем классификацию различных подходов к качеству программного обеспечения, используя два измерения .

Первое измерение ориентировано либо на продукт, либо на процесс. Для повышения качества программного обеспечения можно сосредоточиться на качестве самого продукта, например, делая его более дружественным пользователю. Альтернативный подход заключается в совершенствовании процесса разработки, предполагая при этом, что чем лучше процесс, тем лучше качество программного обеспечения.

Второе измерение связано либо с соответствием, либо с усовершенствованием. Под соответствием будем понимать соответствие какому-либо стандарту. Усовершенствование имеет своей целью переход на более совершенные методы и лучшую практику для повышения качества.

ISO 9126 является стандартом на качество продукта, определяющим атрибуты и характеристики качества, включая измерения количественной оценки этих характеристик;

"усовершенствованием практики" например, является усовершенствование управления конфигурацией программного обеспечения, инспекций, тестирования и т. п.;

ISO 9000 - это совокупность стандартов, декларирующих требования для качественных систем. С точки зрения разработки программного обеспечения наиболее полезны "Руководящие указания по применению ISO 9001 при разработке, поставке и обслуживании программного обеспечения" ;

методы усовершенствования процесса разработки программного обеспечения предлагают некоторую шкалу уровней и требования соответствия, согласно которым можно определить место компьютерной компании на этой шкале. Наиболее известны и популярны два метода:

модель зрелости процесса разработки программного обеспечения - Capability Maturity Model for Software (CMM), предложенная Software Engineering Institute (SEI);

определение возможностей и улучшение процесса создания программного обеспечения. ISO/IEC 15504 Software Process Improvement and Capability determination (SPICE).

Два важнейших утверждения лежат в основе достижения качества.

  • Качество начинается с удовлетворения потребностей разработчиков.
  • Качество доказывается удовлетворением потребностей пользователей.

Подходы к достижению качества таковы:

  • качество достигается с помощью квалифицированных разработчиков, точного соблюдения процессов и удачных технологических подходов;
  • качество достигается путем полного понимания всех действий и изменений. Ни одна строка в программе не должна быть ни добавлена, ни изменена без полного понимания того - что, зачем и как делается;
  • качество достигается путем тщательного тестирования программы перед тем, как она будет доступна пользователю;
  • достижение качества должно планироваться;
  • достижение качества - обязанность каждого разработчика.

Характеристики качества программного обеспечения

В настоящее время не существует общепринятых критериев качества программного обеспечения.

Стандарт ISO 9000-3, п. 6.4.1

Классическое определение качества заключается в том, что разработанный программный продукт подтверждает свою спецификацию, при этом спецификация должна быть ориентирована на характеристики, которые желает получить клиент.

Современные стандарты уточняют понятие качества, вводя совокупность черт и характеристик, которые влияют на его способность удовлетворять заданные потребности пользователей. Перечислим ряд таких характеристик [Жоголев 1996].

Функциональность (пригодность, точность, интероперабельность, согласованность, безопасность). Функциональность - это способность программного продукта выполнять набор функций, удовлетворяющих заданным или подразумеваемым потребностям пользователей. Набор таких функций определяется во внешнем описании программного продукта.

Надежность (завершенность, устойчивость, восстанавливаемость).

Удобство (понимаемость, эффективность освоения, эргономичность). Удобство - это характеристики программного продукта, которые позволяют минимизировать усилия пользователя по подготовке исходных данных, применению программного продукта и оценке полученных результатов, а также вызывать положительные эмоции определенного или подразумеваемого пользователя.

Эффективность (по времени и по ресурсам). Эффективность - это отношение уровня услуг, предоставляемых программным продуктом пользователю при заданных условиях, к объему используемых ресурсов.

Сопровождаемостъ (простота анализа, изменяемость, стабильность, проверяемость). Сопровождаемость - это характеристики программного продукта, позволяющие минимизировать усилия по внесению изменений для устранения в нем ошибок и по его модификации в соответствии с изменяющимися потребностями пользователей.

Переносимость (адаптируемость, гибкость инсталляции, согласованность со стандартами и правилами, заменяемость). Переносимость - это способность программного продукта быть перенесенным из одной среды в другую, в частности, с одной аппаратной архитектуры на другую.

Добротность (рациональная организация, продуманность). Две наиболее интересные характеристики рассмотрим подробнее.

Надежность - это способность программы безотказно выполнять определенные функции при заданных условиях в течение заданного периода времени с достаточно большой вероятностью. Надежный программный продукт не исключает наличия в нем ошибок. Здесь важно, чтобы ошибки при практическом применении в заданных условиях проявлялись достаточно редко. Степень надежности характеризуется вероятностью работы программного продукта без отказа в течение определенного периода времени.

Существуют следующие подходы по обеспечению надежности:

  • предупреждение ошибок;
  • самообнаружение ошибок;
  • самоисправление ошибок;
  • обеспечение устойчивости к ошибкам.

Добротность программы заключается в том, что программа разумно и рационально организована, с достаточно продуманной организацией потоков управления и информационных потоков, не слишком переусложнена. Понятие добротности введено Поттосиным [Поттосин 1997] для оценки внутренних достоинств реализации программы с технической стороны. Поттосин вводит четыре класса критериев добротности программ.

Количественные критерии, связанные с различными способами оценки (метриками) сложности программ. Укажем примеры численных характеристик.

Меры Холстеда [Холстед 1981], включающие ряд формул, оценивающих длину, объем, уровень и интеллектуальное содержание программ.

Оценка сложности управляющего графа программы. Фрагмент программы может быть оценен цикломатическим числом ее управляющего графа, которое равно m - n + 2, где m - число дуг, an - число вершин управляющего графа. Считается, что цикломатическое число не должно превышать 10.

Оценка модульного разбиения программы. Такая оценка должна состоять из множества критериев. Например, сложность модуля оценивается совокупностью сложности определяемых в нем процедур и сложности связей модуля с другими модулями по импорту и экспорту определяемых сущностей.

Генетические критерии, связанные с происхождением программы и дисциплиной ее создания.

Структурные критерии, связанные с оценкой организации управления в программе и отражением организации управления в программном тексте.

Прагматические критерии, связанные с оценкой того, насколько программный текст соответствует цели программы. Формулируется список излишеств, которых не должно быть в добротных программах, например - вычислительной избыточности.

Оценка качества процесса разработки

Требовать и эффективности и гибкости от одной и той же программы -

все равно, что искать очаровательную и скромную жену.

По-видимому, нам следует остановиться на чем-то одном из двух.

Д. Вейнберг

В начале данного раздела мы отметили, что существует два подхода, которые могут применяться для оценки качества программного продукта.

  • Оценить качество конечного продукта.
  • Оценить качество процесса разработки.

Оценить качество конечного продукта можно тестированием и эксплуатацией. На это должно быть отведено время после завершения основной работы над программой. А вот второй подход должен стать частью долговременной стратегии компании.

Модель зрелости процесса разработки программного обеспечения

В модели определено пять уровней зрелости организации (http://www.sei.cmu.edu/cmm).

Начальный уровень. На этом уровне процесс разработки характеризуется практическим отсутствием процессов управления. Успех проекта зависит от индивидуальных усилий, личных качеств и даже героизма участников проекта.

Повторяемый уровень. На этом уровне зрелости в компании должны быть внедрены основные процессы управления для отслеживания стоимости, графика проекта и его функциональности. Уровень характеризуется тем, что управление проектами основывается на накопленном опыте и ранее достигнутые успехи будут повторены на подобных приложениях.

Определенный уровень. Процесс разработки программного обеспечения (как на уровне управленческой, так и инженерной деятельности) документирован, стандартизован и интегрирован на уровне всей организации. Процесс перестает зависеть от индивидуальных качеств отдельных разработчиков и не может скатиться на более низкие уровни в кризисных ситуациях.

Управляемый уровень. В компании устанавливаются детальные количественные показатели на процесс разработки и качество продукта. И процесс разработки, и продукты - понимаемы и контролируемы.

Оптимизирующий уровень. Продолжающееся совершенствование процесса разработки на основе анализа текущих результатов процесса и применения инновационных идей и технологий.

Определение возможностей и улучшение процесса создания программного обеспечения

Данная модель очень близка к модели зрелости, но уровни возможностей могут быть применены не только к организации в целом, но и к отдельно взятым процессам. Модели такого типа часто называют непрерывными. В непрерывных моделях один процесс может находиться на низком уровне зрелости, а другой - на высоком уровне. Стандарт определяет шесть уровней зрелости процесса.

Уровень 0. Процесс не выполняется.

Уровень 1. Выполняемый процесс.

Уровень 2. Управляемый процесс.

Уровень 3. Установленный процесс.

Уровень 4. Предсказуемый процесс.

Уровень 5. Оптимизирующий процесс.

Во время оценки и улучшения качества процессов выполняются задачи [Терехов, Туньон 1999], описанные ниже.

Сравнение процесса разработки программного обеспечения, существующего в данной организации, с описанной в стандарте моделью. Анализ результатов дает возможность определить сильные и слабые стороны процесса, его внутренние риски.

Оценка возможности улучшения данного процесса на основе определения текущих возможностей.

Техническая реализация поставленных задач на основе сформулированных целей совершенствования процесса. После этого весь цикл работ начинается сначала.

О роли министерства обороны

Заметим, что исторически модели оценки качества процесса разработки создавались с целью получения обоснованных процедур оценки и последующего развития технологических процессов в тех организациях, которые претендуют на получение заказов по разработке проектов, имеющих оборонное значение. Модели применимы к компаниям, разрабатывающим сложные и работающие в режиме реального времени системы. Это системы с длительным временем жизненного цикла, где дефекты в программном обеспечении могут иметь критическое значение.

"Достаточно хорошее" программное обеспечение

Вчера в Сиэтле после упоминания Биллом Гейтсом о выходе бета-версии

новой программы компании Microsoft произошло землетрясение.

Пользователи с ужасом ждут объявления о выходе финальной версии продукта.

Пропагандистом "достаточно хорошего" программного обеспечения является Эдвард Йордон [Йордон 2001]. Подчеркнем, что он применяет это понятие к "безнадежным проектам", которые связаны жесткими ограничениями на время, бюджет и людские ресурсы (см. разд. 1.6). В большинстве безнадежных проектов заказчик может быть удовлетворен системой, которая достаточно дешева, достаточно производительна, обладает необходимыми возможностями, достаточно устойчива и будет готова достаточно скоро. Фактически, эти характеристики можно считать определением "достаточно хорошего" программного обеспечения.

Оказывается, что даже "достаточно хорошее" программное обеспечение создать сложно. Приведем часть из совокупности причин, дающих этому объяснение [Йордон 2001].

Часто качество стремятся определить только в терминах дефектов (ошибок). С точки зрения пользователя не менее важны такие стороны, как готовность к определенной дате.

Предполагается, что малое количество ошибок равносильно лучшему качеству, и пользователь предпочитает именно такое качество. Однако иногда пользователь готов идти на компромиссы и примириться с некоторыми ошибками в обмен на более скорое выполнение работы.

Игнорирование таких факторов, как моральное состояние команды разработчиков и адекватные условия для работы.

Джеймс Бах (James Bach) указывает следующие необходимые условия для создания "достаточно хорошего" программного обеспечения:

  • утилитарная стратегия - искусство количественного анализа и максимизации чистого выигрыша в неопределенных ситуациях;
  • эволюционная стратегия - рассматриваемая не только по отношению к жизненному циклу проекта, но также к людям, процессам и ресурсам;
  • героические команды - не могучие гениальные программисты, а обычные умелые специалисты, способные к эффективному сотрудничеству;
  • динамическая инфраструктура - противоположность бюрократии и засилию политики;
  • динамические процессы - процессы, поддерживающие работу в эволюционной среде.

К сожалению, "достаточно хорошее" программное обеспечение редко бывает действительно достаточно хорошим. Никлаус Вирт отмечает, что это "следствие грустного проявления духа нашего времени, в котором исчезает личная гордость за свою работу". По его мнению, "нельзя ожидать качественно выполненной работы, если не отдавать ей себя полностью, если нет личного удовлетворения, более того - удовольствия от нее".

Интересное наблюдение, заключающееся в том, что некоторые компании стремятся к понижению интеллектуального уровня пользователей своей продукции, сделано многими программистами. Компаниям чрезвычайно выгодно иметь дело с людьми, техническая квалификация которых не позволяет определить реальные аспекты (например, качество, сложность, ценность) программного продукта. Прикрываясь "упрощением" работы и повышением доступности компьютеров для пользователей, компании многократно перегружают и усложняют программное обеспечение таким образом, чтобы пользователю было крайне трудно понять - каким образом оно работает на самом деле и стать профессионалом.

Стандартизация информационных технологий

Стандарт - общепринятое определение компонента технических или программных средств, являющихся результатом соглашения. Профиль - набор юридических и/или фактических стандартов, ориентированных на выполнение конкретной задачи [Козлов 1999].

Стандарты можно классифицировать следующим образом:

  • по типу установления требований:
  • устанавливающие требования к объекту;
  • устанавливающие требования к процессу;
  • по масштабу:
  • международные;
  • государственные;
  • отраслевые;
  • предприятий;
  • по степени юридического оформления:
  • принятые юридически;
  • действующие фактически.

Процесс стандартизации информационных технологий поддерживают три основные группы организаций. Международные организации, входящие в структуру ООН. International Organization for Standardization (ISO) - международная организация по стандартизации.

Об ISO

В 1947 году представители 25 стран решили создать организацию, основной задачей которой стала бы координация разработок и унификация международных стандартов. Новая организация получила название International Organization for Standardization (ISO). Несоответствие полного названия и аббревиатуры объясняется тем, что "ISO" - это греческий префикс, означающий "равный".

International Electrotechnical Commision (IEC) - международная электротехническая комиссия.

International Telecommunication Union-Telecommunications (ITU-T) - международный союз по телекоммуникации - телекоммуникация. До 1993 года эта организация называлась International Telegraph and Telephone Consultative Committee - международный консультативный комитет по телефонии и телеграфии.

Промышленные профессиональные или административные организации.

Institute of Electrical and Electronic Engineers (IEEE) - институтинженеровпоэлектротехникеиэлектронике.

Internet Activity Board (IAB) - совет управления деятельностью Интернета.

Промышленные консорциумы.

Object Management Group (OMG) - группа управления объектами.

Х/Open - консорциум, организованный группой поставщиков компьютерной техники.

Open Software Foundation (OSF) - фонд открытого программного обеспечения.

В 1987 году ISO и IEC объединили свою деятельность в области стандартизации информационных технологий и создали единый орган - Joint Technical Committee 1 (JTC1) - объединенный технический комитет 1. Этот комитет предназначен для формирования системы базовых стандартов з области информационных технологий.

Методологии Сопутствующие дисциплины

Ка́чество програ́ммного обеспечения - характеристика программного обеспечения (ПО) как степени его соответствия требованиям. При этом требования могут трактоваться довольно широко, что порождает целый ряд независимых определений понятия. Чаще всего используется определение ISO 9001 , согласно которому качество есть «степень соответствия присущих характеристик требованиям».

Качество исходного кода

Качество кода может определяться различными критериями. Некоторые из них имеют значение только с точки зрения человека. Например, то, как отформатирован текст программы, совершенно не важно для компьютера, но может иметь серьёзное значение для последующего сопровождения. Многие из имеющихся стандартов оформления кода , определяющих специфичные для используемого языка соглашения и задающие ряд правил, улучшающих читаемость кода, имеют своей целью облегчить будущее сопровождение ПО, включающее отладку и обновление. Существуют и другие критерии, определяющие, «хорошо» ли написан код, например, такие, как структурированность - степень логического разбиения кода на ряд управляемых блоков.

  • Читаемость кода
  • Лёгкость поддержки, тестирования , отладки, исправления ошибок, изменения и портируемости
  • Низкая сложность кода
  • Низкое использование ресурсов: памяти и процессорного времени
  • Корректная обработка исключительных ситуаций
  • Малое число предупреждений при компиляции и линковке

Методы улучшения качества кода: рефакторинг .

Факторы качества

Фактор качества ПО - это нефункциональное требование к программе, которое обычно не описывается в договоре с заказчиком, но, тем не менее, является желательным требованием, повышающим качество программы.

Некоторые из факторов качества:

Понятность Назначение ПО должно быть понятным, из самой программы и документации. полнота Все необходимые части программы должны быть представлены и полностью реализованы. краткость Отсутствие лишней, дублирующейся информации. Повторяющиеся части кода должны быть преобразованы в вызов общей процедуры. То же касается и документации. портируемость Лёгкость в адаптации программы к другому окружению: другой архитектуре, платформе, операционной системе или её версии. согласованность По всей программе и в документации должны использоваться одни и те же соглашения, форматы и обозначения. сопровождаемость Насколько сложно изменить программу для удовлетворения новых требований. Это требование также указывает, что программа должна быть хорошо документирована, не слишком запутана, и иметь резерв роста по использованию ресурсов (память, процессор). тестируемость Позволяет ли программа выполнить проверку приёмочных характеристик, поддерживается ли возможность измерения производительности. удобство использования Простота и удобство использования программы. Это требование относится прежде всего к интерфейсу пользователя. надёжность отсутствие отказов и сбоев в работе программ, а также простота исправления дефектов и ошибок: структурированность эффективность Насколько рационально программа относится к ресурсам (память, процессор) при выполнении своих задач. безопасность

С точки зрения пользователя

Помимо технического взгляда на качество ПО, существует и оценка качества с позиции пользователя. Для этого аспекта качества иногда используют термин «юзабилити ». Довольно сложно получить оценку юзабилити для заданного программного продукта. Наиболее важные из вопросов, влияющий на оценку:

  • Является ли пользовательский интерфейс интуитивно понятным?
  • Насколько просто выполнять простые, частые операции?
  • Насколько легко выполняются сложные операции?
  • Выдаёт ли программа понятные сообщения об ошибках?
  • Всегда ли программа ведёт себя так как ожидается?
  • Имеется ли документация и насколько она полна?
  • Является ли интерфейс пользователя само-описательным/само-документирующим?
  • Всегда ли задержки с ответом программы являются приемлемыми?

См. также

Ссылки


Wikimedia Foundation . 2010 .

Смотреть что такое "Качество программного обеспечения" в других словарях:

    Способность программного продукта подтвердить свою спецификацию при условии, что спецификация ориентирована на характеристики, которые желает получить пользователь. См. также: Качество программного обеспечения Программное обеспечение Финансовый… … Финансовый словарь

    Когда Грейс Хоппер работала с компьютером Гарвард Марк II в Гарвардском университете, её коллеги обнаружили эту моль, застрявшую в реле и таким образом помешавшую работе устройства, после чего она отметила, что они «отлаживали»(debug) систему.… … Википедия

    Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ Проектирование Программирование Докумен … Википедия

    Разработка программного обеспечения (англ. software engineering, software development) это род деятельности (профессия) и процесс, направленный на создание и поддержание работоспособности, качества и надежности программного обеспечения, используя … Википедия

    - «Кризис программного обеспечения» термин, некогда использовавшийся в информатике для описания последствий быстрого роста вычислительной мощности компьютеров и сложности проблем, которые могут быть решены с их помощью. В сущности, это… … Википедия

    Новый Airbus A 380 использует довольно много ПО, чтобы создать современную кабину в самолете. Метод инженерии программного обеспечения позволил создать программное обеспечение самолёта, описываемое миллионами строк … Википедия

    Способность программного обеспечения работать на различных аппаратных платформах или под управлением различных операционных систем. Синонимы: Переносимость программного обеспечения См. также: Качество программного обеспечения Открытые системы… … Финансовый словарь

    Характеристики программного продукта, которые: позволяют минимизировать усилия пользователей по подготовке исходных данных, применению программного продукта и оценке полученных результатов, а также позволяют вызывать положительные эмоции… … Финансовый словарь

    Характеристики программного продукта, позволяющие минимизировать усилия по внесению в него изменений: для устранения ошибок; или для модификации в соответствии с изменяющимися потребностями пользователей. См. также: Качество программного… … Финансовый словарь

    Способность программного продукта выполнять набор функций: определенных в его внешнем описании; и удовлетворяющих заданным или подразумеваемым потребностям пользователей. Синонимы: Интероперабельность программного обеспечения См. также: Качество… … Финансовый словарь

Книги

  • Совершенный код: Практическое руководство по разработке программного обеспечения , Макконнелл С.. Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий…

Аннотация: Рассматриваются характеристики качества программных продуктов. Отмечается, что вопросы качества должны решаться на протяжении всего жизненного цикла. Показано, тестирование программного продукта позволяет гарантировать заданные параметры качества. Рассматриваются различные типы тестов и инструментарий тестирования в VisualStudio 2012. Показано, что рефакторинг кода улучшает качество программного продукта.

Презентацию к данной лекции Вы можете скачать .

Цель лекции:

Получить представление о способах и инструментарии обеспечения качества программных продуктов.

Введение

Качество программного продукта определяется по нескольким критериям. Качественный программный продукт должен отвечать функциональным и нефункциональным требованиям, в соответствии с которыми он создавался, иметь ценность для бизнеса, отвечать ожиданиям пользователей .

В жизненном цикле управления приложениями качество должно отслеживаться на всех этапах жизненного цикла ПО . Оно начинает формироваться с определения необходимых требований. При задании требований необходимо указывать желаемую функциональность и способы проверки её достижения.

Качественный программный продукт должен обладать высоким потребительским качеством, независимо от области применения: внутреннее использование разработчиком, бизнес, наука и образование, медицина, коммерческие продажи, социальная сфера, развлечения, веб и др. Для пользователя программный продукт должен удовлетворять определенному уровню его потребностей.

Важным аспектом создания качественного ПО является обеспечение нефункциональных требований, таких как удобство в эксплуатации, надежность , производительность , защищенность, удобство сопровождения . Надежность ПО определяет способность без сбоев выполнять заданные функции в заданных условиях и в течение заданного отрезка времени. Производительность характеризуется временем выполнения заданных транзакций или длительных операций. Защищенность определяет степень безопасности системы от повреждений, утраты, несанкционированного доступа и преступной деятельности. Удобство сопровождения определяет легкость, с которой обслуживается продукт в плане простоты исправления дефектов, внесения корректив для соответствия новым требованиям, управления измененной средой.

Управление жизненным циклом программного продукта помогает разработчикам целенаправленно добиваться создания качественного ПО , избегать потерь времени на переделку, повторное проектирования и перепрограммирование ПО .

Тестирование программного обеспечения

Тестирование программного продукта позволяет на протяжении всего жизненного цикла ПО гарантировать, что программные проекты отвечают заданным параметрам качества. Главная цель тестирования - определить отклонения в реализации функциональных требований, обнаружить ошибки в выполнении программ и исправить их как можно раньше в процессе выполнения проекта.

На протяжении всего жизненного цикла разработки ПО применяются различные типы тестирования для гарантии того, что промежуточные версии отвечают заданным показателям качества. При этом применяются автоматические и ручные тесты.

Модульное тестирование предназначено для проверки правильности функционирования методов классов ПО. Модульные тесты пишутся и исполняются разработчиками в процессе написания кода. Модульное тестирование применяется как для проверки качества кода приложения, так и для проверки объектов баз данных.
предназначено для тестирования, при котором тестировщик не имеет заранее определенных тестовых сценариев и пытается интуитивно исследовать возможности программного продукта и обнаружить и зафиксировать неизвестные ошибки.
Интеграционное тестирование используется для проверки корректности совместной работы компонентов программного продукта.
Функциональное тестирование предполагает проверку конкретных требований к ПО и проводится после добавление к системе новых функций.
Нагрузочное тестирование предназначено для проверки работоспособности программного продукта при предельной входной нагрузке.
Регрессионное тестирование применяется при внесении изменений в программное обеспечение с целью проверки корректности работы компонентов системы, которые потенциально могут взаимодействовать с измененным компонентом.
Комплексное тестирование предназначено для тестирования функциональных и нефункциональных требований всей системы программного продукта.
Приемочное тестирование представляет собой функциональные испытания, которые должны подтвердить то, что программный продукт соответствует требованиям и ожиданиям пользователей и заказчиков. Приемочные тесты пишутся бизнес-аналитиками, специалистами по контролю качества и тестировщиками.

Для разработчика программного обеспечения в VisualStudio 2012 предоставлена возможность создавать модульные и нагрузочные тесты, а также тесты пользовательского интерфейса. В VisualStudio 2012 имеются следующие шаблоны тестовых проектов:

  • проект модульного теста, который позволяет создавать модульные тесты в процессе разработки;
  • проект с веб-тестами производительности и нагрузочными тестами;
  • проект с закодированными тестами пользовательского интерфейса.

Инструментарием тестировщика в VisualStudio 2012 является MicrosoftTestManager (MTM). MTM предназначен для управления жизненным циклом тестирования программного обеспечения, включая планирование, тестирование и мониторинг . MTM интегрирован с TeamFoundationServer. С помощью Microsoft TestManager тестировщики подготавливают планы тестирования, управляют тестированием. При создании плана тестирования в него добавляются наборы тестов, тестовые случаи и конфигурации, необходимые для тестирования. Конфигурации используются для установления среды, в которой будут исполняться наборы тестов. Microsoft TestManager позволяет выполнять ручные и автоматические тесты, а также исследовательские тесты. Результаты тестирования сохраняются в базе данных, что позволяет подготавливать различные аналитические отчеты. Ошибки, выявленные в процессе тестирования, фиксируются, документируются и передаются разработчикам для их устранения. При внесении изменений в код программной системы возникает необходимость в регрессионном тестировании, причем MTM автоматически формирует план регрессионного тестирования, выявляя какие тесты должны быть повторно выполнены.

Для тестировщиков и разработчиков программного обеспечения VisualStudio 2012 включает диспетчер виртуальной среды LabManagement. Инструментарий тестирования LabManagement позволяет создать инфраструктуру, которая максимально близко эмулирует реальную среду планируемого использования программного продукта. Такие среды могут использоваться для выполнения автоматических построений, автоматизации тестов и выполнения разработанного кода.

Рефакторинг

Качество кода программного продукта во многом определяется тем, насколько трудно или легко вносить изменения в код, а также тем насколько доступен код для понимания. Созданное программное приложение может выполнять требуемые функции, но иметь проблемы с внесением изменений или пониманием созданного кода. В этом случае такое ПО нельзя назвать качественным, так как на этапе его сопровождения могут возникнуть проблемы с его модификацией при изменении пользовательских требований.

Для улучшения качества кода программных приложений применяют рефакторинг [ , ]. По определению Фаулера М. рефакторинг определяется как "процесс изменения программной системы таким образом, что её внешнее поведение не изменяется, а внутренняя структура улучшается". Следовательно, в процессе проектирования для создания высококачественного программного продукта необходимо не только обеспечить выполнение функциональных требований, но и нефункциональных, в частности, удобства сопровождения, что предполагает возможность и простоту внесения изменений в код, а также возможность легкого понимания созданного кода.

Некачественный дизайн кода определяется по ряду признаков :

  • жесткость - характеристика программы, затрудняющая внесение изменений в код;
  • хрупкость - свойство программы повреждаться во многих местах при внесении единственного изменения;
  • косность характеризуется тем, что код содержит части, которые могли бы оказаться полезными в других системах, но усилия и риски, сопряженные с попыткой отделить эти части кода от оригинальной системы, слишком велики;
  • ненужная сложность характеризуется тем, что программа содержит элементы, которые не используются в текущий момент;
  • ненужные повторения, которые состоят в повторяющихся фрагментах кода в программе;
  • непрозрачность, которая характеризует трудность кода для понимания.

Для создания качественного дизайна кода целесообразно применять некоторые принципы и паттерны проектирования ПО [ , ].

Принцип единственной обязанности определяет, что у класса должна быть только одна причина для изменения. Из этого принципа следует, что классу целесообразно поручать только одну обязанность.

Принцип открытости/закрытости определяет, что программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации.

Принцип подстановки Лисков определяет, что должна быть возможность вместо базового класса подставить любой его подтип .

Принцип инверсии зависимостей определяет два положения:

  • модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те и другие должны зависеть от абстракций;
  • абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Принцип разделения интерфейсов определяет, что клиенты должны знать только об абстрактных интерфейсах, обладающих свойством сцепленности.

Паттерны проектирования предлагают универсальные, проверенные практикой решения. В приведен обширный перечень паттернов. Среди общего списка паттернов следует выделить те, которые целесообразно применять при гибкой разработке программного обеспечения. Это паттерны Команда , Стратегия, Фасад, Посредник, Одиночка, Фабрика, Компоновщик, Наблюдатель, Абстрактный сервер/адаптер/ шлюз , Заместитель и Шлюз , Посетитель и Состояние.

Использование паттернов при разработке позволяет создавать программное обеспечение , которое легко модифицировать и сопровождать.

Следует отметить, что для проведения рефакторинга необходимо иметь надежные тесты, которые обеспечивают контроль соблюдения функциональных требований при улучшении дизайна кода программного обеспечения.

Ключевые термины

Модульное тестирование тестирование, предназначенное для проверки правильности функционирования методов классов ПО.
Исследовательское тестирование тестирование, при котором тестировщик не имеет заранее определенных тестовых сценариев и пытается интуитивно исследовать возможности программного продукта и обнаружить и зафиксировать неизвестные ошибки.
Интеграционное тестирование тестирование, предназначенное для проверки корректности совместной работы компонентов программного продукта.
Функциональное тестирование тестирование, предназначенное для проверки конкретных требований к ПО, которое проводится после добавление к системе новых функций.
Нагрузочное тестирование тестирование, предназначенное для проверки работоспособности программного продукта при предельной входной нагрузке.
Регрессионное тестирование тестирование, применяемое при внесении изменений в программное обеспечение, с целью проверки корректности работы компонентов системы, которые потенциально могут взаимодействовать с измененным компонентом.
Комплексное тестирование тестирование, предназначенное для проверки соответствия функциональных и нефункциональных требований всей системы программного продукта.
Приемочное тестирование тестирование, представляющее собой функциональные испытания, которые должны подтвердить то, что программный продукт соответствует требованиям и ожиданиям пользователей и заказчиков.
MicrosoftTestManager инструментарий Microsoft, предназначенный для управления жизненным циклом тестирования программного обеспечения.
LabManagement диспетчер виртуальной среды тестирования.

Набор для практики

Вопросы

  1. Какими характеристиками должен обладать качественный программный продукт?
  2. Какие нефункциональные требования определяют качество программного продукта?
  3. Какая роль тестирования в обеспечении качества программного продукта?
  4. Какие типы тестов используют для проверки качества программного продукта?
  5. Для чего применяется регрессионное тестирование?
  6. Какие шаблоны тестовых проектов имеются вVisualStudio 2012?
  7. Для чего применяется MicrosoftTestManager? Какие он имеет функциональные возможности?
  8. Для чего используется LabManagement при тестировании?
  9. Для чего применяют рефакторинг кода?
  10. Приведите признаки некачественного кода.

Упражнения

  1. Подготовьте аналитический обзор по NUnit тестированию.
  2. Подготовьте аналитический обзор по xUnit.net тестированию.
  3. Подготовьте аналитический обзор по MbUnit тестированию.