Software

Bei der Software  ist in erster Linie danach zu unterscheiden, ob es sich um Betriebssystemsoftware  oder um Anwendersoftware  handelt.

Betriebssystem

Das Betriebssystem  organisiert und steuert die Zusammenarbeit zwischen Hard- und Software und damit die „Lebensfunktionen“ des Computers. Das Betriebssystem sorgt beispielsweise dafür, daß die auf der Tastatur eingegebenen Buchstaben am Bildschirm angezeigt werden, ohne daß man sich bewußt darum kümmern muss.

Programme oder bestimmte Teile von Programmen können im Hintergrund laufen (z.B. Druckprogramme, wie Druck-Spooler oder Druckmonitore).

Die Betriebssysteme sind sowohl für die drei EDV-Welten spezifisch als auch innerhalb der Welten bezüglich der Prozessortypen, d.h. jeder Prozessortyp ist für ein bestimmtes Betriebssystem besonders gut geeignet und umgekehrt. Typische Betriebssysteme  für Großrechner sind z.B. VM  und MVS  (IBM), BS2000  (Siemens). Typische Betriebssysteme für PC sind DOS, Windows, Linux (als sog. Open Source Software) und OS/2.

Eine Sonderrolle spielt das Betriebssystem UNIX , das für alle drei Welten verfügbar ist und deshalb vor dem Durchbruch von Windows 95  bzw. Windows NT  als Favorit für die Zukunft angesehen wurde und teilweise auch heute noch wird.

Betriebssysteme können mehr oder weniger Komfort bieten, mehr oder weniger komplex sein. Daraus folgt, daß unterschiedliche Betriebssysteme auch auf demselben Prozessor unterschiedlich schnell sein können.

Komfortable, benutzerfreundliche Betriebssysteme sind meist derart komplex, daß es zu undurchschaubaren, nicht mehr nachvollziehbaren Effekten kommen kann.

Betriebssystem und Datenorganisation

Eine der aus Anwendersicht wichtigsten Funktionen des Betriebsystems ist die Organisation der Daten in einer solchen Weise, daß man als Benutzer den Überblick behalten kann. Die meisten Betriebssysteme kennen den Begriff der Datei  (engl. File[1] ) als Zusammenfassung zusammengehörender Daten. Ebenfalls die meisten Betriebssysteme kennen Hilfsmittel zur Zusammenfassung zusammengehörender Dateien; in DOS und Windows heißen diese Objekte „Verzeichnisse (engl. Directory ) bzw. „Ordner . Die Zuordnung des physikalischen Speicherortes erfolgt über die File-Allocation-Table (FAT). Die Inhalte von Dateien brauchen physikalisch auf dem Speicher nicht direkt hintereinander zu stehen; sie können fragmentiert sein. Dies hat hinsichtlich der Zugriffszeiten und Speicherorganisation Vorteile, kann sich aber bei zu starker Fragmentierung auch negativ auswirken (dafür gibt es Defragmentierungsprogramme). Zu beachten ist, dass das Löschen einer Datei nicht dazu führt, dass alle Inhalte dieser Datei auf dem Speicher gelöscht werden. Gelöscht wird vielmehr nur der Eintrag der Datei im directory, was dazu führt, dass der dieser Datei zugewiesene Speicherplatz freigegeben wird und von anderen Dateien benutzt werden kann. Zunächst sind aber die Inhalte noch da und können mit geeigneter Software auch rekonstruiert werden. Dies ist einerseits ein datenschutzrechtliches Problem, andererseits eine Chance bei versehentlichen Löschungen.

Mit Hilfe dieser Werkzeuge lässt sich eine einigermaßen transparente Datenverwaltung bewerkstelligen. Will man mehr, muß man auf ein sog. Datei- bzw. Dokumentenverwaltungssystem .

Anwendersoftware

