A szoftverfejlesztés mérnöki megközelítést alkalmaz. A gyakorló szakember, a szoftverfejlesztő a mérnöki tervezési folyamatot alkalmazza szoftverek fejlesztésére.

A programozó és kódoló kifejezések átfedik a szoftverfejlesztő fogalmát, de ezek csak a tipikus szoftvermérnöki munkaterhelés építési aspektusát jelzik.

A szoftverfejlesztő alkalmazza a szoftverfejlesztés folyamatát, amely magában foglalja a szoftverrendszerek meghatározását, megvalósítását, tesztelését, kezelését és karbantartását, valamint magának a szoftverfejlesztés folyamatának fejlesztését is.

Története Az 1960-as évektől kezdve a szoftverfejlesztést külön mérnöki szakterületként ismerték el.

A szoftverfejlesztés fejlődését küzdelemnek tekintették. Nehéz volt lépést tartani a hardverrel, ami sok problémát okoz a szoftverfejlesztőknek. A problémák között szerepelt olyan szoftver, amely túllépte a költségvetést, túllépte a határidőt, kiterjedt hibakeresést és karbantartást igényel, és sikertelenül elégítette ki a fogyasztók igényeit, vagy nem is készült el.

1968-ban a NATO megtartotta az első Szoftverfejlesztési konferenciát, ahol a szoftverekkel kapcsolatos problémák kerültek előtérbe: irányelveket és legjobb gyakorlatokat dolgoztak ki a szoftverfejlesztéshez.

A szoftverfejlesztő kifejezés eredetét különböző forrásokhoz kötik. A kifejezés először megjelent az "Computers and Automation" 1965. júniusi számában, egy vállalatok által kínált szolgáltatások listájában, és formálisan többek között az ACM elnökének, Anthony A. Oettinger, 1966. augusztusi levelében is felbukkant az ACM (Volume 9, szám 8) "levél az ACM tagjaihoz" című folyóiratban. Ehhez társul egy 1968-as NATO-konferencia címe is, amelyet Friedrich L. Bauer professzor tartott. Margaret Hamilton leírta a "szoftverfejlesztés" fegyelmét az Apollo-küldetések során, hogy legitimitást adjon annak, amit csinálnak. Akkoriban „ szoftverválságnak ” számítottak. A 40. Nemzetközi Szoftvermérnökségi Konferencia (ICSE 2018) Frederick Brooks és Margaret Hamilton plenáris ülésein ünnepli a „Szoftvermérnökség” 50. évfordulóját.

1984-ben, a Software Engineering Institute (SEI) szövetségi finanszírozású kutatási és fejlesztési központként jött létre, amelynek központja a Carnegie Mellon Egyetem campusán található, Pittsburgh-ben (Pennsylvania, Egyesült Államok). Watts Humphrey megalapította a SEI Software Process Programot, amelynek célja a szoftvermérnökségii folyamat megértése és menedzselése.. A bevezetett Process Maturity Levels lett a Capability Maturity Model Integration for Development(CMMI-DEV), amely meghatározta, hogy az Egyesült Államok kormánya hogyan értékeli a szoftverfejlesztő csapat képességeit.

A szoftverfejlesztési területen a modern, általánosan elfogadott legjobb gyakorlatokat az ISO/IEC JTC 1/SC 7 alkalmazottként gyűjtötte össze, és a Szoftverfejlesztési Tudástár (SWEBOK) néven publikálták. A szoftverfejlesztést az egyik fő számítástechnikai tudományágnak tekintik.

Terminológia

Meghatározás A szoftverfejlesztés figyelemre méltó definíciói a következők:

