====== Cykle życia oprogramowania ====== [[wp>Software development methodology]] ===== Sekwencyjne ===== Kolejne etapy następują po sobie bezpośrednio, przykłady: * [[wppl>Model kaskadowy]] (waterfall), wodospadowy, liniowy {{http://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/POL_model_kaskadowy.svg/567px-POL_model_kaskadowy.svg.png?300}} Cechy * nie można przejść do następnej fazy przed zakończeniem poprzedniej * błąd popełniony w początkowej fazie ma wpływ na całość * model ten posiada bardzo nieelastyczny podział na kolejne fazy * łatwy nadzór, dużo dokumentacji ===== Ewolucyjne ===== Aktywności się przeplatają. Te same czynności jak w modelu kaskadowym, ale pozwala się na powroty z pewnych faz do innych faz poprzedzających. {{:zajecia:ppz:ewolucyjny.jpeg?300|}} Przykłady: * wytwarzanie odkrywcze (exploratory development) * [[wppl>Model przyrostowy]] (incremental development) * [[wppl>Programowanie zwinne]] (Agile software development) [[http://www.agilemanifesto.org/iso/pl/|Manifest Agile]], [[zajecia:ppz:plan_prac#Scrum|Scrum]] * [[wppl>Model spiralny]] Cechy * adaptowanie systemu do zmian w wymaganiach i korygowanie popełnionych błędów * trudne w nadzorowaniu, wymaga dodatkowych strategii dla uporządkowania procesu wytwarzania oprogramowania ===== Model prototypowy (prototypowanie) ===== Prototyp - niepełny system, spełniający cześć wymagań, przeznaczonym do przetestowania rozwiązań wykorzystanych do jego wytworzenia. \\ Produkt finalny może być (z zasady jest) różny od prototypu. Z założenia prototyp nie wchodzi w skład ostatecznego systemu.\\ Ostateczny system budowany jest od podstaw po zaakceptowaniu rozwiązań zastosowanych w prototypie. [[wppl>Model prototypowy]] ([[wp>Software prototyping]]) Cechy: * Prototyp jest łatwy do zmiany * Zwiększa zrozumienie programistów co do potrzeb klienta * Pozwala klientowi zobaczyć jak mniej więcej system będzie wyglądał * Wysoki koszt budowy systemu ===== Model spiralny ===== "Ogólny" model iteracyjny. {{:zajecia:ppz:spiralny.jpg?300|}} Cechy: * Można wykorzystać gotowe komponenty * Faza oceny w każdym cyklu pozwala uniknąć błędów lub wcześniej je wykryć * Cały czas istnieje możliwość rozwijania projektu. ===== Model komponentowy ===== Składanie systemu z gotowych komponentów.\\ określania wymagań -> analizy możliwości wykorzystania istniejących, gotowych komponentów -> ewentualna faza modyfikacji wymagań, w konsekwencji zastosowania komponentów -> ... * wymagania narzucane przez gotowe komponenty mogą być niezgodne z wymaganiami klientów * modyfikacje kodu mogą być utrudnione przez brak kontroli nad pochodzącymi z zewnątrz komponentami * mały koszt, głównie łączenie gotowych klocków ===== Model przyrostowy (iteracyjny) ===== Określenie wymagań -> podział na kolejne „przyrosty” (increments), funkcje systemu dające się zaimplementować i testować\\ Pierwsze wersje zazwyczaj ujmują podstawowe funkcjonalności systemu. Problemem podstawowym wytwarzania przyrostowego jest określenie „przyrostów”, tak aby były one istotnymi fragmentami oprogramowania, a mimo to każdą z wersji dawało się niezależnie testować i oceniać {{:zajecia:ppz:iteracyjny1.jpeg?400|}} ===== Żródła ===== - Wikipedia - [[http://brasil.cel.agh.edu.pl/~10sdczerner/page/wstep|Wykład "Inżynieria oprogramowania" - Dawid Czerner]] - Ilona Bluemke, //Inżynieria oprogramowania//