Es gibt einen zunehmenden Trend zur Vermischung der nachfolgend aufgeführten Basissoftwaretypen, durch immer weitreichendere Funktionserweiterungen der einzelnen Programmtypen, wie z.B. eine Annäherung von Textverarbeitungsprogrammen an Tabellenkalkulationsprogramme durch die Möglichkeit von Tabellen- und Rechenfunktionen in der Textverarbeitung.

Die wichtigsten Arten von Anwendersoftware sind die folgenden:

Textverarbeitungsprogramme
Datenbanksysteme .

Hier ist zwischen folgenden Typen bzw. Varianten zu unterscheiden:

·         Dateiverwaltungssysteme

·         Relationale Datenbanksysteme , als wichtigster Fall. Hier werden Daten in Form von Tabellen  und Beziehungen  zwischen diesen Tabellen und ihren Elementen verwaltet. Ein Beispiel für eine relationale Datenbank ist die Stammdatenverwaltung   in einer Kanzlei. Hier gibt es das Prozeßregister als Tabelle mit den Spalten Prozeßregisternummer, Mandant, Gegner, Gericht und Aktenzeichen. Dann gibt es die Postadressen als Tabelle mit den Spalten Name, Vorname, Straße, Hausnummer, Postleitzahl und Ort, die mit der Prozeßregistertabelle in der Weise verknüpft ist, daß die Felder, die etwas mit Postadressen zu tun haben (Mandant, Gegner, Gericht), auf die entsprechenden Einträge der Postadressentabelle Bezug nehmen. Diese Verknüpfung bzw. Bezugnahme nennt man Relation  (Beziehung ).

Ein wichtiger Begriff in bezug auf Datenbanken, aber auch in bezug auf die gesamte EDV ist der Begriff der Redundanz  (siehe hierzu unten ).

 

Tabellenkalkulationsprogramme

 

Browser

Browser sind stark im Trend als generelle Benutzeroberfläche. Ein Browser ist ein Programm, das in der Lage ist, Datenformate unterschiedlicher Art zu erkennen und darzustellen, also z.B. Text, Grafik und Sound.

Neben der oben erwähnten Vermischung der Typen durch erweiterte Funktionsumfänge ist ein Trend zu immer weitergehenden Möglichkeiten der Integration  der verschiedenen Programme und Programmtypen vorhanden. Beim Einsatz geeigneter Betriebssysteme können die verschiedenen Anwendungen miteinander kombiniert, miteinander verknüpft bzw. die Daten aus den einzelnen Anwendungen ausgetauscht werden.

Makros und Makrosprachen

Die meisten Anwendungsprogramme verfügen über eine sog. Makrosprache. Ein Makro  greift meist an der Schnittstelle zwischen Tastatur und Arbeitsspeicher ein. Dadurch ist es möglich, Makros aufzuzeichnen, in dem man den Routinevorgang einmal ganz durchführt und nachher die Aufzeichnung durch einen kurzen Befehl wieder ablaufen läßt. Das ist die einfachste Art der Makroprogrammierung. Selbstverständlich können die Makros aber auch direkt programmiert werden oder aber eine aufgezeichnete Makrodatei kann weiterbearbeitet werden, so daß der Funktionsumfang des Makros erweitert wird.

Ein Beispiel für ein einfaches Makro im Bereich Textverarbeitung ist das Suchen und Ersetzen einer Textpassage in allen grammatikalischen Formen (Nominativ, Genitiv usw.; Singular und Plural).

Ein häufiges Problem bei der Makroprogrammierung ist die Formulierung eines sinnvollen Endekriteriums für den Makro; z.B. „Wenn Ende der Fahnenstange erreicht, dann nicht weiterklettern“. Falsche Endekriterien führen häufig zu unbeabsichtigten Effekten bis hin zu Datenverlusten.

Der Begriff der Redundanz

