Qualitätsanforderungenedit

Was auch immer der Ansatz zur Entwicklung sein mag, das endgültige Programm muss einige grundlegende Eigenschaften erfüllen. Die folgenden Eigenschaften gehören zu den wichtigsten:

  • Zuverlässigkeit: wie oft die Ergebnisse eines Programms korrekt sind. Dies hängt von der konzeptionellen Korrektheit der Algorithmen und der Minimierung von Programmierfehlern wie Fehlern im Ressourcenmanagement (z. B. Pufferüberläufe und Rennbedingungen) und Logikfehlern (z. B. Division durch Null-oder Off-by-One-Fehler) ab.,
  • Robustheit: Wie gut ein Programm Probleme aufgrund von Fehlern (nicht Bugs) antizipiert. Dazu gehören Situationen wie falsche, unangemessene oder beschädigte Daten, Nichtverfügbarkeit benötigter Ressourcen wie Speicher, Betriebssystemdienste und Netzwerkverbindungen, Benutzerfehler und unerwartete Stromausfälle.
  • Benutzerfreundlichkeit: die Ergonomie eines Programms: die Leichtigkeit, mit der eine Person das Programm für den beabsichtigten Zweck oder in einigen Fällen sogar für unerwartete Zwecke verwenden kann. Solche Probleme können ihren Erfolg auch unabhängig von anderen Problemen machen oder brechen., Dies beinhaltet eine breite Palette von textlichen, grafischen und manchmal Hardwareelementen, die die Klarheit, Intuitivität, Kohäsion und Vollständigkeit der Benutzeroberfläche eines Programms verbessern.
  • Portabilität: Die Bandbreite der Computerhardware-und Betriebssystemplattformen, auf denen der Quellcode eines Programms kompiliert/interpretiert und ausgeführt werden kann., Dies hängt von Unterschieden in den Programmierfunktionen ab, die von den verschiedenen Plattformen bereitgestellt werden, einschließlich Hardware-und Betriebssystemressourcen, erwartetem Verhalten der Hardware und des Betriebssystems sowie Verfügbarkeit plattformspezifischer Compiler (und manchmal Bibliotheken) für die Sprache des Quellcodes.
  • Wartbarkeit: Die Leichtigkeit, mit der ein Programm von seinen gegenwärtigen oder zukünftigen Entwicklern geändert werden kann, um Verbesserungen oder Anpassungen vorzunehmen, Fehler und Sicherheitslücken zu beheben oder es an neue Umgebungen anzupassen., Gute Praktiken während der ersten Entwicklung machen diesbezüglich den Unterschied. Diese Qualität ist für den Endbenutzer möglicherweise nicht direkt ersichtlich, kann jedoch das Schicksal eines Programms langfristig erheblich beeinflussen.
  • Effizienz / Leistung: Messung der Systemressourcen, die ein Programm verbraucht (Prozessorzeit, Speicherplatz, langsame Geräte wie Festplatten, Netzwerkbandbreite und in gewissem Maße sogar Benutzerinteraktion): Je weniger, desto besser. Dazu gehört auch die sorgfältige Verwaltung von Ressourcen, z. B. das Bereinigen temporärer Dateien und das Beseitigen von Speicherlecks., Dies wird oft im Schatten einer gewählten Programmiersprache diskutiert. Obwohl die Sprache sicherlich die Leistung beeinflusst, können selbst langsamere Sprachen wie Python Programme aus menschlicher Sicht sofort ausführen. Geschwindigkeit, Ressourcennutzung und Leistung sind wichtig für Programme, die das System engstellen, aber auch eine effiziente Nutzung der Programmierzeit ist wichtig und hängt mit den Kosten zusammen: Mehr Hardware kann billiger sein.,

Lesbarkeit von Quellcode codeEdit

In der Computerprogrammierung bezieht sich Lesbarkeit auf die Leichtigkeit, mit der ein menschlicher Leser den Zweck, den Kontrollfluss und den Betrieb von Quellcode verstehen kann. Es beeinflusst die oben genannten Aspekte der Qualität, einschließlich Portabilität, Benutzerfreundlichkeit und vor allem Wartbarkeit.

