IO

Usability:

Użyteczność (ang. usability) – własność produktów decydująca o ich jakości użytkowej. Pojęcie to odnoszone jest najczęściej do interaktywnych urządzeń, aplikacji oraz stron internetowych (jako web usability).

Norma ISO 9241 z 1998 definiuje użyteczność jako miarę wydajności, efektywności i satysfakcji użytkownika z jaką dany produkt może być używany dla osiągnięcia danych celów przez danych użytkowników w danym kontekście[1].

Jakob Nielsen zdefiniował usability jako zbiór 5 elementów[2]:

Sama użyteczność bywa używana wymiennie z user experience (UX), jednak w odróżnieniu od UX obejmuje ona tylko tę część kontaktu z produktem, dotyczącą bezpośredniego korzystania z niego[3].

RUP:

Rational Unified Process (RUP) to proces iteracyjnego wytwarzania oprogramowania opracowany przez firmę Rational Software Corporation (firma została przejęta przez IBM).

Proces RUP nie jest pojedynczym, ściśle określonym procesem, ale raczej szablonem procesu. Został on zaprojektowany w celu przystosowania do charakteru konkretnej organizacji (przedsiębiorstwa), konkretnego zespołu projektowego lub nawet charakteru konkretnego projektu. Z szablonu RUP można wybrać elementy w zależności od konkretnych potrzeb.

RUP bazuje na zbiorze zasad inżynierii programowania oraz najlepszych praktykach, na przykład:

  1. Iteracyjnym wytwarzaniu oprogramowania (Iterative Development)

  2. Zarządzaniu wymaganiami (Requirement Management)

  3. Używaniu architektury bazującej na komponentach (Component-based architecture)

  4. Graficznym projektowaniu oprogramowania

  5. Kontroli jakości oprogramowania (Quality Assurance)

  6. Procesu kontroli zmian w oprogramowaniu (Change Management)

Cykl życia projektu[edytuj]

Cykl życia w RUP bazuje na modelu spiralnym. RUP jest dostępny jako struktura prowadzenia projektu, która może być personalizowana w celu przystosowania do specyficznych potrzeb projektowych. Cykl życia w RUP układa zadania w fazy i iteracje.

Projekt został podzielony na cztery fazy:

Faza rozpoczęcia (Inception phase)[edytuj]

W fazie tej formułowany jest problem – zagadnienie biznesowe (business case). Przy opracowaniu tego zagadnienia określa się jego kontekst (business context); czynniki wpływające na jego powodzenie (success factors) – na przykład spodziewany zwrot z inwestycji, zwiększenie udziału w rynku; oraz prognozę finansową. Dodatkowo uzupełnia się go o prosty modelprzypadków użycia, plan projektu, wstępną analizę ryzyka oraz opis projektu (główne wymagania, ograniczenia, główna funkcjonalność). Po stworzeniu powyższych dokumentów projekt sprawdza się według następujących kryteriów:

Jeżeli wstępny projekt nie osiągnie kamienia milowego (ang. milestone), nazywanego Lifecycle Objective Milestone, może być albo zakończony, albo faza ta może zostać jeszcze raz powtórzona (w celu ulepszenia projektu wstępnego).

Faza opracowania (Elaboration phase)[edytuj]

W tej fazie projekt systemu nabiera kształtów. Przeprowadzona jest analiza dziedziny zagadnienia (ang. Domain Analysis – nazywana też w literaturze polskiej Analizą/Modelem Domeny) i budowana podstawowa architektura systemu.

Zakończenie tej fazy wiąże się z osiągnięciem kamienia milowego Lifecycle Architecture Milestone poprzez spełnienie kryteriów:

Jeżeli projekt nie może przejść tej fazy, ciągle mamy czas na jego zaniechanie, lub ponowne opracowanie. Przechodząc do następnej fazy przechodzimy w obszar większego ryzyka, w którym zmiana (np. wymagań) jest dużo trudniejsza i znacząca.

Faza konstrukcji (Construction phase)[edytuj]

W fazie tej główny nacisk położony jest na budowę komponentów i innych funkcjonalności opracowywanego systemu. W tej fazie odbywa się większość prac programistycznych. W większych projektach może być wiele iteracji konstrukcji, w celu podzielenia dziedziny przypadków użycia na mniejsze, zarządzalne poddziedziny. Pozwala to także na szybsze przekazywanie części prac (lub prototypów).

