Zum Inhalt

Software-Entwicklung für Ingenieure und Ingenieurinnen

Eine Einführung mit der Programmiersprache C

  • 2024
  • Buch

Über dieses Buch

​Softwareentwicklung ist mehr als nur Programme schreiben: Die Entwicklung sicherer Programme erfordert ein systematisches Vorgehen von der Aufgabenstellung bis zum getesteten Programm. In diesem Buch wird eine Vorgehensweise beschrieben, die alle Aspekte einer Softwareentwicklung umfasst. Ausgehend von allgemeinen Grundlagen und Einführungen werden die einzelnen Entwicklungsschritte vorgestellt und durch Beispiele und Übungen vertieft. Dabei wird als Programmiersprache C benutzt, die ebenfalls schrittweise eingeführt wird, sodass der Zusammenhang zwischen Entwurf, Sprachkonzept und Programmierung deutlich wird. Abgerundet wird das Buch durch zwei Anwendungsschwerpunkte, in denen die Entwicklung von Systemprogrammen und von Programmen zur Steuerung technischer Anlagen beschrieben werden.

Inhaltsverzeichnis

  1. Frontmatter

  2. Kapitel 1. Einleitung und Methodik

    Norbert Drescher
    Das Buch beschreibt eine umfassende Methodik für die Entwicklung von Software, wobei es zunächst die Bedeutung des Begriffs 'Entwicklung' anhand einer mathematischen Beziehung erklärt. Diese Beziehung unterscheidet zwischen der Anwendung und der Entwicklung von Software, wobei die Entwicklung als das Finden einer Funktion beschrieben wird, wenn Ein- und Ausgangsgrößen bekannt sind. Das Buch behandelt die Programmiersprache C, die besonders für die Entwicklung von Systemsoftware und technischen Anwendungen geeignet ist. Es wird eine Schritt-für-Schritt-Anleitung zur Entwicklung von Programmen gegeben, die von der Analyse der Problemstellung über den Entwurf von Algorithmen bis hin zur Fehlerbehandlung reicht. Besondere Aufmerksamkeit wird der strukturierten Vorgehensweise und der Fehlervermeidung geschenkt, um eine zuverlässige und nachvollziehbare Software zu entwickeln. Das Buch eignet sich sowohl für fortgeschrittene Entwickler als auch für solche, die ihre Kenntnisse in der Programmiersprache C vertiefen möchten.
  3. Kapitel 2. Analyse

    Norbert Drescher
    Das Kapitel befasst sich mit der Analyse als zentralem Schritt in der Softwareentwicklung. Vor Beginn eines Entwurfs muss eine vollständige Beschreibung der Aufgabenstellung vorliegen, die das grundlegende Ziel und die Nutzer der Anwendung definiert. Die Analyse umfasst die Zerlegung des Gegenstands in Teile, die Sammlung von Informationen und die Strukturierung der Beziehungen zwischen diesen Teilen. Besondere Aufmerksamkeit wird auf die Eigenschaften und Wechselwirkungen der Teile gelegt, um ein umfassendes Verständnis zu gewährleisten. Praktische Beispiele und graphische Verfahren werden eingesetzt, um die Analyse zu veranschaulichen und zu vereinfachen. Die Betrachtung der Anwendungsumgebung und die Interaktionen zwischen Umgebung und Software sind ebenfalls wichtige Aspekte. Das Kapitel schließt mit einer detaillierten Beschreibung der Ein- und Ausgaben sowie der Fehleranalyse, um die Anforderungen klar zu definieren und die Grundlage für den Entwurf zu schaffen.
  4. Kapitel 3. Entwurf

    Norbert Drescher
    Das Kapitel behandelt den Entwurf von Software und deren Umgebung, basierend auf den Ergebnissen der Analysephase. Es wird gezeigt, wie Anwendungsfalldiagramme und Aktivitätsdiagramme genutzt werden, um den Systementwurf zu beschreiben. Besonderes Augenmerk liegt auf der Beschreibung von Aktivitäten und Aktionen sowie der Nutzung von UML-Diagrammen zur Darstellung dieser Prozesse. Praktische Beispiele und detaillierte Erklärungen zur schrittweisen Verfeinerung von Aktivitäten und zur Fehlerbehandlung machen das Kapitel besonders wertvoll für Softwareentwickler und Systemanalytiker. Die Beschreibung der Datenflussanalyse und die Betrachtung von Ausnahme- und Fehlerbehandlung runden das Kapitel ab und bieten eine umfassende Grundlage für das Verständnis des Softwareentwurfs.
  5. Kapitel 4. Information, Daten und Datenverarbeitung

    Norbert Drescher
    Das Kapitel beginnt mit der Definition und Darstellung von Information in einem Rechner. Es wird erklärt, wie Informationen durch Zeichen und Zeichensätze repräsentiert werden und wie diese in Binärzeichen umgewandelt werden. Ein wesentlicher Teil des Textes beschäftigt sich mit der Darstellung von Zahlen im Binärsystem und den Unterschieden zwischen positiven und negativen Zahlen. Hierbei wird die Zweikomplementcodierung eingeführt, die es ermöglicht, negative Zahlen in einem Rechner darzustellen. Weiterhin wird auf die Speicherung und Verarbeitung von Daten in einem Rechner eingegangen, wobei die grundlegenden Operationen und die Arbeitsweise eines Prozessors detailliert beschrieben werden. Abschließend werden nichtnumerische Informationen und deren Codierung, wie zum Beispiel der ASCII-Code, behandelt. Der Text bietet eine umfassende Einführung in die grundlegenden Prinzipien der Datenverarbeitung in Rechnern und ist besonders für Programmierer und IT-Experten von Interesse.
  6. Kapitel 5. Einführung in die Programmiersprache C

    Norbert Drescher
    Der Beitrag führt in die Programmiersprache C ein und erklärt, wie ein Rechner trotz eingeschränkter Fähigkeiten komplexe Aufgabenstellungen bewältigen kann. Es wird das Konzept der Funktionen und deren Implementierung in C vorgestellt. Der Rechner nutzt Bitketten zur Verarbeitung und speichert Informationen in Form von Bitketten, die er verarbeiten und verknüpfen kann. Die Programmiersprache C orientiert sich am Verarbeitungsprinzip des Rechners und bietet dem Programmierer eine Schnittstelle, die der Arbeitsweise des Menschen näherkommt. Das Funktionsprinzip, das auch in natürlichen Sprachen und der Mathematik genutzt wird, wird anhand der Potenzfunktion erläutert. C nutzt das Funktionsprinzip zur Implementierung von Algorithmen und stellt Funktionen mit spezifischen Eigenschaften bereit, die in Funktionen und Modulen zusammengefasst werden können. Die Programmiersprache C verlangt die genaue Angabe der Eigenschaften einer Bitkette und bietet verschiedene Datentypen zur Beschreibung von Informationen. Der Beitrag schließt mit einer Einführung in die Programmierung von C-Programmen und der Nutzung von Funktionen und Bibliotheken.
  7. Kapitel 6. Alternativen

    Norbert Drescher
    Das Kapitel beschäftigt sich mit der Entscheidungsfindung in Programmen basierend auf Bedingungen. Es unterscheidet zwischen Alternativen, bei denen eine von mehreren Aktionen ausgeführt wird, und Wiederholungen, die abhängig von einer Bedingung mehrmals durchgeführt werden. Eine Einführung in die Aussagenlogik und Boolesche Algebra dient als Grundlage für die Formulierung von Bedingungen und deren Implementierung in Software. Verschiedene Varianten von Alternativen und deren Umsetzung in Programmiersprachen wie C werden vorgestellt. Praktische Beispiele, wie ein Zifferntest und ein Thermometer, veranschaulichen die Anwendung der theoretischen Konzepte. Die Analyse und Implementierung von Bedingungen und Alternativen wird detailliert erläutert, um ein tiefes Verständnis der Entscheidungsfindung in Software zu vermitteln.
  8. Kapitel 7. Schleifen

    Norbert Drescher
    Das Kapitel behandelt die grundlegenden Konzepte und die Implementierung von Schleifen in der Programmierung. Schleifen werden als Mittel zur Wiederholung von Anweisungen eingeführt und ihre Eigenschaften, wie die Prüfung des Wiederholungs- bzw. Abbruchkriteriums und die Komponenten des Schleifenblocks, werden detailliert beschrieben. Verschiedene Schleifentypen, wie Kopf- und Fußschleifen, sowie deren Implementierung in der Programmiersprache C werden vorgestellt. Besondere Aufmerksamkeit wird der Analyse und dem Entwurf von Schleifen geschenkt, wobei praktische Beispiele und die Betonung der Bedeutung von strukturiertem Programmieren den Leser dazu anregen, die Konzepte in eigenen Projekten anzuwenden.
  9. Kapitel 8. Datenstrukturen

    Norbert Drescher
    Das Kapitel behandelt die Bedeutung von Datenstrukturen in der Programmierung und zeigt, wie diese zur Organisation und Verarbeitung von Daten genutzt werden können. Nach einer Einführung in die Problemanalyse und die Datenflussanalyse wird die Anwendung von Datenstrukturen bei der Verarbeitung von Datensätzen mit mehreren Einzeldaten detailliert erläutert. Es wird gezeigt, wie Datenstrukturen in der Programmiersprache C implementiert werden und welche Vorteile sie bieten. Besonders interessant ist die Darstellung der verschiedenen Arten von Datenstrukturen und deren Anwendung in der Praxis. Das Kapitel schließt mit einer vertiefenden Datenanalyse, die notwendige Abhängigkeiten und Wertebereiche der Daten berücksichtigt.
  10. Kapitel 9. Funktionen

    Norbert Drescher
    Der Fachbeitrag behandelt die Erstellung und Nutzung von Funktionen in der Programmierung, insbesondere im Kontext der C-Programmiersprache. Es wird erklärt, wie Funktionen zur Beschreibung komplexer Sachverhalte eingesetzt werden können und wie sie durch funktionale Zerlegung und Hierarchien strukturiert werden. Die funktionale Zerlegung ermöglicht es, komplexe Aufgaben in überschaubare Teilaufgaben zu zerlegen, die durch Funktionen realisiert werden. Diese Funktionen können wiederum in Diagrammen beschrieben werden, um die Struktur und Beziehungen der Teilaufgaben darzustellen. Der Beitrag geht auch auf die verschiedenen Methoden der Parameterübergabe ein, wie Call by Value und Call by Pointer, und diskutiert deren Vor- und Nachteile. Zudem werden Maßnahmen zur Verbesserung der Programmiereffizienz und -sicherheit vorgestellt, wie die Verwendung von Wrapper-Funktionen und die Nutzung von Speicherklassen. Besondere Aufmerksamkeit wird der funktionalen Sicherheit geschenkt, um Fehler durch unkontrollierte Nutzung von Daten oder Aktionen zu vermeiden. Der Beitrag schließt mit praktischen Beispielen und Hinweisen zur Implementierung und Testung von Funktionen, die sowohl für Anfänger als auch für erfahrene Programmierer nützlich sind.
  11. Kapitel 10. Dynamische Datenstrukturen

    Norbert Drescher
    Das Kapitel über dynamische Datenstrukturen erläutert die Vorteile und Anwendungsfälle von dynamischen Datenstrukturen im Vergleich zu statischen Datenstrukturen. Es wird gezeigt, wie dynamische Datenstrukturen während der Laufzeit erzeugt und gelöscht werden können, um Speicher effizient zu nutzen und Anpassungsfähigkeit zu gewährleisten. Besondere Aufmerksamkeit wird auf die Nutzung von Zeigern zur Lösung allgemeiner Problemstellungen und die Entkopplung von Code und Daten gelegt. Praktische Beispiele wie Stapelspeicher, Warteschlangen und dynamische Tabellen veranschaulichen die Vorteile und Anwendungen dynamischer Datenstrukturen in verschiedenen Softwareanwendungen.
  12. Kapitel 11. Anpassbare Softwarestrukturen

    Norbert Drescher
    Das Kapitel 'Anpassbare Softwarestrukturen' befasst sich mit der zentralen Rolle von Funktionen in der Programmiersprache C zur Strukturierung von Programmen. Funktionen werden zur Zerlegung von Aktionen genutzt, wobei die Aufrufbeziehungen durch Funktionsdiagramme beschrieben werden. Diese Diagramme zeigen statische Beziehungen zwischen Funktionen, die jedoch für flexible Softwareanpassungen nicht ausreichen. Der Text diskutiert verschiedene Szenarien, die eine Anpassung der Software erfordern, wie Weiterentwicklungen, Hardwareänderungen und die Nutzung auf unterschiedlichen Rechnern. Um die Vielfalt zu beherrschen, wird eine Lösung angestrebt, die mehrere Versionen einer Anwendung vermeidet. Möglichkeiten zur Auswahl der Variante umfassen die bedingte Übersetzung und die Laufzeitauswahl. Funktionszeiger spielen eine Schlüsselrolle bei der Dynamisierung von Softwarestrukturen, indem sie flexible Softwarestrukturen ermöglichen. Beispiele und detaillierte Erklärungen zur Implementierung von Funktionszeigern und Callback-Funktionen werden vorgestellt. Besondere Aufmerksamkeit wird der Sicherheit und den Gefahren bei der Nutzung änderbarer Bindungen geschenkt. Das Kapitel bietet einen umfassenden Überblick über die Herausforderungen und Lösungen bei der Anpassung von Software an unterschiedliche Umgebungen und Randbedingungen.
  13. Kapitel 12. Ein-/Ausgaben und Dateien

    Norbert Drescher
    Das Kapitel beginnt mit der Erklärung des Standardverfahrens für die Ein- und Ausgabe von Daten und deren Speicherung in Dateien. Es wird beschrieben, wie Dateisysteme aufgebaut sind und wie Daten sequenziell gespeichert und gelesen werden. Ein wichtiger Aspekt ist die Verwaltung des Positionszeigers, der den aktuellen Lesepunkt in einer Datei markiert. Das Kapitel geht auch auf die Unterschiede zwischen verschiedenen Betriebssystemen bei der Pfadangabe ein und erläutert, wie Dateien auf internen und externen Speichermedien gespeichert werden. Besondere Aufmerksamkeit wird der Fehlerbehandlung geschenkt, wobei verschiedene Fehlerfälle und deren Behebung beschrieben werden. Praktische Beispiele und Funktionen zur Dateiverwaltung runden das Kapitel ab und bieten dem Leser konkrete Anwendungsfälle und Lösungsansätze.
  14. Kapitel 13. Strukturierung der Software

    Norbert Drescher
    Der Beitrag behandelt die grundlegenden Prinzipien der Softwareentwicklung und die Bedeutung der Modularisierung. Es wird erklärt, wie Funktionen und Daten in Module gruppiert werden können, um die Komplexität von Programmen zu bewältigen. Dabei werden verschiedene Arten von Modulen wie Datenmodule, Funktionsmodule und kombinierte Module vorgestellt. Besonders interessant ist die Darstellung des V-Modells und der verschiedenen Kriterien zur Modulzuordnung, wie z.B. die Gruppierung nach Anwendungsfällen oder Dienstleistungen. Zudem wird die Bedeutung von Header-Dateien und die Steuerung der Sichtbarkeit von Namen und Typen in Modulen detailliert erläutert. Die praktischen Beispiele und die Hinweise zur Dokumentation von Softwarestrukturen machen den Beitrag besonders wertvoll für Softwareentwickler, die ihre Programme effizient und übersichtlich gestalten möchten.
  15. Kapitel 14. Fehlerbehandlung

    Norbert Drescher
    Das Kapitel widmet sich der Fehlerbehandlung in der Softwareentwicklung und erläutert, wie Fehler während der Entwicklung und Implementierung vermieden werden können. Es werden verschiedene Fehlerquellen und -typen identifiziert, wie z.B. systematische Fehler und Fehler durch Komponentenausfälle. Besondere Aufmerksamkeit wird der Fehlererkennung und -behandlung geschenkt, wobei Methoden zur Fehlermeldung und Fehlerreaktion detailliert beschrieben werden. Zudem werden Techniken zur Fehlersuche und -behebung vorgestellt, um die Zuverlässigkeit und Qualität der Software zu erhöhen. Der Text bietet praktische Ansätze und Werkzeuge, die Entwicklern helfen, Fehler effektiv zu managen und die Stabilität ihrer Software zu gewährleisten.
  16. Kapitel 15. Hardware und C

    Norbert Drescher
    Das Kapitel behandelt die Programmierung von Hardware mit der Programmiersprache C. Es wird erläutert, warum Hardware programmierbar sein muss und wie die Programmiersprache C dafür geeignet ist. Dabei werden grundlegende Hardwarekomponenten und deren Programmierung vorgestellt, wie z.B. logische Grundfunktionen und Gatter. Es wird auch auf spezielle Techniken für die hardwarenahe Programmierung eingegangen, wie z.B. die Nutzung von Maskenoperationen für Bitmanipulationen. Zudem werden spezielle Hardwarekomponenten und -eigenschaften betrachtet, wie z.B. Flipflops und Register. Das Kapitel schließt mit einer praktischen Anwendung, der Steuerung einer Lampe über einen Mikrocontroller, und geht auf die Bedeutung von Alignment-Regeln bei der Programmierung ein.
  17. Kapitel 16. Systemsoftware

    Norbert Drescher
    Das Kapitel beginnt mit einer Darstellung der Schnittstellen in einem Rechnersystem, wobei die Rechnerschnittstelle für Ein- und Ausgabegeräte und die interne Softwareschnittstelle für die Kommunikation zwischen Anwendungen und der Umgebung beschrieben werden. Die Systemsoftware, die unabhängig von einzelnen Anwendungen funktioniert, übernimmt Aufgaben wie den Transfer von Daten zwischen der Rechnerschnittstelle und der Anwendungsschnittstelle sowie die Verwaltung von Systemressourcen. Diese Ressourcen umfassen analoge und digitale Schnittstellen, Netzwerkschnittstellen, Hintergrundspeicher, Systemuhr und Prozessor. Das Kapitel betont die Bedeutung der Systemsoftware für die Entwicklung und den Betrieb von Rechnersystemen und bietet praktische Beispiele zur Veranschaulichung der theoretischen Konzepte. Besonders hervorgehoben wird die Hardware-Abstraktionsebene, die eine einheitliche Schnittstelle zur Hardware bereitstellt und die Unabhängigkeit von spezifischen Hardwareeigenschaften ermöglicht. Der Text endet mit einer detaillierten Beschreibung der Verwaltung von Systemressourcen und der Bedeutung der Systemsoftware für die Entwicklung von Anwendungen.
  18. Kapitel 17. Echtzeitprogrammierung

    Norbert Drescher
    Das Kapitel beginnt mit einer Einführung in die Echtzeitprogrammierung und deren Bedeutung in technischen Anwendungen. Es wird hervorgehoben, dass viele technische Systeme zeitliche Vorgaben einhalten müssen, um funktionsfähig zu bleiben. Ein Zeitfehler kann schwerwiegende Konsequenzen haben, daher ist es entscheidend, dass Entwickler Algorithmen so gestalten, dass sie unter allen Umständen die geforderten Zeitvorgaben einhalten. Das Kapitel führt in die Grundlagen der Steuerungstechnik und Regelungstechnik ein, die in der Automatisierungstechnik eine zentrale Rolle spielen. Es wird erklärt, wie Systeme gesteuert und geregelt werden, und welche Unterschiede zwischen ereignisdiskretem und zeitdiskretem Verhalten bestehen. Besondere Aufmerksamkeit wird auf die Notwendigkeit der genauen Erfassung und Verarbeitung von Informationen gelegt, um die Systeme effizient zu steuern. Das Kapitel schließt mit einer detaillierten Beschreibung der Methoden zur Entwicklung von Steuerungsalgorithmen und der Erstellung von Zustandsgraphen, die das Verhalten der Systeme beschreiben. Es wird auch auf die Herausforderungen und Besonderheiten der Echtzeitprogrammierung eingegangen, insbesondere auf die Notwendigkeit der Verwendung spezieller Betriebssysteme und Programmiersprachen, die eine vorhersagbare Laufzeit garantieren.
  19. Kapitel 18. Implementierung von Echtzeitsoftware

    Norbert Drescher
    Das Kapitel 'Implementierung von Echtzeitsoftware' unterscheidet zwischen synchroner und asynchroner Echtzeitprogrammierung. Synchroner Echtzeitprogrammierung erfolgt zu festen Zeitpunkten, während asynchrone Programmierung sofort auf Ereignisse reagiert. Synchroner Echtzeitprogrammierung nutzt periodische Zeitpunkte zur Erfassung von Ereignissen und reagiert zu definierten Zeiten. Asynchrone Programmierung hingegen reagiert unmittelbar auf Ereignisse, was kürzere Reaktionszeiten ermöglicht, aber ein Echtzeitbetriebssystem erfordert. Das Kapitel beschreibt die zyklische Ausführung von Steuerprogrammen, die Rolle von Funktionszeigern und die Implementierung von Zustandsgraphen. Es werden auch die Unterschiede in der Reaktionszeit und die Notwendigkeit von Echtzeitbetriebssystemen bei asynchroner Programmierung diskutiert. Besondere Aufmerksamkeit wird der Implementierung von Zeitereignissen und der Überwachung der Ein- und Ausgaben geschenkt. Das Kapitel endet mit einer Zusammenfassung der wichtigsten Punkte und Hinweisen zur Realisierung von Steuerungen.
  20. Backmatter

