Utisci korisnika

"Ovo je pravi vid doškolovavanja za sve one koji nemaju uslova za redovno školovanje ili su prezauzeti. Nije teško za one koji hoce . Uz vas je i moj sin od 9 godina nesto naučio.…

Želeo bih da Vam se zahvalim na Vašoj brzoj pošiljci, sertifikatu i novom kursu, koji sam juče preuzeo putem Post-expresa. Još jedanput Vam se zahvaljujem na Vašoj profesionalnosti.…


Kompletna lista utisaka

Testiranje online

Arhitektura računara

Za one koji žele da znaju više.

Windows OS

Ovo bi svakako trebalo da probate.

Odnosi s javnošću

Koliko znate PR?

Pogledajte još neke od testova

Newsletter

Ukoliko želite da Vas redovno obaveštavamo o novostima sa Link eLearning sajta prijavite se na našu newsletter listu.

Ime:

Prezime:

Email:


Anketa

Arhiva anketa

BAZA ZNANJA


Kurs: Softverski dizajn

Modul: Softverski dizajn

Autor:

Naziv jedinice: Fundamenti sofverskog dizajna


Materijali vezani uz ovu lekciju:

- Test fundamenti sofverskog dizajna
- Fundamenti sofverskog dizajna (PDF dokument)



U ovoj lekciji obrađivaćemo:

  • Oblast Software Design
  • Podoblasti Software Design
  • Software Design Fundamentals
  • Key Issues in Software Design
  • Software Structure and Architecture

Na sledećoj slici je prikazana šema Softverskog dizajna prema SWEBOK-u (The Software Engineering Body of Knowledge).


 

Softverski dizajn (Software Design)

Dizajn je definisan kao proces definisanja arhitekture, komponenti, interface-a i ostalih karakteristika sistema ili komponenti. Software design je aktivnost životnog ciklusa software engineering-a u kome se softverski zahtevi analiziraju u cilju proizvodnje opisa interne strukture softvera koja će služiti kao osnova za konstrukciju. Još preciznije, software design mora opisati softversku arhitekturu, tj. kako je softver razložen i organizovan u komponente i kakav je interface između ovih komponenti. Mora da opiše komponente na nivou detalja koji omogućavaju njihovu konstrukciju.

Software Design igra važnu ulogu u razvoju softvera, dozvoljavajući softver inženjerima da proizvedu različite modele koji formiraju neku vrstu nacrta za rešenje koje se implementira. Možemo analizirati i evaluirati ove modele da bismo utvrdili da li nam mogu ili ne mogu pomoći da ispunimo različite zahteve. Možemo ispitati i evaluirati različita alternativna rešenja.

Rezultujući model možemo koristiti da isplaniramo naredne razvojne aktivnosti, da ih koristimo kao ulaz i početnu tačku za konstrukciju i testiranje.

Prema dokumentu IEEE/EIA 12207 Software Life Cycle Processes, softver dizajn se sastoji iz dve aktivnosti koje spadaju između analize softverskih zahteva i softverske konstrukcije:

  • Software architectural design (nekada se naziva i top-level design), opisuje softversku top level arhitekturu i organizaciju i podrazumeva identifikovanje različitih komponenti
  • Software detailed design, opisuje svaku komponentu u dovoljnoj meri za početak njenog konstruisanja

Posmatrajući opseg oblasti Software Design, postojeći opis oblasti ne obuhvata svaku temu koja sadrži reč dizajn. Ova oblast bavi se prevashodno sa D-designom (dizajn dekompozicije, preslikavanje softvera u komponent delove). S obzirom na konstantno rastuće polje softverske arhitekture, postoji i FP-design (family pattern design) čiji je cilj uspostavljanje iskoristive unificiranosti u porodici softvera.

Suprotno tome, oblast softverskog dizajna ne adresira I-design (invention design), koji se obično sprovodi tokom procesa uzimanja zahteva sa ciljem konceptualizacije i specificiranja softvera koji treba da zadovolji uočene potrebe i zahteve. Oblast spftverskog dizajna se posebno oslanja na oblasti softverskih zahteva, softversku konstrukciju, software engineering management i softverski kvalitet.

Softverski dizajn obuhvata:

  1. Osnove softverskog dizajna (eng. Software Design Fundamentals)
  2. Ključna pitanja softverskog dizajna (eng. Key Issues in Software Design)
  3. Softverska struktura i arhitektura (eng. Software Structure and Architecture)
  4. Analiza kvaliteta i evaluacija softverskog dizajna (eng. Software Design Quality Analysis and Evaluation)
  5. Notacija softverskog dizajna (eng. Software Design Notations)
  6. Strategije i metode softverkog dizajna (eng. Software Design Strategies and Methods)


Osnove softverskog dizajna (Software Design Fundamentals)

Generalni koncepti dizajna (General Design Concepts)

Softver nije jedino polje koje uključuje dizajn. Posmatramo dizajn kao formu za rešavanje problema, gde postoje izvesna ograničenja i limiti. U tom smislu govorimo i o generalnim konceptima dizajna, ciljevima, ograničenjim, alternativama i rešenjima.

