dizajn i arhitektura softwera.docx

8
SOFTWERSKI DIZAJN 1.Osnove softverskog dizajna (Software Design Fundamentals) a) Generalni koncepti dizajna (General Design Concepts) -dizajn kao formu za rešavanje problema, gde postoje i limiti dizajna -govorimo i o generalnim konceptima dizajna, ciljevima, ograničenjim, alternativama i rešenjima. b) Kontekst softverskog dizajna (Context of Software Design) -razumeti osnovne karakteristike i odnose između analize softverskih zahteva, softverskog dizajna, konstrukcije softvera i testiranja softvera. c)Proces softverskog dizajna (Software Design Process) 1.Arhitektonski dizajn (Architectural design) - opisuje kako je softver dekomponovan i organizovan u komponente (Software Architecture),top-level 2. Detaljni dizajn (Detailed design): -opisuje specifično ponašanje ovih komponenti -izlaz iz ovog procesa je skup modela i artifakata koji odslikavaju osnovne odluke koje su donate d)Principi softwerskog dizajna (Enabling Techniques) 1. Apstrakcija (Abstraction) -Proces zanemarivanja informacija da bi se stvari koje su različite mogle tretirati kao da su iste -parametrizacija -specifikacija-procedural abstraction, data abstraction i control (iteration) abstraction. 2. Sprezanje i spajanje (Coupling and cohesion) -sprezanje se definiše kao jačina relacija između modula -spajanje definiše kako su povezani elementi koji čine modul. 3. Dekompozicija i modularizacija (Decomposition and modularization) -dekompozicija i modularizacija velikog softvera u značajan broj manjih nezavisnih celina -sa ciljem sa smeštanjem različitih funkcionalnosti ili odgovornosti u različite komponente. 4. Skrivanje informacija (Encapsulation/information hiding) -grupisanje i pakovanje elemenata i internih detalja apstrakcije i pravljenjem ovih detalja nedostupnim (Inaccessible).

Upload: miroslav-nevidovcic

Post on 27-Dec-2015

61 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Dizajn i arhitektura softwera.docx

SOFTWERSKI DIZAJN1.Osnove softverskog dizajna (Software Design Fundamentals)

a) Generalni koncepti dizajna (General Design Concepts)-dizajn kao formu za rešavanje problema, gde postoje i limiti dizajna-govorimo i o generalnim konceptima dizajna, ciljevima, ograničenjim, alternativama i rešenjima.

b) Kontekst softverskog dizajna (Context of Software Design)-razumeti osnovne karakteristike i odnose između analize softverskih zahteva, softverskog dizajna, konstrukcije softvera i testiranja softvera.

c)Proces softverskog dizajna (Software Design Process)1.Arhitektonski dizajn (Architectural design) - opisuje kako je softver dekomponovan i organizovan u komponente (Software Architecture),top-level2. Detaljni dizajn (Detailed design):

-opisuje specifično ponašanje ovih komponenti-izlaz iz ovog procesa je skup modela i artifakata koji odslikavaju osnovne odluke koje su donate

d)Principi softwerskog dizajna (Enabling Techniques)

1. Apstrakcija (Abstraction)-Proces zanemarivanja informacija da bi se stvari koje su različite mogle tretirati kao da su iste-parametrizacija-specifikacija-procedural abstraction, data abstraction i control (iteration) abstraction.

2. Sprezanje i spajanje (Coupling and cohesion)-sprezanje se definiše kao jačina relacija između modula-spajanje definiše kako su povezani elementi koji čine modul.

3. Dekompozicija i modularizacija (Decomposition and modularization)-dekompozicija i modularizacija velikog softvera u značajan broj manjih nezavisnih celina-sa ciljem sa smeštanjem različitih funkcionalnosti ili odgovornosti u različite komponente.

4. Skrivanje informacija (Encapsulation/information hiding)-grupisanje i pakovanje elemenata i internih detalja apstrakcije i pravljenjem ovih detalja nedostupnim (Inaccessible).

5. Odvajanje interface-a i implementacije (Separation of interface and implementation)-Definisanje komponente preko public interfejsa (interfejs koji vide klijenti). Odvojeno od detalja realizacije komponente

6. Dovoljnost, savršenost i jednostavnost (Sufficiency, completeness and primitiveness)-znači osiguranje da softverska komponenta obuhvata sve značajne karakteristike apstrakcije i ništa više.

Page 2: Dizajn i arhitektura softwera.docx

2.Ključna pitanja softwerskog dizajna(Key Issues in Software Design)

-obezbeđivanje kvaliteta (Performance)-kako dekomponovati, organizovati i pakovati softverske komponenete

aspekti (teže da ne budu jedinica softverske funkcionalne dekompozicije, već osobina koja utiče na performanse ili semantiku komponenti na sistematičan način)

-Konkurentnost (Concurrency)kako dekomponovati softver u procese, taskove i tredove i rešavati pitanja efikasnosti, atomičnosti, sinhronizacije i rasporeda.

-Kontrola i upravljanje događajima (Control and Handling of Events)- kako organizovati podatke i kontrolu toka, - kako obraditi reaktivne i privremene događaje kroz različite mehanizme kao što su implicitan poziv i odziv.

