Jump to content

Предикаты проектирования

Предикаты проектирования — это метод, изобретенный Томасом Маккейбом. [1] количественно оценить сложность интеграции двух единиц программного обеспечения. Каждому из четырех типов предикатов проектирования соответствует рейтинг сложности интеграции. Для фрагментов кода, в которых применяется более одного предиката проектирования, оценки сложности интеграции могут быть объединены.

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

Типы звонков

[ редактировать ]

Безусловный вызов

[ редактировать ]

Модуль A всегда вызывает модуль B. Его сложность интегрирования равна 0. Например:

unitA::functionA() {
   unitB->functionB();
}

Условный вызов

[ редактировать ]

Модуль A может вызывать или не вызывать модуль B. Эта интеграция имеет сложность 1 и требует двух тестов: один вызывает B, а другой нет.

unitA::functionA() {
   if (condition) 
      unitB->functionB();
}

Взаимоисключающий условный вызов

[ редактировать ]

языка программирования Это похоже на оператор переключения . Модуль A вызывает ровно один из нескольких возможных модулей. Сложность интеграции равна n - 1, где n — количество возможных единиц вызова.

unitA::functionA() {
   switch (condition) {
      case 1:
         unitB->functionB();
         break;
      case 2:
         unitC->functionC();
         break;
      ...
      default:
         unitN->functionN();
         break;
   }
}

Итеративный вызов

[ редактировать ]

При итеративном вызове модуль A вызывает модуль B хотя бы один раз, а может быть и больше. Эта интеграция имеет сложность 1. Она также требует двух тестов: один, который вызывает модуль B один раз, и один тест, который вызывает его более одного раза.

unitA::functionA() {
   do {
      unitB->functionB();
   } while (condition);
}

Объединение вызовов

[ редактировать ]

Любая конкретная интеграция может объединять несколько типов вызовов. Например, подразделение А может позвонить или не позвонить подразделению Б; и если да, то он может вызвать его один или несколько раз. Эта интеграция объединяет условный вызов со сложностью интеграции 1 и итеративный вызов со сложностью интеграции 1. Общая сложность интеграции составляет 2.

unitA::functionA() {
   if (someNumber > 0) {
      for ( i = 0 ; i < someNumber ; i++ ) {
         unitB->functionB();
      }
   }
}

Количество тестов

[ редактировать ]

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

  1. ^ Маккейб, Томас Дж.; Батлер, Чарльз В. (12 декабря 1989 г.). «Измерение и тестирование сложности конструкции» . Коммуникации АКМ . 32 (12): 1415–1425. дои : 10.1145/76380.76382 . S2CID   14112936 .

См. также

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c6f7597da82833ec5b60d6f1af9879be__1699457340
URL1:https://arc.ask3.ru/arc/aa/c6/be/c6f7597da82833ec5b60d6f1af9879be.html
Заголовок, (Title) документа по адресу, URL1:
Design predicates - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)