W tej fazie tworzona jest pierwsza wersja oprogramowania do wglądu użytkowników zewnętrznych. Zakończenie fazy wiąże się z osiągnięciem Initial Operational Capability Milestone.

Faza przekazania systemu (Transition phase)[edytuj]

W tej fazie produkt przekazywany jest od zespołu programistycznego do użytkowników końcowych (potocznie mówiąc: do produkcji). W tej fazie znajdują się takie czynności jak: trening użytkowników końcowych i administratorów, testy akceptacyjne (testy beta). Sprawdzana jest zgodność produktu z miarami jakości określonymi w pierwszej fazie.

Spełnienie celów jest tożsame z osiągnięciem Product Release Milestone i zakończeniem cyklu wytwarzania oprogramowania.

Dyscypliny (Disciplines and workflows)[edytuj]

RUP bazuje na zbiorze klocków (building blocks, content elements). Opisują one, co ma zostać stworzone, jakie umiejętności są do tego wymagane oraz, krok po kroku, jak powinien wyglądać proces wytwarzania.

Główne klocki:

W ramach każdej iteracji zadania podzielone są na dziewięć dyscyplin (disciplines):

Dyscypliny inżynierskie (Engineering Disciplines):

Dyscypliny pomocnicze (Supporting Disciplines):

Modelowanie biznesowe (dyscyplina)[edytuj]

Z biegiem czasu przedsiębiorstwa i inne organizacje stają się coraz bardziej zależne od systemów informatycznych. Wymusza to w sposób oczywisty na inżynierach tworzących oprogramowanie wiedzę, w jaki sposób ich systemy wpasowują się w procesy zachodzące w administracji i jakie jej wymogi adresują. Z kolei firmy inwestują na ogół w systemy informatyczne na podstawie racjonalnych przesłanek – wtedy, kiedy widzą wartość dodaną wynikającą ze stworzenia takiego systemu.

Celem modelowania biznesowego jest przede wszystkim zapewnienie komunikacji i lepsze zrozumienie pomiędzy biznesem (inżynieria biznesowa) a IT (inżynieria oprogramowania). Zrozumienie biznesu oznacza, że inżynierowie oprogramowania muszą zrozumieć strukturę i dynamikę organizacji swojego klienta, jego bieżące problemy i możliwe usprawnienia. Muszą także zapewnić wspólne zrozumienie celów pomiędzy klientami, użytkownikami końcowymi a programistami.

Modelowanie biznesowe tłumaczy w jaki sposób opisać wizję organizacji, w której będzie wdrożony system i jak później użyć jej do opisania procesów, ról i odpowiedzialności w organizacji.

Wymagania (dyscyplina)[edytuj]

Celem Wymagań jest opisanie tego, co system powinien robić. Wymagania zbierane są przez analityków, którzy odkrywają je, klasyfikują i dokumentują. Proces zbierania wymagań polega na dyskusji i uzgodnieniach pomiędzy tworzącymi system a klientem.

Analiza i projekt (dyscyplina)[edytuj]

Celem Analizy i projektu jest zobrazowanie sposobu w jaki będzie tworzony system w fazie implementacji. Ma to być system, który:

Analiza i projekt tworzy model projektowy i opcjonalnie model analityczny systemu. Model analityczny zapewnia abstrakcję od kodu źródłowego – to znaczy, służy on jako wytyczne do stworzenia tego kodu. Model projektowy składa się z klas zorganizowanych w pakiety i podsystemy z dobrze określonymi interfejsami. Służy to wyodrębnieniu komponentów w fazie implementacji. Zawiera także opis, które obiekty klas współpracują w celu realizacji przypadków użycia.

Implementacja (dyscyplina)[edytuj]

Celami implementacji są:

Systemy realizowane są poprzez implementację swoich komponentów. Proces opisuje w jaki sposób zapewnić reużywalność istniejących komponentów albo implementować nowe komponenty ze zdefiniowaną odpowiedzialnością tworząc system łatwiejszy do utrzymania i zwiększając reużywalność.

Testowanie (dyscyplina)[edytuj]

Celami dyscypliny testowania są:

Proces RUP proponuje podejście iteracyjne, które oznacza testowanie od początkowych faz projektu. Pozwala to na szybsze wykrywanie defektów i ograniczenie kosztów ich usunięcia. Testy są prowadzone w ramach wymiarów jakości: wiarygodności, funkcjonalności, osiągów pojedynczych aplikacji oraz systemu (performance). RUP opisuje w jaki sposób testować w każdym z tych wymiarów w czasie trwania projektu.

Wdrożenie (dyscyplina)[edytuj]

Celem wdrożenia (deployment) jest udane wytwarzanie dystrybucji produktu i dostarczanie oprogramowania końcowym użytkownikom. Pokrywa ono szeroki zbiór czynności włączając:

Jakkolwiek czynności wdrożenia są skoncentrowane głównie na fazie przekazania (transition), wiele z nich musi być włączone we wcześniejsze fazy w celu przygotowania do wdrożenia na końcu fazy budowy(construction). Procesy (workflows) Deployment and Environment w procesie RUP zawierają mniej szczegółów niż inne procesy.

Zarządzanie zmianą i konfiguracją (dyscyplina)[edytuj]

Dyscyplina zarządzania zmianą (change management) w RUP dotyka trzech obszarów:

Zarządzanie projektem (dyscyplina)[edytuj]

Planowanie projektu w RUP występuje na dwóch poziomach – zgrubnym (coarse-grained) zwanym planem faz, który opisuje cały projekt oraz serii szczegółowych planów iteracji, które opisują iteracje.

Ta dyscyplina skupia się głównie na ważnych aspektach iteracyjnego procesu wytwarzania oprogramowania. Nie próbuje objąć natomiast wszystkich aspektów zarządzania projektami, na przykład:

Główne obszary dyscypliny:

Dyscyplina zarządzania projektem zawiera również inne Plany i Artefakty, które są używane do kontrolowania projektu i monitorowania jego postępu. Do planów należą:

Plan faz[edytuj]

Każda faza traktowana jest jako projekt, kontrolowany i mierzony poprzez Software Development Plan pogrupowany w podzbiór planów kontrolnych:

Test jednostkowy (ang. unit test) to w programowaniu metoda testowania tworzonego oprogramowania poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych elementów (jednostek) programu - np. metod lub obiektów w programowaniu obiektowym lub procedur w programowaniu proceduralnym. Testowany fragment programu poddawany jest testowi, który wykonuje go i porównuje wynik (np. zwrócone wartości, stan obiektu, wyrzucone wyjątki) z oczekiwanymi wynikami - tak pozytywnymi, jak i negatywnymi (niepowodzenie działania kodu w określonych sytuacjach również może podlegać testowaniu).

Zaletą testów jednostkowych jest możliwość wykonywania na bieżąco w pełni zautomatyzowanych testów na modyfikowanych elementach programu, co umożliwia często wychwycenie błędu natychmiast po jego pojawieniu się i szybką jego lokalizację zanim dojdzie do wprowadzenia błędnego fragmentu do programu. Testy jednostkowe są również formą specyfikacji. Z powyższych powodów są szczególnie popularne w programowaniu ekstremalnym.

Kryzys oprogramowania

Inżynieria oprogramowania jest dziedziną informatyki, która pojawiła się w połowie lat 60-tych. Rozwój inżynierii oprogramowania poprzedziło zwrócenie uwagi na tzw. kryzys oprogramowania. W latach 50 i na początku lat 60-tych tworzono tylko małe programy. Rozwój sprzętu komputerowego oraz języków programowania umożliwił tworzenie znacznie bardziej złożonych systemów. Stało się jasne, że rozwój technik oprogramowania nie nadąża za rozwojem sprzętu i to zjawisko nazwano "kryzysem oprogramowania", który trwa do dziś. W latach 90-tych 90% poważnych firm programistycznych w USA uważa, że często zdarzają się im opóźnienia w realizacji przedsięwzieć programistycznych. Oprogramowanie jest też chyba jedynym produktem technicznym, w którym błędy są powszechnie akceptowane. Przykładem może być wykrycie błędu w pierwszych egzemplarzach PENTIUM. Producenci programów sprzedawanych w milionach egzemplarzy nie dają praktycznie żadnej gwarancji na to, że ich produkt działa zgodnie z opisem.

Przyczyny kryzysu oprogramowania:

Efektywne tworzenie formularzy:

Na czym polega analiza i projektowanie:

Analiza to badanie problemu i wymagań, a nie szukanie rozwiązania. Jeśli np. klient życzy sobie systemu sprzedaży internetowej, należy poszukać odpowiedzi na pytanie w jaki sposób będzie z niego korzystał i jakie funkcje ma spełniać system.

Celem projektowania jest przetłumaczenie wymagań na specyfikację, opisującą jak zaimplementować system. Projektowanie jest związane z szukaniem pomysłu na rozwiązania, które spełnią wymagania, ale nie łączy się bezpośrednio z implementacją.

Diagram klas – w ujednoliconym języku modelowania (UMLang. Unified Modeling Language), to statyczny diagram strukturalny, przedstawiający strukturę systemu w modelachobiektowych przez ilustrację struktury klas i zależności między nimi.

Diagram klas przedstawia klasy (typy) obiektów w programie, w odróżnieniu od diagramu obiektów, który pokazuje jedynie egzemplarze (instancje) obiektów i ich zależności istniejące w konkretnym momencie.

Diagram klas pokazuje określony fragment struktury systemu. Diagramów klas używa się do modelowania statycznych aspektów perspektywy projektowej. Wiąże się z tym silnie modelowanie słownictwa systemu, kooperacji lub schematów. Diagramy klas pozwalają na sformalizowanie specyfikacji danych i metod. Mogą także pełnić rolę graficznego środka pokazującego szczegóły implementacji klas.

Zależności klas

Zależność – związek znaczeniowy między klasami, gdy jedna z nich używa innych klas.

Kompozycja

Kompozycja, zwana również złożeniem, jest związkiem typu całość-część. W relacji kompozycji, części należą tylko do jednej całości, a ich okres życia jest wspólny — razem z całością niszczone są również części. Na diagramie, kompozycję oznacza się za pomocą linii zakończonej wypełnionym rombem.

Agregacja

Agregacja również reprezentuje związek typu całość-część. Jednak, w odróżnieniu od kompozycji, występuje tutaj relacja posiadania — co oznacza, że elementy częściowe mogą należeć do większej całości, jednak również mogą istnieć bez niej. Na diagramie, agregację oznacza się za pomocą linii zakończonej pustym rombem.

Generalizacja

Generalizacja – związek opisujący dziedziczenie po klasach.

Asocjacje

czyli powiązania pomiędzy obiektami klas

Diagramy aktywności(czynności) – przedstawiają kolejne oraz równoległe czynności składające się na proces.

Diagram aktywności oferuje bogatą notację, pozwalającą na przedstawienie sekwencji czynności, również czynności równoległych; technika ta sprawdza się w przypadku złożonych procesów; może być stosowany w dowolnej perspektywie i dowolnym celu; diagram często stosowany jest do modelowania: procesów biznesowych, scenariuszy przypadków użycia, przetwarzania współbieżnego, algorytmów.

Notacje:

Aktywność, czynność lub akcja; przepływ sterowania: oznacza zakończenie jednej aktywności/akcji i przejście do drugiej; blok decyzyjny: może rozdzielać jedno przejście na kilka alternatywnych lub łączyć kilka alternatywnych przejść w jedno przejście; sztabka synchronizująca: może być typu rozwidlenia lub typu scalenie; aktywność początkowa; aktywność końcowa; zakończenie przepływu

Diagramy pakietów to graficzne przedstawienie struktury systemu w postaci pakietów połączonych zależnościami i zagnieżdżeniami.

Diagramy pakietów wykorzystywane są do porządkowania, grupowania różnorodnych klasyfikatorów języka UML, takich jak: przypadków użycia, kompletnych diagramów, klas, podsystemów.

Notacja: pakiet; zależność; zagnieżdżenie pakietów

Diagramy sekwencji to graficzne przedstawienie interakcji pomiędzy obiektami systemu.

Diagram sekwencji łączy w sobie aktorów, obiekty i komunikaty. Jest więc zgodny z koncepcją obiektowego modelowania systemów. Umożliwia bezpośrednie przejście do generowania kodu w językach obiektowych.

Notacja: Klasyfikator to dokładniej: aktor, klasa, pakiet. Może wysyłać i odbierać komunikaty; linia życia to czas życia instancji; komunikat to specyficzna wymiana informacji zawiera zlecenie wykonania określonej operacji; ośrodek sterowania to stan aktywności danej instancji.

