Computersoftware

Computersoftware

Computersoftware oder einfach Software ist eine Sammlung von Daten oder Computeranweisungen, die dem Computer die Funktionsweise mitteilen. Dies steht im Gegensatz zu physischer Hardware, aus der das System aufgebaut ist und die Arbeit tatsächlich ausführt. In der Informatik und Softwareentwicklung sind Computersoftware alle Informationen, die von Computersystemen, Programmen und Daten verarbeitet werden. Computersoftware umfasst Computerprogramme, Bibliotheken und verwandte nicht ausführbare Daten wie Online-Dokumentation oder digitale Medien. Computerhardware und -software erfordern einander und können nicht für sich allein realistisch eingesetzt werden.

Source code

Auf der niedrigsten Programmierebene besteht ausführbarer Code aus Anweisungen in Maschinensprache, die von einem einzelnen Prozessor unterstützt werden – normalerweise einer Zentraleinheit (CPU) oder einer Grafikverarbeitungseinheit (GPU). Eine Maschinensprache besteht aus Gruppen von Binärwerten, die Prozessoranweisungen angeben, die den Status des Computers von seinem vorherigen Status ändern. Beispielsweise kann eine Anweisung den an einem bestimmten Speicherort im Computer gespeicherten Wert ändern – ein Effekt, der für den Benutzer nicht direkt erkennbar ist. Eine Anweisung kann auch eine von vielen Eingabe- oder Ausgabeoperationen aufrufen, beispielsweise das Anzeigen von Text auf einem Computerbildschirm; Statusänderungen verursachen, die für den Benutzer sichtbar sein sollten. Der Prozessor führt die Anweisungen in der angegebenen Reihenfolge aus, es sei denn, er wird angewiesen, zu einer anderen Anweisung zu „springen“, oder er wird vom Betriebssystem unterbrochen. Ab 2015 verfügen die meisten PCs, Smartphones und Server über Prozessoren mit mehreren Ausführungseinheiten oder mehrere Prozessoren, die gemeinsam Berechnungen durchführen, und das Rechnen ist zu einer viel gleichzeitigeren Aktivität geworden als in der Vergangenheit.

Der Großteil der Software ist in höheren Programmiersprachen geschrieben. Sie sind für Programmierer einfacher und effizienter, da sie natürlichen Sprachen näher stehen als Maschinensprachen. Hochsprachen werden mit einem Compiler oder einem Interpreter oder einer Kombination aus beiden in Maschinensprache übersetzt. Software kann auch in einer Assemblersprache auf niedriger Ebene geschrieben werden, die stark mit den Maschinensprachenanweisungen des Computers übereinstimmt und unter Verwendung eines Assemblers in Maschinensprache übersetzt wird.

Typen

Auf praktisch allen Computerplattformen kann Software in einige große Kategorien eingeteilt werden.

Zweck oder Anwendungsbereich

Basierend auf dem Ziel kann Computersoftware unterteilt werden in:

  • Anwendungssoftware Dies ist eine Software, die das Computersystem verwendet, um spezielle Funktionen auszuführen oder Unterhaltungsfunktionen bereitzustellen, die über die Grundbedienung des Computers selbst hinausgehen. Es gibt viele verschiedene Arten von Anwendungssoftware, da der Aufgabenbereich, der mit einem modernen Computer ausgeführt werden kann, so groß ist – siehe Liste der Software.
  • Systemsoftware Hierbei handelt es sich um Software zum Verwalten des Verhaltens von Computerhardware, um grundlegende Funktionen bereitzustellen, die von Benutzern benötigt werden, oder um andere Software, wenn überhaupt, ordnungsgemäß auszuführen. Die Systemsoftware wurde auch für die Bereitstellung einer Plattform zum Ausführen von Anwendungssoftware entwickelt und umfasst Folgendes:
    • Betriebssysteme Dies sind wichtige Sammlungen von Software, die Ressourcen verwalten und gemeinsame Dienste für andere Software bereitstellen, die „darüber“ ausgeführt wird. Überwachungsprogramme, Bootloader, Shells und Fenstersysteme sind Kernbestandteile von Betriebssystemen. In der Praxis wird ein Betriebssystem mit zusätzlicher Software (einschließlich Anwendungssoftware) geliefert, sodass ein Benutzer möglicherweise mit einem Computer arbeiten kann, der nur ein Betriebssystem hat.
    • Gerätetreiber die einen bestimmten Gerätetyp bedienen oder steuern, der an einen Computer angeschlossen ist. Jedes Gerät benötigt mindestens einen entsprechenden Gerätetreiber. Da ein Computer typischerweise mindestens ein Eingabegerät und mindestens ein Ausgabegerät hat, benötigt ein Computer typischerweise mehr als einen Gerätetreiber.
    • Dienstprogramme Hierbei handelt es sich um Computerprogramme, die Benutzer bei der Wartung und Pflege ihrer Computer unterstützen sollen. Schädliche Software oder
  • Malware Dies ist eine Software, die entwickelt wurde, um Computer zu beschädigen und zu stören. Malware ist daher unerwünscht. Malware ist eng mit Verbrechen im Zusammenhang mit Computern verbunden, obwohl einige Schadprogramme möglicherweise als praktische Witze konzipiert wurden.

