Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_ответы.docx
Скачиваний:
8
Добавлен:
22.09.2019
Размер:
138.16 Кб
Скачать

44. Стиль программирования. Критерии качества программы.

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

Процедурное программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах.

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

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

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

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

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

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

Эффективность программного обеспечения может характеризоваться  двумя способами:

1. С учетом объема используемой памяти;

2. С учетом быстродействия программы.

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

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

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

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

45. Тестирование программных продуктов.

Тестирование предназначено для проверки работоспособности программ, устанавливает факт наличия ошибки. Цель проверяющего – заставить программу сбиться.

Многообразие методов тестирования базируется на двух крайних стратегиях.

  1. Тестирование программы как «черного ящика» (тестирование по входу-выходу).

  2. Тестирование программы как «белого ящика».

  1. Тестирование программы как «черного ящика».

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

  1. Тестирование программы как «белого ящика».

Цель – проверить каждый путь, каждую ветвь, каждый оператор. При этом спецификация программы не используется. Тестирование путей предполагает их выполнение по крайней мере дин раз. Путь программы определяется значением входных данных. Каждый путь состоит из последовательности линейных участков, которые связаны командами условного перехода. Если команды условного перехода не коррелируют друг с другом, то число различных реализуемых путей программы может достигать 2N, где N – число команд условных переходов.

Наиболее распространенная стратегия – «черного ящика»:

Методы разработки тестов стратегии по входу – выходу (черного ящика):

  1. Проверка в нормальных условиях.

  2. Анализ граничных значений.

  3. Проверка в исключительных ситуациях.

  4. Предположение об ошибке.

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

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

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

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

Тестирование многомодульных программ.

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

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

  1. Восходящее тестирование – программа собирается и тестируется снизу вверх. Модули самого низшего уровня (не вызывающие других модулей) тестируются изолированно, автономно. После того, как тестирование этих модулей завершено, вызов их должен быть так же надежен, как вызов любой стандартной функции языка. Затем тестируются модули, непосредственно вызывающие уже проверенные. Эти модули более высокого уровня тестируются не автономно, а вместе с уже проверенными модулями более низкого уровня. Процесс повторяется до тех пор, пока не будет достигнута вершина.

Недостатки:

  • невозможно выявить серьезные ошибки в алгоритме и «верхних» сопряжениях почти до момента окончания разработки проекта, что приводит к многочисленным переделкам программы;

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

  1. Нисходящее тестирование - программа собирается и тестируется сверху вниз. Изолированно тестируется только головной модуль, затем с ним соединяются один за другим модули, непосредственно вызываемые им, и тестируется полученная комбинация. Процесс повторяется до тех пор, пока не будут собраны и проверены все модули. Если тестируемый модуль вызывает модуль более низкого уровня, который в данный момент еще не существует, то для имитации функций недостающих модулей программируются модули – заглушки. В заглушку встраивают фиксированные выходные данные, которые она всегда и возвращает.