677


1. Proszę wymienić i opisać fazy typowego procesu rozwijania oprogramowania.

1. Budowa modelu przypadków użycia jest rezultatem identyfikacji i dokumentowania wymagań. W tym celu tworzy się diagram przypadków użycia, który jest odzwierciedleniem wymagań funkcjonalnych i zawiera aktorów systemu i skojarzone z nimi przypadki użycia. Ponadto zawiera on tekstowe opisy przypadków użycia i ich scenariusze.

2. Budowa modelu analitycznego opisującego elementy składowe systemu i ich współdziałanie. Model analityczny powinien pokazywać realizacje wszystkich przypadków użycia w postaci diagramów klas obejmujących klasy potrzebne do zrealizowania modelowanego działania.

3. Budowa modelu projektowego będącego podstawą do wygenerowania szkieletu kodu aplikacji. Model projektowy jest kompletnym modelem klas powstałym z rozszerzenia diagramu z modelu analitycznego o wszystkie atrybutami metody klas.

4. Implementacja rozpoczynająca się od wygenerowania szkieletu aplikacji. Kolejnym krokiem jest uzupełnienie plików z kodem źródłowym odpowiednimi treściami.

5. Uruchomienie wykonywane po zakończeniu etapu kodowania. Ma ono na celu doprowadzenie do podstawowej, poprawnej pracy. Wykonuje się je drogą debugowania.

6. Testowanie mające na celu ujawnienie wszelkich niesprawności działania aplikacji i niezgodności z wymaganiami.

2. Opisać znaczenie modelowania systemów informatycznych. Co to jest model niezależny od

platformy.

Program obiektowo zorganizowany może się składać prawie wyłącznie z deklaracji zmiennych obiektowych (instancji); w trakcie tych deklaracji wykonywane są wszystkie operacje inicjalizacji obiektów (definiowania ich stanu początkowego), tak by mogły one zacząć funkcjonować w otoczeniu innych obiektów. Dalsze funkcjonowanie każdego obiektu polega na odbiorze komunikatów wysyłanych przez inne obiekty i odpowiednim ich przetwarzaniu, w ramach którego możliwe jest również wysyłanie własnych komunikatów, czyli oddziaływanie na otoczenie. Taki model daje większe możliwości, co jest związane głównie z decentralizacją funkcjonalności (każda klasa odpowiada za swoją część operacji złożonego systemu) i nie jest potrzebny żaden nadrzędny mechanizm, który musiałby być odpowiednio bardziej złożony.

PIM = Platform Independent Model wg. OMG:

Reprezentacja funkcjonalności biznesowej i zachowania aplikacji niezakłócona szczegółami technologicznymi.

3. Proszę scharakteryzować język UML jako narzędzie do projektowania oprogramowania, wymienić podstawowe kategorie diagramów i krótko omówić wybrane diagramy i ich zastosowanie.

UML (Unified Modeling Language) jest językiem umożliwiającym graficzne projektowanie systemów, który pierwotnie był ukierunkowany na systemy informatyczne, ale nadaje się do użycia w innych dziedzinach i jest stosowany do modelowania biznesowego, finansowego, organizacyjnego, itd. Projekt systemu informatycznego w języku UML składa się z szeregu powiązanych ze sobą logicznie diagramów, czyli schematów zawierających symbole języka UML. UML definiuje kilkanaście rodzajów diagramów, które mają różne znaczenie i zastosowanie. Są to:

• Diagramy struktury - klas, obiektów, pakietów, struktur połączonych, wdrożeniowe (komponentów, rozlokowania);

• Diagramy dynamiki - przypadków użycia, interakcji (sekwencji, komunikacji, sterowania interakcją, harmonogramowania), czynności, maszyny stanowej;

• Inne diagramy - wymagań, interfejsu użytkownika.

4. Narysować diagram sekwencji, odpowiedni dla systemu ... (tu następuje opis systemu)

5. Narysować diagram klas, odpowiedni dla systemu ... (tu następuje opis systemu)

6. Narysować diagram maszyny stanowej, odpowiedni dla systemu ... (tu następuje opis

systemu)

7. Proszę omówić założenia obiektowego podejścia do programowania i ich implementację w

języku Java.

Abstrakcja

Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy. Procesy, funkcje lub metody mogą być również abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.

Hermetyzacja