Art oder Bereich der Ausführung

  • Desktop-Anwendungen wie Webbrowser und Microsoft Office sowie Smartphone- und Tablet-Anwendungen (sogenannte „Apps“). (In einigen Teilen der Softwareindustrie wird versucht, Desktop-Anwendungen in gewissem Maße mit mobilen Apps zusammenzuführen. Windows 8 und später Ubuntu Touch haben versucht, die Verwendung der gleichen Benutzeroberfläche für Anwendungen auf Desktops, Laptops und Geräten zu ermöglichen Handys.)
  • JavaScript-Skripte sind Softwareteile, die traditionell in Webseiten eingebettet sind und direkt im Webbrowser ausgeführt werden, wenn eine Webseite geladen wird, ohne dass ein Webbrowser-Plugin erforderlich ist. In anderen Programmiersprachen geschriebene Software kann auch im Webbrowser ausgeführt werden, wenn die Software entweder in JavaScript übersetzt wurde oder wenn ein Webbrowser-Plugin installiert ist, das diese Sprache unterstützt. Das häufigste Beispiel für Letzteres sind ActionScript-Skripte, die vom Adobe Flash-Plugin unterstützt werden.
  • Serversoftware, einschließlich:
    • Webanwendungen, die normalerweise auf dem Webserver ausgeführt werden und dynamisch generierte Webseiten an Webbrowser ausgeben, z. PHP, Java, ASP.NET oder sogar JavaScript, das auf dem Server ausgeführt wird. In der heutigen Zeit enthalten diese üblicherweise JavaScript, das auch im Webbrowser ausgeführt werden soll. In diesem Fall werden sie normalerweise teilweise auf dem Server, teilweise im Webbrowser ausgeführt.
  • Plugins und Erweiterungen sind Software, die die Funktionalität einer anderen Software erweitert oder modifiziert und die Verwendung von Software erfordert, um zu funktionieren.
  • Eingebettete Software befindet sich als Firmware in eingebetteten Systemen, Geräten, die für eine einzelne Verwendung bestimmt sind, oder einigen wenigen Verwendungszwecken wie Autos und Fernsehgeräten (obwohl einige eingebettete Geräte wie drahtlose Chipsätze selbst Teil eines gewöhnlichen, nicht eingebetteten Computersystems wie eines PCs sein können oder Smartphone). [12] Im Kontext des eingebetteten Systems gibt es manchmal keine klare Unterscheidung zwischen der Systemsoftware und der Anwendungssoftware. Auf einigen eingebetteten Systemen werden jedoch eingebettete Betriebssysteme ausgeführt, und diese Systeme behalten die Unterscheidung zwischen Systemsoftware und Anwendungssoftware bei (obwohl normalerweise nur eine feste Anwendung immer ausgeführt wird).
  • Microcode ist eine spezielle, relativ undurchsichtige Art von eingebetteter Software, die dem Prozessor selbst sagt, wie Maschinencode ausgeführt werden soll, sodass er tatsächlich eine niedrigere Ebene als Maschinencode aufweist. Es ist in der Regel Eigentum des Prozessorherstellers, und alle erforderlichen Aktualisierungen der Korrektur-Mikrocode-Software werden von diesen an die Benutzer geliefert (was viel billiger ist als der Versand von Ersatzprozessorhardware). Ein gewöhnlicher Programmierer würde also nicht erwarten, sich jemals damit befassen zu müssen.

Programmierwerkzeuge