Die Lesbarkeit ist wichtig, da Programmierer den größten Teil ihrer Zeit damit verbringen, vorhandenen Quellcode zu verstehen und zu ändern, anstatt neuen Quellcode zu schreiben. Unlesbarer Code führt häufig zu Fehlern, Ineffizienzen und dupliziertem Code., Eine Studie ergab, dass einige einfache Lesbarkeitstransformationen Code kürzer machten und die Zeit zum Verstehen drastisch verkürzten.

Nach einem konsistenten Programmierstil hilft oft Lesbarkeit. Lesbarkeit ist jedoch mehr als nur Programmierstil. Viele Faktoren, die wenig oder nichts mit der Fähigkeit des Computers zu tun haben, den Code effizient zu kompilieren und auszuführen, tragen zur Lesbarkeit bei. Einige dieser Faktoren umfassen:

  • Verschiedene Einrückungsstile (Leerzeichen)
  • Zerlegung
  • Namenskonventionen für Objekte (wie Variablen, Klassen, Prozeduren usw.,)

Die Präsentationsaspekte (wie Einrückungen, Zeilenumbrüche, Farbhervorhebung usw.) werden häufig vom Quellcode-Editor behandelt, aber die Inhaltsaspekte spiegeln das Talent und die Fähigkeiten des Programmierers wider.

Verschiedene visuelle Programmiersprachen wurden ebenfalls mit der Absicht entwickelt, Lesbarkeitsprobleme zu lösen, indem nicht traditionelle Ansätze zur Codestruktur und-anzeige verwendet werden. Integrierte Entwicklungsumgebungen (IDEs) zielen darauf ab, alle diese Hilfe zu integrieren. Techniken wie Code-Refactoring können die Lesbarkeit verbessern.,

Algorithmische Komplexitätedit

Sowohl der akademische Bereich als auch die technische Praxis der Computerprogrammierung befassen sich weitgehend mit der Entdeckung und Implementierung der effizientesten Algorithmen für eine bestimmte Problemklasse. Zu diesem Zweck werden Algorithmen unter Verwendung der sogenannten Big O-Notation, die die Ressourcennutzung wie Ausführungszeit oder Speicherverbrauch in Bezug auf die Größe einer Eingabe ausdrückt, in Aufträge eingeteilt., Erfahrene Programmierer sind mit einer Vielzahl etablierter Algorithmen und ihrer jeweiligen Komplexität vertraut und nutzen dieses Wissen, um Algorithmen auszuwählen, die den Umständen am besten entsprechen.

Chess algorithms as an exampleEdit

„Programming a Computer for Playing Chess“ war ein 1950-Papier, das einen „Minimax“ – Algorithmus bewertete, der Teil der Geschichte der algorithmischen Komplexität ist; Ein Kurs über IBMs Deep Blue (Schachcomputer) ist Teil des Informatik-Lehrplans an der Stanford University.,

MethodologienEdit

Der erste Schritt in den meisten formalen Softwareentwicklungsprozessen ist die Anforderungsanalyse, gefolgt von Tests zur Bestimmung der Wertmodellierung, Implementierung und Fehlerbeseitigung (Debugging). Es gibt viele unterschiedliche Ansätze für jede dieser Aufgaben. Ein für die Anforderungsanalyse beliebter Ansatz ist die Anwendungsfallanalyse. Viele Programmierer verwenden Formen der agilen Softwareentwicklung, bei denen die verschiedenen Phasen der formalen Softwareentwicklung stärker in kurze Zyklen integriert sind, die einige Wochen und nicht Jahre dauern., Es gibt viele Ansätze für den Softwareentwicklungsprozess.

Beliebte Modellierungstechniken umfassen objektorientierte Analyse und Design (OOAD) und modellgesteuerte Architektur (MDA). Die Unified Modeling Language (UML) ist eine Notation, die sowohl für OOAD als auch für MDA verwendet wird.

Eine ähnliche Technik, die für das Datenbankdesign verwendet wird, ist die Entity-Relationship-Modellierung (ER-Modellierung).

Implementierungstechniken umfassen imperative Sprachen (objektorientiert oder prozedural), funktionale Sprachen und Logiksprachen.,

Mess-Sprache usageEdit

Hauptartikel: Messung der Programmiersprache Popularität

