Лекция 05.10.2011-Программирование
критерии качества ПО:
1 Правильность
2 надежность
3 эффективность
4 модифицированность
5 масссовость и стиль программирования
1. программа называется правильной если семантика проги соответствует предъявленным к ней требованиям изложенным в спецификации. Спецификации -точное описание того результата которого необходимо достичь с помощью программы. это описание устанавливает, что должна делать программа без указания того как она должна это делать.
2. Надежность-способность программы выполнять возложенные на нее функции при поступлении требования на их выполнение. понятие надежности существенно отличается от правильности, под которой подразумевается статическое свойство программы соответствие семантики требованиям спецификации, надежность же динамическое требование предъявляемое к программе и способности программы удовлетворять этим требованиям, таким образом программа являющаяся правильной может оказаться не надежной если спецификация которой она удовлетворяет не охватывает всех требований пользователя к ней. Верно и обратное, программа не являющаяся полностью правильной может считаться надежной, если допущенные в ней ошибки незначительны, или если пользователь может их избежать.
3. эффективность программы рассматривается с двух точек зрения: во первых время выполнения программы, при наличии соответствующих ограничений и с другой стороны рассматривается объем программы. скорость работы и занимаемый размер памяти находятся в логическом противоречии, например: однотипная обработка сотни величин эффективным по памяти способом может быть реализована как вызов в цикле функции обработки для элементов массива из этих ста величин. Более эффективное по времени выполнения решение не будет включать накладных расходов на обращение к массиву и вызов функции и будет представлять собой повторение кода обработки каждой величины в основной программе.
4. Модифицируемость - программа должна быть написана таким образом чтобы любые изменения В алгоритме требовали минимальных исправлений в программе. Примеры повышающие модифицируемость:
---Числовые константы-рекомендуется представлять именованными константами что позволит для исправления изменять значения только в одном месте, а не искать по тексту каждое вхождение числовой константы.
---Законченные последовательности операторов рекомендуется оформлять в виде модулей. Это позволит во первых исключить дублирование фрагментов кода и ускорит написание программы, а во вторых внесение изменений также будет производиться в одном месте
5. Воспроизводимость – возможность многократного использования, по возможности прога должна быть универсальной – допускать использование со всеми возможными исходными вариантами данных. Пример: программа решения уравнений должна предусматривать ввод данных а не их содержать.
Стиль программирования – хорошо написанная программа по плохому алгоритму будет работать быстрее и занимать меньше памяти чем плохо написанная с хорошим алгоритмом.
Элементы стиля программирования авторы: Ритчи и Плотжер. Стиль программирования рассматривают с точки зрения оформления программы, прога должна быть читабельна, это призвано облегчить поиск логических ошибок. Первое правило читабельности: наличие комментов, обязательно комментируются заголовки функций. Здесь указывается назначение функции, входные и выходные данные. В теле функции комментируются все переменные, рекомендуется применять говорящие идентификаторы, имя переменной должно пояснять с какой целью оно используется, комментируются все условные и безусловные переходы, в цикле счетчик цикла и условия завершения цикла. Могут комментироваться последовательность операторов, если они решают одну подзадачу внутри модуля. Размер модуля не более 1 страницы кода. Также читабельность повышает оформление кода проги, рекомендуется использовать лесенку операторов, когда подчиненные операторы записываются с отступом на две позиции от предыдущего, пример для цикла FOR операторы тела цикла записываются под R. Если ФОР настолько сложен что выражения не помещаются в одной строке то они помещаются друг под другом)). Помимо оформления для повышения эффективности при кодировании алгоритма необходимо следовать правилам которые позволят на машинном уровне получить эффективный машинный код. Теоретически современные оптимизирующие компиляторы всё это реализуют, ног в некотрых случаях можно добиться неоптимального кода. Пример: сравнение строк дольше чем сравнение символов. Операции над действительными числами дольше чем над целыми. В циклических операторах инвариант цикла должен быть целым. Проверка окончания цикла не должна включать строгие равенства.
Последние два примера объясняются: двоичное представление десятичных дробей точно только в случае если десятичная дробь представляется ограниченным рядом из отрицательных степеней двойки. Ограниченность ряда определяется разрядностью мантисы действительного числа при ее хранении в памяти ЭВМ. В результате цикл из 10 итераций в которых происходит увеличение на 0.1 не даст в итоге увеличение на единицу. ТАКОЙ ЦИКЛ НЕ ЗАКОНЧИТСЯ…комп зависнет и взорвется)))
Диалоговые программы
Диалоговые проги. Понятие интерфейса Человек-компьютер. Проги условно могут быть разделены на 2 категории: автоматические проги и диалоговые проги. Автоматический – отсутствие работы человека при работе. Диалог с прогой может осуществляться в пакетном и интерактивном режиме. В пакетном параметр работы проги определяется пользователем до начала работы проги и передается в нее в виде файла или в виде некоторого задания. В интерактивном режиме прога функционирует задавая вопросы пользователю и получая на них ответы, либо ожидает события инициируемые юзером. Способ взаимодействия с прогой определяет ее интерфейс. Варианты интерактивного режима: командной строки - прога получает команды из строки ввода с помощью команд. Система меню – прога получает управляющий сигнал, при выбора пользователя элемента из списка, в котором перечислены все возможные варианты работы программ. Значения переменных вводятся в спец поля. Интерфейсы ориентированы на использование метода координатного ввода. Интерфейс включает в себя элементы 2 варианта и помимо этого позволяет осуществлять выбор режима работы.
При проектировании интерфейса учитываются требования призванные обеспечить эффективность взаимодействия пользователя и программы: 1) интерфейс должен быть естественным- диалог с пользователем должен быть на языке принятом для сферы решаемой задачи. Предпочтительно чтобы комп общался с пользователем в терминах принятых пользователем до начала применения программы. 2) интерфейс должен быть последовательным каждое действие пользователя должны определяться предыдущими. Реализуется с использованием системы иерархического меню. 3) он должен быть не избыточным, реализация этого правила определяется положением о ограничимости количества информации воспринимаемое человеком одновременно. Принято что человек в среднем может анализиорвать до 5 источников информации. При увеличении количества источников человек начинает пропускать порции информации при этом повышается его усталость. Классическим примером считается гипноз. Пользователю должна предоставляться справочная информация в которой указывается текущее состояние программы и возможные варианты работы. Интерфейс должен быть гибким. Выполнение перечисленных требований (плюс потребление пива с интерфейсом каждый вечер) позволяет назвать его дружественным))).