Egzamin (9)

Egzamin Inżynieria Oprogramowania

  1. Procesy wytwórcze informatyczne (fazy, przepływy prac, jak wygląda)

Proces wytwórczy stosuje się by zaplanować, przeanalizować problem i go odpowiednio zaprojektować, zakodować, przetestować i wdrożyć i na końcu konserwować.

Podstawowa zasada: poprawny proces daje poprawny produkt, ale wybór procesu zależy od produktu.

  1. Proszę nazwać procesy wytwórcze które znamy

    1. Wersja sensowna:

Model Wodospadowy (Kaskadowy)

Model ten polega na przechodzeniu kolejnych etapów po kolei i ewentualnym cofaniu się do dowolnego wcześniejszego etapu na etapie konserwacji systemu, jeśli się cofnęliśmy to musimy przejść proces do końca po kolei od danego etapu. Kolejne fazy nie nakładają się w czasie. Proces ten jest bardzo naturalny, ułatwia planowanie i kontrolę rozwoju projektu, wadami są wysokie koszta błędów podczas analizy, brak możliwości natychmiastowej reakcji na zmiany wymagań.

  1. Proszę wytłumaczyć różnicę między poszczególnymi procesami wytwórczymi

Model kaskadowy – jak wyżej

Model iteracyjny – stopniowe dochodzenie do rozwiązania, poprzez przeprowadzanie w kółko tych samych faz projektowania, na końcu każdego cyklu powstaje produkt działający

Model prototypowania – tworzymy prototypy czyli oprogramowanie które będzie podstawową do tworzenia produktu końcowego

Model przyrostowy – dzielimy problem na mniejsze i sukcesywnie rozbudowujemy, a następnie łączymy w całość

Model spiralny – polega na powtarzanych fazach planowania, analizy rynku, konstruowania i atestowania ze stopniową rozbudową systemu

Transformacje formalne – opierają się na dowodzeniu twierdzeń w językach formalnych

RUP – oparty na przypadkach użycia, składa się z: rozpoczęcie -> opracowanie -> budowa -> przekazanie

Model V – podobny do kaskadowego, testowanie przeprowadza się równolegle do innych prac

  1. Po co potrzebny proces wytwórczy i gdzie go możemy zobaczyć w dokumentacji

Procesy wytwórcze służą do przewidywania potrzeb i optymalizacji kosztów wytwarzania oprogramowania, pozwalają skracać czas potrzebny na wykonanie projektu oraz sprawować kontrolę nad wytwarzaniem oprogramowania. Pozwalają dzielić pracę, pozwalają analizować możliwości ponownego użycia, promują powtarzalność procesów i pracę w zespole. Najlepszym przykładem dokumentacji zawierającej proces wytwórczy jest dokument wizji zawierający odpowiednie diagramy UML oraz opracowania odnoszące się do kosztów procesu.

  1. Zarządzanie ryzykiem

    1. Proszę opowiedzieć ogólny algorytm zarządzania ryzykiem (z jakich kroków, jak wypełnić tabelkę)

Zarządzanie zagrożeniami koncentruje się na identyfikacji zagrożeń i minimalizowaniu ich wpływu na przedsięwzięcie . Zagrożenie jest prawdopodobieństwem, wystąpienia niesprzyjających okoliczności i.

Czynność RUP:

Zagrożenie Typ Opis
Rotacja personelu Przedsięwzięcie Doświadczony personel opuści przedsięwzięcie przed końcem.
Zmiana zarządzania Przedsięwzięcie Będą zmiany w organizacji zarządzania i priorytetach.
Niedostępność sprzętu Przedsięwzięcie Sprzęt nie będzie dostarczony na czas.
Zmiana wymagań Przedsięwzięcie i produkt Liczba zmian będzie większa niż oczekiwana.
Opóźnienia specyfikacji Przedsięwzięcie i produkt Specyfikacja podstawowych interfejsów nie nadejdzie na czas.
Niedoszacowanie rozmiaru Przedsięwzięcie i produkt Niedoszacowano rozmiaru systemu.
Niewydajność narzędzi CASE Produkt Narzędzia CASE nie działaja tak sprawnie jak oczekiwano.
Zmiana technologii Przedsiębiorstwo Technologia w której buduje się system będzie zmieniona na nową.
Konkurencja dla produktu Przedsiębiorstwo Konkurencyjny produkt pojawi się na rynku przed ukończeniem naszego.

