Softwarové inženýrství
![ikona](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Broom_icon.svg/48px-Broom_icon.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Preferences-system.svg/16px-Preferences-system.svg.png)
Softwarové inženýrství je činnost zahrnující inženýrství, informatiku a management, jejímž cílem je návrh, tvorba a údržba počítačových programů.
Jako tradiční inženýrské disciplíny i softwarové inženýrství řeší především cenu a spolehlivost. Například moderní letadla mají miliony součástek (raketoplán dokonce kolem deseti milionů) a software pro jejich obsluhu může mít miliony řádků zdrojového kódu.
Známými průkopníky softwarového inženýrství byli především Fred Brooks a C. A. R. Hoare.
Pojem softwarové inženýrství není nijak jednotný, může mít víc významů:
- Obecný termín, který znamená mnoho činností, dříve označovaných jako programování.
- Obecný termín, který znamená praktickou činnost s počítači, na rozdíl od teoretického přístupu, který se nazývá informatika.
- Argument pro jisté přístupy k programování se zaměřením na inženýrskou profesi, nikoli jako pohled na programování jako druh umění, řemeslné zručnosti a kultury. Tento termín se používá zvláště ve spojitosti s různými programátorskými metodologiemi a při zavádění pravidel.
- Terminologie užívaná v softwarovém inženýrství (vč. pojmu softwarové inženýrství) je definovaná jako standard IEEE 610.12.[1]
Definice: Softwarové inženýrství je disciplína zabývající se praktickými problémy vývoje rozsáhlých softwarových systémů.
Vývoj softwarového systému zahrnuje celou řadu faktorů nutných k úspěšnému vytvoření požadovaného produktu:
- technické aspekty zahrnující počítačovou infrastrukturu
- netechnické aspekty jako organizační struktura organizace vyvíjející daný produkt a její ekonomické možnosti
- znalostmi z oblasti specifikace požadavků na softwarový produkt, jeho analýzy, návrhu, implementace, testování a na konec také instalace u zákazníka;
- lidské zdroje schopné aplikovat výše uvedené znalosti a uplatnit je tak při realizaci softwarového systému
- řízení spjaté s vývojem samotného produktu umožňující efektivní (?)[zdroj?!] ??[2]
Historie
Softwarové inženýrství je jako obor velmi mladé a ve srovnání s ostatními inženýrskými odvětvími je úplným nováčkem. Kořeny softwarového inženýrství jsou jistě mladší než celá řada jeho uživatelů. Právě proto tento obor zažívá bleskový rozvoj a prochází silnými proměnami. To je také důvodem, proč mnohé části softwarového inženýrství nejsou exaktně stanoveny a utvářejí se „za pochodu“, tak jak vývoj reaguje na měnící se požadavky okolního světa. Některé body softwarového inženýrství jsou považovány za neměnné, jiné lze přirovnat spíše k vysněnému ideálu.
Historii softwarového inženýrství lze rozdělit do několika základních etap.
- Etapa do poloviny 60. let minulého století
- Tzv. průkopnická etapa. Programátoři té doby vytvářeli programy šité na míru danému počítači či architektuře. Vytvářené programy jsou většinou neudržované a neměnné, často jsou vypáleny na trvalé paměti.
- Přelom 60. a 70. let
- Začíná se klubat obor softwarové inženýrství. Počátek vzniku pojmů: „návrh shora dolů“, „modularita“ atd. Začíná být chápán význam správně složeného týmu.
- 70. léta
- Softwarové inženýrství vzniká jako obor. Tvorba programů začíná být častějším jevem, hardware se stává dostupnější. Začínají se vytvářet první aplikace umožňující interakci s uživatelem. Začínají se prodávat knihovny a části programů jako doplňky, namísto programů šitých na míru. Spolu s těmito věcmi také vystupují první větší problémy – problém s dodávkami, nekonečné projekty – vývoj softwaru není řízen a nejsou žádné zavedené postupy. V letech 1967–1977 se začínají využívat mnohé ještě dnes používané techniky, specifikace, návrh, architektura, testování, zajištění kvality, modely životního cyklu atd.
- 80. léta
- Zároveň s rozvojem softwaru se rozvíjí i softwarové inženýrství. V této době dochází k nástupu softwarově-inženýrských metodik. Nastupuje objektově orientované přístupy, objektivně orientovaná analýza a objektivně orientovaný návrh. Později i standardizace, snaha o interoperabilitu a vzájemnou spolupráci softwarových produktů, ústup jednorázových řešení, zdokonalování komponentových technologii, architektur a modelů.
- 1997
- Softwarové inženýrství uznáno jako obor s certifikátem v USA.
Softwarová krize
Počátky vzniku softwarového inženýrství provázela krize v šedesátých letech minulého století, díky níž pravděpodobně tento obor vznikl. Charakteristickými znaky softwarové krize bylo neúnosné prodlužování a prodražování projektů, nízká kvalita programů, nesnadnost či nemožnost údržby a inovace, špatná produktivita práce programátorů, neefektivita vývoje, nejistota výsledku a řada dalších.
Příčin této krize bylo hned několik:
- Špatná komunikace - mezi osobami tvořícími software a také mezi vývojáři a zákazníkem.
- Nesprávný přístup - Požadovaný software vyhotovoval a schvaloval vývojář a nespokojený zákazník byl označen za osobu, která tomu nerozumí.
- Špatné plánování - celého projektu. Vývojáři předpokládali, že to nějak stihnou.
- Nesprávné odhady - trvání vývoje, nákladů, rozsahu.
- Nízká produktivita práce - Programátoři se zabývali vším možným, jen ne dosti tím, čím měli.
- Neznalost základních pravidel - Např. Brooksův zákon z roku 1975: „Přidání řešitelské kapacity u zpožděného softwarového projektu způsobí jeho další zpoždění.“[3]
- Podcenění hrozeb a rizik - Málo byly sledovány hrozby a místo snadného předcházení přerůstaly ve velké problémy.
- Nezvládnuté technologie - Falešná představa, že po zavedení nové technologie se potíže samy vyřeší.
Rozdíly oproti ostatním disciplínám
- Matematika
- Programy mají matematicky odvoditelné vlastnosti, ale spočítání některých [kdo?] parametrů by bylo v praxi neproveditelné.[zdroj?] Matematika používá exaktní metody a formální postupy, zatímco programování zaujímá spíše pragmatické postupy.[zdroj?] Teoretik Edsger Dijkstra však tvrdil, že programování je matematická disciplína.[zdroj?]
- Inženýrství
- Softwarové inženýrství je mnohými [kým?] považováno za inženýrskou disciplínu, protože používá pragmatické postupy očekávané od inženýra. Nicméně na rozdíl od inženýrů nepracují programátoři pouze s modely výrobku a návrhem, ale mohou nové programy okamžitě využít, což například strojní inženýr nemůže, ten musí s testy čekat na vyrobení součástky jiným oddělením. David Parnas argumentoval, že softwarové inženýrství je inženýrství.[zdroj?]
- Tovární výroba
- Programy se vyrábějí určitou posloupností kroků, podobně jako tovární výroba. Nejedná se o pásovou výrobu, kdy například jeden programátor přidá do aplikace tlačítko, další programátor napíše na tlačítko popisek atd. Podobnost s tovární výrobou vedla k návrhu některých metodologií, které se snaží zrychlit a zkvalitnit výrobu programů.[zdroj?]
- Management
- Komerční i větší nekomerční softwarové projekty běžně využívají management pro tvorbu rozpočtu, plánování času, najímání a řízení lidských i dalších zdrojů (počítačů, kanceláří…), což patří do zodpovědnosti manažera. Programátoři a jim příbuzní odborníci si však toto často musí / umí dělat i sami, a přitom na rozdíl od managementu ještě vytvářejí produkty. (podle přístupu, že kdo to dělá a potřebuje to, ať si to i sám řídí: nejtěsněji k věci)
- Umění
- Programátoři provádějí mnoho tvůrčích činností, podobně jako spisovatelé nebo malíři. I dobře navržené grafické uživatelské rozhraní programů je možné považovat za esteticky hodnotné. Navíc pojem „dobrý program“ je velmi subjektivní, a je často hodnocen více citem, než měřením. I pojmenování tříd a proměnných se řídí vkusem. Donald Ervin Knuth často zdůrazňuje, že programování je umění, jeho nejslavnější dílo se jmenuje The Art of Computer Programming (kde slovo Art znamená umění).
Odkazy
Reference
- ↑ (anglicky) IEEE standard glossary of software engineering terminology, norma IEEE 610.12-1990
- ↑ Zdroj definice: Prof. Ing. Ivo Vondrák, CSc. – VŠB – Technická univerzita Ostrava
- ↑ (anglicky) BROOKS, Frederick Phillips, ml. The Mythical Man Month: Essays on Software Engineering. [s.l.]: Addison-Wesley, 1995. Dostupné online. ISBN 0-201-83595-9. „Adding manpower to a late software project makes it later.“
Externí odkazy
Obrázky, zvuky či videa k tématu softwarové inženýrství na Wikimedia Commons
- Softwarové inženýrství v České terminologické databázi knihovnictví a informační vědy (TDKIV)
Proces vývoje softwaru a softwarové inženýrství | |
---|---|
aktivity a kroky: produkt | produkt owner • analýza požadavků • FURPS • funkční specifikace • architektura • design • implementace • testování • akceptace • nasazení • podpora • údržba |
metodiky | agilní • cleanroom • iterativní • Rapid Application Development • Rational Unified Process (RUP) • spirální • vodopádové • extrémní programování (XP) • lean • scrum • V-Model • programování řízené testy (TDD) |
podporující disciplíny | konfigurační management • dokumentace • quality assurance (QA) • projektový management • user experience design |
nástroje | profiler • verzování • překladač • debugger • GUI designer • editor zdrojového kódu • vývojové prostředí (IDE) |