Czyli ukrywanie implementacji, enkapsulacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój interfejs, który określa dopuszczalne metody współpracy. Pewne języki osłabiają to założenie, dopuszczając pewien poziom bezpośredniego (kontrolowanego) dostępu do "wnętrzności" obiektu. Ograniczają w ten sposób poziom abstrakcji. Przykładowo, w niektórych kompilatorach języka C++ istnieje możliwość tymczasowego wyłączenia mechanizmu enkapsulacji; otwiera to dostęp do wszystkich pól i metod prywatnych, ułatwiając programistom pracę nad pośrednimi etapami tworzenia kodu i znajdowaniem błędów.

Polimorfizm

Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu

Dziedziczenie

Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów. źródło wikipedia

8. Omówić wzorzec Iterator, podając przeznaczenie, schemat w języku UML i ewentualnie

przykład kodu klas stanowiących implementację.

Jest on używany do zapewnienia sekwencyjnego dostępu do elementów kolekcji bez potrzeby ujawniania jej wewnętrznej struktury, która może być skomplikowana, a jej implementacja niedostępna.

Iterator zapewnia oddzielenie zadań dostępu do elementów od zadania

przechowywania danych elementów składających się na samą kolekcję. Wymagane jest

to, aby:

• nie obciążać kolekcji operacjami dostępu

• zapewnić możliwość dodawania nowych iteratorów, działających według specyficznych zasad.

Składniki wzorca:

Aggregate - klasa abstrakcyjna, która definiuje interfejs dostępu do kolekcji i tworzenia jej iteratorów.

Sequence - konkretna podklasa klasy Aggregate, która implementuje zdefiniowane tam interfejsy

Iterator - klasa abstrakcyjna, która definiuje interfejs dostępu do elementów i przechodzenia ich

ForwardIterator i ReverseIterator - konkretne klasy, które implementują interfejs

nadklasy Iterator i pamiętają bieżącą pozycje osiągniętą przy przechodzeniu.

Schemat wzorca:

0x01 graphic

Wzorzec Iterator - implementacja klas abstrakcyjnych

public abstract class Aggregate {

public abstract int Size();

/* e - dodawany obiekt */

public abstract void Add(Object e);

/* e - usuwany obiekt */

public abstract void Remove(Object e);

/* i - numer pobieranego obiektu */

public abstract Object get(int i);

}

public abstract class Iterator {

/* numer bieżącego elementu */

protected int current;

/* ustawienie na pierwszy element */

public abstract void First();

/* przejście do następnego elementu */

public abstract void Next();

/* test końca */

public abstract boolean IsDone();

/* zwrócenie bieżącego elementu */

public abstract Object CurrentItem();

}

9. Omówić wzorzec Obserwator, podając przeznaczenie, schemat w języku UML i

ewentualnie przykład kodu klas stanowiących implementację.

Jest on stosowany w przypadku występowania zależności jeden-do-wielu między obiektami. Jeśli monitorowany obiekt zmienia swój stan, wszystkie obiekty zależne od niego (klienci) są powiadamiane o zmianie. Inne nazwy wzorca: Dependents (zależni), Publisher-Subscriber.

Składniki wzorca:

Subject - klasa abstrakcyjna monitorowanego obiektu, zna listę swoich

obserwatorów i zapewnia interfejs do manipulowania nimi

ConcreteSubject - klasa konkretna monitorowanego obiektu, zna i udostępnia

swój stan, wysyła powiadomienia o zmianie do zarejestrowanych klientów

Observer - klasa abstrakcyjna obserwatora (klienta), definiuje interfejs

powiadamiania o zmianie dla obserwatorów

ConcreteObserver - klasa konkretna obserwatora (klienta), implementuje

interfejs powiadamiania o zmianie stanu monitorowanego obiektu, przechowuje

odwołanie do monitorowanego obiektu i jego stan.

Schemat wzorca:

0x01 graphic

Wzorzec Obserwator - implementacja klas abstrakcyjnych

import java.util.Vector;

public abstract class Subject {

private Vector observers = new Vector();

/* Dołączanie obserwatora */

public void Attach(Observer o){

observers.add(o);

}

/* Usuwanie obserwatora */

public Observer Detach(Observer o){

observers.remove(o);

return o;

}

/* Powiadamianie obserwatorów */

public int Notify(){

int cnt = 0;

for(int i = 0; i < observers.size(); i++) {

Observer o = (Observer)observers.get(i);

if(o != null)

o.Update(this);

cnt++;

}

return cnt;

}

}