Der Begriff der Redundanz  spiegelt das Dilemma zwischen doppelter Speicherung und Zerfaserung von Datenbeständen wider. Redundante Datenbestände sind oft leichter durchschaubar, aber mit der Zeit immer schwieriger und aufwendiger in der Pflege, insbesondere im Hinblick auf die Konsistenz. Nicht redundante Datenbestände sind oft kaum durchschaubar, weshalb es, je mehr man Redundanz vermeiden will, um so schwieriger wird, sicher funktionierende Programme für die Bearbeitung und Pflege der Daten zu erstellen. Wie so oft liegt die optimale Lösung auf dem Mittelweg zischen extremer Redundanz und völliger Redundanzvermeidung.

Unter dem Gesichtspunkt der Redundanz als positiv zu vermerken sind Sicherungskopien . Zwar sind hier Datenbestände zunächst doppelt angelegt, aber es ist immer klar, welcher Datenbestand der zur Weiterarbeit authentische Datenbestand ist.

Begriffe aus der Softwareentwicklung [2]

Programmiersprachen  sind Mittler zwischen dem Befehlssatz  des Prozessors  (als auf 0 und 1 bzw. „ja“ und „nein“ fußender mathematischer Logik), auch Maschinensprache  genannt, und menschlicher Sprache als Ausdruck von Ideen und Kreativität. Dabei gibt es verschiedene Stufen auf der Leiter zwischen Maschinensprache und menschlicher Sprache. Im einzelnen unterscheidet man zwischen:

·         maschinennahen bzw. maschinenorientierten Sprachen, z.B. Assembler , mit denen unter Opferung einleuchtender menschlicher Vorstellungen (z.B. objektorientierte Programmierung) die Möglichkeiten des Prozessors optimal ausgeschöpft werden können. Dies wird häufig für sehr zeitkritische Programme, wie z.B. Steuerungsprogramme für Kernkraftwerke, benutzt.

·         Sogenannte höhere Programmiersprachen , die sich stark an die menschlichen Vorstellungen zu den jeweiligen mit den zu erstellenden Programmen zu lösenden Probleme anlehnen. Wegen dieser Anlehnung gibt es stark unterschiedliche für die verschiedenen Zwecke geeignete höhere Programmiersprachen. Höhere Programmiersprachen sind z.B. Basic , C, Lisp , Prolog , PL1 , ALGOL , FORTRAN , COBOL .

Makrosprachen  gehören nicht eigentlich in diese Kategorien. Sie beziehen sich immer auf eine Anwendersituation, Wobei zu berücksichtigen ist, daß sich ein Programmierer, der sehr maschinennah arbeitet, auch in einer Anwendersituation befindet und deshalb auch in diesem sehr maschinennahen Bereich Makrosprachen benutzt werden. Damit sind Makrosprachen auf allen Ebenen denkbar, nützlich und meist auch realisiert.

Sofern Programme nicht direkt in Maschinensprache geschrieben werden, was in der Praxis nie gemacht wird, müssen die in einer Programmiersprache geschriebenen Programme (Quellcode) in Maschinensprache  (Maschinencode) übersetzt werden, damit der Prozessor sie ausführen kann. Hierzu werden Übersetzungsprogramme  benutzt. Dazu gibt es prinzipiell zwei Möglichkeiten, nämlich Compiler  und Interpreter .

·         Sogenannte Interpreter sind Übersetzungsprogramme , die der Reihe nach je einen Befehl der Programmiersprache  in einen Befehl der Maschinensprache  übersetzen und diesen dann gleich ausführen (interpretieren). Interpreter  vermischen also die Programmübersetzung  mit der Programmausführung  und sind deshalb langsamer. Sie müssen auch bei jeder Programmausführung  den Übersetzungsvorgang  wiederholen, was bei vielfacher Ausführung zu starken zeitlichen Nachteilen führt. Allerdings ist die Programmentwicklung mit Interpretern etwas einfacher und meist schneller, weil man durch die sofortige Programmausführung etwaige Programmierfehler schneller erkennt.

·         Sogenannte Compiler sind Übersetzungsprogramme, die zuerst den gesamten Quellcode  in Maschinencode  übersetzen, also ein komplettes Maschinenprogramm  (häufig auch als Run-Time-Version  bezeichnet) erzeugen. Erst in einem zweiten Schritt werden diese Maschinenprogramme dann ausgeführt. Bei mehrfacher Programmausführung  wird also die Zeit für die Übersetzung nur einmal benötigt. Zudem führen die meisten Compiler noch Optimierungen  durch, da diese Übersetzungsprogramme  etwaige suboptimale Konstruktionen im Maschinencode erkennen können und diese dann unter Berücksichtigung der Fähigkeiten des Prozessors optimieren. Manche Compiler sind auch in der Lage, von der höheren Programmiersprache  in eine niedrige Programmiersprache (z.B. in Assembler ) zu übersetzen, damit der Programmierer auf dieser maschinennahen Ebene die Möglichkeit hat, selbst einzelne Optimierungen vorzunehmen, ohne sich der Mühe unterziehen zu müssen, das gesamte Programm in der niederen Sprache zu schreiben.

Entsprechend dieser Einteilung in niedere und höhere Programmiersprachen und der Anschauungsgebundenheit der höheren Programmiersprachen unterscheidet man mehrere Arten bzw. Stile von Programmierungen , nämlich:

·         Bei maschinenorientierter Programmierung  steht (egal mit welcher Programmiersprache das Programm erstellt wird) die optimale Ausnutzung der Fähigkeiten des Prozessors im Vordergrund, auch wenn das Programm dadurch eher unanschaulich und wenig benutzerfreundlich wirkt.

·         Bei ablauforientierter Programmierung  steht die strenge Befolgung vorher festgelegter Abläufe im Vordergrund. Diese Art der Programmierung ist dazu geeignet, ohne große Vorarbeiten Routineabläufe in Programme zu fassen. Die dabei entstehenden Programme nutzen häufig weder die Möglichkeiten des Prozessors optimal aus, noch sind sie benutzergerecht, weil sie den Benutzer in eine Art Fließbandarbeit hinein zwingen.

·         Bei der funktionsorientierten Programmierung  werden nicht einfach die bestehenden Abläufe in der EDV abgebildet, sondern zuerst benutzerorientierte Funktionen herausgearbeitet, die das Programm dann abbildet. Das erfordert eine größere Vorarbeit; der Programmierer muß sich stärker in die Welt des Benutzers und dessen Sicht der Probleme hineindenken und bei der Programmierung stark mit dem späteren Benutzer zusammenarbeiten. Diese Programme sind in der Erstellung zwar aufwendiger, aber aus Benutzersicht besser. Die Frage der optimalen Nutzung der Möglichkeiten des Prozessors ist hier zweitrangig und wird häufig durch modernere Technik (größer und schneller) ausgeglichen.

·         Die modernste Art der Programmierung ist die sogenannte objektorientierte Programmierung . Hier wird die Welt des Benutzers nicht in einzelne programmtechnisch bewältigbare Funktionen zergliedert, sondern es werden sogenannte Objekte  definiert, die der Weltsicht des Benutzers  entsprechen und die dann ohne, daß man etwas über Funktionen oder tiefere technische Zusammenhänge des Computers wissen muß, gehandhabt werden können. Zum Beispiel klickt der Benutzer das zu löschende Objekt, das ein Textstück, ein Datensatz einer Datenbank, eine ganze Datei, ein Programm oder sogar eine ganze Gruppe von Dateien und Programmen sein kann, mit der Maus an und zieht es auf die Abbildung eines Papierkorbs, was dann die Löschung des Objekts nach sich zieht. Objektorientierte Programmierung und grafische Benutzeroberflächen  passen sehr gut zusammen und bedingen sich sogar teilweise gegenseitig.

Von entscheidender Bedeutung bei jeder Programmierung ist die Vorstellung, die sich der Programmierer von der Problemwelt des Anwenders macht, bzw. mit welchen gedanklichen Modellen er arbeitet.[3]