-Distribucija komponenti (Distribution of Components)-Bavi se pitanjima distribucije softvera preko hardvera, kako komponente komuniciraju i dr.

-Error and Exception Handling and Fault Tolerance-Kako uraditi prevenciju i toleranciju nedostataka i obradu izuzetaka.

-Interaction and Presentation-Kako strukturirati i organizovati interakciju sa korisnikom i prezentaciju informacije.-Ova podoblast se ne bavi detaljima user interface-a

-Data Persistence-Perzistentnost (postojanost) podataka, bavi se pitanjima kako se obrađuju long-lived podaci.

Page 3: Dizajn i arhitektura softwera.docx

3. Softversku struktura i arhitekturu (Software Structure and Architecture)

opis podsistema i komponenata softverskog sistema i relacija između njih;definiše internu strukturu rezultujućeg softvera, način na koji je konstruisan i organizovan.

a) Arhitektonske strukture i pogledi (Architectural Structures and Viewpoints)-Pogled predstavlja parcijalni aspekt softverske arhitekture koji pokazuje specifičnu osobinu softverskog sistema.

1. Logički pogled (Logical View) - zadovoljava funkcionalne zahteve2. Procesni pogled (Process View) - pitanja konkurentnosti3. Fizički pogled (Physical View) - pitanja distribucije4. Razvojni pogled (Development View) - kako je dizajn razbijen u implementacione jedinice

b) Arhitektonski stilovi (Architectural Styles - Macroarchitectural Patterns)-Arhitektonski stil je skup ograničenja na arhitekturi koji definišu skup ili familiju arhitektura koje ih zadovoljavaju.

1. Generalna struktura (General structure) - npr. Layers, Pipes and Filters, Blackboard2. Distribuirani sistemi (Distributed systems) - npr. Client-Server, Threetiers, Broker3. Interaktivni sistemi (Interactive systems) - npr. Model-View-Controller, Presentation-Abstraction- Control4. Adaptibilni sistemi (Adaptable systems) - npr. Micro-Kernel, Reflection5. Ostali (Others) - npr. Batch, Interpreters, Process Control, Rule-Based

c) Dizajn obrazac (Design Patterns - Microarchitectural Patterns)-obrazac (Pattern) je uobičajeno rešenje za uobičajen problem u datom kontekstu

1. Stvaralački obrasci (Creational patterns) - npr. Builder, Factory, Prototype, Singleto2. Strukturalni obrasci (Structural patterns) - npr. Adapter, Bridge, Composite, Decorator, Flyweight, Proxy)3. Obrasci ponašanja (Behavioral patterns) - npr. Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template, Visitor

d) Familije programa i Framework-ova (Families of Programs and Frameworks)-jedan od načina da se omogući ponovna upotreba softverskog dizajna i komponenata je da se dizajnira familija softvera, koja se često naziva softver proizvodna linija.-U objektno orijentisanom programiranju, Framework - parcijalno kompletiran softverski podsistem može biti proširen pomoću prikladno instanciranih Plug-in-ova.

Page 4: Dizajn i arhitektura softwera.docx

4.Analiza kvaliteta i evaluacija softverskog dizajna (Software Design Quality Analysis and Evaluation)

a) Atributi kvaliteta (Quality Attributes)-atributa kvaliteta prepoznatih u Run-Time-u (Performance, Security, Availability, Functionality, Usability)-onih koji to nisu u Run-Time-u(Modifiability, Portability, Reusability, Integrability, Testability),-povezanih sa unutrašnjim kvalitetom arhitekture (Conceptual Integrity, Correctness, Completeness, Buildability).

b) Analiza kvaliteta i tehnike evaluacije (Quality Analysis and Evaluation Techniques)

1. Software Design Reviews, neformalna ili poluformalna, često group-based, tehnika za verifikaciju i obezbeđenje kvaliteta dizajna artifakata (npr. Architecture Reviews, Design Reviews, Inspections, Scenario-Based Techniques, Requirements Tracing

2. Static Analysis, neformalna ili poluformalna statična (non-executable) analiza koja može biti korišćena za evaluaciju dizajna3. Simulacija i prototip, dinamička tehnika za evaluaciju dizajna (npr. simulacija performansi ili prototip izvodljivosti)

c) Merenja (Measures)-se koriste za kvantitativnu procenu različitih aspekata: veličine, strukture ili kvaliteta softverskog dizajna-najviše mera koje su predložene generalno zavise od pristupa korišćenog za izvođenje dizajn

1. Function-oriented (Structured) Design Measures: struktura dizajna, dobijena najčešće kroz funkcionalnu dekompoziciju, generalno predstavljena kao strukturni graf (nekada nazivan hijerarhijski dijagram) na kome se različite mere mogu sprovesti

2. Object-oriented Design Measures: ukupna struktura dizajna je najčešće predstavljena kao klasni dijagram na kome se mogu sprovesti različita merenja. Takođe se mogu izračunati i merenja osobina internog sadržaja svake klase.

Page 5: Dizajn i arhitektura softwera.docx

5.Notacija softverskog dizajna (Software Design Notations)Određene notacije se koriste uglavnom tokom arhitektonskog dizajna, a ostali uglavnom tokom detaljnog dizajn

a) Strukturalni opisi (Structural Descriptions) - statični pogled (Static View) opisuju osnovne komponente i kako su međusobno povezane:1. Architecture Description Languages (ADL-s) - tekstulani, često formalni jezici koji se koriste za opis softverske arhitekture preko termina komponente i

konektori.2. Class and Object Diagrams - koriste se za predstavu skupa klasa i objekata i njihovih uzajamnih odnosa.3. Component Diagrams - koriste se za predstavu skupa komponenti (fizički i zamenjivi delovi sistema koji potvrđuju i obezbeđuju realizaciju skupa interfejsa i

njihovih uzajamnih odnosa)4. Class responsibility Collaborator Cards (CRCs) - koriste se za navođenje imena komponenti (klasa), njihovih odgovornosti i njihovih kolaboracionih

komponenti.5. Deployment Diagrams - koriste se za predstavu skupa fizičkih čvorova i njihovih uzajamnih odnosa i modelovanje fizičkih aspekata sistema.6. Entity-relationship Diagrams (ERDs) - koriste se za predstavu konceptualnog modela podataka smeštenih u informacioni sistem.7. Programming-like jezici, koriste se za definisanje interfejsa (imena i tipova eksportovanih operacija) softverskih komponenti.8. Jackson Structure Diagrams - koriste se za opis struktura podataka preko termina sekvence, selekcije i iteracije.9. Structure Charts - koriste se za opis pozivanih i pozivajućih struktura programa (koji modul poziva, od koga je pozvan).

b) Opisi ponašanja (Behavioral Descriptions) - dinamični pogled (Dynamic view)

1. Activity Diagrams - koriste se za prikaz upravljačkog toka, od aktivnosti do aktivnosti2. Collaboration Diagrams - koriste se za prikaz interakcija koje se dešavaju unutar grupe objekata, gde je fokus na objektu, njegovim linkovima i porukama

koje razmenjuju preko ovih linkova3. Data Flow Diagrams (DFDs) - koriste se za prikaz dijagrama toka podataka između skupa procesa.4. Decision Tables and Diagrams - koriste se za predstavu kompleksnih kombinacija uslova i akcija5. Flowcharts and Structured Flowcharts - koriste se za predstavu dijagrama toka i pripadajućih akcija koje je potrebno izvršiti6. Sequence Diagrams - koriste se za prikaz interakcija između grupa objekata, sa fokusom na vremenski raspored poruka7. State Transition and State-Chart Diagrams - koriste se za prikaz upravljačkog toka od stanja do stanja8. Formal Specification Languages - tekstulani jezici koji koriste osnovne notacije iz matematike (npr. skup, sekvenci) da čvrsto definiše ponašanje i interfejs

softverskih komponenti9. Pseudocode and Program Design Languages (PDLs) - jezici tipa Structured- Programming-like, koji se koriste za opis ponašanja procedure ili metoda,

generalno na nivou Detailed Design-a

Page 6: Dizajn i arhitektura softwera.docx

6.Strategije i metode softverskog dizajna (Software Design Strategies and Methods)

a) Generalne strategije (General strategy)-Divide-and-Conquer and Stepwise Refinement (postepeno prečišćavanje)-Top-Down vs. Bottom-Up strategije-apstrakcija podataka i skrivanje informacija-korišćenje heuristika,-korišćenje paterna i patern jezika,-korišćenje iterativnog i inkrementalnog pristupa

b) Funkcionalno orijentisan dizajn (Function-Oriented (Structured) Design)-dekompozicija fokusira na identifikovanju osnovnih funkcija softvera i potom ih elaborira i prečišćava u Top-Down pristupu-strukturni dizajn se generalno koristi posle strukturne analize, proizvodeći, između ostalog dijagrame toka podataka i pripadajuće opise procesa.

c) Objektno orijentisan dizajn (Object-Oriented Design)-Object-Based dizajna (noun = object; verb = method; adjective = attribute) preko objektno orijentisanog dizajna (gde nasleđivanje i polimorfizam igraju ključnu ulogu), do Component-Based dizajna, gde je moguće definisati i pristupiti meta informacijama.

d) Dizajn orijentisan ka strukturama podataka (Data-Structure-Centered Design)-polazi od struktura podataka kojima program manipuliše, umesto od funkcija koje obavlja.-softver inženjer prvo opisuje ulazne i izlazne strukture podataka (pomoću npr. Jackson Structure dijagrama), a potom razvija programske kontrolne strukture zasnovane na ovim dijagramima struktura podataka.

e) Dizajn baziran na komponentama (Component-Based Design (CBD))-softverska komponenta je nezavisna jedinica, ima dobro definisan interfejs i zavisnosti koje je moguće ukomponovati i implementirati nezavisno.-obrađuje teme vezane za obezbeđivanje, razvoj i integraciju takvih komponenti u cilju poboljšanja ponovne upotrebe (Reuse).