Algorytm postępowania z zagrożeniami:

Identyfikacja zagrożeń

Analiza zagrożeń

Planowanie przeciwdziałania zagrożeniom

Monitorowanie zagrożeń

Ryzyko

  1. Identyfikacja

  2. Analiza

  3. Planowanie reakcji

  4. Monitorowanie nowych

  5. Kontrola istniejących

  1. Szacowanie nakładów pracy, kosztów przedsięwzięcia

    1. Proszę nazwać metody szacowania kosztów przedsięwzięcia (jakie rodzaje)

    • Algorytmiczne modelowanie kosztów (formuła na podstawie historii)

    • Ocena ekspertów

    • Szacowanie przez analogię

    • Prawo Parkinsona (wszystko zostanie zużyte)

    • Ustalanie ceny pod zwycięstwo

    1. Scharakteryzować czym jest COCOMO 2 (podstawowa część)

Model szacowania liczby osobogodzin w procesie tworzenia oprogramowania. Polega na ustaleniu metryki (ilości linijek kodu), następnie złożoności przedsięwzięcia. Na podstawie określonych metryk i wzorów obliczane są koszta przedsięwzięcia.

  1. Jaka jest podstawowa różnica pomiędzy 1. 2. i 3. poziomem COCOMO 2

  1. Proszę podać ogólną charakterystykę metody punktów funkcyjnych

Oparte na połączeniu następujących elementów programu:

Z każdym elementem jest skojarzona waga (3-15)

Liczba punktów funkcyjnych jest wyznaczana na podstawie sumy wag elementów systemu. Punkty funkcyjne powinny uwzględniać czynnik skomplikowania przedsięwzięcia. Punkty funkcyjne mogą służyć do szacowania liczby linii kodu:

LLK = SLLK * liczba punktów funkcyjnych

SLLK zależy od języka i waha się od 200-300 dla asemblera do 2-40 dla języków czwartej generacji

PF są subiektywne i zależą od szacującego, nie można policzyć punktów funkcyjnych automatycznie.

  1. Charakterystyka z innych (po jednym zdaniu)

Punkty obiektowe:

Liczba punktów obiektowych jest ważoną sumą:

Miara linii kodu:

Szacunki produktywności

  1. Wymagania

    1. Jak wygląda zarządzanie wymaganiami, co to jest, jakie podstawowe kroki, przepływ pracy (dyscyplina pracy)

Zarządzanie wymaganiami jest skupione na zaspokojeniu oczekiwań użytkowników końcowych systemu poprzez identyfikację i specyfikację ich potrzeb oraz wykrywanie zmiany tych wymagań.

Zarządzanie wymaganiami składa się z następujących czynności:

Analiza problemu - uzgodnienie problemu i stworzenie miar, które dowiodą jego istotności dla klienta.

Zrozumienie potrzeb udziałowców (stakeholders) (brak odpowiedniego słowa w języku polskim) - są to odbiorcy i użytkownicy oprogramowania na różnych szczeblach w organizacji, w innych metodykach zarządzania projektami nazywa się ich Interesariuszami) - konsultacja problemu i jego wartości z głównymi udziałowcami (stakeholders) i rozpoznanie w jaki sposób koncepcja rozwiązania zaspokaja ich potrzeby.

Definicja systemu - tworzenie projektu funkcjonalności na podstawie potrzeb użytkowników, identyfikacja przypadków użycia - które prezentują ogólne wymagania (high-level requirements) i użyteczność modelu systemu.

Zarządzanie zakresem systemu (Scope Management) - modyfikowanie zakresu prac nad systemem bazując na analizie wymagań, wybór kolejności realizacji (atakowania) przypadków użycia.

Zawężanie definicji systemu - uszczegóławianie scenariuszy przypadków użycia razem z użytkownikami systemu w celu stworzenia dokładnej specyfikacji wymagań (Software Requirements Specification - SRS), która może służyć (i na ogół służy) jako umowa pomiędzy wykonawcą systemu a klientem. Na podstawie dokumentu SRS tworzony jest projekt systemu oraz scenariusze testów.

Zarządzanie zmianami wymagań - zarządzanie zmianami wymagań lub nowozidentyfikowanymi wymaganiami w czasie trwania projektu.