Es ist sehr schwierig zu bestimmen, was sind die beliebtesten Programmiersprachen., Methoden zur Messung der Beliebtheit von Programmiersprachen umfassen: Zählen der Anzahl der Stellenanzeigen, in denen die Sprache erwähnt wird, der Anzahl der verkauften Bücher und der Kurse, in denen die Sprache unterrichtet wird (dies überschätzt die Bedeutung neuerer Sprachen), und Schätzungen der Anzahl vorhandener Codezeilen in der Sprache (dies unterschätzt die Anzahl der Benutzer von Geschäftssprachen wie COBOL).

Einige Sprachen sind sehr beliebt für bestimmte Arten von Anwendungen, während einige Sprachen regelmäßig verwendet werden, um viele verschiedene Arten von Anwendungen zu schreiben., Zum Beispiel ist COBOL immer noch stark in Unternehmensdatenzentren, oft auf großen Mainframe-Computern, Fortran in Engineering-Anwendungen, Skriptsprachen in der Webentwicklung und C in eingebetteter Software. Viele Anwendungen verwenden eine Mischung aus mehreren Sprachen in ihrer Konstruktion und Verwendung. Neue Sprachen basieren im Allgemeinen auf der Syntax einer früheren Sprache, wobei neue Funktionen hinzugefügt wurden (z. B. fügt C++ C Objektorientierung hinzu, und Java fügt C++ Speicherverwaltung und Bytecode hinzu, verliert jedoch an Effizienz und die Fähigkeit zur Manipulation auf niedriger Ebene).,

DebuggingEdit

Der erste bekannte tatsächliche Fehler, der ein Problem in einem Computer verursachte, war eine Motte, die in einem Harvard-Mainframe gefangen war und in einem Logbucheintrag vom 9.September 1947 aufgezeichnet wurde. „Bug“ war bereits ein allgemeiner Begriff für einen Softwarefehler, als dieser Fehler gefunden wurde.

Hauptartikel: Debugging

Das Debuggen ist eine sehr wichtige Aufgabe im Softwareentwicklungsprozess, da Fehler in einem Programm erhebliche Folgen für seine Benutzer haben können., Einige Sprachen sind anfälliger für einige Arten von Fehlern, da für ihre Spezifikation Compiler nicht so häufig überprüft werden müssen wie andere Sprachen. Die Verwendung eines statischen Code-Analyse-Tools kann helfen, einige mögliche Probleme zu erkennen. Normalerweise besteht der erste Schritt beim Debuggen darin, das Problem zu reproduzieren. Dies kann eine nicht triviale Aufgabe sein, beispielsweise bei parallelen Prozessen oder einigen ungewöhnlichen Softwarefehlern. Außerdem können bestimmte Benutzerumgebungen und der Nutzungsverlauf die Reproduktion des Problems erschweren.,

Nachdem der Fehler reproduziert wurde, muss die Eingabe des Programms möglicherweise vereinfacht werden, um das Debuggen zu erleichtern. Wenn beispielsweise ein Fehler in einem Compiler beim Parsen einer großen Quelldatei zum Absturz bringen kann, kann eine Vereinfachung des Testfalls, die nur zu wenigen Zeilen aus der ursprünglichen Quelldatei führt, ausreichen, um denselben Absturz zu reproduzieren. Trial-and-Error/Divide-and-Conquer ist erforderlich: Der Programmierer wird versuchen, einige Teile des ursprünglichen Testfalls zu entfernen und zu überprüfen, ob das Problem noch besteht., Beim Debuggen des Problems in einer GUI kann der Programmierer versuchen, einige Benutzerinteraktionen von der ursprünglichen Problembeschreibung zu überspringen und zu überprüfen, ob die verbleibenden Aktionen ausreichen, damit Fehler auftreten. Scripting und Breakpointing ist ebenfalls Teil dieses Prozesses.

Das Debuggen erfolgt häufig mit IDEs wie Eclipse, Visual Studio, Xcode, Kdevelop, NetBeans und Code::Blocks. Eigenständige Debugger wie GDB werden ebenfalls verwendet, und diese bieten oft weniger visuelle Umgebung, normalerweise über eine Befehlszeile. Einige Texteditoren wie Emacs ermöglichen den Aufruf von GDB über sie, um eine visuelle Umgebung bereitzustellen.,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.