Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpori_TP / 11-20.doc
Скачиваний:
50
Добавлен:
12.12.2013
Размер:
149.5 Кб
Скачать

18. Обеспечение устойчивости программного средства.

Этот примитив качества ПО обеспечивается с помощью так называемого защитного программирования. Вообще говоря, защитное программирование применяется при программировании модуля для повышения надежности ПО в более широком смысле. Как утверждает Майерс [11.3], «защитное программирование основано на важной предпосылке: худшее, что может сделать модуль, – это принять неправильные входные данные и затем вернуть неверный, но правдоподобный результат». Для того, чтобы этого избежать, в текст модуля включают проверки его входных и выходных данных на их корректность в соответствии со спецификацией этого модуля, в частности, должны быть проверены выполнение ограничений на входные и выходные данные и соотношений между ними, указанные в спецификации модуля. В случае отрицательного результата проверки возбуждается соответствующая исключительная ситуация. Для обработки таких ситуаций в конец этого модуля включаются фрагменты второго рода – обработчики соответствующих исключительных ситуаций. Эти обработчики помимо выдачи необходимой диагностической информации, могут принять меры либо по исключению ошибки в данных (например, потребовать их повторного ввода), либо по ослаблению влияния ошибки (например, во избежание поломки устройств, управляемых с помощью данного ПО, при аварийном прекращении выполнения программы осуществляют мягкую их остановку).

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

19. Обеспечение эффективности программного средства.

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

С учетом сказанного, рекомендуется придерживаться следующих принципов для обеспечения эффективности ПО [12.3, 12.4]:

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

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

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

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

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

Соседние файлы в папке Shpori_TP