Przepływ / organizacja pracy

Zadawanie dowolnych pytań pozwala do końca zrozumieć idee, o co komu tak naprawdę chodzi, rozwiać wszelkie wątpliwości.

Projekt szczegółowych informacji, które mogą obejmować projekt wymagań,
dokumenty, listy punktowe proponowanych funkcji, kopie wywiadów
z potencjalnymi użytkownikami, analityczne raporty dotyczące trendów w branży,
listy od klientów, raporty o błędach od istniejącego systemu i tak dalej.

Powinno być używane w każdym oprogramowaniu, którego sukces zależy od pierwszej reakcji użytkownika. Polega na 'przewidywaniu' typowych reakcji: Wyróżniamy:

Czym jest przypadek użycia:

Podstawowe związki:

(poszczególne przypadki użycia są powiązane za sobą w pewien sposób tworząc jakby całość opisu systemu)

Każdy aktor, który jest na diagramie przypadków użycia musi być bezpośrednio powiązany z co najmniej jednym przypadkiem użycia. Podobnie każdy przypadek użycia musi być użytkowany co najmniej przez jednego aktora (niejednokrotnie są to powiązania pośrednie).

  1. Jak realizować przypadki użycia i jak to się robi

Omawiany tu przypadek użycia (Zatrudnij pracownika) w istocie opisuje zbiór ciągów, z których każdy reprezentuje jeden z możliwych przebiegów przez wszystkie te warianty. Każdy taki ciąg nosi nazwę scenariusza. Scenariusz jest pewnym szczególnym ciągiem akcji, który ilustruje specyfikowane zachowanie. Scenariusze są dla przypadków użycia tym, czym dla klas obiekty, to znaczy są egzemplarzami przypadków użycia.

Należy utworzyć zestawy klas i innych bytów, których współpraca doprowadzi do implementacji danego przypadku użycia. Te zestawy bytów, włącznie z ich strukturą statyczną i dynamiczną, można zamodelować w UML w postaci kooperacji.

  1. Proces biznesowy

    1. Zadania i cel

Proces biznesowy – seria powiązanych ze sobą działań lub zadań, które rozwiązują określony problem lub prowadzą do osiągnięcia określonego efektu. Proces biznesowy wynika z potrzeb klientów a jego wynikiem jest zaspokojenie tych potrzeb.

Celem modelowania biznesowego jest:

Schemat organizacyjny nie jest wystarczający, aby zrozumieć działanie firmy. Potrzebujemy również dynamicznego widoku przedsiębiorstwa. Model biznesowy zapewnia statyczny widok konstrukcji organizacji i dynamiczny widok procesów w obrębie organizacji.

  1. Na czym polega

Proces biznesowy polega na określeniu części systemu i ich interakcji ze sobą oraz z użytkownikiem w celu stworzenie oprogramowania, w tym celu stosuje się odpowiednie modelowanie poprze diagramy np. UML.

  1. Podstawowe diagramy UML w procesie biznesowym (analizy)

Diagram przypadków użycia

Diagram przypadków użycia opisuje system z punktu widzenia użytkownika, pokazuje co robi system, a nie jak to robi. Diagram ten sam w sobie zazwyczaj nie daje nam zbyt wielu informacji, dlatego też zawsze potrzebna jest do niego dokumentacja w postaci dobrze napisanego przypadku użycia. Przypadki użycia są bardzo ważnym narzędziem zbierania wymagań. Diagramy przypadków użycia, mimo swojej prostoty, są bardzo przydatne, gdyż tworzą swojego rodzaju spis treści dla wymagań modelowanego systemu.

Diagram klas

Diagram klas jest ściśle powiązany z projektowaniem obiektowym systemu informatycznego lub wręcz bezpośrednio z jego implementacją w określonym języku programowania. Elementami tego diagramu są klasy, reprezentowane przez prostokąty, które mogą zawierać informację o polach i metodach klasy.

Klasa:

Atrybuty i ich oznaczenia:

0 … 1 – krotność użycia

<<instantiate>> - instancja

Statyczne składowe oznaczone są poprzez podkreślenie

<<exception>> - metoda może zwracać wyjątki

<<call>> - wywołanie operacji

<<create>> - tworzy instancję innej

<<use>> - używa