Titel
Software-Entwicklung für Ingenieure und Ingenieurinnen
Verfasst von
Norbert Drescher
Copyright-Jahr
2024
Verlag
Springer Berlin Heidelberg
Electronic ISBN
978-3-662-67369-0
Print ISBN
978-3-662-67368-3
DOI
https://doi.org/10.1007/978-3-662-67369-0

Informationen zur Barrierefreiheit für dieses Buch folgen in Kürze. Wir arbeiten daran, sie so schnell wie möglich verfügbar zu machen. Vielen Dank für Ihre Geduld.

    Bildnachweise
    AvePoint Deutschland GmbH/© AvePoint Deutschland GmbH, ams.solutions GmbH/© ams.solutions GmbH, Wildix/© Wildix, arvato Systems GmbH/© arvato Systems GmbH, Ninox Software GmbH/© Ninox Software GmbH, Nagarro GmbH/© Nagarro GmbH, GWS mbH/© GWS mbH, CELONIS Labs GmbH, USU GmbH/© USU GmbH, G Data CyberDefense/© G Data CyberDefense, Vendosoft/© Vendosoft, Deutsche Telekom MMS GmbH/© Vendosoft, Noriis Network AG/© Noriis Network AG, Asseco Solutions AG/© Asseco Solutions AG, AFB Gemeinnützige GmbH/© AFB Gemeinnützige GmbH, Ferrari electronic AG/© Ferrari electronic AG, Doxee AT GmbH/© Doxee AT GmbH , Haufe Group SE/© Haufe Group SE, NTT Data/© NTT Data, Videocast 1: Standbild/© Springer Fachmedien Wiesbaden, IT-Director und IT-Mittelstand: Ihre Webinar-Matineen /© da-kuk / Getty Images / iStock