Стратегии и принципы повышения надежности ПО

Как было показано в предыдущем разделе, основная (и единственная) причина ненадежности ПО - ошибки, допущенные при его разработке. Поэтому на щите борцов за надежность программ должен быть начертан девиз - «pugna contra errorem![1]».

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

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

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

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

Основная причина ошибок в ПО - его сложность. Сложности трудно дать определение, само понятие до статочно расплывчато. Сложность легко себе представить, но трудно описать. С полным правом можно отнести следующее определение к большинству современных систем: «.. .под сложной системой мы понимаем систему, состоящую из большого числа частей и взаимодействующих между собой непростым образом» [7]. Международный стандарт, имеющий «российскую прописку» [14], дает более «приземленное» определение сложности: «сложность (complexity): Свойство системы или компонента, имеющих устройство, исполнение или поведение, трудные для понимания или верификации.»

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

Сложность - имманентное свойство ПО, которое присуще ему естественным образом по следующим причинам [8]:

  • • сложность предметной области;
  • • трудность управления разработкой программного

обеспечения;

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

Несмотря на отсутствие строгого определения очевидно, что сложность имеет количественную, хотя и не всегда вычислимую характеристику. Такие понятия, как сложность взаимосвязей, сложность структуры, сложность алгоритма и т. п. в конечном итоге и есть «количественная сложность». С субъективной точки зрения справедливо считать, что «...мерой сложности объекта является количество интеллектуальных усилий, необходимых для его понимания» [2].

Т. о. методы и средства проектирования ПО должны в первую очередь обеспечивать уменьшение его сложности за счет снижения количественных ограничений. Именно на стадии проектирования закладываются качество и надежность будущего программного продукта. Можно плохо написать хорошо спроектированную программу, но редко удается хорошо написать плохо спроектированную программу [4]. Проектирование, таким образом, является решающей фазой в создании ПО.

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

  • • Архитектура
  • • Абстракция
  • • Спецификация

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

  • [1] Борьба с ошибками (лат.)
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >