Softwarový design - Software design

Softwarový design je proces, kterým agent vytvoří specifikaci softwarového artefaktu určeného k dosažení cílů pomocí sady primitivních komponent a podléhá omezením . Softwarový design může odkazovat na „veškerou činnost spojenou s konceptualizací, rámováním, implementací, uvedením do provozu a nakonec úpravou komplexních systémů“ nebo „činnost následující po specifikaci požadavků a před programováním jako ... [v] stylizovaném procesu softwarového inženýrství. "

Softwarový design obvykle zahrnuje řešení problémů a plánování softwarového řešení. To zahrnuje jak návrh komponentů a algoritmů nízké úrovně, tak návrh architektury na vysoké úrovni .

Přehled

Softwarový design je proces představování a definování softwarových řešení jedné nebo více sad problémů. Jednou z hlavních součástí návrhu softwaru je analýza požadavků na software (SRA). SRA je součástí procesu vývoje softwaru, který uvádí specifikace používané v softwarovém inženýrství . Pokud je software „poloautomatizovaný“ nebo zaměřený na uživatele , může návrh softwaru zahrnovat návrh uživatelské zkušenosti, který poskytne scénář, který pomůže určit tyto specifikace. Pokud je software zcela automatizovaný (což znamená žádný uživatel nebo uživatelské rozhraní ), návrh softwaru může být stejně jednoduchý jako vývojový diagram nebo text popisující plánovanou posloupnost událostí. Existují také polostandardní metody, jako je Unified Modeling Language a Fundamentální koncepce modelování . V každém případě je určitá dokumentace plánu obvykle produktem návrhu. Kromě toho může být návrh softwaru nezávislý na platformě nebo platformě , v závislosti na dostupnosti technologie použité pro návrh.

Hlavní rozdíl mezi softwarovou analýzou a návrhem spočívá v tom, že výstup softwarové analýzy se skládá z menších problémů, které je třeba vyřešit. Analýza by navíc neměla být navržena velmi odlišně mezi různými členy týmu nebo skupinami. Naproti tomu se design zaměřuje na schopnosti, a proto může a bude existovat více návrhů pro stejný problém. V závislosti na prostředí se návrh často liší, ať už je vytvořen ze spolehlivých rámců nebo implementován s vhodnými návrhovými vzory . Mezi příklady návrhu patří operační systémy, webové stránky, mobilní zařízení nebo dokonce nové paradigma cloudových počítačů.

Softwarový design je proces i model. Proces návrhu je posloupnost kroků, která umožňuje konstruktérovi popsat všechny aspekty softwaru pro stavbu. Kreativní dovednosti, zkušenosti z minulosti, smysl pro to, co dělá „dobrý“ software, a celkový závazek ke kvalitě jsou příklady kritických faktorů úspěchu pro kompetentní design. Je však důležité poznamenat, že proces návrhu není vždy přímočarý postup; designový model lze přirovnat k plánům architekta na dům. Začíná tím, že představuje souhrn věcí, které mají být postaveny (např. Trojrozměrné ztvárnění domu); pomalu se věc upřesňuje, aby poskytla vodítko pro konstrukci každého detailu (např. instalatérské ležení). Podobně model návrhu vytvořený pro software poskytuje různé pohledy na počítačový software. Základní principy návrhu umožňují softwarovému inženýrovi procházet procesem návrhu. Davis navrhuje sadu zásad pro návrh softwaru, které byly upraveny a rozšířeny v následujícím seznamu:

  • Proces návrhu by neměl trpět „tunelovým viděním“. Dobrý designér by měl zvážit alternativní přístupy, každý by měl posoudit na základě požadavků na problém, dostupných zdrojů k provedení práce.
  • Návrh by měl být navázán na model analýzy. Protože jeden prvek modelu návrhu lze často vysledovat zpět k více požadavkům, je nutné mít prostředky pro sledování toho, jak byly požadavky modelu návrhu splněny.
  • Konstrukce by neměla znovu objevit kolo. Systémy jsou konstruovány pomocí sady návrhových vzorů, s mnoha z nich se pravděpodobně již setkalo. Tyto vzorce by měly být vždy voleny jako alternativa k reinvenci. Čas je krátký a zdroje omezené; návrhový čas by měl být investován do reprezentace (skutečně nových) myšlenek integrací již existujících vzorů (je -li to relevantní).
  • Návrh by měl „minimalizovat intelektuální vzdálenost“ mezi softwarem a problémem, jaký existuje v reálném světě. To znamená, že struktura návrhu softwaru by měla, kdykoli je to možné, napodobovat strukturu problémové domény.
  • Návrh by měl vykazovat jednotnost a integraci. Design je jednotný, pokud se zdá být zcela koherentní. Aby bylo dosaženo tohoto výsledku, měla by být pro návrhářský tým definována pravidla stylu a formátu před zahájením projekčních prací. Design je integrován, pokud je věnována pozornost definování rozhraní mezi komponentami návrhu.
  • Design by měl být strukturován tak, aby vyhovoval změnám. Koncepty návrhu diskutované v další části umožňují návrh k dosažení tohoto principu.
  • Design by měl být strukturován tak, aby jemně degradoval, i když dojde k odchylným datům, událostem nebo provozním podmínkám. Dobře navržený software by nikdy neměl „bombardovat“; měl by být navržen tak, aby vyhovoval neobvyklým okolnostem, a pokud musí ukončit zpracování, měl by tak učinit elegantním způsobem.
  • Design není kódování, kódování není design. I když jsou pro komponenty programu vytvořeny podrobné procedurální návrhy, úroveň abstrakce modelu návrhu je vyšší než zdrojový kód. Jediná rozhodnutí o návrhu přijatá na úrovni kódování by měla řešit malé detaily implementace, které umožňují kódování procedurálního návrhu.
  • Kvalita návrhu by měla být posuzována při vytváření, nikoli po faktu. K dispozici je celá řada návrhových koncepcí a návrhových opatření, která pomáhají konstruktérovi při posuzování kvality v celém procesu vývoje.
  • Návrh by měl být zkontrolován, aby se minimalizovaly koncepční (sémantické) chyby. Někdy je tendence soustředit se na drobnosti při revizi návrhu, chybí les pro stromy. Tým návrhářů by měl zajistit, aby byly vyřešeny hlavní koncepční prvky návrhu (opomenutí, nejednoznačnost, nekonzistence), než se začne starat o syntaxi modelu návrhu.

Koncepty designu

Koncepty návrhu poskytují návrháři softwaru základ, ze kterého lze aplikovat sofistikovanější metody. Vyvinula se řada základních koncepcí designu. Jsou následující:

  1. Abstrakce - Abstrakce je proces nebo výsledek zobecnění snížením informačního obsahu konceptu nebo pozorovatelného jevu, obvykle za účelem uchování pouze informací, které jsou relevantní pro konkrétní účel. Jedná se o akt zastupování základních funkcí bez zahrnutí podrobností na pozadí nebo vysvětlení.
  2. Upřesnění - je to proces zpracování. Hierarchie se vyvíjí rozkládáním makroskopického prohlášení o funkci krok za krokem, dokud není dosaženo příkazů programovacího jazyka. V každém kroku je jedna nebo několik instrukcí daného programu rozloženo na podrobnější instrukce. Abstrakce a zjemnění jsou vzájemně se doplňující pojmy.
  3. Modularita - Softwarová architektura je rozdělena na komponenty nazývané moduly.
  4. Softwarová architektura - odkazuje na celkovou strukturu softwaru a způsoby, kterými tato struktura poskytuje koncepční integritu systému. Dobrá softwarová architektura přinese dobrou návratnost investic s ohledem na požadovaný výsledek projektu, např. Z hlediska výkonu, kvality, harmonogramu a nákladů.
  5. Hierarchie řízení - Struktura programu, která představuje organizaci součásti programu a implikuje hierarchii řízení.
  6. Strukturální dělení - Strukturu programu lze rozdělit na horizontální i vertikální. Horizontální oddíly definují samostatné větve modulární hierarchie pro každou hlavní funkci programu. Vertikální dělení naznačuje, že ovládání a práce by měly být distribuovány shora dolů ve struktuře programu.
  7. Datová struktura - Je to vyjádření logického vztahu mezi jednotlivými prvky dat.
  8. Softwarový postup - zaměřuje se na zpracování každého modulu jednotlivě.
  9. Skrývání informací - Moduly by měly být specifikovány a navrženy tak, aby informace obsažené v modulu byly nedostupné pro ostatní moduly, které takové informace nepotřebují.

Grady Booch ve svém objektovém modelu uvádí jako základní principy návrhu softwaru abstrakci, zapouzdření, modularizaci a hierarchii. K těmto čtyřem základním principům se někdy používá zkratka PHAME (Principles of Hierarchy, Abstraction, Modularisation, and Encapsulation).

Aspekty návrhu

Při návrhu softwaru je třeba vzít v úvahu mnoho aspektů. Důležitost každé úvahy by měla odrážet cíle a očekávání, jejichž splnění je software vytvářen. Některé z těchto aspektů jsou:

  • Kompatibilita - Software je schopen pracovat s jinými produkty, které jsou navrženy pro interoperabilitu s jiným produktem. Například část softwaru může být zpětně kompatibilní se starší verzí.
  • Rozšiřitelnost - K softwaru lze přidat nové funkce bez větších změn základní architektury.
  • Modularita - výsledný software obsahuje dobře definované, nezávislé komponenty, které vedou k lepší údržbě. Komponenty pak mohly být implementovány a testovány izolovaně před jejich integrací do požadovaného softwarového systému. To umožňuje dělbu práce v projektu vývoje softwaru.
  • Odolnost proti chybám - Software je odolný a dokáže se zotavit ze selhání součásti.
  • Údržba - Míra toho, jak snadno lze provádět opravy chyb nebo funkční úpravy. Vysoká udržovatelnost může být produktem modularity a rozšiřitelnosti.
  • Spolehlivost ( trvanlivost softwaru ) - Software je schopen vykonávat požadovanou funkci za stanovených podmínek po specifikovanou dobu.
  • Opakovaná použitelnost - schopnost používat některé nebo všechny aspekty dříve existujícího softwaru v jiných projektech s malými nebo žádnými úpravami.
  • Robustnost - Software je schopen pracovat pod tlakem nebo tolerovat nepředvídatelné nebo neplatné zadání. Může být například navržen s odolností vůči podmínkám nízké paměti.
  • Zabezpečení - Software je schopen odolat a odolat nepřátelským činům a vlivům.
  • Použitelnost - Uživatelské rozhraní softwarumusí být použitelné pro jeho cílového uživatele/publikum. Výchozí hodnoty parametrů musí být zvoleny tak, aby byly dobrou volbou pro většinu uživatelů.
  • Výkon - Software provádí své úkoly v časovém rámci, který je pro uživatele přijatelný a nevyžaduje příliš mnoho paměti.
  • Přenositelnost - Software by měl být použitelný v řadě různých podmínek a prostředí.
  • Škálovatelnost - Software se dobře přizpůsobuje zvyšování dat nebo přidaných funkcí nebo počtu uživatelů.

Modelovací jazyk

Modelovací jazyk je jakýkoliv umělý jazyk, který může být použit k vyjádření informace, znalosti nebo systémy v konstrukci, která je definována konzistentním souborem pravidel. Tato pravidla se používají pro interpretaci komponent v rámci struktury. Modelovací jazyk může být grafický nebo textový. Příklady grafických modelovacích jazyků pro návrh softwaru jsou:

Designové vzory

Softwarový designér nebo architekt může identifikovat problém s designem, který byl v minulosti navštíven a možná dokonce vyřešen ostatními. Šablona nebo vzor popisující řešení běžného problému se nazývá návrhový vzor . Opětovné použití takových vzorů může pomoci urychlit proces vývoje softwaru.

Technika

Obtížnost používat termín „design“ ve vztahu k softwaru je, že v některých smyslech, zdrojový kód programu je návrh na program, který produkuje. Pokud je to pravda, „softwarový design“ odkazuje na návrh designu. Edsger W. Dijkstra označil toto vrstvení sémantických úrovní jako „radikální novinku“ počítačového programování a Donald Knuth využil své zkušenosti s psaním TeXu k popisu marnosti pokusů navrhnout program před jeho implementací:

T E X by bylo úplným selháním, kdybych jej pouze specifikoval a plně se nepodílel na jeho počáteční implementaci. Proces implementace mě neustále vedl k neočekávaným otázkám a k novým poznatkům o tom, jak by bylo možné zlepšit původní specifikace.

Používání

Dokumentaci k návrhu softwaru lze přezkoumat nebo předložit, aby bylo možné upravit omezení, specifikace a dokonce i požadavky před počítačovým programováním . K přepracování může dojít po kontrole naprogramované simulace nebo prototypu . Je možné navrhnout software v procesu programování bez analýzy plánu nebo požadavku, ale u složitějších projektů by to nebylo považováno za proveditelné. Oddělený design před programováním umožňuje multidisciplinárním návrhářům a odborníkům na předmět (MSP) spolupracovat s vysoce kvalifikovanými programátory na softwaru, který je užitečný i technicky dobrý.

Viz také

Reference

^ Roger S. Pressman (2001). Softwarové inženýrství: přístup odborníka . McGraw-Hill. ISBN 0-07-365578-3.