10. Omówić metodykę Scrum.

metodyka Scrum stara się najlepiej zorganizować uczestników przedsięwzięcia programistycznego wokół nadrzędnego celu - dostarczenia systemu o jak największej wartości w możliwie krótkim czasie. Osiąga się to przez regularne udostępnianie nowej i działającej wersji systemu, ze zmianami wnoszącymi istotne przyrosty funkcjonalności, realizowanymi przez zespół w czasie przebiegu (sprint), będącego odpowiednikiem iteracji.

Metodyka Scrum definuje następujące cztery role:

• Właściciel Produktu (Product Owner) reprezentuje klientów i użytkowników systemu. Odpowiada on za określenie cech systemu w zakresie: funkcjonalności - określenie wszystkich wymagań dla systemu, wraz z potrzebnymi szczegółami i testami akceptacji, priorytetów - określenie kolejności implementacji wymagań, zgodnie z ich istotnością dla użytkowników końcowych (jest to materiał wejściowy do planowania kolejnych sprintów), celów - określenie warunków udostępniania kolejnych wersji systemu.Metodyka Scrum

• Mistrz Młyna (Scrum Master) kieruje zespołem programistów, wykonując zadania związane z codziennym przeglądem, planowaniem sprintów i ich przeglądem, przewidywaniem i eliminacją zagrożeń, a także czuwając nad ogólnym kierunkiem prac;

• Zespół Młyna (Scrum team) jest złożony z osób zaangażowanych do realizacji projektu w sposób kolektywny, bez wyróżnionych funkcji. Zespół musi być zdolny do zrealizowania wszystkich rodzajów czynności projektowych, od analizy i modelowania, przez implementację i testowanie, czyli musi być interdyscyplinarny;

• Partner (stakeholder) jest w pewien sposób zainteresowany produktem, choć nie jest członkiem zespołu realizującego, natomiast bierze udział w spotkaniach i przeglądach, tym samym może mieć wpływ na prace.

11. Omówić cel i metody testowania oprogramowania, rodzaje testów.

Testowanie oprogramowania jest wykonywaniem jego kodu dla pewnych kombinacji danych wejściowych i stanów w celu wykrycia błędów. Jest to istotny etap każdej z metodyk rozwijania oprogramowania, ponieważ żadna nie zapewnia całkowitej wolności od błędów. Wg Binder R. testowanie oznacza działanie implementacji na danych wejściowych specjalnie dobranych, by ujawnić wszystkie błędy, i późniejszej ocenie odpowiedzi systemu.

Rodzaje metod testowania:

testowanie defektów - polegające na znajdowaniu różnic między funkcjonowaniem programu w trakcie jego uruchomienia i jego specyfikacją. Różnice te wynikają z błędów i defektów programu, które z założenia zawsze występują. Dla ich ujawnienia projektuje się odpowiednie zestawy testów. W związku z tym uważa się, że pomyślny wynik tego rodzaju testowania jest osiągnięty, gdy defekty zostaną ujawnione;

• testowanie zgodności (conformance-directed) - polega na wykazaniu dostosowania oprogramowania do specyfikacji. Jest ono bardziej charakterystyczne dla testów końcowych, wykonywanych dla całego systemu, a także dla testowania u odbiorcy;

• testowanie statystyczne - polegające na wykonywaniu programu i rejestrowaniu w trakcie działania danych charakteryzujących jego wydajność i stabilność, w różnych warunkach (normalne, duże i nadmierne obciążenie, normalny i niski stan zasobów - np. pamięć, połączenia sieciowe o małej przepustowości, wydajność serwera, itp.). Dane testowe powinny odzwierciedlać rzeczywiste lub spodziewane rozkłady danych wejściowych i ich częstotliwość.



Wyszukiwarka

Podobne podstrony:
677
677
Zobowiązania, ART 677 KC, 1980
Różnice indywidualne 677-679, Psychologia UŚ, Semestr III, Psychologia różnic indywidualnych
677
677
677
677
677
676 677
677
677
Architektura drewniana 2 id 677 Nieznany (2)
677
676 677
2 Rodzinna posiadłość DeNosky Kathie Jak odnaleźć szczęście [677 Gorący Romans]

więcej podobnych podstron