Kapitel 1 : Softwaretechnik
Im Bereich der Softwareentwicklung bezieht sich Software Engineering auf einen ingenieursbasierten Ansatz. Bei der Entwicklung von Software setzt ein Praktiker, der als Softwareingenieur bekannt ist, den Konstruktionsprozess in die Praxis um.
Trotz der Tatsache, dass die Ausdrücke "Programmierer" und "Programmierer" gleichbedeutend mit "Software-Ingenieur" sind, beziehen sie sich nur auf die Konstruktionskomponente der normalen Arbeit eines Software-Ingenieurs.
Ein Softwareingenieur ist für die Anwendung eines Softwareentwicklungsprozesses verantwortlich, der das Definieren, Implementieren, Testen, Verwalten und Warten von Softwaresystemen sowie das Erstellen und Aktualisieren des Entwicklungsprozesses durch die Anwendung des Prozesses umfasst.
Erst in den 1960er Jahren wurde das Software Engineering als eigenständiges Teilgebiet des Ingenieurwesens anerkannt.
Man glaubte, dass die Entwicklung von Software Engineering ein schwieriger Prozess sein würde. Zu den Problemen gehörte Software, die entweder gar nicht fertiggestellt war oder das Budget überschritten hatte, Fristen überschritt, umfangreiche Fehlerbehebungen und Wartungen erforderte und die Anforderungen der Kunden nicht erfüllte. Manchmal war die Software noch nicht einmal fertig.
Im Jahr 1968 veranstaltete die Nordatlantikpakt-Organisation (NATO) die allererste Software-Engineering-Konferenz, auf der Themen rund um Software diskutiert wurden. Um die Erstellung von Software zu erleichtern, wurden Richtlinien und effektivste Methoden entwickelt.
Eine Reihe verschiedener Quellen wurde als Ursprung des Begriffs "Software Engineering" angeführt. "Computer und Automatisierung" veröffentlichte in der Juniausgabe 1965 eine Liste der von Unternehmen erbrachten Dienstleistungen. Das Wort wurde in offiziellerer Weise in der Augustausgabe 1966 der Communications of the Association for Computing Machinery (Band 9, Nummer 8) in dem Artikel "President's Letter to the ACM Membership" von Anthony A. Oettinger verwendet. Darüber hinaus ist sie mit dem Namen einer NATO-Konferenz verbunden, die 1968 stattfand und von Professor Friedrich L. Bauer geleitet wurde. Während die Apollo-Missionen im Gange waren, lieferte Margaret Hamilton eine Beschreibung des Gebiets der "Softwaretechnik", um den durchgeführten Aktivitäten Glaubwürdigkeit zu verleihen. Der Begriff "Softwarekrise" wurde damals häufig verwendet, um die Situation zu beschreiben. Frederick Brooks und Margaret Hamilton werden Hauptreden auf den Plenarsitzungen der 40. International Conference on Software Engineering (ICSE 2018) halten, die zum Gedenken an ein halbes Jahrhundert des Bereichs "Software Engineering" abgehalten wird.
Das Software Engineering Institute (SEI) wurde 1984 als Forschungs- und Entwicklungseinrichtung gegründet, die vom Bund unterstützt wurde. Der Hauptsitz befindet sich auf dem Campus der Carnegie Mellon University in Pittsburgh, Pennsylvania, in den Vereinigten Staaten von Amerika.
Das SEI Software Process Program wurde von Watts Humphrey mit der Absicht gegründet, ein Verständnis für den Software-Engineering-Prozess zu erlangen und ihn effektiv zu verwalten. Das Capability Maturity Model Integration for Development (CMMI-DEV) wurde als Ergebnis der ursprünglich eingeführten Process Maturity Levels entwickelt. Dieses Modell skizzierte die Art und Weise, wie die Regierung der Vereinigten Staaten die Fähigkeiten ihrer Softwareentwicklungsteams analysiert.
Das Software Engineering Body of Knowledge (SWEBOK) ist eine Zusammenstellung aktueller Best Practices für das Software-Engineering, die vom ISO/IEC JTC 1/SC 7 Subcommittee zusammengestellt und veröffentlicht wurden. Diese Best Practices sind allgemein anerkannt. Es herrscht Einigkeit darüber, dass Software Engineering eine der wichtigsten Kategorien von Computern ist.
Zu den wichtigsten Definitionen von Softwareentwicklung gehören die folgenden:
Noch weniger offiziell wurde der Ausdruck auch wie folgt verwendet:
Der Begriff "Software Engineering" wurde von Margaret Hamilton populär gemacht, als sie am Apollo-Programm arbeitete. Die Arbeit sollte ebenso ernst genommen werden wie andere Beiträge zum technologischen Wachstum, und der Begriff "Engineering" wurde gewählt, um anzuerkennen, dass dies der Fall sein sollte. Hamilton bietet die folgende Verwendung des Begriffs an:
Es war das erste Mal, dass jemand von dem Begriff hörte, zumindest nicht in unserer Welt, als ich ihn zum ersten Mal erdachte. Es war eine ganze Zeit lang ein Witz gewesen. Sie machten sich gerne über mich lustig, weil ich so extreme Vorstellungen hatte. Der Tag, an dem einer der angesehensten Hardware-Experten in einem Meeting mit allen teilte, dass er mit mir übereinstimmte, dass der Prozess der Entwicklung von Software auch als technische Disziplin betrachtet werden sollte, genau wie der Prozess der Entwicklung von Hardware, war ein Tag, der lange in Erinnerung bleiben wird. Wir hatten seine und die Akzeptanz der anderen im Raum gewonnen, als ob sie in einem eigenständigen technischen Bereich tätig seien, und das lag nicht daran, dass er den neuen "Begriff" an und für sich akzeptierte; Vielmehr lag es daran, dass wir uns ihre Akzeptanz verdient hatten.
Unter Kritikern herrscht erhebliche Meinungsverschiedenheiten über die Definition von Softwaretechnik oder die Legitimität von Softwaretechnik als Fach innerhalb des Ingenieurwesens. David Parnas hat festgestellt, dass Software-Engineering in Wirklichkeit eine Art von Engineering oder Engineering im Allgemeinen ist. Laut Steve McConnell ist das nicht der Fall, aber er glaubt, dass es so sein sollte. Die Aussage, dass Programmieren sowohl eine Kunst als auch eine Wissenschaft ist, stammt von Donald Knuth. In Bezug auf die Vereinigten Staaten von Amerika behauptete Edsger W. Dijkstra, dass die Begriffe Software Engineering und Software Engineer übermäßig verwendet worden seien.
Der Prozess des Erhebens, Analysierens, Spezifizierens und Validierens von Softwareanforderungen wird als Requirements Engineering bezeichnet. Es gibt drei Optionen für die Softwareanforderungen: Domäne, nicht funktional und funktional.
Die beabsichtigten Verhaltensweisen, die häufig als Ausgaben bezeichnet werden, werden durch die funktionalen Anforderungen beschrieben. Bedenken wie Portabilität, Sicherheit, Wartbarkeit, Zuverlässigkeit, Skalierbarkeit, Leistung, Wiederverwendbarkeit und Flexibilität sind Beispiele für Dinge, die durch nicht-funktionale Anforderungen spezifiziert werden. Diese Einschränkungen können in die folgenden Kategorien unterteilt werden: Schnittstelleneinschränkungen, Leistungseinschränkungen (einschließlich Faktoren wie Reaktionsgeschwindigkeit, Sicherheit und Speicherplatz), Betriebseinschränkungen, Lebenszykluseinschränkungen (einschließlich Faktoren wie Portabilität und Wartbarkeit) und wirtschaftliche Einschränkungen. Es ist notwendig, die Funktionsweise des Systems oder Programms zu verstehen, um die nicht-funktionalen Bedürfnisse angemessen auszudrücken. Im Rahmen von Projekten beziehen sich Domain-Anforderungen auf die Merkmale, die mit einer bestimmten Kategorie oder Domain verbunden sind.
Der Prozess der Entwicklung von High-Level-Blueprints für Software wird als Beispiel für Softwaredesign bezeichnet. Es gibt Zeiten, in denen Design in Ebenen unterteilt wird:
Programmierung, auch bekannt als Codierung, Unit-Tests, Integrationstests und Debugging sind die typischen Schritte bei der Erstellung von Software. Diese Schritte sind notwendig, um das Design in die Tat umzusetzen. "Softwaretests sind verwandt mit Computersoftwaretests, unterscheiden sich aber von diesen", Fehlerbehebung"
In den meisten Fällen ist der Programmierer derjenige, der für das Testen in dieser Phase verantwortlich ist. Das Ziel dieser Tests besteht darin, sicherzustellen, dass der Code in Übereinstimmung mit seinem Design funktioniert, und zu bestimmen, wann der Code bereit ist, zur nachfolgenden Teststufe überzugehen.
Der Zweck von Softwaretests besteht darin, den Stakeholdern Informationen über die Qualität der zu testenden Software zur Verfügung zu stellen. Dies wird durch eine empirische und technische Untersuchung erreicht.
Wenn Tests in einer Weise spezifiziert werden, die sich von der Konstruktion unterscheidet, werden sie oft von Testingenieuren oder Qualitätssicherungstechnikern durchgeführt und nicht von den Programmierern, die für das Schreiben verantwortlich waren. Es wird nicht nur auf Systemebene durchgeführt, sondern auch als Bestandteil der Qualität des Programms angesehen.
Der Prozess der Untersuchung von Computerprogrammen im Hinblick auf ein bestimmtes Element wie Leistung, Robustheit oder Sicherheit wird als Programmanalyse bezeichnet.
Softwarewartung ist der Prozess der Bereitstellung von Support für Software nach der Veröffentlichung. Es kann unter anderem Aspekte wie Fehlerkorrektur, Optimierung, das Entfernen von Funktionen, die nicht genutzt oder verworfen werden, und die Verbesserung von Funktionen, die bereits vorhanden sind, umfassen.
In den meisten Fällen macht die Wartung zwischen vierzig und achtzig Prozent der Gesamtkosten des Projekts aus.
Grundkenntnisse in der Computerprogrammierung sind notwendig, um eine Karriere als Softwareentwickler zu verfolgen. Im Jahr 2004 produzierte die IEEE Computer Society das SWEBOK, das nun als ISO/IEC Technical Report 1979:2005 veröffentlicht wurde. Dieses Dokument beschreibt den Wissensbestand, den die Organisation einem diplomierten Software-Ingenieur mit vier Jahren Erfahrung empfiehlt, um ihn erfassen zu können.
Eine beträchtliche Anzahl von Software-Ingenieuren steigt in das Feld ein, indem sie zunächst einen Abschluss an...