Modelowanie główne zasady
-Model powinien determinować rozwiązanie
-Najlepsze modele odwzorowują rzeczywistość
-Żaden model nie jest wystarczający
Przypadek użycia określa zachowanie systemu lub części systemu. Jest to opis zbioru sekwencji działań z założeniem, że system wykonuje polecenia aktora w celu uzyskania żądanych wartości wynikowych.
Aktor - Aktor jest idealizacją zewnętrznej osoby, procesu lub interakcji czegoś z systemu, podsystemu lub klasą. Aktor umożliwia zewnętrzną interakcję z systemem. Aktorzy mogą być połączeni z przypadkami użycia tylko i wyłącznie poprzez asocjacje.
Klasa - Klasa jest to opis zbioru obiektów o wspólnych atrybutach, operacjach, związkach i znaczeniach.
Nazwa klasy powinna być odległa znaczeniowo.
Atrybut jest nazwą właściwością klasy, która opisuje modelowany obiekt. Atrybuty które można wyliczyć na podstawie wartości istniejących poprzedzamy „/”.
Zasięgi + publiczny # chroniony - prywatny / pakietowy.
Relacje – zależności, uogólnienia, powiązanie – zależność między klasami, może posiadać wewnętrzną asocjację. agregacja – powiązanie całości-części
generalizacja – określa że, dany element jest generalizacją innego.
zależność- zmiana w jednym elemencie wpływa na zmianę w innym.
realizacja- relacja między specyfikacją i jej implementacją.
Interfejs - to nazwany zestaw działań, który określa zachowania obiektów bez pokazywania ich wewnętrznej struktury. Określają usługi oferowane przez podobne klasy.
Wyliczenie to zdefiniowany przez użytkownika typ danych, który składa się z nazwy i uporządkowanej listy literałów wyliczenia.
Pakiet- jest pojemnikiem, w którym elementy podlegają kolejnej klasyfikacji. Pakiet może zawierać zarówno klasy, jak i inne pakiety oraz diagramy.
Typy komentarzy kodowych
- Komentarz wierszowy //tekst
- Komentarz blokowy /*tekst */
- Komentarz dokumentacyjny /** tekst */
Znaczniki formatuj
@deprecated jest znacznikiem blokowym
{@link} jest znacznikiem wewnątrzliniowym
Znaczniki główne
@see @since @author @version {@link} {@linkplain} {@docRoot}
Znaczniki pakietowe
@see @since @author @version {@link} {@linkplain} {@docRoot}
Znaczniki klasy/interfejsu
@see @since @deprecated @author @version {@link} {@linkplain} {@docRoot}
Znaczniki pola klasy
@see @since @deprecated {@link} {@linkplain} {@docRoot} {@value}
Znaczniki metody i konstruktora klasy
@see @since @deprecated @param @return @throws / @exception {@link} {@linkplain} {@inheritDoc} {@docRoot}
Automatyzacja zadań - - ANT
Skrypty w postaci plików xml, pozwalające kompilować nawet najbardziej złożone aplikacje. Kompilacja klas, pliki JSP, Komunikacja z CVS, Kompresja programów do postaci .jar
ANT podstawowe zadania
javac–uruchomienie kompilacji do B-kodu
java –uruchomienie JVM
jar –tworzenie archiwum
mkdir–tworzenie katalogu
copy –kopiowanie zasobów do wskazanej lokalizacji
delete –usuwanie zasobów
cvs–wywołanie repozytorium CVS
junit–uruchomienie testów jednostkowych
Inżynieria oprogramowania zajmuje się teorią, metodami i narzędziami związanymi z wytwarzaniem programowania. Zajmuje się efektywnymi metodami wytwarzania i implementowania oprogramowania.
Proces tworzenia oprogramowania- Specyfikacja oprogramowania - Tworzenie oprogramowania - Zatwierdzenie oprogramowania - Ewolucja oprogramowania.
Modele cyklu życia oprogramowania- Model kaskadowy - Model ewolucyjny - Model przyrostowy - Model spiralny.
Awaryjności systemów: Zatoka Perska – 1988 r. Blackout – 2003 r.
Weryfikacja oprogramowania ma na celu sprawdzenie, czy wytwarzane oprogramowanie jest zgodne ze specyfikacją.
Walidacja sprawdza, czy oprogramowanie jest zgodne z oczekiwaniami użytkownika.
Standardy testów - IEEE 829 – określający formę zbioru 8 dokumentów potrzebnych w każdej z faz testowania.
Testy funkcjonalne - wcielamy się w rolę użytkownika, traktując oprogramowanie jak „czarną skrzynkę”, która wykonuje określone zadania. (black box testing).
Testy strukturalne. - tester ma dostęp do kodu źródłowego oprogramowania, może obserwować jak zachowują się różne części aplikacji, jakie moduły i biblioteki są wykorzystywane w trakcie testu. (white box testing).
Testy możemy także podzielić ze względu na:
-Sposób przeprowadzania
-Zakres aplikacji jaki obejmują testy
- Przeznaczenie
- Testy wydajnościowe i obciążeniowe
Podział ze względu na zakres aplikacji jaki obejmują testy
Testy jednostkowe testują oprogramowanie na najbardziej podstawowym poziomie podstawowym pojedynczych funkcji (metod).
Testy integracyjne pozwalają sprawdzić jak współpracują ze sobą różne komponenty oprogramowania,
Testy systemowe dotyczą działania aplikacji jako całości, zazwyczaj na tym poziomie testujemy: szybkość działania, bezpieczeństwo, niezawodność, dobrą współpracę z innymi aplikacjami i sprzętem.
Podział ze względu na przeznaczenie
Testy akceptacyjne – testy wykonywane w celu sprawdzenia na ile oprogramowanie działa zgodnie z wymaganiami klienta
Testy funkcjonalne – testy sprawdzające działanie oprogramowania zgodnie ze specyfikacją.
Testy regresyjne –Celem testów regresyjnych jest sprawdzenie, czy dodając nową funkcjonalność, poprawiając błędy nie naruszyliśmy niespodziewanie innej funkcjonalności oprogramowania.
Testy wydajnościowe i obciążeniowe
Testy instalacyjne/testy konfiguracji –jak oprogramowanie zachowuje się na różnych platformach sprzętowych, systemach operacyjnych.
Testy wersji alfa i beta – testy te służą głównie zdobyciu informacji zwrotnej od użytkowników.
Testy używalności – tzw. usability tests, służą temu by sprawdzić jak szybko potencjalni użytkownicy mogą opanować działanie aplikacji,
Testy post -awaryjne – testy służące sprawdzeniu, czy aplikacja zachowuje się poprawnie po wystąpieniu sytuacji awaryjnej.
Testy zautomatyzowane
assertEquals(a, b) – sprawdza, czy parametr a jest równy b (a i b mogą być tutaj typami prostymi oraz klasami, ale jeśli są typem dynamicznym, to muszą implementować metodę equals)
assertFalse(a) – sprawdza, czy wyrażenie logiczne a zwraca wartość false
assertNotNull(a) – sprawdza, czy a jest różne od null, przy czym a jest referencją do obiektu
assertNotSame(a, b) – sprawdza, czy parametry a i b nie wskazują na ten sam obiekt
assertNull(a) – sprawdza, czy referencja a ma wartość null
assertSame(a, b) – sprawdza, czy parametry a i b wskazują na ten sam obiekt
assertTrue(a) – sprawdza, czy wyrażenie logiczne a zwraca wartość true