Mit diesen einzelnen Arten der Programmierung und weiteren Fragen verschiedener Programmierstile und -methoden beschäftigt sich das sog. Software-Engeneering , das dem Programmierer einige Zwänge aufnötigen kann, das aber dazu führt, daß auch andere Programmierer später an dem Programm Änderungen und Weiterentwicklungen vornehmen können. Ohne Berücksichtigung des Software-Engeneering kann zwar ein geniales Programm entstehen, aber niemand - außer dem genialen Programmierer selbst - versteht das Programm.

Zur Erleichterung der Programmierarbeit werden häufig sog. Tools  (engl. Werkzeuge ) eingesetzt, die die Programmentwicklung erleichtern und unterstützen. Diese Tools werden häufig von den Herstellern der Programmiersprachen aber auch von Drittanbietern geliefert und bilden dann zusammen mit den Compilern bzw. Interpretern eine sog. Entwicklungsumgebung .

 

Beispiel für das Vorgehen bei der Programmierung

 

Als einfaches Beispiel für die Vorgehensweise bei der Programmierung soll die Addition zweier einzugebender Zahlen dienen. Zur Pragrammentwicklung und –erstellung müssen folgende Schritte Durchlaufen werden:

Problemanalyse

·         Wie groß können die zu addierenden Zahlen sein?

·         Welchen Typus können diese Zahlen haben (Ganze Zahlen oder Komma-Zahlen, ggf. wie viele Stellen hinter dem Komma haben diese Zahlen)?

·         Wie sollen diese Zahlen eingegeben bzw. dargestellt werden können (Dezimalsystem, wie viele Stellen hinter dem Komma sollen angezeigt werden; Exponentielle Darstellung)?

·         Welche mathematischen Verfahren bzw. Regeln gibt es in Bezug auf die Aufgabenstellung?

Systemanalyse

Bei diesem Schritt ist zu klären, welche computerspezifischen Hilfsmittel zur Lösung der Aufgabenstellung zur Verfügung stehen und welche zweckmäßigerweise für die konkrete Programmierung verwendet werden sollen. Im einzelnen sind folgende Fragen zu klären:

·         Welche Hardware (Prozessortyp; Art und Größe des Arbeitsspeichers; Art und Größe der Massenspeicher; Art und Größe sonstiger Hardwarekomponenten) sind nötig bzw. kommen zur Problemlösung in Betracht?

·         Welches Betriebssystem kann/soll verwendet werden? Die Beantwortung dieser Frage hat eine sehr enge Wechselwirkung mit der Frage der einzusetzenden Hardware, insbesondere im Hinblick auf Prozessortyp und Arbeitsspeicher.

·         Welche Programmiersprache kann/soll verwendet werden? Hier sind weitere differenzierende Fragen zu stellen; z.B.:

·          Welche Programmiersprache kann die Zahlen und Rechenschritte aus der Problemanalyse am besten handhaben

·         Ist das zu lösende Problem zeitkritisch, d.h. wird das Ergebnis innerhalb einer bestimmten Zeit z.B. zur Steuerung eines Kraftwerks, benötigt?

Bei der Systemanalyse kann der Schwerpunkt auf computerspezifischen oder aber auf unternehmensspezifischen Elementen liegen; je nachdem kann zwischen technikorientierter und unternehmensberatungsorientierter Systemanalyse unterschieden werden. In der Praxis sind meist beide Gesichtspunkte wichtig.

In der falschen Gewichtung dieser Schwerpunkte liegen häufig die Ursachen für Fehlleistungen (z.B. beabsichtigte Einsparungen treten nicht ein). Eine falsche Gewichtung führt auch häufig dazu, dass aus rechtlicher Sicht bestehende Beratungspflichten übersehen werden.



[1] Achtung: Englisch „file“ heißt auch Akte.

[2] Vgl. Deifel, Hinkel, Paech, Scholz, Thurner, Die Praxis der Softwareentwicklung: Eine Erhebung, Informatik Spektrum 1999, 24 ff [Mat 1].

[3] Vgl. hierzu Schefe, Softwaretechnik und Erkenntnistheorie, Informatik Spektrum 1999, 122 ff.