Wprowadzenie do przedmiotu

Slides:



Advertisements
Podobne prezentacje
Klasyfikacja roczna w roku szkolnym 2012/2013
Advertisements

Zarządzanie konfiguracją oprogramowania
Informacja o stanie bezpieczeństwa i porządku publicznego za rok 2008 w powiecie nidzickim Nidzica, r.
Wprowadzenie do informatyki Wykład 6
POWIAT MYŚLENICKI Tytuł Projektu: Poprawa płynności ruchu w centrum Myślenic poprzez przebudowę skrzyżowań dróg powiatowych K 1935 i K 1967na rondo.
PODSUMOWANIE WYNIKÓW MATUR z języka polskiego w maju 2007 r.
Metody goniometryczne w badaniach materiałów monokrystalicznych
Liczby pierwsze.
Domy Na Wodzie - metoda na wlasne M
Jaki personel zatrudniamy a jaki byśmy chcieli?
ZNACZENIE ZDROWIA PSYCHICZNEGO DLA EFEKTYWNOŚCI PRACOWNIKA
 DOBRE, TAŃSZE, DOSTĘPNE.
Podatki i opłaty lokalne w 2010 roku
Fizyka i astronomia na egzaminach zewnętrznych w 2008 roku Egzamin gimnazjalny Matura Pracownia Doskonalenia Metodycznego Opracował: Zbigniew Łuczka.
NOWE TECHNOLOGIE NA USŁUGACH EDUKACJI Publiczna Szkoła Podstawowa nr 3 w Grodkowie Zajęcia w ramach projektu NTUE.
PREPARATYWNA CHROMATOGRAFIA CIECZOWA.
Prezentacja poziomu rozwoju gmin, które nie korzystały z FS w 2006 roku. Eugeniusz Sobczak Politechnika Warszawska KNS i A Wykorzystanie Funduszy.
Fundusze nieruchomości jako inwestycja z celem zdobycia kapitału emerytalnego Karolina Oleszek.
Burze pyłowe na Marsie.
MATERIAŁY WŁÓKIENNICZE
Klamki do drzwi Klamki okienne i inne akcesoria
Opracował: Zespół Humanistyczny. Klasa Średnia ww - wielokrotnego wyboru (na 20 p) Średnia KO - krótkie odpowiedzi (na 10 p) Średnia za zaproszenie (na.
JO16-75 Dane techniczne: Wysokość-130 Płaszczyzna dolna-90
Pytania konkursowe.
Matura 2005 Wyniki Jarosław Drzeżdżon Matura 2005 V LO w Gdańsku
Studenckie Poradnie Prawne Podsumowanie działalności październik 2008 – – styczeń 2009.
ANALIZA WYNIKÓW NABORU ELEKTRONICZNEGO do szkół ponadgimnazjalnych
Ogólnopolski Konkurs Wiedzy Biblijnej Analiza wyników IV i V edycji Michał M. Stępień
Analiza wyników „Matura próbna”
Agnieszka Jankowicz-Szymańska1, Wiesław Wojtanowski1,2
SERDECZNIE WITAMY 1. WSPOMNIEŃ CZAR… 2 3 PANORAMA OSTROWA WIELKOPOLSKIEGO.
„Rynek pracy w powiecie trzebnickim: struktura bezrobocia i miejsca pracy.”
AKASA Bank Sebastian Marchel Anna Karpińska Anna Matusiewicz
KOLEKTOR ZASOBNIK 2 ZASOBNIK 1 POMPA P2 POMPA P1 30°C Zasada działanie instalacji solarnej.
VI przegląd plastyczny z rysunku, malarstwa i rzeźby
EGZAMIN GIMNAZJALNY W SUWAŁKACH 2009 Liczba uczniów przystępująca do egzaminu gimnazjalnego w 2009r. Lp.GimnazjumLiczba uczniów 1Gimnazjum Nr 1 w Zespole.
Ze szczególnym uwzględnieniem stosowanych ćwiczeń specjalnych OPRACOWAŁ Z.LIPIŃSKI.
Poznań, 16 maja Charakterystyka populacji Liczba szkół Uczniowie, którzy przystąpili do egzaminu Łącznie A1+A4+A5A6A7A8 lubuskie
Kuratorium Oświaty w Szczecinie WYNIKI EGZAMINU MATURALNEGO 2008 W SZKOŁACH WOJEWÓDZTWA ZACHODNIOPOMORSKIEGO Wyniki opracowano na podstawie danych zamieszczonych.
MATURA 2007 raport ZESPÓŁ SZKÓŁ I PLACÓWEK KSZTAŁCENIA ZAWODOWEGO.
1. Pomyśl sobie liczbę dwucyfrową (Na przykład: 62)
- powtórzenie wiadomości
EGZAMIN MATURALNY Wybór języka obcego zdawanego jako obowiązkowy.
Analiza matury 2013 Opracowała Bernardeta Wójtowicz.
Zasady skutecznego działania
Badanie kwartalne BO 2.3 SPO RZL Wybrane wyniki porównawcze edycji I- VII Badanie kwartalne Beneficjentów Ostatecznych Działania 2.3 SPO RZL – schemat.
Spływ należności w Branży Elektrycznej
Wstępna analiza egzaminu gimnazjalnego.
EGZAMINU GIMNAZJALNEGO 2013
EcoCondens Kompakt BBK 7-22 E.
EcoCondens BBS 2,9-28 E.
Projekt Badawczo- Rozwojowy realizowany na rzecz bezpieczeństwa i obronności Państwa współfinansowany ze środków Narodowego Centrum Badań i Rozwoju „MODEL.
User experience studio Użyteczna biblioteka Teraźniejszość i przyszłość informacji naukowej.
WYNIKI EGZAMINU MATURALNEGO W ZESPOLE SZKÓŁ TECHNICZNYCH
Komenda Powiatowa Policji
EGZAMIN GIMNAZJALNY Charakterystyka wyników osiągniętych przez uczniów.
Testogranie TESTOGRANIE Bogdana Berezy.
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
© GfK 2014 | GfK Health | Leki homeopatzcyne widziane okiem lekarzy 1 LEKI HOMEOPATYCZNE WIDZIANE OKIEM LEKARZY Czerwiec 2014.
Nowy Jork Londyn Mleko, (1l) 0,81£ 0,94 £ Bochenek świeżego chleba (500g) 1,78 £ 0,96 £ Ryż (biały), (1kg) 2,01 £ 1,51 £ Jajka(12) 1,86 £ 2,27 £ Lokalny.
Dr hab. Renata Babińska- Górecka
Inżynieria oprogramowania
1 Używanie alkoholu i narkotyków przez młodzież szkolną w województwie opolskim w 2007 r. Na podstawie badań przeprowadzonych przez PBS DGA (w pełni porównywalnych.
Czerwiec TECHNIK HANDLOWIEC Etap pisemny: przystąpiło - 18 osób zdało – 18 osób Etap praktyczny przystąpiło - 18 osób zdało - 12 osób Dyplom otrzymało.
Współrzędnościowe maszyny pomiarowe
ANKIETA ZOSTAŁA PRZEPROWADZONA WŚRÓD UCZNIÓW GIMNAZJUM ZPO W BORONOWIE.
Elementy geometryczne i relacje
Strategia pomiaru.
LO ŁobżenicaWojewództwoPowiat pilski 2011r.75,81%75,29%65,1% 2012r.92,98%80,19%72,26% 2013r.89,29%80,49%74,37% 2014r.76,47%69,89%63,58% ZDAWALNOŚĆ.
Inżynieria oprogramowania
Zapis prezentacji:

Wprowadzenie do przedmiotu Koncepcja wykładu: Jerzy Nawrocki Slajdy: Jerzy Nawrocki Lektor: Ewa Nawrocka Montaż: Mirosław Ochodek Pytania kontrolne: Mirosław Ochodek Ćwiczenia: Mirosław Ochodek Witam Państwa serdecznie na pierwszym wykładzie dotyczącym inżynierii oprogramowania. Dzisiejszy wykład będzie trochę przypominał oglądanie okolicy z lotu ptaka. Z tej perspektywy nie widać wielu, być może bardzo ważnych, szczegółów, ale za to ma się obraz całości. I ten obraz całości, w odniesieniu do inżynierii oprogramowania, będę się starał w trakcie dzisiejszego wykładu stworzyć.  Holenderskie miasteczko Joure widziane z lotu ptaka

Definicja Zastosowanie systematycznego, zdyscyplinowanego, ilościowego podejścia do rozwoju, eksploatacji i utrzymania oprogramowania. Zgodnie ze standardowym słownikiem inżynierii oprogramowania opracowanym przez IEEE, inżynieria oprogramowania jest to zastosowanie systematycznego, zdyscyplinowanego, ilościowego podejścia do rozwoju, eksploatacji i utrzymania oprogramowania. IEEE Std 610.12-1990 IEEE Standard Glossary of Software Eng. Terminology

Definicja inżynieria Zastosowanie systematycznego, zdyscyplinowanego, ilościowego podejścia do rozwoju, eksploatacji i utrzymania oprogramowania. Krótko mówiąc, jest to zastosowanie inżynierskiego podejścia do oprogramowania. Taka definicja jest krótka (i to jest jej zaletą), ale – niestety – nie wyjaśnia zbyt szczegółowo, co wchodzi w zakres inżynierii oprogramowania. IEEE Std 610.12-1990 IEEE Standard Glossary of Software Eng. Terminology

Computing Curricula 2001 Określeniem zakresu wiedzy dotyczącej różnych obszarów informatyki, w tym również inżynierii oprogramowania, od wielu lat zajmują się wspólnie dwa, największe na świecie, towarzystwa informatyczne: IEEE Computer Society i Association for Computing Machinery (w skrócie ACM). Oba powstały tuż po II Wojnie Światowej w Stanach Zjednoczonych i mają teraz (razem) około 180 tys. członków na całym świecie (dla porównania, Polskie Towarzystwo Informatyczne ma około tysiąca członków). Wydają wysokiej rangi czasopisma naukowe, organizują liczne i bardzo ważne konferencje oraz zawody dla studentów takie, jak IEEE Computer Society International Design Competition i ACM International Collegiate Programming Contest.

Computing Curricula 2001 1977 1968 Pierwsze rekomendacje dotyczące studiów informatycznych powstały pod auspicjami ACM w 1968 roku. IEEE Computer Society opracowało swoje rekomendacje po raz pierwszy w 1977 roku.

Computing Curricula 2001 Pod koniec lat 80-tych oba towarzystwa postanowiły połączyć swoje siły i wspólnie opracowały standard nauczania zwany Computing Curricula 1991. Dziesięć lat później powstała nowa wersja zwana Computing Curricula 2001.

Computing Curricula 2001 Struktury dyskretne Podstawy programowania Algorytmy i złożoność Architektura sys. komputerowych Systemy operacyjne Technologie sieciowe Języki i paradygmaty program. Komunikacja człowiek-komputer Grafika komputerowa Sztuczna inteligencja Bazy danych Problemy społeczne i zawodowe Inżynieria oprogramowania Nauki obliczeniowe Inżynieria oprogramowania jest jednym z czternastu obszarów informatyki wyodrębnionych w tym dokumencie.

Inżynieria oprogramowania Obligatoryjne Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API W ramach inżynierii oprogramowania jest osiem jednostek wiedzy o charakterze obligatoryjnym (czyli każdy informatyk musi to wiedzieć) i cztery opcjonalne. M.formalne Sys. specjalne Komponenty Niezawodn. Opcjonalne

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Wśród obowiązkowych jednostek wiedzy mamy dwie dotyczące czynności poprzedzających samo kodowanie programu. Jest to specyfikacja wymagań, czyli ustalenie co budowany system ma robić i projektowanie oprogramowania, czyli – w dużym uproszczeniu – zaproponowanie jego struktury. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Kolejne dwie jednostki dotyczą walidacji i weryfikacji oprogramowania (czyli, inaczej mówiąc, kontroli jakości) i jego ewolucji, czyli utrzymania użyteczności programu i umiejętnego wprowadzania do niego koniecznych zmian. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Inżynieria oprogramowania obejmuje również takie jednostki wiedzy, jak procesy wytwarzania oprogramowania (rozpatruje się tutaj, m.in. różne modele cyklu życia oprogramowania, co ma potem wpływ na planowanie przedsięwzięć programistycznych) i zarządzanie przedsięwzięciami programistycznymi. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Ostatnie dwie obowiązkowe jednostki wiedzy dotyczą narzędzi i środowisk programistycznych oraz interfejsów programistycznych – w skrócie API od ang. Application Programming Interface. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Wśród jednostek opcjonalnych są metody formalne (czyli o charakterze matematycznym), systemy specjalne (np. systemy czasu rzeczywistego sterujące pracą elektrowni, czy lotem samolotu), komponenty programistyczne i zagadnienia dot. niezawodności oprogramowania. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Polski standard kształcenia dla kierunku Informatyka, przyjęty przez Radę Główną Szkolnictwa Wyższego w czerwcu 2006 roku, obejmuje osiem jednostek wiedzy, które według Computing Curricula 2001 mają charakter obligatoryjny. M.formalne Sys. specjalne Komponenty Niezawodn.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API W ramach tego przedmiotu skoncentrujemy się na pierwszych sześciu obszarach, natomiast narzędzia, jak i API będą omawiane w ramach innych przedmiotów. Na przykład takie narzędzia jak kompilatory różnych języków programowania będą omawiane przy okazji prezentowania paradygmatów programowania, na których te języki się opierają. W ramach inżynierii oprogramowania będziemy prezentować tylko narzędzia wspomagające dotyczące takich zagadnień, jak zarządzanie konfiguracją, tworzenie modeli w języku UML, czy testowanie. Z kolei API będą prezentowane na przedmiotach związanych z różnymi obszarami informatyki. Na przykład API dotyczące wybranego systemu operacyjnego będzie prezentowane w ramach zajęć z systemów operacyjnych, API związane z pakietami graficznymi – na przedmiocie dotyczącym grafiki komputerowej itd. M.formalne Sys. specjalne Komponenty Niezawodn.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania W dalszej części wykładu chciałbym krótko omówić tematykę kolejnych wykładów, jakie nas czekają w ramach tego przedmiotu.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Zaczniemy od zasad skutecznego działania.

absolwenci nie potrafią się komunikować, Pracodawcy się skarżą absolwenci nie potrafią się komunikować, mają niedostateczne przygotowanie do pracy w zespole, brak im umiejętności skutecznego i produktywnego zarządzania ich pracą indywidualną Szefowie amerykańskich firm informatycznych skarżą się, że absolwenci amerykańskich uczelni nie potrafią się komunikować, mają niedostateczne przygotowanie do pracy w zespole i że brak im umiejętności skutecznego i produktywnego zarządzania ich pracą indywidualną. Prawdopodobnie tego typu zastrzeżenia można by usłyszeć również z ust pracodawców polskich. Dlatego zanim zaczniemy prezentować różne metody i narzędzia inżynierii oprogramowania postanowiłem najpierw przedstawić ogólne zasady skutecznego działania, które stanowią podstawę dla szczegółowych rozwiązań i bez rozumienia których trudno oczekiwać satysfakcjonujących efektów.

Wersja dźwiękowa książki „7 nawyków skutecznego działania” Zasady Covey’ego Zasady te będą oparte na słynnej książce Stephena Covey’ego „7 nawyków skutecznego działania”. Na slajdzie widzimy okładkę do jej wersji dźwiękowej. Książka ta została również wydana w języku polskim. Stephen Covey Wersja dźwiękowa książki „7 nawyków skutecznego działania”

Współzależność Niezależność Zależność Stephen Covey Zasady Covey’ego Współzależność Niezależność Zależność Ogólnie mówiąc, Stephen Covey proponuje swoim czytelnikom rozwój osobowości od stanu zależności od innych osób, poprzez niezależność od innych do współzależności z innymi osobami. Stephen Covey

Współzależność Niezależność Zależność Zasady Covey’ego Nie dam rady! To przez Ciebie! Współzależność Niezależność Zależność Zależność od innych osób przejawia się nadmierną tendencją do obarczania tych innych zadaniem opieki nad sobą. Osoby zależne wierzą, że to inni są odpowiedzialni za ich wykształcenie, brak pracy, czy problemy rodzinne. Oni sami wydają się mieć niewielki wpływ na swoje życie. Taka postawa rzadko kiedy (jeśli kiedykolwiek) prowadzi do skutecznego działania.

Współzależność Niezależność Zależność Zasady Covey’ego Dam radę! Muszę! Współzależność Niezależność Zależność Niezależność to wiara we własne siły i zaufanie do siebie. Osoby niezależne są przekonane, że angażując własną energię, zdolności i emocje są w stanie osiągnąć wiele, bardzo wiele.

Współzależność Niezależność Zależność Zasady Covey’ego Współzależność Niezależność 3 Aby rzeczy pierwsze były pierwsze 2 Zaczynaj mając koniec na względzie 1 Bądź proaktywny Zależność Aby przejść od zależności do niezależności Stephen Covey proponuje wdrożenie w swoim życiu trzech zasad: trzeba być proaktywnym, trzeba zaczynać mając zawsze koniec (czyli skutki swoich działań) na względzie i trzeba tak zarządzać czasem, aby rzeczy pierwsze w sensie ważności były również pierwsze w przydzielaniu im naszego czasu. Aby być skutecznym nie wystarczy te zasady zrozumieć i zgodzić się z nimi – trzeba je tak głęboko wdrożyć, aby stały się naszymi nawykami.

Współzależność Niezależność Zależność Zasady Covey’ego Współzależność Razem damy radę! Będzie OK. Niezależność Zależność Wyższym stopniem rozwoju osobowości od niezależności jest współzależność. Współzależność pozwala osiągnąć rzeczy, które byłyby dla pojedynczej osoby nie do osiągnięcia. Jest to przekonanie, że razem możemy więcej.

Współzależność Niezależność Zależność Zasady Covey’ego 6 Dbaj o synergię 5 Najpierw staraj się zrozumieć 4 Myśl o obopólnej korzyści Współzależność Niezależność Zależność Rozwój polegający na przejściu od niezależności do współzależności opiera się na kolejnych trzech zasadach, które należy wdrożyć: trzeba myśleć o obopólnej korzyści, a nie tylko własnej, trzeba najpierw starać się zrozumieć partnera (klienta, szefa, pracownika) a dopiero potem oczekiwać by nas zrozumiano i trzeba dbać o synergię.

Ostrz piłę Współzależność Niezależność Zależność Zasady Covey’ego Ostrz piłę 6 Dbaj o synergię 5 Najpierw staraj się zrozumieć 4 Myśl o obopólnej korzyści Współzależność Niezależność 3 Aby rzeczy pierwsze były pierwsze 2 Zaczynaj mając koniec na względzie 1 Bądź proaktywny Zależność Do tego dochodzi jeszcze jedna, siódma zasada: ostrz piłę, czyli dbaj o ciągłe doskonalenia.

Zasady Covey’ego Ostrz piłę 6 Dbaj o synergię 5 Najpierw staraj się zrozumieć 4 Myśl o obopólnej korzyści 3 Aby rzeczy pierwsze były pierwsze 2 Zaczynaj mając koniec na względzie 1 Bądź proaktywny O tych siedmiu zasadach będzie mowa na następnym wykładzie. Każda z tych zasad skutecznego działania zostanie dość dokładnie przedstawiona. Jednak ostateczny efekt będzie zależał od tego, w jakim stopniu słuchacze zdecydują się przekuć te zasady w swoje nawyki.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Tematem następnego wykładu będzie specyfikacja wymagań.

Specyfikacja wymagań Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Wykład ten będzie wprost nawiązywał do jednostki wiedzy „specyfikacja wymagań”. M.formalne Sys. specjalne Komponenty Niezawodn.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie Inżynierskie podejście do wytworzenia jakiegoś produktu opiera się zazwyczaj na cyklu życia obejmującym przynajmniej trzy fazy: zebranie wymagań, opracowanie projektu i wykonanie produktu.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie Jeśli, na przykład, ktoś myśli o przedsięwzięciu budowlanym, to najpierw trzeba zebrać wymagania inwestora dotyczące funkcji, jakie budynek ma pełnić i trzeba uwzględnić ograniczenia sformułowane w warunkach zabudowy.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie W następnej fazie powstaje projekt architektoniczny, który pokazuje, jak zebrane wymagania i nałożone ograniczenia mają być spełnione.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie I wreszcie dochodzi do fazy wykonania, dla której punktem wyjścia jest projekt opracowany na podstawie wymagań.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie Podobnie powinno być z przedsięwzięciem programistycznym. Na początku należy zebrać wymagania dotyczące systemu, który ma być zbudowany.

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie Mając wymagania można przejść do opracowania projektu systemu. Na slajdzie widoczny jest projekt systemu informatycznego przedstawiony w języku UML. http://groups.sims.berkeley.edu/CDE-Events/SMJ-UML.jpg

Wymagania Projekt Wykonanie Cykl życia Wymagania Projekt Wykonanie W oparciu o projekt programiści tworzą kod systemu. Oczywiście, potem należy jeszcze sprawdzić, czy system nie zawiera defektów i czy spełnia wymagania, o które chodziło klientowi. http://groups.sims.berkeley.edu/CDE-Events/SMJ-UML.jpg

Inżynieria wymagań Wymagania Samo zbieranie i opracowanie wymagań jest tak ważnym i trudnym procesem, że mówi się wręcz o inżynierii wymagań. Rozumie się przez to fragment inżynierii oprogramowania odpowiedzialny za wymagania.

Problem i koncepcja rozwiązania Inżynieria wymagań Problem i koncepcja rozwiązania Wymagania Zbieranie wymagań Analiza wymagań Proces zbierania i opracowywania wymagań ma najczęściej charakter cykliczny. Negocjacja wymagań

Problem i koncepcja rozwiązania Inżynieria wymagań Problem i koncepcja rozwiązania Wymagania Zbieranie wymagań Analiza wymagań Powinien być poprzedzony sformułowaniem problemu (lub problemów), które budowany system informatyczny ma rozwiązać i nakreśleniem bardzo ogólnej wizji rozwiązania. Negocjacja wymagań

Problem i koncepcja rozwiązania Inżynieria wymagań Problem i koncepcja rozwiązania Wymagania Zbieranie wymagań Analiza wymagań Zasadnicza część procesu zbierania i opracowywania wymagań składa się z trzech faz. Pierwszą fazą powinno być zbieranie wymagań. Często wymagania pochodzą od wielu różnych osób i na dodatek należy uwzględniać ograniczenia wynikające np. z różnych przepisów prawa. Negocjacja wymagań

Problem i koncepcja rozwiązania Inżynieria wymagań Problem i koncepcja rozwiązania Wymagania Zbieranie wymagań Analiza wymagań Drugą fazą powinna być analiza wymagań. Wymagania mogą być wzajemnie sprzeczne, niejednoznaczne itp. – im wcześniej się takie wady wykryje tym lepiej dla całego przedsięwzięcia. Negocjacja wymagań

Problem i koncepcja rozwiązania Inżynieria wymagań Problem i koncepcja rozwiązania Wymagania Zbieranie wymagań Analiza wymagań Po analizie wymagań potrzebna jest ich negocjacja. Wykryte defekty, takie jak np. sprzeczności między wymaganiami, należy usunąć. Zazwyczaj wymaga to negocjacji z wieloma zainteresowanymi osobami i może być bardzo trudne. Jeśli osoby odpowiedzialne za przedsięwzięcie uznają, że wymagania mają już odpowiednią jakość i można na ich podstawie przejść do pracy nad projektem, to proces zbierania i analizy wymagań można zakończyć. Negocjacja wymagań

Wymagania funkcjonalne Wymagania pozafunkcjonalne Inżynieria wymagań Wymagania Wymagania funkcjonalne Wymagania pozafunkcjonalne Generalnie wymagania można podzielić na funkcjonalne i pozafunkcjonalne. Wymagania funkcjonalne opisują funkcje, jakie ma realizować system. Przykładem może być wymaganie, aby budowany system księgarni internetowej automatycznie wysyłał do wydawcy zamówienia na te tytuły, których liczba w magazynie spadnie poniżej 20 sztuk. Wymagania pozafunkcjonalne dotyczą takich aspektów, jak wydajność (np. szybkość wykonania poszczególnych operacji), czy niezawodność.

Wykład nt. specyfikacji wymagań Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Specyfikacja wymagań Przypadki użycia Dobre praktyki W trakcie wykładu poświęconego specyfikacji wymagań przedstawiona zostanie metoda specyfikacji wymagań funkcjonalnych zwana przypadkami użycia. Metoda ta staje się coraz bardziej popularna, również w polskich firmach informatycznych. Zaprezentowane zostaną także dobre praktyki dotyczące dokumentu specyfikacji wymagań, zbierania wymagań, ich analizy i negocjacji oraz opisywania wymagań. Ta problematyka zostanie rozwinięta w ramach przedmiotu obieralnego „Zaawansowana inżynieria oprogramowania”.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kolejny wykład będzie poświęcony kontroli jakości artefaktów.

Kontrola jakości artefaktów Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Jest on bezpośrednio związany z jednostką wiedzy dotyczącą walidacji. Zagadnienia te nabierają szczególnego znaczenia w przypadku budowy tzw. systemów krytycznych, czyli systemów, których awaria może doprowadzić do utraty zdrowia, a nawet życia ludzkiego lub spowodować ogromne straty materialne. M.formalne Sys. specjalne Komponenty Niezawodn.

Podręcznik użytkownika Artefakty Specyfikacja wymagań Testy akceptacyjne Kod programu Podręcznik użytkownika W trakcie pracy nad systemem informatycznym powstaje cały szereg różnego typu artefaktów: specyfikacja wymagań, testy akceptacyjne, kod programu, podręcznik użytkownika i wiele innych. Oczywiście, muszą to być produkty dobrej jakości – nie mogą zawierać poważnych defektów.

Podręcznik użytkownika Artefakty Specyfikacja wymagań Testy akceptacyjne Kod programu Podręcznik użytkownika Dlatego potrzebna jest kontrola jakości tych artefaktów.

Kontrola jakości specyfikacji wymagań Problem i koncepcja rozwiązania Zbieranie wymagań Analiza wymagań Wiele osób myśli o kontroli jakości, jako ostatniej fazie pracy nad jakimś artefaktem. Nie jest to, ogólnie rzecz biorąc, najlepsze podejście. Omawiając proces zbierania i analizy wymagań przedstawiłem iteracyjny cykl życia, w którym analiza wymagań – i związana z nią kontrola jakości tych wymagań – są wykonywane wielokrotnie. Negocjacja wymagań

Rodzaje kontroli jakości W praktyce kontrola jakości najczęściej przyjmuje postać testowania lub przeglądów. Testowanie można wykonać tylko w odniesieniu do działającego systemu lub jego prototypu. Przeglądy są bardziej ogólne: można je stosować zarówno do kodu, jak i do specyfikacji wymagań. Istotą przeglądu jest analiza artefaktów. Analiza ta może być przeprowadzona przez pojedynczą osobę (nazywamy to recenzją) lub też przez zespół osób (najpopularniejszym przykładem tego typu przeglądów są inspekcje). Testowanie Przeglądy

Wykład nt. kontroli jakości Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kontrola jakości artefaktów Jakość i testowanie Inspekcje Szacowanie liczby defektów W trakcie wykładu poświęconego kontroli jakości artefaktów przedstawię krótko najważniejsze pojęcia dotyczące jakości i testowania, zaprezentuję sposób przeprowadzania inspekcji zgodny ze standardem IEEE 1028 i pokażę, jak można oszacować liczbę defektów, jakie zakradły się do artefaktu (łącznie z tymi, które nie zostały w trakcie kontroli jakości wykryte).

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kolejny wykład będzie poświęcony językowi UML.

Język UML Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API UML jest wykorzystywany m.in. przy projektowaniu systemów informatycznych. Jest też wiele narzędzi komercyjnych i darmowych wspomagających tworzenie modeli w języku UML (wśród narzędzi komercyjnych dużą popularnością cieszy się Rational Rose, a jednym z bardziej popularnych darmowych narzędzi jest ArgoUML). M.formalne Sys. specjalne Komponenty Niezawodn.

www.uml.org UML jest stosunkowo nowym językiem. Jego pierwsza wersja została zaakceptowana w 1997 roku. Na slajdzie jest pokazana strona internetowa dotycząca języka UML, która jest utrzymywana przez międzynarodową organizację OMG zatwierdzającą kolejne wersje tego języka. Osoby znające język angielski znajdą na tej stronie wiele cennych informacji na temat języka UML.

Diagramy przypadków użycia Diagramy sekwencji Diagramy czynności Diagramy UML Diagramy stanów Diagramy przypadków użycia Diagramy sekwencji Diagramy czynności Diagramy klas . . . Język UML obejmuje wiele różnego typu diagramów, które pozwalają w sposób graficzny modelować różne aspekty systemów informatycznych (i nie tylko informatycznych). Tytułem wprowadzenia do języka UML przedstawione zostaną bardzo proste przykłady diagramu stanów, diagramu przypadków użycia i diagramu sekwencji. Zarówno te wymienione diagramy, jak i pozostałe zostaną bardziej szczegółowo omówione w trakcie wykładu poświęconego językowi UML.

Diagram stanów /Zdanie Matury Maturzysta /Złożenie podania na studia Kandydat Nieprzyjęty Zakwalifikowany Pierwszym diagramem, który chciałbym pokazać jest diagram stanów. Na slajdzie widzimy diagram pokazujący „przeistaczanie” się maturzysty w studenta – za chwilę dokładniej go omówimy. /Złożenie oryginału świadectwa Przyjęty /Złożenie ślubowania Student

Diagram stanów Stan Nazwa stanu Kluczowym elementem na diagramach stanów są oczywiście stany. Stan jest reprezentowany za pomocą owalu z nazwą stanu w środku.

Diagram stanów Przejście Maturzysta Kandydat Między stanami są przejścia reprezentowane za pomocą strzałki. W przypadku diagramu pokazanego na slajdzie widać, że będąc w stanie „Maturzysta” można przejść do stanu „Kandydat”, ale nie odwrotnie.

Diagram stanów Akcja Maturzysta /Złożenie podania na studia Kandydat Z przejściem może być związana akcja. W przykładzie pokazanym na slajdzie widać, że przejście od stanu „Maturzysta” do stanu „Kandydat” wiąże się ze złożeniem podania na studia.

Diagram stanów Ukośna kreska Maturzysta /Złożenie podania na studia Kandydat Akcje są poprzedzane znakiem ukośnej kreski – tym samym, jaki jest wykorzystywany jako symbol dzielenia.

Diagram stanów Początek Maturzysta /Złożenie podania na studia Kandydat Początek jest zaznaczany małym ciemnym kółkiem. Stąd zaczyna się „chodzenie” po stanach.

Diagram stanów /Zdanie Matury Maturzysta /Złożenie podania na studia Kandydat Nieprzyjęty Zakwalifikowany Zgodnie z diagramem przedstawionym na slajdzie, najpierw trzeba zdać maturę i wtedy zdobywa się status maturzysty (w odniesieniu do świata rzeczywistego jest to uproszczenie, ale modele mają to do siebie, że zawsze w jakiś sposób upraszczają rzeczywistość). Po złożeniu podania na studia stajemy się kandydatami. Wskutek akcji, czy zdarzeń nie pokazanych na diagramie Kandydat uzyskuje status Zakwalifikowanego (można się domyślać, że trzeba tutaj pozytywnie przejść przez procedurę kwalifikacyjną) lub też staje się Nieprzyjęty. Po złożeniu podania Zakwalifikowany staje się Przyjętym, a po złożeniu ślubowania uzyskuje on upragniony status Studenta. /Złożenie oryginału świadectwa Przyjęty /Złożenie ślubowania Student

Diagram przypadków użycia Złożenie podania Maturzysta Obejrzenie wyników rekrutacji Przejdźmy teraz do diagramów przypadków użycia. Są one wykorzystywane do pokazania kto co może zrobić. Zakwalifikowany Nieprzyjęty

Diagram przypadków użycia Aktor Jednym z głównych elementów występujących na diagramach przypadków użycia są tzw. aktorzy. Na slajdzie pokazano symbol, jakim się oznacza aktorów w języku UML. Aktor jest to rola, jaką człowiek lub ewentualnie urządzenie może odgrywać w kontakcie z opisywanym systemem informatycznym.

Diagram przypadków użycia Maturzysta Na slajdzie widzimy trzech aktorów: Maturzystę, Zakwalifikowanego i Nieprzyjętego. Zakwalifikowany Nieprzyjęty

Diagram przypadków użycia Przypadek użycia Aktor Aktor może mieć do czynienia z przypadkiem użycia opisującym pewien cel (np. o charakterze biznesowym), który aktor chce osiągnąć w kontakcie z systemem informatycznym. Nazwy przypadków użycia zapisuje się w elipsach tak, jak pokazano to na slajdzie.

Diagram przypadków użycia Złożenie podania Maturzysta Obejrzenie wyników rekrutacji Zgodnie z przedstawionym diagramem, Maturzysta może złożyć podanie, natomiast zarówno Zakwalifikowany, jak i Nieprzyjęty mogą obejrzeć wyniki rekrutacji. Zakwalifikowany Nieprzyjęty

Diagram sekwencji Maturzysta System rekrutacji KReM Składa podanie i wprowadza oceny Czy oceny są poprawne? Są poprawne Potwierdza przyjęcie podania i ocen Wnosi opłatę rekrutacyjną Trzecim rodzajem diagramów języka UML, jaki chciałbym przedstawić są diagramy sekwencji. Diagramy te służą do ilustrowania komunikacji między obiektami. Potwierdza przyjęcie opłaty

Obiekt Linia życia obiektu Diagram sekwencji Obiekt Obiekt-1 Obiekt-2 Linia życia obiektu Każdy obiekt jest reprezentowany przez prostokąt zawierający jego nazwę i tzw. linię życia obiektu.

Diagram sekwencji Obiekt-1 Obiekt-2 Komunikat Komunikaty przesyłane między obiektami są reprezentowane za pomocą strzałki, nad którą pisze się nazwę komunikatu. Strzałka pokazuje kierunek przepływu komunikatu. Na pokazanym slajdzie komunikat jest wysyłany przez Obiekt-1 i trafia do Obiekt-2.

Diagram sekwencji Obiekt-1 Obiekt-2 Komunikat-1 Komunikat-2 Diagramy sekwencji zazwyczaj zawierają więcej niż jeden komunikat. Komunikaty są wysyłane w kolejności „od góry do dołu”. Na slajdzie widać trzy komunikaty. Najpierw będzie wysłany Komunikat-1, potem Komunikat-2 i na końcu Komunikat-3. Tak się złożyło, że wszystkie te komunikaty są wysyłane przez Obiekt-1 i trafiają do Obiekt-2.

Diagram sekwencji Maturzysta System rekrutacji KReM Składa podanie i wprowadza oceny Czy oceny są poprawne? Są poprawne Potwierdza przyjęcie podania i ocen Wnosi opłatę rekrutacyjną Diagram pokazany na tym slajdzie opisuje komunikację między trzema obiektami: Maturzystą, Systemem rekrutacji na studia i obiektem o nazwie KReM (chodzi tutaj o Krajowy Rejestr Matur – system informatyczny udostępniający wyniki matur z Okręgowych Komisji Egzaminacyjnych). Zgodnie z tym diagramem maturzysta chcący dostać się na studia najpierw składa podanie i wprowadza swoje oceny. Następnie system rekrutacji wysyła do KReM-u zapytanie, czy wprowadzone oceny są poprawne. KReM przesyła komunikat, z którego wynika, że oceny są poprawne. Wtedy system rekrutacji wysyła do maturzysty komunikat z potwierdzeniem przyjęcia podania i ocen. Teraz maturzysta wnosi opłatę rekrutacyjną, a system rekrutacji potwierdza przyjęcie tej opłaty. Zaletą diagramów sekwencji jest pokazanie jakby z globalnego punktu widzenia (czyli patrząc na wszystkie interesujące nas obiekty), jak wygląda komunikacja między obiektami. Pomaga to zrozumieć działanie opisywanego systemu i jest to informacja, której nie dostarczają inne rodzaje diagramów języka UML. Potwierdza przyjęcie opłaty

Diagramy języka UML Jak widać, język UML oferuje różnego rodzaju diagramy, z których każdy opisuje inne aspekty systemu. Jak już wcześniej wspomniano, tych rodzajów diagramów jest więcej i będą one omówione w trakcie wykładu poświęconego językowi UML.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kolejny wykład będzie dotyczył metod formalnych.

Metody formalne Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Zgodnie z Computing Curricula 2001, metody formalne są jednostką opcjonalną. Mają one ścisły związek z walidacją oprogramowania. Niektórzy podchodzą do nich sceptycznie, inni upatrują w nich nadzieję na istotne podniesienie jakości tworzonego oprogramowania, jakości rozumianej jako zgodność implementacji ze specyfikacją. M.formalne Sys. specjalne Komponenty Niezawodn.

Metody formalne Program   Przetestuję. Czy on jest poprawny? Przeczytam. Zasadnicza koncepcja związana z metodami formalnymi polega na tym, by wykazywać poprawność programów nie w oparciu o testy czy przeglądy, lecz na gruncie matematycznym, poprzez dowodzenie właściwości programów. Udowodnię.  

Silnia int Silnia (int n) { int k, s; k= 0; s= 1; while (k != n) { k= k + 1; s= s * k; } return s; Spróbujmy udowodnić, że przedstawiona na slajdzie funkcja zapisana w języku C oblicza wartość n!.

return s; /*** POST s== n! ***/ Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; while (k != n) { k= k + 1; s= s * k; } return s; /*** POST s== n! ***/ Pierwszym krokiem jest związanie z tą funkcją warunku wstępnego (po angielsku – precondition) i końcowego (ang. postcondition). Ponieważ parametr n został zadeklarowany jako liczba całkowita, to wystarczy dodać jako warunek wstępny, że ma być to liczba nieujemna. Stąd też umieściliśmy w tekście programu komentarz PRE zawierający warunek „n >= 0”. Warunek końcowy (POST) określa relację, jaka ma być prawdziwa na końcu wykonania podprogramu. W przypadku omawianego programu na końcu zmienna s powinna mieć wartość n!.

return s; /*** POST s== n! ***/ Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; while (k != n) { k= k + 1; s= s * k; } return s; /*** POST s== n! ***/ No to teraz wystarczy tylko dowieść, że jeżeli na początku wykonania podprogramu n >= 0, to na końcu s będzie równe n!. Łatwo powiedzieć, trudno zrobić. W przypadku naszego programu najtrudniejszym elementem jest pętla while. Dowodzenie poprawności programu zawierających pętle odbywa się metodą niezmienników (ang. invariant). Niezmiennik jest to zdanie, które jest prawdziwe za każdym razem, kiedy powtarzane jest wykonanie instrukcji zawartych w pętli. Dokładnie mówiąc, niezmiennik powinien być prawdziwy tuż przed pierwszym wykonaniem instrukcji zawartych w pętli, tuż przed drugim wykonaniem, przed trzecim itd. Zasadniczy problem polega na tym by znaleźć (wymyślić) taki niezmiennik, który zawsze będzie prawdziwy i jednocześnie pomoże nam w udowodnieniu warunku końcowego POST.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ Nasz podprogram jest bardzo prosty i nietrudno zauważyć, że niezmiennik (INV) ma postać następującego zdania: s równa się k!. Najpierw udowodnimy, że to zdanie jest faktycznie niezmiennikiem, a potem pokażemy, jak go wykorzystać do udowodnienia warunku końcowego.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ 1 = 0! Pierwsze wystąpienie inwariantu (tuż przed wykonaniem instrukcji while) jest prawdziwe, bowiem na mocy definicji funkcji silnia, 0! jest równe 1.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ Instrukcja „k= k+1” jest o tyle kłopotliwa, że występuje w niej dwa razy ten sam symbol k i za każdym razem oznacza inną wartość.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ Żeby usunąć tę niejednoznaczność oznaczmy przez k z podkreśleniem początkową wartość k, jaka była przed wykonaniem tej instrukcji przypisania, a k bez podkreślenia niech oznacza nową wartość, jaka będzie po wykonaniu tej instrukcji.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s== k! Zatem z pierwszego inwariantu wynika, że przed wykonaniem tej instrukcji przypisania mamy s równe „k z podkreśleniem” silnia.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s== k! s== k!  k== k + 1 Po wykonaniu omawianej instrukcji przypisania dojdzie nam jeszcze zdanie mówiące, że nowa wartość k jest równa starej wartości powiększonej o 1.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s== k! s== k!  k== k + 1  s == (k – 1)! Czyli po wykonaniu tej instrukcji przypisania będziemy mieli s równe (k-1)!.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s == (k – 1)! W kolejnej instrukcji przypisania mamy podobną niejednoznaczność, jak poprzednio: dwa razy występuje symbol s i za każdym razem oznacza inną wartość.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s == (k – 1)! Podobnie jak poprzednio przyjmiemy, że s z podkreśleniem oznacza „starą” wartość, a s bez podkreślenia „nową” wartość zmiennej s.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s == (k – 1)! s== (k – 1)! Zatem na mocy poprzednio dowiedzionego faktu można powiedzieć, że tuż przed wykonaniem tej instrukcji przypisania stara wartość s jest równa (k-1)!.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s == (k – 1)!  s == s * k s== (k – 1)! Po wykonaniu tej instrukcji będzie można dopisać do poprzedniego zdania jeszcze jedno: nowa wartość s jest równa starej pomnożonej przez k.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ s == (k – 1)!  s == s * k  s == (k – 1)! * k == k! s== (k – 1)! Jeżeli zastąpimy starą wartość s przez (k – 1)!, to okaże się, że nowa wartość s jest równa k!.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ I w ten sposób dowiedliśmy, że jeżeli na początku wykonania instrukcji while prawdą jest, że s jest równe k!, to po wykonaniu obu instrukcji przypisania nadal s będzie równe k!. Zatem faktycznie jest to niezmiennik tej pętli.

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ Aby dowieść prawdziwość warunku końcowego (POST) wystarczy zauważyć, że zaraz po wykonaniu instrukcji while prawdziwy jest inwariant „s jest równe k!” oraz prawdziwe jest zaprzeczenie warunku występującego w instrukcji while, czyli k jest równe n. k == n

k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; Silnia int Silnia (int n) { /*** PRE n >= 0 ***/ int k, s; k= 0; s= 1; /*** INV s== k! ***/ while (k != n) { k= k + 1; s= s * k; /*** INV s== k! ***/ } return s; /*** POST s== n! ***/ Podstawiając niezmiennik n w miejsce k dostajemy warunek końcowy i w ten sposób kończy się dowód poprawności tego podprogramu. k == n

Dowodzenie poprawności programów Specyfikacja 5 000 LOC 7 000 LOC Do lat 90-tych dowodzenie poprawności programów odbywało się jedynie dla bardzo krótkich programów. W ciągu ostatniej dekady nastąpił istotny postęp i powstały bardzo efektywne weryfikatory. Jednakże dowodzenie poprawności programu jest wciąż bardzo pracochłonne. Ciekawe dane pozyskano w ramach projektu VSE (Verification Support Environment) finansowanego przez Unię Europejską. Jak pisze prof. Wolfgang Reif, dowiedzenie poprawności programu zawierającego ok. 7 tys. wierszy wymagało pracochłonności około 2 osobolat, a sama specyfikacja formalna miała ok. 5 tys. wierszy tekstu. Jak więc widać, formalna specyfikacja programów może być bardzo obszerna i jej wytworzenie oraz sprawdzenie jej poprawności jest zadaniem samym w sobie. Wolfgang Reif

Wykład nt. metod formalnych Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Specyfikacje aksjomatyczne Implementacje niestandardowe Sieci Petriego Metody formalne W trakcie wykładu dotyczącego metod formalnych omówię tzw. specyfikacje aksjomatyczne i związane z nimi implementacje niestandardowe, mające charakter anomalii. Przedstawię też sieci Petriego jako chyba najbardziej popularne narzędzie modelowania oprogramowania. Jest to notacja matematyczna o charakterze graficznym wykorzystywana do modelowania nie tylko systemów informatycznych, ale także np. systemów transportowych.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kolejny wykład będzie poświęcony wzorcom projektowym.

Wzorce projektowe Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Wzorce projektowe są podstawą współczesnego projektowania oprogramowania. M.formalne Sys. specjalne Komponenty Niezawodn.

Christopher Alexander Wzorce projektowe Wzorzec = Sprawdzona koncepcja, która: opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły, oraz podaje istotę jego rozwiązania w sposób abstrakcyjny. Informatyka zawdzięcza koncepcję wzorców profesorowi Christopherowi Alexandrowi. Zgodnie z jego koncepcją wzorzec jest to sprawdzona koncepcja, która opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły oraz podaje istotę rozwiązania tego problemu w sposób abstrakcyjny. Christopher Alexander

Wykład nt. wzorców projektowych Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Banda Czterech i katalog wzorców projektowych Wybrane wzorce projektowe i ich zastosowania Wzorce projektowe W ramach wykładu powiemy o Bandzie Czterech, czyli tych, którzy wprowadzili wzorce do inżynierii oprogramowania, omówiony zostanie katalog wzorców projektowych i przedstawione zostaną wybrane wzorce projektowe oraz ich zastosowania.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania W cyklu wykładowym poświęconym inżynierii oprogramowania nie może zabraknąć wykładu dotyczącego zarządzania konfiguracją.

Zarządzanie konfiguracją Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Zmiany w oprogramowaniu i towarzysząca im ewolucja kodu są praktycznie nie do uniknięcia. Właściwe zarządzanie konfiguracją jest podstawą skutecznej ewolucji oprogramowania i jedną z kluczowych praktyk zarządzania przedsięwzięciem informatycznym. M.formalne Sys. specjalne Komponenty Niezawodn.

Najprostszy system zarządzania zmianami Zmieńmy wymagania. OK. OK. OK. OK. Jeżeli przedsięwzięcie jest małe w sensie rozmiaru kodu oprogramowania, pracochłonności jego wytworzenia i liczby zaangażowanych osób, to zarządzanie zmianą może być bardzo proste. Wystarczy, że proponowana przez klienta zmiana spotka się z akceptacją programistów (może też być odwrotnie: stroną proponującą zmianę mogą być programiści, a akceptującą – klient) . Programiści Klient

Formalne podejście do zarządzania zmianami Żądanie zmiany Żądanie zmiany Err Użytkownik Kierownik konfig. Programista Raport Tak Niestety, jest szereg przedsięwzięć programistycznych, które wymagają bardziej formalnego podejścia do zarządzania zmianami. Duże firmy, prowadzące tak duże przedsięwzięcia, jak budowa elektronicznej centrali telefonicznej, korzystają dość często z podejścia prezentowanego na slajdzie, gdzie żądanie zmiany przechodzi dość długi proces od użytkownika zgłaszającego żądanie zmiany (np. usterkę w oprogramowaniu), poprzez kierownika konfiguracji, programistę oceniającego - na polecenie kierownika konfiguracji - ryzyko i koszty wprowadzenia proponowanej zmiany, specjalny Komitet Zarządzania Konfiguracją, który podejmuje ostateczną decyzję w sprawie proponowanej zmiany i Kierownika projektu, który przydziela jednemu z programistów zadanie wprowadzenia zaproponowanej zmiany do oprogramowania. Kierownik projektu Żądanie zmiany Decyzja Komitet Zarządzania Konfiguracją

Koncepcja systemu zarządzania konfiguracją Program Załóżmy teraz, że trzech programistów dostało trzy różne zadania modyfikacji tego samego programu. Ponieważ (jak to często bywa) klientowi bardzo się spieszy, programiści ci mają pracować równolegle. Oczywiście, jeżeli zaczną oni bezpośrednio i dość chaotycznie manipulować kodem programu, to nic dobrego z tego nie wyniknie.

Koncepcja systemu zarządzania konfiguracją Program System zarz. konfiguracją Aby temu zaradzić korzysta się z systemów zarządzania konfiguracją, które chronią oprogramowanie przed chaotycznymi modyfikacjami i umożliwiają współbieżne modyfikowanie różnych składników oprogramowania w sposób kontrolowany.

Wykład nt. zarządzania konfiguracją Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Operacje systemu CVS/SVN Struktura plików projektu Wzorce zarządzania konfiguracją Zarządzanie konfiguracją W trakcie wykładu omówiony zostanie jeden z najbardziej popularnych systemów zarządzania konfiguracją zwany CVS. Przedstawiona także zostanie struktura plików projektu oraz wzorce zarządzania konfiguracją.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Kolejne dwa wykłady będą poświęcone testowaniu oprogramowania.

Testowanie oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Testowanie ma ścisły związek z weryfikacją, a także z walidacją oprogramowania i dostarcza danych, które mogą być wykorzystane do określenia niezawodności oprogramowania. M.formalne Sys. specjalne Komponenty Niezawodn.

w celu wykrycia błędów Robert Binder Czym jest testowanie? Testowanie oprogramowania jest wykonaniem kodu dla kombinacji danych wejściowych i stanów w celu wykrycia błędów W literaturze można znaleźć wiele definicji testowania. Zgodnie z określeniem zawartym w jednej z książek Roberta Bindera, testowanie oprogramowania jest to wykonanie kodu dla kombinacji danych wejściowych i wewnętrznych stanów systemu w celu wykrycia błędów. Warto zwrócić uwagę, na ostatnią część zdania – „w celu wykrycia błędów”. Wynika z tego jasno, że celem testowania nie jest pokazanie, że w oprogramowaniu nie ma błędów – wręcz przeciwnie; w testowaniu chodzi o to by wykryć jak najwięcej błędów. Im więcej błędów się wykryje tym sprawniejszy jest proces testowania, ale też tym gorzej to świadczy o procesie tworzenia kodu. Robert Binder

Wprowadzenie do testowania Automatyzacja wykonywania testów Wykłady nt. testowania Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Wprowadzenie do testowania Automatyzacja wykonywania testów Będą dwa wykłady na temat testowania. Pierwszy z nich będzie wprowadzeniem w problematykę testowania, natomiast w ramach drugiego wykładu przedyskutowane zostanie – bardzo ważne z praktycznego punktu widzenia – zagadnienie automatyzacji wykonywania testów. Testowanie oprogramowania

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Przedostatni wykład będzie poświęcony bardzo głośnej ostatnio metodyce programowania zwanej Programowaniem Ekstremalnym (po angielsku Extreme Programming).

Programowanie Ekstremalne Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API Programowanie Ekstremalne jest to zestaw praktyk dotyczących m.in. specyfikacji wymagań, weryfikacji i walidacji, ewolucji kodu, różnych procesów związanych z rozwojem oprogramowania a także z zarządzaniem przedsięwzięciem programistycznym. M.formalne Sys. specjalne Komponenty Niezawodn.

Kryzys oprogramowania Przekraczanie terminów Przekraczanie budżetu Nadgodziny Kiepska jakość Kryzys Kryzys oprogramowania po raz pierwszy pojawił się w latach 60-tych ubiegłego wieku. Zaobserwowano wówczas główne zagrożenia czyhające na śmiałków chcących w sposób komercyjny zajmować się wytwarzaniem oprogramowania. Okazało się, że w bardzo wielu przedsięwzięciach programistycznych dochodzi do przekroczenia terminu i budżetu, programiści są różnymi metodami zachęcani do pracy w nadgodzinach, co ujemnie się odbija na ich życiu prywatnym, a na dodatek jakość powstającego oprogramowania jest kiepska i nie satysfakcjonuje użytkowników końcowych.

Reakcja na kryzys oprogramowania Pierwszą reakcją na kryzys oprogramowania było wprowadzenie dyscypliny do przedsięwzięć informatycznych. Wierzono, że poprzez wprowadzenie formalnych procesów i ustandaryzowanej dokumentacji uda się zwalczyć kryzys oprogramowania. W rezultacie powstały metodyki przypominające wspaniałe katedry gotyckie: budziły szacunek i podziw dla kunsztu ich twórców, jednak na co dzień mało kto z nich korzystał. Głównym winowajcą były zmiany. W niektórych przedsięwzięciach zmiany są tak częste, że klasyczne metodyki okazują się zbyt ciężkie, by można było za tymi zmianami nadążyć. W miarę upływu lat zaczęto zdawać sobie sprawę, że potrzeba czegoś lżejszego.

Lekkie metodyki tworzenia oprogramowania W połowie lat 90-tych zaczęły się pojawiać tzw. lekkie metodyki oprogramowania, które były bardziej zorientowane na nadążanie za zmianami niż kurczowe trzymanie się planu. Jedną z nich jest Programowanie Ekstremalne.

Główne zalety Programowania Ekstremalnego To lubię! Najważniejsza komunikacja ustna. Jedyne artefakty: kod + testy Żadnych nadgodzin! W Programowaniu Ekstremalnym najważniejsza jest komunikacja ustna. Jedyne artefakty, jakie muszą powstawać zostały ograniczone do kodu programu i testów. Ponadto Programowanie Ekstremalne pociąga obietnicą braku nadgodzin. Nic dziwnego, że wielu ludziom taka propozycja wydaje się bardzo atrakcyjna. Jednak bardzo wiele osób zapomina, że Programowanie Ekstremalne ma również szereg konkretnych wymagań mających postać praktyk, które muszą być stosowane, aby przedsięwzięcie zakończyło się sukcesem. O tych praktykach będzie mowa w trakcie wykładu poświęconego Programowaniu Ekstremalnemu.

Zasady skutecznego działania Specyfikacja wymagań Plan wykładu Zasady skutecznego działania Specyfikacja wymagań Kontrola jakości artefaktów Język UML Metody formalne Wzorce projektowe Zarządzanie konfiguracją Testowanie oprogramowania Programowanie Ekstremalne Ewolucja oprogramowania Ostatni wykład będzie poświęcony ewolucji oprogramowania.

Ewolucja oprogramowania Geneza ewolucji oprogramowania Prawa Lehmana Rozwój jądra systemu Linux Koszty pielęgnacji Proces pielęgnacji oprogramowania Refaktoryzacja oprogramowania W trakcie wykładu zostaną omówione przyczyny ewolucji oprogramowania, prawa Lehmana, rozwój jądra systemu Linux, który jest zaprzeczeniem praw Lehmana, czynniki wpływające na koszt pielęgnacji oprogramowania, typowy proces pielęgnacji oprogramowania i refaktoryzacja, jako technika obniżenia kosztów pielęgnacji.

Plan wykładu Podsumowanie Czas na podsumowanie wykładu.

Inżynieria oprogramowania Wymagania Projektowanie Walidacja Ewolucja Procesy Zarządzanie Narzędzia API W trakcie tego wykładu spojrzeliśmy z lotu ptaka na rozpoczynający się cykl wykładów na temat inżynierii oprogramowania. Z przedstawionej prezentacji wynika, że będą omówione wszystkie obowiązkowe jednostki wiedzy oprócz programowania za pomocą API, a ponadto będzie także jeden wykład poświęcony metodom formalnym. Dyskusja zagadnień dotyczących inżynierii oprogramowania, którą właśnie zaczęliśmy, będzie kontynuowana w ramach przedmiotu obieralnego pt. „Zaawansowana inżynieria oprogramowania”. M.formalne Sys. specjalne Komponenty Niezawodn.

Dziękuję za uwagę. Zapraszam na wykłady. Dziękuję za uwagę. Mam nadzieję, że mimo wysokiego poziomu abstrakcji i pobieżności prezentacji parę istotnych szczegółów dotyczących inżynierii oprogramowania udało się Państwu dostrzec i ten ogólny obraz pomoże lepiej sobie przyswoić zagadnienia, o których będzie mowa na kolejnych wykładach. Serdecznie na nie zapraszam. Dziękuję za uwagę. Zapraszam na wykłady.