Inżynieria oprogramowania: Różnice pomiędzy wersjami
Linia 25: | Linia 25: | ||
=== Zawartość === | === Zawartość === | ||
Przedmiot składa się z 15. wykładów (każdy o wymiarze 2 godz.) i związanych z nimi ćwiczeń laboratoryjnych (też w takim samym wymiarze). Poniżej opisano zawartość poszczególnych wykładów. | |||
* Zasady skutecznego działania | * '''Wprowadzenie'''. W ramach pierwszego wykładu zostanie zaprezentowana studentom koncepcja przedmiotu i jego zakres. | ||
* Specyfikacja wymagań | * '''Zasady skutecznego działania'''. Stephen Covey zaproponował siedem zasad skutecznego działania, które mają charakter uniwersalny, czyli odnoszą się do wszelkiego typu aktywności ludzkiej. Ed Yourdon, jeden ze światowej sławy ekspertów w zakresie inżynierii oprogramowania, stwierdził, że dla ludzi związanych z wytwarzaniem oprogramowania zasady Covey’ego są ważniejsze niż szczegółowe techniki prezentowane w opasłych tomach dotyczących inżynierii oprogramowania. W trakcie dwóch wykładów zostanie omówionych siedem zasad skutecznego działania: | ||
* Kontrola jakości artefaktów | ** Bądź proaktywny, | ||
* Język UML | ** Zaczynaj mając koniec na względzie, | ||
* Metody formalne | ** Aby rzeczy pierwsze były pierwsze, | ||
* Wzorce projektowe | ** Myśl o obopólnej korzyści, | ||
* Zarządzanie | ** Najpierw staraj się zrozumieć, | ||
* Wprowadzenie do testowania | ** Dbaj o synergię, | ||
* Automatyzacja wykonywania testów | ** Ostrz piłę. | ||
* Programowanie Ekstremalne | |||
* Ewolucja oprogramowania i refaktoryzacja | * '''Specyfikacja wymagań'''. Wymagania opisują system informatyczny, jaki należy zbudować. W trakcie wykładu zostaną omówione wymagania funkcjonalne oraz pozafunkcjonalne. Wymagania funkcjonalne opisują co system ma robić. W trakcie wykładu zostaną zaprezentowane przypadki użycia, jako metoda specyfikacji wymagań funkcjonalnych. Wymagania pozafunkcjonalne dotyczą takich aspektów jak wydajność, użyteczność, niezawodność i bezpieczeństwo. Zostanie też omówiony model Sommerville’a-Sawyera dotyczący dojrzałości procesów związanych z tzw. inżynierią wymagań. | ||
* '''Kontrola jakości artefaktów'''. Jeśli warto coś robić, to warto to robić dobrze. Ta prawda w szczególny sposób odnosi się do systemów informatycznych. Ale jak w efektywny sposób sprawdzić, czy specyfikacja wymagań albo kod programu zostały dobrze napisane? W trakcie tego wykładu podjęta zostanie próba odpowiedzi na to pytanie. Najpierw zostanie krótko omówione pojęcie jakości a także testowanie, jako bardzo popularna metoda kontroli jakości kodu. Ale jakość należy oceniać nie tylko w stosunku do kodu. Bardzo ważna jest kontrola jakości w odniesieniu do specyfikacji wymagań. W trakcie wykładu przedstawimy inspekcje, jako bardzo ogólną metodę kontroli jakości, którą można stosować zarówno do kodu, jak i do innych artefaktów związanych z oprogramowaniem (np. specyfikacji, testów, dokumentacji). Ponadto zaprezentowane zostaną metody szacowania liczby defektów, jakie pozostały nie wykryte w danym artefakcie. | |||
* '''Język UML'''. Jest to język modelowania systemów informatycznych i ma w inżynierii oprogramowania bardzo duże znaczenie. W trakcie dwóch wykładów zostaną przedstawione następujące zagadnienia: | |||
** Historia i geneza języka UML, | |||
** Koncepcja modeli UML, | |||
** Modelowanie funkcjonalności, | |||
** Diagram klas, | |||
** Diagram obiektów, | |||
** Diagram komponentów, | |||
** Diagram pakietów, | |||
** Diagramy interakcji, | |||
** Rodzaje komunikatów, | |||
** Diagramy stanu i czynności, | |||
** Mechanizm rozszerzeń UML, | |||
** Język OCL, | |||
** Narzędzia związane z językiem UML. | |||
* '''Metody formalne'''. Wielu naukowców jest przekonanych, że wytwarzanie niezawodnego oprogramowania musi być oparte na metodach o charakterze matematycznym. Jak zauważył E.W. Dijkstra, testowanie może pokazać, że oprogramowanie ma błędy, ale nie można w ten sposób wykazać, że jest ono wolne od błędów. W ramach tego wykładu przedstawione zostaną specyfikacje aksjomatyczne bazujące na notacji RAISE, implementacje niestandardowe oraz sieci Petri’ego jako graficzną i w pełni formalną metodę opisu systemów informatycznych. | |||
* '''Wzorce projektowe'''. Według Christophera Alexandra wzorzec projektowy jest to sprawdzona koncepcja rozwiązania powtarzającego się wielokrotnie problemu opisana w sposób abstrakcyjny. To podejście, wywodzące się z architektury, zostało w latach 90-tych przeniesione na grunt informatyki. W trakcie wykładu zostanie przedstawiona geneza wzorców, katalog wzorców projektowych zaproponowany przez tzw. Bandę Czterech oraz zostaną omówione wybrane wzorce projektowe wraz z ich zastosowaniami. | |||
* '''Zarządzanie konfiguracją'''. Zmiany dotyczące oprogramowania są nieuniknione. Są one inicjowane zarówno przez klienta (który dopiero po pewnym czasie zdaje sobie sprawę, jak faktycznie powinien działać budowany dla niego system), jak i przez samych programistów (którzy dopiero w trakcie realizacji zdają sobie sprawę z ograniczeń związanych z przyjętym podejściem i stosowanymi narzędziami). Aby zapanować nad zmianami i uniknąć chaosu konieczne jest sprawne zarządzanie konfiguracją. W trakcie wykładu zostaną omówione podstawowe operacje systemu CVS, struktura plików związanych z przedsięwzięciem i wzorce zarządzania konfiguracją. | |||
* '''Wprowadzenie do testowania'''. Testowanie jest najpopularniejszą metodą kontroli jakości kodu. W trakcie wykładu zostaną omówione podstawowe zasady dotyczące testowania i rodzaje testów. Przedstawione też zostaną dwa podstawowe podejścia do testowania: metoda czarnej i białej skrzynki. Zaprezentowane zostaną też relacje między testowaniem a inspekcjami. | |||
* '''Automatyzacja wykonywania testów'''. Coraz więcej jest narzędzi automatyzujących wykonywanie testów. Niekiedy można wręcz odnieść wrażenie, że wystarczy kupić odpowiednie narzędzie, a ono już nam rozwiąże wszelkie problemy związane z testowaniem. Niestety, nie jest to takie proste. W trakcie wykładu zostaną omówione wady i zalety automatyzacji testowania i zostanie zaprezentowane narzędzie JUnit służące do automatycznego wykonywania testów na programach napisanych w języku Java. | |||
* '''Programowanie Ekstremalne'''. Jedną najbardziej popularnych metodyk wytwarzania oprogramowania jest Programowanie Ekstremalne (w skrócie XP). Zostało ono opracowane przez Kenta Becka pod koniec lat 90-tych ubiegłego wieku. W trakcie wykładu zostanie zaprezentowany manifest zwinności prezentujący zasady, na których – między innymi – opiera się Programowanie Ekstremalne. Zostaną także omówione wartości i główne praktyki XP oraz czynniki ryzyka związane z tą metodyką. | |||
* '''Ewolucja oprogramowania i refaktoryzacja'''. Zmiany są nieuniknione, również w odniesieniu do oprogramowania. W trakcie tego wykładu zostaną omówione prawa Lehmana dotyczące ewolucji oprogramowania, pielęgnacja oprogramowania i związane z nią koszty oraz refaktoryzacja jako technika bezpiecznego wprowadzania zmian do kodu. | |||
* '''Modele dojrzałości i metodyki'''. Metodyka zarządzania przedsięwzięciem programistycznym jest to zestaw dobrych praktyk, które mają pomóc w efektywnej realizacji systemu informatycznego, natomiast model dojrzałości jest to zestaw kryteriów pozwalających oceniać różne metodyki i ich działanie. W trakcie wykładu zostaną krótko omówione dwa najważniejsze modele dojrzałości: ISO 9000 i CMMI. Ponadto zostaną zarysowane najpopularniejsze (obok XP) metodyki stosowane w przedsięwzięciach informatycznych takie, jak PRINCE2, PSP, TSP i RUP. Wszystkie te zagadnienia będą szczegółowo omówione w ramach przedmiotu obieralnego „Zaawansowana inżynieria oprogramowania”. | |||
===Moduły=== | ===Moduły=== |
Wersja z 10:05, 15 wrz 2006
Forma zajęć
Wykład (30 godzin) + laboratorium (30 godzin)
Opis
W latach 60. ubiegłego wieku zaczęto budować bardzo duże oprogramowanie takie, jak na przykład system operacyjny IBM OS/360. I wtedy pojawiły się problemy natury poza-algorytmicznej, związane z zarządzaniem tego typu przedsięwzięciami, ewolucją oprogramowania itp. Zaczęło rodzić się przeświadczenie, że tworzenie oprogramowania mogłoby być bardziej efektywne, gdyby skorzystać z doświadczeń innych dziedzin inżynierskich takich, jak budownictwo czy elektronika. Termin „inżynieria oprogramowania” (ang. Software Engineering) powstał w trakcie seminarium zorganizowanego w Niemczech pod auspicjami NATO w 1968 roku.
Przedmiot obejmuje następujące jednostki wiedzy z zakresu inżynierii oprogramowania wymienione w standardzie kształcenia dla studiów I stopnia na kierunku Informatyka: projektowanie oprogramowania; procesy wytwarzania oprogramowania; wymagania i ich specyfikacja; walidacja i testowanie oprogramowania; ewolucja oprogramowania; zarządzanie przedsięwzięciem programistycznym.
Po zaliczeniu przedmiotu student powinien mieć opanowane podstawowe umiejętności w zakresie: posługiwania się wzorcami projektowymi; projektowania oprogramowania zgodnie z metodyką obiektową; dokonywania przeglądu projektu oprogramowania; specyfikowania wymagań dotyczących oprogramowania i przeprowadzania ich przeglądu; tworzenia, oceny i realizacji planu testowania; uczestniczenia w inspekcji kodu; zarządzania konfiguracją oprogramowania.
Zagadnienia dotyczące projektowania oprogramowania będą rozwijane w ramach przedmiotu "Zaawansowane projektowanie obiektowe", natomiast problemy i metody zarządzania przedsięwzięciem programistycznym (ze szczególnym uwzględnieniem planowania) będą szczegółowo dyskutowane w ramach przedmiotu "Zaawansowana inżynieria oprogramowania".
Sylabus
Autorzy
Autorem sylabusa jest dr hab. inż. Jerzy Nawrocki, prof. nadzw. Politechniki Poznańskiej (adres poczty elektronicznej ma postać: imię.nazwisko@put.poznan.pl).
Moduły związane z tym przedmiotem zostały opracowane przez zespół z Instytutu Informatyki Politechniki Poznańskiej w składzie: dr hab. inż. Jerzy Nawrocki, dr inż. Bartosz Walter, mgr. inż. Mirosław Ochodek, mgr inż. Łukasz Olek, mgr inż. Błażej Pietrzak.
Wymagania wstępne
- Podstawy programowania
- Funkcje, relacje i zbiory. Elementy logiki matematycznej: rachunek zdań i tautologie. Rekurencja.
- Programowanie obiektowe.
Zawartość
Przedmiot składa się z 15. wykładów (każdy o wymiarze 2 godz.) i związanych z nimi ćwiczeń laboratoryjnych (też w takim samym wymiarze). Poniżej opisano zawartość poszczególnych wykładów.
- Wprowadzenie. W ramach pierwszego wykładu zostanie zaprezentowana studentom koncepcja przedmiotu i jego zakres.
- Zasady skutecznego działania. Stephen Covey zaproponował siedem zasad skutecznego działania, które mają charakter uniwersalny, czyli odnoszą się do wszelkiego typu aktywności ludzkiej. Ed Yourdon, jeden ze światowej sławy ekspertów w zakresie inżynierii oprogramowania, stwierdził, że dla ludzi związanych z wytwarzaniem oprogramowania zasady Covey’ego są ważniejsze niż szczegółowe techniki prezentowane w opasłych tomach dotyczących inżynierii oprogramowania. W trakcie dwóch wykładów zostanie omówionych siedem zasad skutecznego działania:
- Bądź proaktywny,
- Zaczynaj mając koniec na względzie,
- Aby rzeczy pierwsze były pierwsze,
- Myśl o obopólnej korzyści,
- Najpierw staraj się zrozumieć,
- Dbaj o synergię,
- Ostrz piłę.
- Specyfikacja wymagań. Wymagania opisują system informatyczny, jaki należy zbudować. W trakcie wykładu zostaną omówione wymagania funkcjonalne oraz pozafunkcjonalne. Wymagania funkcjonalne opisują co system ma robić. W trakcie wykładu zostaną zaprezentowane przypadki użycia, jako metoda specyfikacji wymagań funkcjonalnych. Wymagania pozafunkcjonalne dotyczą takich aspektów jak wydajność, użyteczność, niezawodność i bezpieczeństwo. Zostanie też omówiony model Sommerville’a-Sawyera dotyczący dojrzałości procesów związanych z tzw. inżynierią wymagań.
- Kontrola jakości artefaktów. Jeśli warto coś robić, to warto to robić dobrze. Ta prawda w szczególny sposób odnosi się do systemów informatycznych. Ale jak w efektywny sposób sprawdzić, czy specyfikacja wymagań albo kod programu zostały dobrze napisane? W trakcie tego wykładu podjęta zostanie próba odpowiedzi na to pytanie. Najpierw zostanie krótko omówione pojęcie jakości a także testowanie, jako bardzo popularna metoda kontroli jakości kodu. Ale jakość należy oceniać nie tylko w stosunku do kodu. Bardzo ważna jest kontrola jakości w odniesieniu do specyfikacji wymagań. W trakcie wykładu przedstawimy inspekcje, jako bardzo ogólną metodę kontroli jakości, którą można stosować zarówno do kodu, jak i do innych artefaktów związanych z oprogramowaniem (np. specyfikacji, testów, dokumentacji). Ponadto zaprezentowane zostaną metody szacowania liczby defektów, jakie pozostały nie wykryte w danym artefakcie.
- Język UML. Jest to język modelowania systemów informatycznych i ma w inżynierii oprogramowania bardzo duże znaczenie. W trakcie dwóch wykładów zostaną przedstawione następujące zagadnienia:
- Historia i geneza języka UML,
- Koncepcja modeli UML,
- Modelowanie funkcjonalności,
- Diagram klas,
- Diagram obiektów,
- Diagram komponentów,
- Diagram pakietów,
- Diagramy interakcji,
- Rodzaje komunikatów,
- Diagramy stanu i czynności,
- Mechanizm rozszerzeń UML,
- Język OCL,
- Narzędzia związane z językiem UML.
- Metody formalne. Wielu naukowców jest przekonanych, że wytwarzanie niezawodnego oprogramowania musi być oparte na metodach o charakterze matematycznym. Jak zauważył E.W. Dijkstra, testowanie może pokazać, że oprogramowanie ma błędy, ale nie można w ten sposób wykazać, że jest ono wolne od błędów. W ramach tego wykładu przedstawione zostaną specyfikacje aksjomatyczne bazujące na notacji RAISE, implementacje niestandardowe oraz sieci Petri’ego jako graficzną i w pełni formalną metodę opisu systemów informatycznych.
- Wzorce projektowe. Według Christophera Alexandra wzorzec projektowy jest to sprawdzona koncepcja rozwiązania powtarzającego się wielokrotnie problemu opisana w sposób abstrakcyjny. To podejście, wywodzące się z architektury, zostało w latach 90-tych przeniesione na grunt informatyki. W trakcie wykładu zostanie przedstawiona geneza wzorców, katalog wzorców projektowych zaproponowany przez tzw. Bandę Czterech oraz zostaną omówione wybrane wzorce projektowe wraz z ich zastosowaniami.
- Zarządzanie konfiguracją. Zmiany dotyczące oprogramowania są nieuniknione. Są one inicjowane zarówno przez klienta (który dopiero po pewnym czasie zdaje sobie sprawę, jak faktycznie powinien działać budowany dla niego system), jak i przez samych programistów (którzy dopiero w trakcie realizacji zdają sobie sprawę z ograniczeń związanych z przyjętym podejściem i stosowanymi narzędziami). Aby zapanować nad zmianami i uniknąć chaosu konieczne jest sprawne zarządzanie konfiguracją. W trakcie wykładu zostaną omówione podstawowe operacje systemu CVS, struktura plików związanych z przedsięwzięciem i wzorce zarządzania konfiguracją.
- Wprowadzenie do testowania. Testowanie jest najpopularniejszą metodą kontroli jakości kodu. W trakcie wykładu zostaną omówione podstawowe zasady dotyczące testowania i rodzaje testów. Przedstawione też zostaną dwa podstawowe podejścia do testowania: metoda czarnej i białej skrzynki. Zaprezentowane zostaną też relacje między testowaniem a inspekcjami.
- Automatyzacja wykonywania testów. Coraz więcej jest narzędzi automatyzujących wykonywanie testów. Niekiedy można wręcz odnieść wrażenie, że wystarczy kupić odpowiednie narzędzie, a ono już nam rozwiąże wszelkie problemy związane z testowaniem. Niestety, nie jest to takie proste. W trakcie wykładu zostaną omówione wady i zalety automatyzacji testowania i zostanie zaprezentowane narzędzie JUnit służące do automatycznego wykonywania testów na programach napisanych w języku Java.
- Programowanie Ekstremalne. Jedną najbardziej popularnych metodyk wytwarzania oprogramowania jest Programowanie Ekstremalne (w skrócie XP). Zostało ono opracowane przez Kenta Becka pod koniec lat 90-tych ubiegłego wieku. W trakcie wykładu zostanie zaprezentowany manifest zwinności prezentujący zasady, na których – między innymi – opiera się Programowanie Ekstremalne. Zostaną także omówione wartości i główne praktyki XP oraz czynniki ryzyka związane z tą metodyką.
- Ewolucja oprogramowania i refaktoryzacja. Zmiany są nieuniknione, również w odniesieniu do oprogramowania. W trakcie tego wykładu zostaną omówione prawa Lehmana dotyczące ewolucji oprogramowania, pielęgnacja oprogramowania i związane z nią koszty oraz refaktoryzacja jako technika bezpiecznego wprowadzania zmian do kodu.
- Modele dojrzałości i metodyki. Metodyka zarządzania przedsięwzięciem programistycznym jest to zestaw dobrych praktyk, które mają pomóc w efektywnej realizacji systemu informatycznego, natomiast model dojrzałości jest to zestaw kryteriów pozwalających oceniać różne metodyki i ich działanie. W trakcie wykładu zostaną krótko omówione dwa najważniejsze modele dojrzałości: ISO 9000 i CMMI. Ponadto zostaną zarysowane najpopularniejsze (obok XP) metodyki stosowane w przedsięwzięciach informatycznych takie, jak PRINCE2, PSP, TSP i RUP. Wszystkie te zagadnienia będą szczegółowo omówione w ramach przedmiotu obieralnego „Zaawansowana inżynieria oprogramowania”.
Moduły
- Wprowadzenie do przedmiotu (swf, pdf), (Ćwiczenia)
- Zasady skutecznego działania (swf, pdf), (Ćwiczenia)
- Specyfikacja wymagań (swf, pdf, pdf kolor), (Ćwiczenia)
- Kontrola jakości artefaktów (swf, pdf), (Ćwiczenia)
- Język UML, cz. I (swf, pdf), (Ćwiczenia)
- Język UML, cz. II (swf, pdf), (Ćwiczenia)
- Metody formalne (swf, pdf), (Ćwiczenia)
- Wzorce projektowe (swf, pdf), (Ćwiczenia)
- Zarządzanie konfiguracją (swf, pdf, pdf kolor), (Ćwiczenia)
- Wprowadzenie do testowania (swf, pdf), (Ćwiczenia)
- Automatyzacja wykonywania testów (swf, pdf), (Ćwiczenia)
- Programowanie Ekstremalne (swf, pdf, pdf kolor), (Ćwiczenia)
- Ewolucja oprogramowania i refaktoryzacja (swf, pdf), (Ćwiczenia)
Literatura
- K.Beck, A.Cynthia. Wydajne programowanie – Extreme Programming. Mikom, 2005.
- A. Cockburn, Jak pisać efektywne przypadki użycia, WNT, Warszawa, 2004.
- S.Covey. 7 nawyków skutecznego działania. REBIS, 2002.
- M.Fowler, K.Scott. UML w kropelce. LTP, 2002.
- R. Pressman, Software Engineering, McGraw-Hill, New York, 1997.