"A tudományos és technológiai ismeretek, módszerek és tapasztalatok szisztematikus alkalmazása szoftverek tervezésére, megvalósítására, tesztelésére és dokumentálására" – The Bureau of Labor Statistics – IEEE Systems and Software Engineering – VocabularySystems and software engineering – Vocabulary, ISO/IEC/IEEE std 24765:2010(E), 2010. "Szisztematikus, fegyelmezett, számszerűsíthető megközelítés alkalmazása a szoftver fejlesztésére, üzemeltetésére és karbantartására" – IEEE Standard Glossary of Software Engineering TerminologyIEEE Standard Glossary of Software Engineering Terminology, IEEE std 610.12-1990, 1990. "egy mérnöki tudományág, amely a szoftvergyártás minden aspektusával foglalkozik" – Ian Sommerville „megbízható és valódi gépeken hatékonyan működő szoftverek gazdaságos beszerzése érdekében megalapozott tervezési elvek kialakítása és alkalmazása” – Fritz Bauer "a számítástechnika egyik ága, amely összetett számítógépes programok tervezésével, megvalósításával és karbantartásával foglalkozik" – Merriam-Webster " ” nemcsak a kód írását foglalja magában, hanem az összes olyan eszközt és folyamatot, amelyet a szervezet a kód felépítésére és karbantartására használ. [...] A szoftverfejlesztést úgy is felfoghatjuk, mint „idővel integrált programozást”. ' – Szoftverfejlesztés a Google-nál

A kifejezést kevésbé formálisan is használták:

mint informális kortárs kifejezés a tevékenységek széles körére, amelyeket korábban számítógépes programozásnak és rendszerelemzésnek neveztek;: "For some, software engineering is just a glorified name for programming. If you are a programmer, you might put 'software engineer' on your business card—never 'programmer' though." mint a számítógép-programozás gyakorlatának minden aspektusára vonatkozó tág fogalom, szemben a számítógép-programozás elméletével, amelyet formálisan a számítástechnika egyik altudományaként tanulmányoznak;Mills, Harlan D., J. R. Newman, and C. B. Engle, Jr., "An Undergraduate Curriculum in Software Engineering," in ,p. 26: "As a practical matter, we regard software engineering as the necessary preparation for the practicing, software development and maintenance professional. The Computer Scientist is preparing for further theoretical studies..." mint a számítógépes programozás egy sajátos megközelítésének támogatását testesítő kifejezés, amely azt sürgeti, hogy mérnöki tudományágként kezeljék, nem pedig művészetként vagy mesterségként, és támogatja az ajánlott gyakorlatok kodifikációját .

Etimológia Margaret Hamilton a "szoftverfejlesztő" kifejezést népszerűsítette munkája során az Apollo program-ban. A "mérnök" kifejezést azért használták, hogy elismerjék, hogy a munkát ugyanolyan komolyan kell venni, mint más hozzájárulásokat a technológia fejlődéséhez. Hamilton részletezi a kifejezés használatát:Amikor először kitaláltam a kifejezést, még senki sem hallott róla, legalábbis a mi világunkban. Ez egy folyamatos vicc volt sokáig. Szerettek viccelni a radikális elképzeléseimmel. Emlékezetes nap volt, amikor az egyik legelismertebb hardverguru mindenkinek elmagyarázta egy értekezleten, hogy egyetért velem abban, hogy a szoftverkészítés folyamatát is mérnöki tudományágnak kell tekinteni, akárcsak a hardvereknél. Nem azért, mert önmagában elfogadta az új "kifejezést", hanem azért, mert kiérdemeltük az ő és a többiek elfogadását a teremben, mint egy saját jogán mérnöki területet..

Alkalmasság Egyes kommentátorok élesen eltérően vélekednek a szoftvermérnökség meghatározásáról vagy annak legitimitásáról, mint mérnöki diszciplína. David Parnas azt mondta, hogy a szoftvermérnökség valójában a mérnöki munka egyik formája., p. 19: "Rather than treat software engineering as a subfield of computer science, I treat it as an element of the set, {Civil Engineering, Mechanical Engineering, Chemical Engineering, Electrical Engineering,....}.", p. 20: "This paper argues that the introduction of accredited professional programs in software engineering, programmes that are modelled on programmes in traditional engineering disciplines will help to increase both the quality and quantity of graduates who are well prepared, by their education, to develop trustworthy software products." Steve McConnell szerint nem az, de annak kellene lennie., p. 39: "In my opinion, the answer to that question is clear: Professional software development should be engineering. Is it? No. But should it be? Unquestionably, yes. " Donald Knuth szerint a programozás művészet és tudomány is.Transcript of the 1974 Turing Award lecture. Edsger W. Dijkstra azt állította, hogy az Egyesült Államokban félreértelmezték a szoftvermérnökség és a szoftvermérnök kifejezéseket.

Feladatok Követelményelemzés A követelmények tervezése a szoftverkövetelmények előhívásáról, elemzéséről, specifikációjáról és érvényesítéséről szól. A szoftverkövetelmények lehetnek funkcionálisak, nem funkcionálisak vagy tartományiak.