- Agregacja (istnieje niezależnie, relacja całość-część)

- kompozycja (zarządzalne czasowo, relacja całość- część)

- uogólnienie (to do czego jest skierowana strzałka to ogólna klasa)

<<realizes>> -wymagany interfejs

- klasa abstrakcyjna po lewej tego

<<bind>> - szablony klas

strzałka w kierunku szablonu

Diagram współpracy (diagram komunikacji od UML 2.0)

Diagram współpracy jest jednym z czterech diagramów interakcji. Używamy go po to, żeby zobrazować dynamikę systemu – wzajemne oddziaływanie na siebie obiektów oraz komunikaty, jakie między sobą przesyłają.

Diagram przebiegu (sekwencji)

Analogiczną informację do diagramu komunikacji zawiera drugi z diagramów interakcji, diagram przebiegu. Diagram komunikacji koncentrował się na zobrazowaniu współpracy między obiektami, teraz chcemy pokazać kolejność przesyłania komunikatów i czas istnienia obiektów.

Można grupować komunikaty w bloki posiadające określone właściwości, np.: critical, par (parallel), loop (pętla).

Czas na diagramie płynie w dół; prostokąty narysowane wzdłuż przerywanej linii oznaczają czas życia obiektu, z którego wychodzi linia.

 

Diagram stanów (diagram maszyny stanowej w UML 2.0)

Diagramy interakcji mówiły nam o zachowaniu obiektów, diagram stanów z kolei służy do tego, by pokazać w jakich stanach mogą być obiekty. Poniżej widzimy diagram stanów obiektu dane:

Dane mogą znajdować się w różnych stanach, które są oznaczone zaokrąglonymi prostokątami. Linie ze strzałkami oznaczają przejścia między stanami. Na diagramie widzimy także przypadek, kiedy istnieją dwie alternatywne drogi przejścia między stanami. Rozwidlenie, podobnie jak scalenie dwóch ścieżek przebiegu zmian stanów jest zaznaczone na diagramie pogrubioną poziomą kreską.

Diagram aktywności (czynności)

Diagram aktywności jest pewną mutacją diagramu stanów, z tą różnicą, że diagram aktywności skupia się raczej na opisaniu jakiegoś procesu, w którym uczestniczy wiele obiektów, zaś diagram stanów pokazuje, jakie są możliwe stany konkretnego obiektu. Diagram aktywności jest bardzo dobrym narzędziem, gdy chcemy przedstawić odpowiedzialność obiektów w ramach jakiegoś procesu.

Na diagramie zaokrąglone prostokąty reprezentują konkretne zadania, które powinien wykonać system (bądź jego elementy), rombami zaznaczamy miejsca, w których są podejmowana decyzje, wynikające z efektów wykonania jakiegoś zadania. Pogrubione poziome linie oznaczają miejsca, w których pewne czynności wykonywane są jednocześnie.

Diagram pakietów

Diagram pakietów służy do tego, by uporządkować strukturę zależności w systemie, który ma bardzo wiele klas, przypadków użycia itp. Przyjmujemy, że pakiet zawiera w sobie wiele elementów, które opisują jakieś w miarę dobrze określone zadanie. Na diagramie umieszczamy pakiety i wskazujemy na zależności między nimi. Dzięki temu dostajemy na jednym diagramie obraz całości, bądź dużego fragmentu, systemu.

Na powyższym diagramie widzimy poszczególne pakiety grupujące elementy systemu (np. klasy) odpowiedzialne za konkretne zadania. Przerywane linie ze strzałkami pokazują zależności między pakietami.

Diagram komponentów

Diagram komponentów służy do podziału systemu na prostsze elementy i pokazaniu zależności między nimi. Diagram ten dzieli system na fizyczne elementy oprogramowania: pliki, biblioteki, gotowe, wykonywalne programy itp.

Na diagramie mamy przedstawione komponenty systemu wraz z interfejsami, które one udostępniają. Udostępniane interfejsy są zaznaczone kółkami, podczas gdy interfejsy, których dany komponent wymaga do swojego działania, są oznaczone półokręgiem – gniazdem. Na przykład DB Menadżer udostępnia interfejsy do różnych baz danych, natomiast Aplikacja.exe wymaga wskazania takiego interfejsu.

Diagram strukturalny (composite structures) (UML 2.0)