Programmiertools sind auch Software in Form von Programmen oder Anwendungen, mit denen Softwareentwickler (auch als Programmierer, Codierer, Hacker oder Softwareentwickler bekannt) Software erstellen, debuggen, warten (d. H. Verbessern oder reparieren) oder auf andere Weise unterstützen.

Hacker

Software ist in einer oder mehreren Programmiersprachen geschrieben. Es gibt viele Programmiersprachen, und jede hat mindestens eine Implementierung, von denen jede aus einem eigenen Satz von Programmierwerkzeugen besteht. Diese Tools können relativ eigenständige Programme wie Compiler, Debugger, Interpreter, Linker und Texteditoren sein, die zur Erfüllung einer Aufgabe miteinander kombiniert werden können. oder sie können eine integrierte Entwicklungsumgebung (IDE) bilden, die einen Großteil oder die gesamte Funktionalität solcher in sich geschlossenen Tools kombiniert. IDEs können dies tun, indem sie entweder die relevanten einzelnen Tools aufrufen oder ihre Funktionalität auf eine neue Weise neu implementieren. Eine IDE kann es einfacher machen, bestimmte Aufgaben auszuführen, z. B. das Suchen in Dateien in einem bestimmten Projekt. Viele Programmiersprachenimplementierungen bieten die Möglichkeit, sowohl einzelne Tools als auch eine IDE zu verwenden.

Themen

Die Architektur

Benutzer sehen Dinge oft anders als Programmierer. Menschen, die moderne Allzweckcomputer verwenden (im Gegensatz zu eingebetteten Systemen, analogen Computern und Supercomputern), sehen normalerweise drei Softwareschichten, die eine Vielzahl von Aufgaben ausführen: Plattform-, Anwendungs- und Benutzersoftware.

  • Plattformsoftware – Die Plattform enthält die Firmware, Gerätetreiber, ein Betriebssystem und in der Regel eine grafische Benutzeroberfläche, über die ein Benutzer insgesamt mit dem Computer und seinen Peripheriegeräten (zugehörigen Geräten) interagieren kann. Plattformsoftware wird häufig mit dem Computer geliefert. Auf einem PC kann man normalerweise die Plattformsoftware ändern.
  • Anwendungssoftware – Anwendungssoftware oder Anwendungen sind das, woran die meisten Menschen denken, wenn sie an Software denken. Typische Beispiele sind Bürosuiten und Videospiele. Anwendungssoftware wird häufig separat von Computerhardware gekauft. Manchmal werden Anwendungen mit dem Computer gebündelt, aber das ändert nichts an der Tatsache, dass sie als unabhängige Anwendungen ausgeführt werden. Anwendungen sind normalerweise unabhängige Programme vom Betriebssystem, obwohl sie häufig auf bestimmte Plattformen zugeschnitten sind. Die meisten Benutzer betrachten Compiler, Datenbanken und andere „Systemsoftware“ als Anwendungen.
  • Benutzergeschriebene Software – Die Endbenutzerentwicklung passt die Systeme an die spezifischen Bedürfnisse der Benutzer an. Die Anwendersoftware enthält Tabellenvorlagen und Textverarbeitungsvorlagen. Sogar E-Mail-Filter sind eine Art Benutzersoftware. Benutzer erstellen diese Software selbst und übersehen oft, wie wichtig sie ist. Abhängig davon, wie kompetent die vom Benutzer geschriebene Software in Standardanwendungspakete integriert wurde, sind sich viele Benutzer möglicherweise der Unterscheidung zwischen den Originalpaketen und den von Mitarbeitern hinzugefügten nicht bewusst.

Ausführung

Computersoftware muss in den Speicher des Computers „geladen“ werden (z. B. Festplatte oder Speicher). Sobald die Software geladen wurde, kann der Computer die Software ausführen. Dies beinhaltet das Weiterleiten von Anweisungen von der Anwendungssoftware über die Systemsoftware an die Hardware, die die Anweisung letztendlich als Maschinencode empfängt. Jeder Befehl veranlasst den Computer, eine Operation auszuführen – Daten zu verschieben, eine Berechnung durchzuführen oder den Steuerfluss von Befehlen zu ändern.

