~~SLIDESHOW thesis~~ ====== Cykle życia oprogramowania ====== {{http://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Three_software_development_patterns_mashed_together.svg/640px-Three_software_development_patterns_mashed_together.svg.png?400}} //Źródło: [[http://en.wikipedia.org/wiki/Software_development_process|wikipedia.org]]// ===== 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 (zazwyczaj) czynności jak w modelu kaskadowym, ale pozwala się na powroty z pewnych faz do innych faz poprzedzających. {{:zajecia:ppz:ewolucyjny.jpeg?300|}} 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 ===== Metody ewolucyjne i odmiany ===== * [[wppl>Model przyrostowy]], iteracyjny (incremental development) * [[wppl>Programowanie zwinne]] (Agile software development) [[http://www.agilemanifesto.org/iso/pl/|Manifest Agile]], [[zajecia:ppz:plan_prac#Scrum|Scrum]] * [[wppl>Programowanie ekstremalne]] * [[wppl>Rational Unified Process]] - IBM, lekka wersja OpenUP/Basic, wchodzi w skład [[http://www.eclipse.org/epf/|Eclipse Process Framework]] * programowanie odkrywcze * [[wppl>Model prototypowy]] * [[wppl>Model spiralny]] * inne... ===== 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. 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 [[wppl>Model prototypowy]] ([[wp>Software prototyping]]) ===== Model spiralny ===== {{:zajecia:ppz:spiralny.jpg?300|}} * "Ogólny" model iteracyjny. * Fazy: 1) ustalanie celów, 2) rozpoznawanie zagrożeń, 3) tworzenie, 4) ocena i planowanie * Faza oceny w każdym cyklu pozwala uniknąć błędów lub wcześniej je wykryć * szczegółowe potraktowanie zagrożeń realizacji projektu (duże projekty) ===== Model przyrostowy (iteracyjny) ===== Określenie wymagań -> podział na kolejne „przyrosty” (iteracje), 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|}} ===== Metodyki zwinne - Agile ===== * podejście przyrostowe * zakłada, że wymagania odbiorcy (klienta) często ewoluują podczas trwania projektu -> regularna adaptacja do zmieniających się wymagań * późne zmiany w specyfikacji nie mają destrukcyjnego wpływu na proces wytwarzania oprogramowania, * szybkie wytwarzanie oprogramowania wysokiej jakości, działające oprogramowanie jest dostarczane okresowo (tygodniowo), każda iteracja dostarcza działające, przetestowane funkcje * bezpośredni kontakt, jako najlepsza forma komunikacji w zespole i poza nim (zazwyczaj małe zespoły) * samozarządzalność zespołów * końcowy produkt może znaczeie odbiegać od pierwotnych zalożeń ===== Ż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// - [[wp>Software development methodology]]