Diagram strukturalny jest przeznaczony do tego, by modelować współpracę klas, interfejsów, komponentów, które są zaangażowane w pewne zadanie. Diagram ten jest nieco podobny do diagramu klas, z tą różnicą, że diagram klas przedstawia statyczny obraz fragmentu systemu, a diagram strukturalny obrazuje elementy systemu wykonujące wspólne zadanie, typowe sposoby użycia elementów systemu, związki między tymi elementami, które może być trudno przedstawić na innych diagramach.

Na diagramie poniżej widzimy typowy sposób przedstawienia związku między fakturą a jej częściami:

Diagram ten może w zupełności wystarczyć, jednak ma on pewną wadę. Może się okazać, że wcale nie chcemy, aby Naglowek i Dane były oddzielnymi klasami – chcemy tylko podkreślić fakt, że Faktura składa się z takich części jednak bez potrzeby specyfikowania detali. Właśnie w takim przypadku pomocny jest diagram strukturalny:

Inny sposób pokazania związku strukturalnego kilku klas można osiągnąć używając elementu współpracy (collaboration):

Elipsa narysowana przerywaną linią oznacza element współpracy, z którym połączone (lub wewnątrz którego leżą) współdziałające klasy.

Innym możliwym zastosowaniem diagramu strukturalnego jest połączenie jego z diagramem przypadku użycia, który jest przez niego realizowany:

Diagram opisu interakcji (interaction interview)

Diagram opisu interakcji jest swego rodzaju połączeniem diagramu aktywności i diagramu przebiegu (lub innego diagramu pokazującego dynamikę systemu). Zadaniem tego diagramu jest wizualizacja współpracy ze sobą diagramów interakcji.

Diagram przeglądu interakcji ma notację bardzo podobną do notacji diagramu aktywności (czynności), z tą różnicą, że zaokrąglone prostokąty, które reprezentowały zadania wykonywane przez system, są zastąpione przez zwykłe prostokąty, które mogą mieć dwie postacie:

Prostokąt zawiera jakiś diagram interakcji – diagram współpracy (komunikacji), diagram przebiegu, diagram przebiegów czasowych lub inny diagram przeglądu interakcji.

Prostokąt zawiera odnośnik do już istniejącego diagramu interakcji. Obecność odnośnika jest zaznaczona słowem ref w lewym górnym rogu diagramu

Diagram przebiegów czasowych

Diagram przebiegów czasowych obrazuje zachowanie obiektu z naciskiem na dokładne określenie czasu, w którym obiekt jest poddawany jakimś zmianą lub sam wykonuje jakieś działanie.

Powyżej widzimy przykładowy diagram przebiegów czasowych. Są dostępne dwie notacje: czasowa (wyżej) i zadaniowa (niżej), w obu przypadkach diagram ma oczywiście to samo znaczenie.

Diagram wdrożenia

Diagram wdrożenia pokazuje, jak będzie wyglądało wdrożenie i konfiguracja naszego oprogramowania.

  1. Wytłumaczyć jak zorganizować w projekcie przejścia z modelu biznesowego na model wymagań funkcjonalnych (na UML)

Aktorów systemu, jak i systemowe przypadki użycia można wyprowadzać z modelu biznesowego. Pracownikowi biznesowemu przyporządkowuje się relewantnego aktora w systemie, a biznesowemu przypadkowi użycia, w którym pracownik biznesowy uczestniczy - relewantny systemowy przypadek użycia.

Odpowiedzialności związane z pracownikami biznesowymi zostają przeniesione na aktorów systemowych. Encje biznesowe - z kolei - są kandydatami na obiekty klas w systemie.

Automatyzacja procesów biznesowych może pociągać za sobą zmianę modelu biznesowego: każdy pracownik biznesowy i każda encja powinny być implementowane przez jeden rodzaj zasobów.

  1. Jakie są korzyści z diagramów

Diagramy służą do obrazowania systemu, jego budowy i przepływu informacji w nim zawartych, pokazują jakie czynności będą realizowane przez system, pomagają w porozumiewaniu się między programistami różnych języków programowania, obrazują system jako całość – poglądowo.

  1. Diagramy dynamiczne UML, cele i korzyści płynące z wykorzystania

Cele: modelowanie dynamicznych części systemu, wpływu bytów na siebie

