{"id":22120,"date":"2014-09-11T07:30:11","date_gmt":"2014-09-11T05:30:11","guid":{"rendered":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/2014\/09\/11\/was-ist-softwaretechnik\/"},"modified":"2025-05-14T16:15:17","modified_gmt":"2025-05-14T14:15:17","slug":"was-ist-softwaretechnik","status":"publish","type":"post","link":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/2014\/09\/11\/was-ist-softwaretechnik\/","title":{"rendered":"Was ist Softwaretechnik?"},"content":{"rendered":"<p><i>Dieser Gastartikel ist ein Beitrag zum <a href=\"https:\/\/scienceblogs.de\/astrodicticum-simplex\/2014\/07\/31\/mitmachen-der-scienceblogs-blog-schreibwettbewerb\/\">ScienceBlogs Blog-Schreibwettbewerb<\/a>. Alle eingereichten Beitr\u00e4ge werden im Lauf des Septembers hier im Blog vorgestellt. Danach werden sie von einer Jury bewertet. Aber auch alle Leserinnen und Leser k\u00f6nnen mitmachen. Wie ihr eure Wertung abgeben k\u00f6nnt, erfahrt ihr <a href=\"https:\/\/scienceblogs.de\/astrodicticum-simplex\/?p=16197&#038;\">hier<\/a>.<\/i><\/p>\n<p><a href=\"https:\/\/astrodicticum-simplex.ulrich.digital\/wp-content\/uploads\/2025\/05\/sb-wettbewerb.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/astrodicticum-simplex.ulrich.digital\/wp-content\/uploads\/2025\/05\/sb-wettbewerb.png\" alt=\"sb-wettbewerb\" width=\"500\" height=\"172\" class=\"aligncenter size-medium wp-image-15702\" \/><\/a><\/p>\n<p><i>Dieser Beitrag wurde von <b>Markus<\/b> eingereicht.<\/i><br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p>Wenn jemand erf\u00e4hrt, dass ich im Fachbereich Softwaretechnik<br \/>\n(oder im Englischen &quot;Software Engineering&quot;) meine Doktorarbeit<br \/>\ngeschrieben habe, dann wird das meistens mit einem &quot;Aha.&quot; und einem freundlichen<br \/>\nL\u00e4cheln quittiert. Ich vermute, dass die betreffende Person das dann abheftet<br \/>\nunter &quot;Hat was mit Computern zu tun&quot; und sich gegebenenfalls vornimmt<br \/>\nauf mich zur\u00fcck zu kommen, wenn der eigene Rechner mal wieder streikt. Im<br \/>\nZusammenhang mit dieser Wahrnehmung soll der ber\u00fchmte Informatiker Edsger W.<br \/>\nDijkstra mal gesagt haben &quot;Computer Science is no more about computers<br \/>\nthan astronomy is about telescopes&quot;. (Die Informatik hat mit Computern nur<br \/>\nso viel zu tun wie Astronomie mit Teleskopen.) Unabh\u00e4ngig davon ob diese<br \/>\nZuschreibung nun stimmt oder Folklore ist, verdeutlicht der Satz ein Problem,<br \/>\ndas vermutlich viele Berufe haben: Die Allgemeinheit hat ein eher vages Bild<br \/>\ndavon, was jemand, der diesen Beruf aus\u00fcbt eigentlich so macht. Florian hat in<br \/>\nden vergangen Jahren hier viel, viel geschrieben, durch das ich eine Menge \u00fcber<br \/>\nAstronomie lernen konnte. Und es hat sich dabei eher selten explizit um<br \/>\nTeleskope gedreht.\u00a0 Nun m\u00f6chte ich f\u00fcr die Softwaretechnik einmal versuchen,<br \/>\neinen kleinen Einblick in diese Disziplin zu geben. Und dabei wird es praktisch<br \/>\ngar nicht um Computer gehen\u2026<\/p>\n<\/p>\n<h2>Womit besch\u00e4ftigt sich die Softwaretechnik eigentlich?<\/h2>\n<p>Kurz gesagt besch\u00e4ftigt sich Softwaretechnik mit der<br \/>\ningenieursm\u00e4\u00dfigen Entwicklung von Software. (Mit dieser Definition ist man auch<br \/>\nganz nah dran an der englischen Bezeichnung Software Engineering.) Das ist ganz<br \/>\n\u00e4hnlich wie bei anderen Ingenieursberufen. Maschinenbauingenieure besch\u00e4ftigen<br \/>\nsich mit dem Entwurf und der Konstruktion von Maschinen und industriellen<br \/>\nAnlagen. Bauingenieure k\u00fcmmern sich um die Planung und den Bau von Geb\u00e4uden.<br \/>\nUnd Softwaretechniker oder Softwareingenieure entwerfen und entwickeln<br \/>\nSoftware. Nun ist bei industriellen Anlagen oder Hochh\u00e4usern f\u00fcr jeden<br \/>\neinsichtig, dass man Experten ben\u00f6tigt um sowas zu konstruieren. Seinen<br \/>\nGartenschuppen zimmert vielleicht noch ein jeder auf eigene Faust zusammen.<br \/>\nAber bei gr\u00f6\u00dferen Projekten l\u00e4sst man das lieber die Profis machen. Um zu<br \/>\nverstehen, warum es sinnvoll und sogar notwendig ist, das bei Software genauso zu<br \/>\nhandhaben, muss man zun\u00e4chst ein wenig \u00fcber Software und deren Entwicklung im<br \/>\nAllgemeinen wissen.<\/p>\n<\/p>\n<h2>Warum ist das sinnvoll?<\/h2>\n<p>Software steckt l\u00e4ngt nicht nur dort, wo es offensichtlich<br \/>\nist, also in Desktop-Rechnern, Tablet-Computern, Spielkonsolen, Handys, usw.<br \/>\nMittlerweile steckt in fast jedem Ger\u00e4t, das einen elektronischen Anteil hat<br \/>\nauch ein St\u00fcckchen Software: Kaffeemaschinen, K\u00fchlschr\u00e4nke, Ampelanlagen,<br \/>\nArmbanduhren, Klimaanlagen, und so weiter. Das gilt auch und vor allem f\u00fcr<br \/>\nAutos und f\u00fcr Flugzeuge. Seit Ende der Achtziger Jahre haben Passagiermaschinen<br \/>\nin den meisten F\u00e4llen kein mechanisches Notfallsystem f\u00fcr die Steuerung mehr an<br \/>\nBord. Das hei\u00dft die Steuerklappen sind nicht mehr \u00fcber Stahlseile, Schubstangen<br \/>\noder \u00c4hnliches mit dem Steuerkn\u00fcppel im Cockpit verbunden. Alles funktioniert<br \/>\nrein elektronisch mit der Hilfe von Software. Und in modernen Autos stecken<br \/>\nhunderte von eingebetteten \u201eControllern\u201c. Kleinstrechnern, die bestimmte<br \/>\nFunktionen steuern: Elektrische Fensterheber, Bremsen, Airbags, ESP\u2026 Wenn man<br \/>\nsich das vor Augen f\u00fchrt, dann wird schnell klar, dass die Software, die in<br \/>\ndiesen Ger\u00e4ten l\u00e4uft besser gut funktionieren sollte. Damit stellt sich<br \/>\nautomatisch die n\u00e4chste Frage: Ist es eigentlich schwierig korrekt<br \/>\nfunktionierende Software zu entwickeln? Und wenn ja, warum?<\/p>\n<h2>Warum ist Softwareentwicklung schwierig?<\/h2>\n<p>Software wird in den allermeisten F\u00e4llen geschrieben. Man<br \/>\nschreibt ein Programm, das der Computer dann ausf\u00fchren kann. Das hat<br \/>\n\u00c4hnlichkeit mit einem Kochrezept. Zum Beispiel \u201e\u00d6ffne Datei X. Suche darin Wert<br \/>\nY. Zeige Y zusammen mit Ausgabe Z auf dem Bildschirm an.\u201c Das klingt erstmal<br \/>\nrecht simpel, aber es gibt viele Faktoren, die das Schreiben solcher Rezepte<br \/>\nerschweren. Zum Beispiel Interaktivit\u00e4t, Komplexit\u00e4t und Gr\u00f6\u00dfe:<\/p>\n<p><b>Interaktivit\u00e4t<\/b><\/p>\n<p>Allerdings braucht man schon noch ein bisschen mehr<br \/>\nFlexibilit\u00e4t als bei Kochrezepten, denn Software ist meist darauf ausgelegt,<br \/>\ndass sie interaktiv ist, dass sie also auf Eingaben des Benutzers reagieren<br \/>\nkann. Daher ist es notwendig Verzweigungen in das Programm einzubauen. \u201eWenn<br \/>\nder Benutzer hier klickt, dann mache dies. Wenn er dort klickt, dann mache<br \/>\ndas.\u201c Und auch Wiederholungen, Schleifen genannt, sind notwendig. Schlie\u00dflich<br \/>\nsoll der Benutzer auch mehrmals klicken d\u00fcrfen. Da man vorher nicht wei\u00df, wie der<br \/>\nBenutzer genau mit dem Programm interagiert, muss man sich vorher genau<br \/>\nGedanken machen, was das Programm alles erm\u00f6glichen, erlauben, und verbieten<br \/>\nsoll. Das kann manchmal eine ganze Menge sein. Allein wenn man sich die<br \/>\nIconleisten von g\u00e4ngigen Schreibprogrammen ansieht, dann kann der Benutzer zu<br \/>\njedem beliebigen Zeitpunkt alles M\u00f6gliche anstellen. Und die Software muss in<br \/>\njedem Fall damit umgehen k\u00f6nnen.<\/p>\n<p><b>Komplexit\u00e4t<\/b><\/p>\n<p>In eingebetteten Systemen wie Autos wird das Ganze noch<br \/>\nkomplizierter: Die Klimaanlage muss geregelt werden, das Navigationssystem muss<br \/>\nst\u00e4ndig \u00fcberpr\u00fcfen, ob der Fahrer sich auf der geplanten Route befindet, das<br \/>\nEntertainmentsystem l\u00e4uft nebenbei und dann kommt pl\u00f6tzlich eine Vollbremsung!<br \/>\nIn so einem Moment m\u00f6chte niemand, dass der Airbag zu sp\u00e4t aufgeht, weil das<br \/>\nNavigationssystem vorher noch eine neue Route berechnen musste. Diese ganzen<br \/>\nVorg\u00e4nge m\u00fcssen also aufeinander abgestimmt sein. Und das ohne das man vorher<br \/>\nwei\u00df, welche Situationen genau auftreten werden.<\/p>\n<p><b>Gr\u00f6\u00dfe<\/b><\/p>\n<p>Ein kompliziertes Kochrezept erstreckt sich \u00fcber ein bis zwei Seiten im<br \/>\nKochbuch und besteht damit aus 50 bis 100 Zeilen Text. Komplexe Software kommt<br \/>\nallerdings schnell auf mehrere Millionen Zeilen Programmcode. Das entspricht<br \/>\neher einer Zahl von 100000 Seiten Text. Bei diesen Zahlen wird schnell klar,<br \/>\ndass niemand sich ein Programm einfach komplett durchlesen kann um zu<br \/>\n\u00fcberpr\u00fcfen was es tut oder ob es fehlerfrei ist. (Abgesehen davon ist<br \/>\nProgrammcode kein Prosatext, denn man einfach \u201erunterlesen\u201c kann.) Dazu kommt<br \/>\nnoch das Problem, dass so ein ausgedrucktes Programm linear ist. Es f\u00e4ngt auf<br \/>\nSeite 1 oben an und endet unten auf Seite 1000000. Das kann man (mit viel Zeit)<br \/>\nzwar durchlesen, wird damit dem Ablauf der Software aber nicht gerecht. Die<br \/>\noben erw\u00e4hnten Schleifen m\u00fcsste man mehrmals lesen, bei Verzweigungen (\u201eWenn<br \/>\ndies passiert, dann tue das, sonst mach etwas anderes.\u201c) m\u00fcsste man wild im<br \/>\nDokument hin und her springen. Und dadurch w\u00fcrde man blitzschnell die \u00dcbersicht<br \/>\nverlieren, was man schon gelesen hat, und was nicht.<\/p>\n<h2>Was kann man dagegen tun?<\/h2>\n<p>Es ist also nicht so leicht eine funktionierende,<br \/>\nkomplexe Software zu entwickeln. Deswegen versucht die Softwaretechnikforschung<br \/>\nWerkzeuge und Methoden zu finden, die die Entwicklung von Software erleichtern.<br \/>\nDie Ans\u00e4tze dazu kann man grob in konstruktive und analytische Verfahren<br \/>\nunterteilen. Konstruktive Ans\u00e4tze besch\u00e4ftigen sich damit, wie man Software<br \/>\nleichter entwickeln kann, so dass sie von Anfang an m\u00f6glichst korrekt<br \/>\nfunktioniert. Dabei geht es darum Mittel und Wege zu finden, die die oben<br \/>\nangesprochenen Probleme wie Gr\u00f6\u00dfe, Komplexit\u00e4t und Interaktivit\u00e4t abschw\u00e4chen<br \/>\nund sie damit m\u00f6glichst gar nicht erst zu Problemen werden lassen. Analytische<br \/>\nVerfahren hingegen konzentrieren sich darauf, Fehler und Probleme in bereits entwickelter<br \/>\nSoftware zu entdecken.<\/p>\n<p><b>Konstruktive Verfahren<\/b><\/p>\n<p>Wenn der Mensch vor einer schwierigen Aufgabe steht, dann<br \/>\ntendiert er, sich Werkzeuge zu schaffen, die die Aufgabe erleichtern. Das ist<br \/>\nin der Softwaretechnik nicht anders. Software wird nicht in einem einfachen<br \/>\nTexteditor oder in einem Textverarbeitungsprogramm geschrieben, sondern<br \/>\nmithilfe einer Entwicklungsumgebung. Die enth\u00e4lt zwar auch einen Editor, aber<br \/>\nzus\u00e4tzlich jede Menge Hilfsmittel. Sie pr\u00fcft den Programmcode auf<br \/>\noffensichtliche Fehler (z.B. falsch geschriebene W\u00f6rter), bietet eine \u00dcbersicht<br \/>\n\u00fcber die Struktur des kompletten Programms und hat Funktionen zur<br \/>\nnachtr\u00e4glichen Anpassung und Ver\u00e4nderung der Software. Die Konzipierung,<br \/>\nEntwicklung und Erweiterung solcher Entwicklungsumgebungen ist ein Teil der<br \/>\nkonstruktiven Softwaretechnik.<\/p>\n<p>Es gibt auch Werkzeuge, mit denen man erst einmal die<br \/>\ngrobe Struktur oder das Verhalten seiner Software in einem Diagramm modellieren<br \/>\nkann. Dadurch beh\u00e4lt man einen besseren \u00dcberblick und muss nicht zun\u00e4chst nicht<br \/>\num die Details k\u00fcmmern. Es gibt auch Standards, die vorschreiben, wie so ein<br \/>\nDiagramm auszusehen hat. Dadurch haben Softwaretechniker eine gemeinsame<br \/>\n\u201eSprache\u201c zur Verf\u00fcgung mit der sie sich \u00fcber Ideen und Konzepte f\u00fcr eine<br \/>\nSoftware austauschen k\u00f6nnen. Und im Idealfall kann man den Programmcode aus<br \/>\ndiesen Diagrammen zumindest teilweise generieren lassen. Das erspart einerseits<br \/>\nviel Arbeit und vermeidet andererseits auch viele Fehler, die man sonst beim<br \/>\nSelberschreiben machen w\u00fcrde.<\/p>\n<p><b>Analytische Verfahren<\/b><\/p>\n<p>Die einfachste M\u00f6glichkeit zur \u00dcberpr\u00fcfung einer Software<br \/>\nist das Testen. Man startet einfach das Programm und probiert aus, ob es das<br \/>\ntut, was man erwartet. Allerdings kann man sich leicht klarmachen, dass man<br \/>\nniemals ein Programm vollst\u00e4ndig testen kann. Wenn ich beispielsweise eine<br \/>\neinfaches Taschenrechnerprogramm schreibe, wie es bei vielen Betriebssystemen<br \/>\nmitgeliefert wird, dann kann ich nicht alle m\u00f6glichen Rechnungen<br \/>\ndurchprobieren, um zu \u00fcberpr\u00fcfen, dass die Ergebnisse immer stimmen. Dazu gibt<br \/>\nes einfach zu viele M\u00f6glichkeiten. (Im streng mathematischen Sinne sind es<br \/>\nsogar unendlich viele. Warum das hier nicht ganz zutrifft, ist ein anderes<br \/>\nThema) Ich k\u00f6nnte aber jede Funktion (Addition, Subtraktion, Multiplikation,<br \/>\nDivision, Potenz, Wurzel, usw.) jeweils einmal ausprobieren und zumindest daf\u00fcr<br \/>\nsicherstellen, dass alle Ergebnisse stimmen. \u00dcber die Entwicklung und Umsetzung<br \/>\nvon solchen Teststrategien gibt es ganze Tagungsreihen.<\/p>\n<p>Man kann an das Problem auch etwas mathematischer<br \/>\nherangehen. Zu jedem beliebigen Zeitpunkt seiner Ausf\u00fchrung hat ein Programm<br \/>\neinen \u201eZustand\u201c. Der ist charakterisiert durch die aktuell gespeicherten Werte<br \/>\n(beim Taschenrechner z.B. die eingegebenen Zahlen und die ausgew\u00e4hlte<br \/>\nOperation) und den Punkt an dem das Programm gerade angekommen ist (z.B. kurz<br \/>\nbevor der Benutzer auf die \u201e=\u201c-Taste dr\u00fcckt. Jetzt kann man versuchen sich alle<br \/>\ndiese Zust\u00e4nde zu \u00fcberlegen und f\u00fcr jeden Zustand zu pr\u00fcfen, was als n\u00e4chstes<br \/>\npassieren kann. Wenn z.B. die gew\u00e4hlte Operation die Division ist und die zweite<br \/>\nZahl eine Null, dann sollte das Programm danach den Teil ausf\u00fchren wollen, der<br \/>\ndem Benutzer einen Fehler anzeigt. Wenn es das nicht tut, dann erreicht das<br \/>\nProgramm einen unerw\u00fcnschten Zustand und man hat ein Problem gefunden. Diese<br \/>\ntheoretische Betrachtungsweise wird Verifikation genannt. Im Vergleich zum<br \/>\nTesten kann man mit ihr beweisen, dass ein Programm fehlerfrei ist (das es also<br \/>\nnicht in einen unerw\u00fcnschten Zustand ger\u00e4t). Aber daf\u00fcr ist das Verfahren auch<br \/>\nso kompliziert, dass man es nicht f\u00fcr komplette, komplexe Programme durchf\u00fchren<br \/>\nkann, sondern allenfalls f\u00fcr kleinere Teile.<\/p>\n<h2>Und weiter?<\/h2>\n<p>Das ist er also, mein erster Blogeintrag. Ich habe versucht<br \/>\neinen kleinen Einblick in die weite Welt der Softwaretechnik zu geben. Mir ist<br \/>\nbewusst, dass ich viele Themen nur sehr oberfl\u00e4chlich gestreift habe und vieles<br \/>\nausgelassen oder sehr vereinfacht dargestellt habe. Ich habe keine Ahnung, ob das Thema von<br \/>\nInteresse ist, ob ich einen guten Abstraktionsgrad erwischt habe und ob<br \/>\nirgendjemand bis zu diesem Punkt lesen wird. Daher brauche ich euer Feedback: Was<br \/>\nhat euch gefallen und was nicht? W\u00fcrdet ihr gerne mehr lesen? Zu welchen<br \/>\nThemen? Ich bin sehr gespannt auf eure Kommentare, Anregungen und Fragen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Gastartikel ist ein Beitrag zum ScienceBlogs Blog-Schreibwettbewerb. Alle eingereichten Beitr\u00e4ge werden im Lauf des Septembers hier im Blog vorgestellt. Danach werden sie von einer Jury bewertet. Aber auch alle Leserinnen und Leser k\u00f6nnen mitmachen. Wie ihr eure Wertung abgeben k\u00f6nnt, erfahrt ihr hier. Dieser Beitrag wurde von Markus eingereicht. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Wenn jemand erf\u00e4hrt, dass [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":953,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[764,12],"tags":[2666,13441],"class_list":["post-22120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-schreibwettbewerb","category-technik","tag-blog-schreibwettbewerb","tag-softwaretechnik"],"_links":{"self":[{"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/posts\/22120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/comments?post=22120"}],"version-history":[{"count":1,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/posts\/22120\/revisions"}],"predecessor-version":[{"id":22121,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/posts\/22120\/revisions\/22121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/media\/953"}],"wp:attachment":[{"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/media?parent=22120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/categories?post=22120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/astrodicticum-simplex.ulrich.digital\/index.php\/wp-json\/wp\/v2\/tags?post=22120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}