Kontekst softverskog dizajna (Context of Software Design)

Za razumevanje uloge softverskog dizajna važno je razumeti kontekst u kome se   primenjuje, životni ciklus softverskog inženjerstva. U tom smislu važno je razumeti glavne karakteristike analize zahteva, softverske konstrukcije i softverskog testiranja prema softverskom dizajnu.


Proces softverskog dizajna (Software Design Process)

Softverski dizajn se generalno sastoji iz procesa u dva koraka:

  1. Arhitekturalni dizajn (Architectural design)
    • opisuje kako je softver dekomponovan i organizovan u komponente  (software architecture)
  1. Detaljan dizajn (Detailed design)
    • opisuje specifično ponašanje ovih komponenti
    • izlaz iz ovog procesa je skup modela i artifakata (termin artifakt se koristi često u značenju softvera i softverski vezanih proizvoda) koji odslikavaju osnovne odluke koje su donete

Enabling Techniques

Enabling Techniques ili principi softverskog dizajna, odslikavaju fundamente različitih pristupa i koncepata software design-a. Enabling Techniques su sledeće:

  1. Apstrakcija (Abstraction)
    Proces zanemarivanja informacija da bi se stvari koje su različite mogle tretirati kao da su iste. U kontekstu softverskog dizajna, dva ključna apstraktna mehanizma su parametarizacija i specifikacija. Apstrakcija po specifikaciji odrazumeva tri vrste apstrakcije: proceduralna apstrakcija, apstrakcija podataka i kontrolna apstrakcija.
  2. Sprezanje i spajanje (Coupling and Cohesion)
    Coupling (sprezanje) se definiše kao jačina relacija između modula. Cohesion (spajanje) definiše kako su povezani elementi koji čine modul.
  3. Dekompozicija i modularizacija (Decomposition and modularization)
    Predstavlja dekompoziciju i modularizacija velikog softvera u značajan broj manjih nezavisnih celina. Uobičajeno sa izvodi sa ciljem smeštanja različitih funkcionalnosti ili odgovornosti u različite komponente.
  4. Enkapsulacija/skrivanje informacija (Encapsulation/Information hiding)
    Skrivanje informacija znači grupisanje i pakovanje elemenata i internih detalja apstrakcije i pravljenjem ovih detalja nedostupnim.
  5. Odvajanje interfejsa i implementacije
    Odvajanje interface-a i implementacije znači definisanje komponente preko public interface-a (koji vide klijenti), odvojeno od detalja realizacije komponente.
  6. Sufficiency, completeness and primitiveness
    Ostvarenjem dovoljnosti (sufficiency), potpunosti (completeness) i jednostavnosti (primitiveness) znači osiguranje da softverska komponenta obuhvata sve značajne karaktersitike apstrakcije i ništa više.


Ključna pitanja softverskog dizajna (Key Issues in Software Design)

Postoji nekoliko ključnih tema koje treba uzeti u obzir prilikom dizajniranja softvera. Jedna od njih je obezbeđivanje kvaliteta (performance). Druga važna stvar je kako dekomponovati, organizovati i pakovati softverske komponenete. Svaki dizajnerski pristup mora uzeti u obzir ove fundamente na jedan ili drugi način.

Nasuprot tome, druge teme se bave nekim aspektima ponašanja softvera koje nije u domenu aplikacija. Takve teme koje obično daju poprečni presek funkcionalnosti sistema, tretiraju se kao aspekti (teže da ne budu jedinica softverske funkcionalne dekompozicije, već osobina koja utiče na performance ili semantiku komponenti na sistematičan način). Neke od ovih ključnih tema su date u nastavku.
 
Konkurentnost (Concurrency)

Konkurentnost, 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)
 
Bavi se pitanjima 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, kako se primenjuje srednji sloj kod heterogenih softvera i dr.

Upravljanje greškama i izuzecima (Error and Exception Handling)

Kako uraditi prevenciju i toleranciju nedostataka i grešaka i obradu izuzetaka.

Interakcija i Prezentacija (Interaction and Presentation)
 
Kako strukturirati i organizovati interakciju sa korisnikom i prezentaciju informacije. Ova podoblast se ne bavi detaljima korisničkog interfejsa, što je tema za user interface design (deo Software Ergonomics).

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


Softverska struktura i arhitektura (Software Structure and Architecture)

Softverska arhitektura je opis podsistema i komponenata softverskog sistema i relacija između njih. Softverska arhitektura definiše internu strukturu rezultujućeg softvera, način na koji je konstruisan i organizovan. U poslednjoj deceniji softverska arhitektura počinje da se razvija kao šira disciplina, uključujući proučavanje softverske strukture i arhitekture na više opšti način. Kao rezultat toga raste i broj ideja o softverskom dizajnu na različitim nivoima apstrakcije. Neki od ovih koncepata mogu biti korisni tokom arhitektekturalnog dizajna (npr. arhitekturalni stil) datog softvera, kao i tokom detaljnog dizajna (npr. lower-level design patterns). Ovi koncepti mogu biti korisni i kod dizajna generičkih sistema, vodeći do dizajna familija programa (product lines). Ovi koncepti mogu da se shvate i kao pokušaji da se opišu i ponovo iskoriste znanja generičkog dizajna.