Die Datenverschiebung erfolgt normalerweise von einem Ort im Speicher zu einem anderen. Manchmal müssen Daten zwischen Speicher und Registern verschoben werden, um einen Hochgeschwindigkeitsdatenzugriff in der CPU zu ermöglichen. Das Verschieben von Daten, insbesondere großer Mengen, kann kostspielig sein. Dies wird manchmal vermieden, indem stattdessen „Zeiger“ auf Daten verwendet werden. Berechnungen umfassen einfache Operationen wie das Inkrementieren des Werts eines variablen Datenelements. Komplexere Berechnungen können viele Operationen und Datenelemente zusammen umfassen.

Qualität und Zuverlässigkeit

Die Softwarequalität ist sehr wichtig, insbesondere für kommerzielle und Systemsoftware wie Microsoft Office, Microsoft Windows und Linux. Wenn die Software fehlerhaft (fehlerhaft) ist, kann sie die Arbeit einer Person löschen, den Computer zum Absturz bringen und andere unerwartete Dinge tun. Fehler und Irrtümer werden als „Bugs“ bezeichnet, die häufig beim Alpha- und Betatest entdeckt werden. Software ist häufig auch ein Opfer der sogenannten Software-Alterung, der fortschreitenden Leistungsverschlechterung, die sich aus einer Kombination unsichtbarer Fehler ergibt.

Viele Fehler werden durch Softwaretests entdeckt und beseitigt (debuggt). Durch Softwaretests wird jedoch selten – wenn überhaupt – jeder Fehler behoben. Einige Programmierer sagen, dass „jedes Programm mindestens einen weiteren Fehler hat“ (Lubarsky-Gesetz). Bei der Wasserfallmethode der Softwareentwicklung werden normalerweise separate Testteams eingesetzt. Bei neueren Ansätzen, die gemeinsam als agile Softwareentwicklung bezeichnet werden, führen Entwickler häufig alle ihre eigenen Tests durch und demonstrieren die Software regelmäßig Benutzern / Kunden, um Feedback zu erhalten. Software kann durch Unit-Tests, Regressionstests und andere Methoden getestet werden, die manuell oder am häufigsten automatisch durchgeführt werden, da die Menge des zu testenden Codes sehr groß sein kann. Beispielsweise verfügt die NASA über äußerst strenge Softwaretestverfahren für viele Betriebssysteme und Kommunikationsfunktionen. Viele NASA-basierte Operationen interagieren und identifizieren sich über Befehlsprogramme. Dies ermöglicht es vielen Menschen, die bei der NASA arbeiten, funktionale Systeme insgesamt zu überprüfen und zu bewerten. Programme mit Befehlssoftware ermöglichen eine wesentlich einfachere Zusammenarbeit zwischen Hardware-Engineering und Systembetrieb.

Lizenz

Die Lizenz der Software gibt dem Benutzer das Recht, die Software in der lizenzierten Umgebung zu verwenden, und gewährt im Fall von Lizenzen für freie Software auch andere Rechte, wie das Recht, Kopien anzufertigen.

Proprietäre Software kann in zwei Typen unterteilt werden:

  • Freeware, die die Kategorie „kostenlose Testversion“ oder „Freemium“ -Software umfasst (in der Vergangenheit wurde der Begriff „Shareware“ häufig für kostenlose Testversion / Freemium-Software verwendet). Wie der Name schon sagt, kann Freeware kostenlos verwendet werden, obwohl dies bei kostenlosen Testversionen oder Freemium-Software manchmal nur für einen begrenzten Zeitraum oder mit eingeschränkter Funktionalität der Fall ist.
  • Gegen eine Gebühr verfügbare Software, die häufig fälschlicherweise als „kommerzielle Software“ bezeichnet wird und nur beim Kauf einer Lizenz legal verwendet werden kann.

Open-Source-Software hingegen wird mit einer kostenlosen Softwarelizenz geliefert, die dem Empfänger die Rechte einräumt, die Software zu ändern und weiterzugeben.

Patente

Softwarepatente sollen, wie andere Arten von Patenten, einem Erfinder theoretisch eine exklusive, zeitlich begrenzte Lizenz für eine detaillierte Idee (z. B. einen Algorithmus) zur Implementierung einer Software oder einer Komponente einer Software geben. Ideen für nützliche Dinge, die Software tun könnte, und Benutzeranforderungen sollten nicht patentierbar sein, und konkrete Implementierungen (dh die tatsächlichen Softwarepakete, die das Patent implementieren) sollten auch nicht patentierbar sein – letztere sind im Allgemeinen bereits urheberrechtlich geschützt automatisch. Softwarepatente sollen also den mittleren Bereich zwischen Anforderungen und konkreter Implementierung abdecken. In einigen Ländern kann eine Anforderung, dass die beanspruchte Erfindung Auswirkungen auf die physische Welt hat, auch Teil der Anforderungen sein, damit ein Softwarepatent gültig bleibt – obwohl diese nützliche Software Auswirkungen auf die physische Welt hat, kann diese Anforderung sein offen für Debatten. In der Zwischenzeit wurde das amerikanische Urheberrecht auf verschiedene Aspekte des Schreibens des Softwarecodes angewendet.