Korzyści: usunięcie problemów przepływu danych, wyszukanie i wyodrębnienie funkcji systemu.

  1. Wyjaśnić diagramy klas co to jest, podstawowe oznaczenia UML na diagramach klas i wytłumaczyć jak przekształcić diagramy klas w kod (znaleźć odpowiednik)

MDA jest podejściem, w którym UML jest traktowany jako język programowania. Głównym celem MDA jest tworzenia oprogramowania w oparciu o modele biznesowe oraz separacja modelu na zależny oraz niezależny od platformy. Dzięki MDA te same rozwiązania mogą być realizowane na wielu różnych platformach. Ponadto stworzone na bazie MDA systemy mogą być łatwo integrowane oraz łączone z innymi systemami. Nic nie stoi też na przeszkodzie aby ponownie używać opracowane rozwiązania.

Wyróżnia się cztery poziomy w MDA, ale najczęściej stosowane to:

  1. Architektura systemu

    1. Co oznacza architektura systemu i czym są wzorce architektoniczne, nazwać rodzaje wzorców architektonicznych

Architektura to zbiór istotnych decyzji dotyczących:

Jej zadania (po co tak naprawdę jest):

Dlaczego architektura jest tak ważna (przeznaczenie):

*Komponent jest niebanalną, wymienialną częścią systemu, która

spełnia jasno wyznaczoną funkcję w ramach dobrze określonej

architektury. Komponent pasuje do pewnego zbioru interfejsów i

zapewnia ich fizyczną realizację.

Wzorzec architektoniczny (ang. Architectural pattern) – w inżynierii oprogramowania jest to uznany i sprawdzony sposób rozwiązania danego problemu z zakresu architektury oprogramowania. Wzorce architektoniczne określają ogólną strukturę danego systemu informatycznego, elementy z jakich się składa, zakres funkcjonalności realizowany przez dany element jak również zasady komunikacji pomiędzy poszczególnymi elementami.

Wzorce architektoniczne:

Poprawność systemów informatycznych sprawdza się poprzez testowanie – scenariusze testowe, czyli przewidywanie działań na systemie i problemów z nich wynikających.

  1. Wzorce projektowe

    1. Czym są wzorce, dlaczego są potrzebne, wymienić rodzaje

Wzorzec projektowy to koncepcja opisująca problem, który powtarza się wielokrotnie, a następnie opisuje modelowe rozwiązanie tego problemu, w taki sposób, żeby można było to rozwiązanie wykorzystywać wiele razy, tak, że żadne dwa wykorzystania nie będą identyczne.

Wzorzec projektowy identyfikuje i opisuje pewną abstrakcję, której poziom znajduje się powyżej poziomu abstrakcji klasy, instancji lub komponentu.

W inżynierii oprogramowania wzorce projektowe to poziom interakcji między klasami. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację i pielęgnację kodu źródłowego. Wzorzec nie jest gotową implementacją rozwiązania, a jedynie opisem.

Wzorce projektowe potrzebne są do:

Podział wzorców projektowych:

Schemat wzorca: Fabryka Abstrakcyjna

Schemat wzorca: Most

Przykład wzorca: Most

Schemat wzorca: Obserwator

Pseudokod: Obserwator

//Stereotyp w UML to coś co możemy rozszerzać

Kolejność diagramów:

1. model wymagań

2. przypadki użycia

3. diagram aktywności

4. diagram sekwencji

5. diagram klas


Wyszukiwarka

Podobne podstrony:
Egzamin zaoczne
Pytania egzaminacyjneIM
ANALIZA WYNIKÓW EGZAMINU GIMNAZJALNEGO DLA UCZNIÓW KLAS III
zadania egzaminacyjne
Egzamin 2008 2009
Egzamin poprawkowy I 2009 2010
Egzamin II ze statystyki luty 2007
312[01] 01 122 Arkusz egzaminac Nieznany (2)
Egzamin praktyczny Zadanie Nr 4
konta egzaminacyjne id 246765 Nieznany
EGZAMIN PKM2 pytania2011
na co nalezy zwrocic uwage przygotowujac uczniow do nowego ustnego egzaminu maturalnego
Egzamin z RP2 31 stycznia 2009 p4
piot egzamin
Egzamin 2005 1(1)
haran egzamin opracowane pytania

więcej podobnych podstron