Architectural Structures and Viewpoints

Različiti high-level aspekti softverskog dizajna mogu se i moraju opisati i dokumentovati (ovi aspekti se često nazivaju pogledi). Pogled predstavlja parcijalni aspekt softverske arhitekture koji pokazuje specifičnu osobinu softverskog sistema. Ovi odvojeni pogledi pripadaju odvojenim temama pridruženim softverskom dizajnu, npr: 

  • logical view (zadovoljava funkcionalne zahteve)
  • process view (pitanja konkurentnosti)
  • physical view (pitanja distribucije)
  • development view (kako je dizajn razbijen u implementacione jedinice)

Softverski dizajn je multi-aspektni artifakt nastao kao rezultat dizajn procesa i generalno sastavljen iz relativno nezavisnih i ortogonalnih pogleda.

Architectural Styles (macroarchitectural patterns)

Arhitektonski stil je skup ograničenja na arhitekturi koji definišu skup ili familiju arhitektura koje ih zadovoljavaju. Arhitektonski stil se stoga može posmatrati kao meta model koji može obezbediti high-level organizaciju softvera (makroarhitektura). Kao što zgrade odražavaju određeni arhitektonski stil, tako postoje i stilovi arhitekture softvera.

Različiti autori su identifikovali više vrsta glavnih arhitektonskih stilova:

  • General structure (npr. layers, pipes and filters, blackboard)
  • Distributed systems (npr. client-server, threetiers, broker)
  • Interactive systems (npr. Model-View-Controller, Presentation-Abstraction- Control)
  • Adaptable systems (npr., micro-kernel, reflection)
  • Others (npr., batch, interpreters, process control, rule-based)

Design Patterns (microarchitectural patterns)

Najkraće rečeno, patern je uobičajeno rešenje za uobičajen problem u datom kontekstu. Dok arhitekturalni stilovi mogu biti posmatrani kao paternom opisana high-level organizacija softvera (njihova makroarhitektura), ostali dizajn paterni mogu biti korišćeni da opišu detalje na nižem, lokalnom nivou (njihova mikroarhitektura). Tu spadaju:

  • Creational patterns (npr. builder, factory, prototype, singleton)
  • Structural patterns (npr. adapter, bridge, composite, decorator, flyweight, proxy)
  • Behavioral patterns (npr. command, interpreter, iterator, mediator, memento, observer, state, strategy, template, visitor)

Familija Programa

Jedan od načina da se omogući ponovna upotreba softverskog dizajna i komponenata je da se dizajnira familija softvera, koja se često naziva softverska proizvodna linija. Ovo može da se ostvari pomoću identifikovanja unificiranosti između članica takvih familija i korišćenjem reusabilnih i prilagodjenih komponenata odgovornih za promenjivost između članica familije.

 

 

 

 

Reference:

  • L. Bass, P. Clements, and R. Kazman, Software Architecture in Practice, second ed., Addison-Wesley, 2003.
  • G. Booch, J. Rumbaugh, and I. Jacobson, The Unified Modeling Language User Guide, Addison-Wesley, 1999.
  • J. Bosch, Design & Use of Software Architectures: Adopting and Evolving a Product-Line Approach, first ed., ACM Press, 2000.
  • D. Budgen, Software Design, second ed., Addison- Wesley, 2004.
  • M. Dorfman and R.H. Thayer, eds., Software Engineering (Vol. 1 & Vol. 2), IEEE Computer Society Press, 2002.
  • P. Freeman and A.I. Wasserman, Tutorial on Software Design Techniques, fourth ed., IEEE Computer Society Press, 1983.
  • IEEE Std 1028-1997 (R2002), IEEE Standard for Software Reviews, IEEE, 1997.
  • IEEE Std 1471-2000, IEEE Recommended Practice for Architectural Description of Software Intensive Systems, Architecture Working Group of the Software Engineering Standards Committee, 2000.
  • IEEE/EIA 12207.0-1996//ISO/IEC12207:1995, Industry Implementation of Int. Std. ISO/IEC 12207:95, Standard for Information Technology-Software Life Cycle Processes, IEEE, 1996.
  • ISO/IEC 9126-1:2001, Software Engineering Product Quality, Part 1: Quality Model, ISO and IEC, 2001.
  • ISO/IEC 15026-1998, Information Technology , System and Software Integrity Levels, ISO and IEC, 1998.

 


Smatrate da je ova lekcija korisna?  Preporučite je. Broj preporuka:1


Molimo Vas unesite svoje podatke i dobićete pristup besplatnim lekcijama.

Ime: 
Prezime: 
Email: