Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Качество программного продукта.doc
Скачиваний:
4
Добавлен:
27.11.2019
Размер:
61.95 Кб
Скачать

Качество программного продукта

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

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

Критериями качества ПП являются:

-         функциональность;

-         надежность;

-         легкость применения;

-         эффективность;

-         сопровождаемость;

-         мобильность.

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

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

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

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

Обращаю ваше внимание на то, что тестирование программ более объемно, чем мы с вами рассматривали. Тестирование включает три аспекта проверки программ: на правильность ( именно этому аспекту были посвящены лекции по тестированию); на вычислительную сложность и на эффективность реализации. Проверка вычислительной сложности заключается в экспериментальном анализе сложности программы или экспериментальном сравнении двух или нескольких алгоритмов, решающих одну и туже задачу. Этой проблемой, в основном, занимается вычислительная математика. Проверка эффективности реализации направлена на отыскание способа заставить правильную программу (правильную в смысле удовлетворения первому аспекту проверки) работать быстрее или расходовать меньше памяти. “Или” здесь свидетельствует о том, что показатели объема используемой памяти и времени выполнения противоречивы! Короткая программа иногда выполняется дольше более длинной программы! / /.

Предлагаю Вам самостоятельно найти самый быстрый вариант вычисления корней квадратного уравнения и доказать это/4//

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

Мобильность — это способность ПП быть перенесенным из одной вычислительной среды (окружения) в другую, в частности, с одной ЭВМ на другую (применяют термин “перенос с одной платформы на другую”.

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

Принципы модульного программирования.

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

Что в теории понимается под модулем? Модуль — это замкнутая программа, которую можно вызвать из другого модуля и самостоятельно откомпилировать. Другое определение: программный модуль — это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса.

Модуль — это программа, обладающая тремя основными атрибутами:

1. Он выполняет одну или несколько функций;

2. Модуль реализует некоторую логику (алгоритм).

3. Используется в одном или нескольких контекстах.

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

Например: модуль с функцией “удалить пробелы из литерной строки” может использоваться в контексте “сжать сообщение для телеобработки”.

Или модуль, вычисляющий сумму:

может использоваться в контекстах “вычисление зарплаты всех сотрудников” или “определение пробега всех автомобилей”. В этом случае содержательный смысл слагаемых ai различный.

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

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

а) усиление внутренних связей в каждом модуле (иначе принцип называется повышением прочности модуля);

б) ослабление взаимосвязи между модулями (иначе этот принцип называется ослаблением сцепления модулей).

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

Для качественной характеристики модулей введены 7 классов прочности модулей и 5 видов сцепления модулей. Класс прочности является мерой связи предложений внутри модуля. Сцепление модулей — это мера зависимости между модулями.

Классы прочности модулей

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

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

1. Прочность по совпадению.

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

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

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

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

Пример: библиотека стандартных программ, реализующих численные методы.

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

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

Например: autoexec.bat.

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

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

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