Softwarové inženýrství

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

  1. (anglicky) IEEE standard glossary of software engineering terminology, norma IEEE 610.12-1990
  2. Zdroj definice: Prof. Ing. Ivo Vondrák, CSc. – VŠB – Technická univerzita Ostrava
  3. (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