Иди на текст

Модели животног циклуса развоја софтвера

У претходној лекцији упознао си се са основним фазама животног циклуса развоја софтвера и обрадио waterfall модел - најстарији и најједноставнији начин да се те фазе организују. Видео си да waterfall модел има и озбиљне мане: крутост, касно тестирање и тешко прилагођавање променама. Управо због тих мана, временом су развијени и други модели животног циклуса развоја софтвера, који на различите начине покушавају да отклоне те недостатке.

Шта уопште значи да пројекат прати одређени 'модел' животног циклуса?

Модел животног циклуса дефинише редослед, начин повезивања и број понављања фаза развоја софтвера (анализа, дизајн, имплементација, тестирање...) - другим речима, он одговара на питање: да ли се фазе изводе једном, линеарно (као код waterfall модела), или се понављају, преклапају, или изводе паралелно уз додатне провере.

Различити модели прављени су да реше различите проблеме - неки стављају акценат на квалитет и тестирање, неки на брзу испоруку почетне верзије производа, а неки на смањење ризика код великих и неизвесних пројеката.

V-модел

V-модел (енгл. V-Model, понекад и Verification and Validation Model) представља надоградњу waterfall модела, при чему је основна идеја да се свакој развојној фази придружи одговарајућа фаза тестирања, чиме читав процес, приказан графички, добија облик слова "V".

По чему се V-модел разликује од waterfall модела?

За разлику од waterfall модела, код кога је тестирање само једна фаза на самом крају пројекта, V-модел инсистира на томе да се за сваку фазу развоја (лева страна слова "V") унапред дефинише одговарајућа фаза тестирања (десна страна слова "V") која ту фазу проверава, чиме се тестирање планира знатно раније и постаје саставни део сваке фазе, а не накнадна активност.

Типичан приказ V-модела изгледа овако:

Анализа захтева ──────────────────────────────────── Прихватно тестирање
      Системски дизајн ──────────────────────── Системско тестирање
            Архитектонски дизајн ─────── Интеграционо тестирање
                     Детаљни дизајн ── Тестирање јединица (Unit testing)
                               Имплементација

Свака фаза на левој страни "V" има свог "пара" на десној страни:

  • Анализа захтева одговара прихватном тестирању (енгл. Acceptance Testing) - проверава се да ли производ у целини задовољава оригиналне захтеве корисника.
  • Системски дизајн одговара системском тестирању (енгл. System Testing) - проверава се да ли систем као целина функционише у складу са дефинисаним дизајном.
  • Архитектонски дизајн одговара интеграционом тестирању (енгл. Integration Testing) - проверава се да ли компоненте система исправно сарађују међусобно.
  • Детаљни дизајн одговара тестирању јединица (енгл. Unit Testing) - проверава се да ли најмањи делови кода (нпр. поједине функције) раде исправно.

Предности V-модела

  • Тестирање се планира унапред, паралелно са дизајном, а не тек на крају пројекта.
  • Грешке се у просеку откривају раније него код waterfall модела, што, према правилу 1-10-100, значајно смањује трошкове њиховог исправљања.
  • Јасна структура и дисциплина, погодна за пројекте у којима је поузданост критична.

Мане V-модела

  • Слично waterfall моделу, и даље је релативно крут - прилагођавање променама захтева током развоја је отежано.
  • Захтева да захтеви буду добро познати и прецизно дефинисани на почетку пројекта.
  • Корисник и даље не добија прилику да види радну верзију производа пре самог краја пројекта.

Када се користи V-модел?

V-модел се често користи у пројектима где су поузданост и безбедност критични - на пример у развоју софтвера за медицинске уређаје, авио-индустрију, аутомобилску индустрију или банкарске системе - дакле, у окружењима у којима је цена грешке изузетно висока, па се исплати уложити додатан напор у рано планирање тестирања.

Остали модели животног циклуса

Осим waterfall и V-модела, развијено је и неколико других приступа, који уместо строге линеарности уводе понављање (итерацију) кроз фазе:

  • Инкрементални модел (енгл. Incremental Model): Производ се развија и испоручује у деловима (инкрементима) - прво се направи основна верзија са најважнијим функционалностима, а затим се, кроз више циклуса, постепено додају нове функционалности.
  • Итеративни модел (енгл. Iterative Model): Читав систем се развија кроз више узастопних итерација - у свакој итерацији се пролази кроз све фазе (анализа, дизајн, имплементација, тестирање), а производ се сваки пут усавршава и проширује на основу претходне верзије и добијених повратних информација.
  • Спирални модел (енгл. Spiral Model): Комбинује идеју итеративног развоја са изразитим фокусом на анализу и управљање ризиком - сваки циклус (навој спирале) почиње идентификовањем ризика пре него што се настави даљи развој, што га чини погодним за велике и неизвесне пројекте.
  • Модел прототипа (енгл. Prototyping Model): Пре израде коначног производа, прави се брзи, поједностављени прототип (који често нема стварну функционалност у позадини) искључиво да би се прикупиле повратне информације од корисника и потврдило да ли је идеја добро схваћена.

Ови модели, иако представљају напредак у односу на waterfall и V-модел по питању флексибилности, ипак не иду до краја у прихватању промена као природног дела развоја софтвера. Управо тај корак - потпуно прихватање честих промена и блиску сарадњу са корисником кроз читав пројекат - доносе агилне методологије, о којима ће бити речи у наредним лекцијама.

Задатак

Замисли да твој тим треба да развије софтвер за управљање инсулинском пумпом (медицински уређај који аутоматски дозира лек пацијенту).

  1. Образложи зашто би V-модел могао да буде бољи избор за овакав пројекат у односу на класични waterfall модел.
  2. За овај пројекат, наведи по један конкретан пример шта би тачно подразумевало тестирање јединица, интеграционо тестирање и прихватно тестирање.
  3. Упореди спирални модел и waterfall модел по питању начина на који се носе са ризиком - који модел би препоручио за пројекат чији захтеви нису до краја познати на почетку и зашто?