Softwarepatente sind in der Softwareindustrie umstritten, und viele Menschen vertreten unterschiedliche Ansichten über sie. Eine der kontroversen Quellen ist, dass die oben erwähnte Trennung zwischen ursprünglichen Ideen und Patent von Patentanwälten in der Praxis nicht anerkannt zu werden scheint – zum Beispiel das Patent für aspektorientierte Programmierung (AOP), das angeblich Rechte an einem Programmierwerkzeug beansprucht Umsetzung der Idee von AOP, wie auch immer umgesetzt. Eine weitere Quelle von Kontroversen ist die Auswirkung auf die Innovation. Viele angesehene Experten und Unternehmen argumentieren, dass Software ein so schnelllebiges Feld ist, dass Softwarepatente lediglich enorme zusätzliche Prozesskosten und -risiken verursachen und Innovationen tatsächlich verzögern. Im Falle von Debatten über Softwarepatente außerhalb der USA wurde argumentiert, dass große amerikanische Unternehmen und Patentanwälte wahrscheinlich die Hauptnutznießer der Erlaubnis oder der Erlaubnis von Softwarepatenten sind.

Design und Implementierung

Design und Implementierung von Software variieren je nach Komplexität der Software. Zum Beispiel dauerte das Entwerfen und Erstellen von Microsoft Word viel länger als das Entwerfen und Entwickeln von Microsoft Notepad, da letzteres wesentlich grundlegendere Funktionen bietet.

Software wird normalerweise in integrierten Entwicklungsumgebungen (IDE) wie Eclipse, IntelliJ und Microsoft Visual Studio entworfen und erstellt (auch bekannt als codiert / geschrieben / programmiert), um den Prozess zu vereinfachen und die Software zu kompilieren (falls zutreffend). Wie in einem anderen Abschnitt erwähnt, wird Software normalerweise auf der vorhandenen Software und der von der zugrunde liegenden Software bereitgestellten Anwendungsprogrammierschnittstelle (API) wie GTK +, JavaBeans oder Swing erstellt. Bibliotheken (APIs) können nach ihrem Zweck kategorisiert werden. Beispielsweise wird das Spring Framework zum Implementieren von Unternehmensanwendungen verwendet, die Windows Forms-Bibliothek zum Entwerfen von GUI-Anwendungen (Graphical User Interface) wie Microsoft Word und Windows Communication Foundation zum Entwerfen von Webdiensten. Wenn ein Programm entworfen wird, stützt es sich auf die API. Beispielsweise kann eine Microsoft Windows-Desktopanwendung API-Funktionen in der .NET Windows Forms-Bibliothek wie Form1.Close () und Form1.Show () aufrufen, um die Anwendung zu schließen oder zu öffnen. Ohne diese APIs muss der Programmierer diese Funktionen vollständig selbst schreiben. Unternehmen wie Oracle und Microsoft stellen ihre eigenen APIs zur Verfügung, sodass viele Anwendungen mit ihren Softwarebibliotheken geschrieben werden, die normalerweise zahlreiche APIs enthalten.

Datenstrukturen wie Hash-Tabellen, Arrays und Binärbäume sowie Algorithmen wie Quicksort können beim Erstellen von Software hilfreich sein.

Computersoftware weist besondere wirtschaftliche Merkmale auf, die ihr Design, ihre Erstellung und ihren Vertrieb von den meisten anderen Wirtschaftsgütern unterscheiden.

Eine Person, die Software erstellt, wird als Programmierer, Softwareentwickler oder Softwareentwickler bezeichnet. Diese Begriffe haben alle eine ähnliche Bedeutung. Es gibt auch informellere Begriffe für Programmierer wie „Codierer“ und „Hacker“ – obwohl die Verwendung des letzteren Wortes Verwirrung stiften kann, da es häufiger verwendet wird, um jemanden zu bezeichnen, der illegal in Computersysteme einbricht.