Wzorzec projektowy (ang. design pattern) – w inżynierii oprogramowania, uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz pielęgnację kodu źródłowego. Jest opisem rozwiązania, a nie jego implementacją. Wzorce projektowe stosowane są w projektach wykorzystujących programowanie obiektowe.

Elementy wzorca[edytuj]

Wzorzec projektowy składa się z czterech podstawowych elementów:

Zalety zastosowania wzorców: zapobiegają ponownemu wymyślaniu kodu zaprojektowanego już przez innych programistów; zmniejszają liczbę popełnionych błędów; zapewniają kod łatwo rozszerzalny; ułatwiają zrozumienie kodu; ułatwiają komunikacje zespole.

Podział wzorców:

Wzorzec Strategia definiuje rodzinę algorytmów, pakuje je jako osobne klasy i powoduje, że są one w pełni wymienne. Zastosowanie tego wzorca pozwala na to, aby zmiany w implementacji algorytmów przetwarzania były całkowicie niezależne od strony klienta, który z nich korzysta.

Wzorzec Singleton zapewnia, że dana klasa będzie miała tylko i wyłącznie jedną instancje obiektu i zapewnia globalny punkt dostępu do tej instancji.

Wzorzec Dekorator pozwala na dynamiczne przydzielanie danemu obiektowi nowych zachowań. Dekoratory dają elastyczność podobną do tej, jaką daje dziedziczenie, oferując jednak w zamian znacznie rozszerzoną funkcjonalność.

Wzorzec Polecenie hermetyzuje żądania w postaci obiektów, co umożliwia parametryzowanie różnych obiektów zróżnicowanymi żądaniami oraz obsługiwanie operacji, które można wycofać

Refaktoryzacja (czasem też refaktoring, ang. refactoring) to pojęcie związane z wytwarzaniem systemów informatycznych, w szczególności z programowaniem. Jest to proces wprowadzania zmian w projekcie/programie, w wyniku którego zasadniczo nie zmienia się funkcjonalność. Celem refaktoryzacji jest więc nie wytwarzanie nowej funkcjonalności, ale utrzymywanie odpowiedniej, wysokiej jakości organizacji systemu. W ramach refaktoryzacji podejmowane są następujące działania:

Dzięki refaktoryzacji w systemie ogranicza się redundancję (nadmiarowość, np. istnienie wielu obiektów i procedur o takiej samej lub bardzo zbliżonej funkcjonalności, a mających niezależne implementacje, czyli stosując regułę DRY) i wprowadza standardy. W przypadku systemów o architekturach wielowarstwowych, refaktoryzacja jest jednym z istotnych czynników gwarantujących zachowanie silnej separacji warstw systemu i ich przejrzystej struktury.

Testowanie oprogramowania – proces związany z wytwarzaniem oprogramowania. Jest to jeden z procesów zapewnienia jakości oprogramowania. Testowanie ma na celuweryfikację oprogramowania oraz walidację oprogramowania. Weryfikacja oprogramowania ma na celu sprawdzenie, czy wytwarzane oprogramowanie jest zgodne ze specyfikacją. Walidacja sprawdza, czy oprogramowanie jest zgodne z oczekiwaniami użytkownika.

Rodzaje testów:

Model spiralny

Model spiralny (tworzenie spiralne) – jeden z modeli procesów tworzenia oprogramowania.

Proces tworzenia ma postać spirali, której każda pętla reprezentuje jedną fazę procesu. Najbardziej wewnętrzna pętla przedstawia początkowe etapy projektowania, np. studium wykonalności, kolejna definicji wymagań systemowych, itd.

Model[edytuj]

Każda pętla spirali podzielona jest na cztery sektory:

Cechy[edytuj]

Widoczną cechą modelu spiralnego jest szczegółowe potraktowanie zagrożeń realizacji projektu. Dobrze rozpoznane zagrożenia i przedsięwzięte kroki im zapobiegania lub redukcji skutkują m.in. wysoką niezawodnością (dependability) powstającego oprogramowania, bądź pewnością, że projekt ma szanse dalszej realizacji.