A funkcionális követelmények az elvárt viselkedéseket írják le (pl. kimenetek). A nem funkcionális követelmények olyan kérdéseket határoznak meg, mint a hordozhatóság, biztonság, karbantarthatóság, megbízhatóság, skálázhatóság, teljesítmény, újrafelhasználhatóság és rugalmasság. Ezek a következő típusokba sorolhatók: interfész korlátozások, teljesítmény korlátozások (például válaszidő, biztonság, tárolókapacitás stb.), működési korlátozások, életciklus korlátozások (karbantarthatóság, hordozhatóság stb.), és gazdasági korlátozások. A nem funkcionális követelmények meghatározásához ismerni kell a rendszer vagy a szoftver működését. A tartomány követelmények egy adott kategória vagy projekt tartományának sajátosságaival foglalkoznak.

Tervezés A szoftvertervezés a szoftver magas szintű tervezési folyamatát jelenti. A tervezés gyakran szintekre osztható:

Az interfész tervezése megtervezi a rendszer és környezete közötti interakciót, valamint a rendszer belső működését Az építészeti tervezés megtervezi a rendszer fő összetevőit; beleértve a felelősségeiket, tulajdonságaikat és a köztük lévő interfészeket. Részletes tervezési tervek belső elemek; beleértve tulajdonságaikat, kapcsolataikat, algoritmusaikat és adatszerkezeteiket .

Készítés A szoftverkészítés jellemzően programozást (más néven kódolást), egység tesztet, integrációs tesztelést és hibakeresést foglal magában a tervezés megvalósítása érdekében. A „szoftvertesztelés kapcsolódik a hibakereséshez, de különbözik tőle” Ebben a fázisban a tesztelést általában a programozó végzi, azzal a céllal, hogy ellenőrizze, hogy a kód a terveknek megfelelően működik-e, és hogy megállapítsa, mikor kész a kód a következő szintű tesztelésre. [ <span title="This claim needs references to reliable sources. (May 2023)">idézet szükséges</span> ]

Tesztelés A szoftvertesztelés egy empirikus, technikai vizsgálat, amelynek célja, hogy információt nyújtson az érdekelt felek számára a tesztelt szoftver minőségéről.

Ha külön tárgyaljuk a készítéstől, a tesztelést jellemzően tesztfejlesztők vagy minőségbiztosítási szakemberek végzik, nem pedig azok a programozók, akik írták a kódot. A tesztelés rendszerszinten történik, és a szoftver minőségének egyik aspektusának tekinthető.

Programelemzés A programelemzés a számítógépes programok elemzési folyamata, figyelembe véve olyan szempontokat, mint a teljesítmény, a robusztusság és a biztonság.

Karbantartás A szoftverkarbantartás a szoftver támogatását jelenti a kiadás után. Ez magában foglalhatja, de nem korlátozódik a következőkre: hibajavítás, optimalizálás, a fel nem használt és eldobott funkciók törlése, valamint a meglévő funkciók javítása.

Általában a karbantartás a projekt költségeinek körülbelül 40-80%-át teszi ki, ezért a karbantartásra való fókuszálás csökkentheti a fejlesztési költségeket.

Oktatás A számítógép-programozás ismerete előfeltétele a szoftverfejlesztővé válásnak. 2004-ben az IEEE Computer Society elkészítette a SWEBOK-ot, amely ISO/IEC Technical Report 1979:2005 néven jelent meg, és leírja azt az ismeretanyagot, amelyet négyéves tapasztalattal rendelkező, diplomás szoftvermérnököknek ajánlanak. Sok szoftverfejlesztő egyetemi diploma megszerzésével vagy szakképző iskolában végzett képzéssel lép be a szakmába. Az IEEE Computer Society és a Association for Computing Machinery Számítástechnikai Tantervek Közös Munkacsoportja egy szabványos nemzetközi tantervet határozott meg az egyetemi szoftverfejlesztői diplomák számára, és 2014-ben frissítették. Számos egyetem kínál szoftvermérnök szakokat; 2010-ben az Egyesült Államokban 244 egyetemi Szoftverfejlesztő alapképzés, 70 online program, 230 mesterképzés, 41 doktori képzés és 69 tanúsítványprogram volt elérhető.