W modelu spiralnym nie ma takich faz jak specyfikowanie albo projektowanie. Jeden cykl spirali może przebiegać w oparciu o model kaskadowy procesu tworzenia oprogramowania, w innym można użyć prototypowania lub przekształceń formalnych, w zależności od aktualnego etapu przedsięwzięcia / realizowanej części systemu (np. inny dla tworzenia interfejsu użytkownika, inny dla krytycznych funkcji bezpieczeństwa)

Każdy cykl wymaga formalnej decyzji o kontynuacji projektu.

Model przyrostowy (realizacja przyrostowa, ang. incremental development) – jedna z technik pisania oprogramowania, stosowany w przypadkach, w których dopuszczalna jest okrojona funkcjonalność systemu.

Fazy[edytuj]

Model kaskadowy

Model kaskadowy (ang. waterfall model) – jeden z kilku rodzajów procesów tworzenia oprogramowania zdefiniowany winżynierii oprogramowania. Jego nazwa wprowadzona została przez Winstona W. Royce w roku 1970, w artykule "Managing the Development of Large Software Systems" (zarządzanie tworzeniem dużych systemów informatycznych).

Polega on na wykonywaniu podstawowych czynności jako odrębnych faz projektowych, w porządku jeden po drugim. Każda czynność to kolejny schodek (kaskada):

  1. Planowanie systemu (w tym Specyfikacja wymagań)

  2. Analiza systemu (w tym Analiza wymagań i studium wykonalności)

  3. Projekt systemu (poszczególnych struktur itp.)

  4. Implementacja (wytworzenie kodu)

  5. Testowanie (poszczególnych elementów systemu oraz elementów połączonych w całość)

  6. Wdrożenie i pielęgnacja powstałego systemu.

Jeśli któraś z faz zwróci niesatysfakcjonujący produkt cofamy się wykonując kolejne iteracje aż do momentu kiedy otrzymamy satysfakcjonujący produkt na końcu schodków.

Zastosowanie[edytuj]

Model kaskadowy jest rzadko używany z następujących powodów:

Tego typu modelu należy używać wyłącznie w przypadku gdy wymagania są zrozumiałe i przejrzyste, ponieważ każda iteracja jest czasochłonna i wymaga dużych wydatków na ulepszanie.

Model prototypowy tworzenia oprogramowania polega na stworzeniu podczas projektowania prototypu w celu przedyskutowania oraz akceptacji z klientem. Po akceptacji prototypu przechodzi się do kolejnych etapów tworzenia oprogramowania. Prototypowanie zapobiega błędnym zrozumieniem wymagań systemu, które może powodować wzrost kosztów, zwłaszcza w modelu kaskadowym.

Metoda szacowani kosztów COCOMO

jest oparte na kilku formułach pozwalających oszacować całkowity koszt przedsięwzięcia na podstawie oszacowanej liczby linii kodu. Jest to główna słabość tej metody, gdyż:

liczba ta staje się przewidywalna dopiero wtedy, gdy kończy się faza projektowania architektury systemu; jest to za późno;

pojęcie “linii kodu” zależy od języka programowania i przyjętych konwencji;

pojęcie “linii kodu” nie ma zastosowania do nowoczesnych technik programistycznych, np. programowania wizyjnego.

COCOMO oferuje kilka metod określanych jako podstawowa, pośrednia i detaliczna.

Metoda podstawowa: prosta formuła dla oceny osobo-miesięcy oraz czasu potrzebnego na całość projektu.

Metoda pośrednia: modyfikuje wyniki osiągnięte przez metodę podstawową poprzez odpowiednie czynniki, które zależą od aspektów złożoności.

Metoda detaliczna: bardziej skomplikowana, ale jak się okazało, nie dostarcza lepszych wyników niż metoda pośrednia.


Wyszukiwarka

Podobne podstrony:
IO ALL
io wyk5
gprs t6 io pl 1013
io 8 z
BD IO 3
IO zerówka opracowanie
aqua s io pl 1109
cz emm2 io pl 0407
acx201 io pl 1112
amd101 io pl 0510(2)
io w11 zasady projektowania opr
dok5, Prywatne, WAT, SEMESTR IV, IO, Zaliczenie IO
graphite io pl 1109
io 5 z
aqua pro io pl 1109
MELFA IO
IO wsp, TutorialJava
MCR II BIC IO
IO wprowadzenie

więcej podobnych podstron