Software-Schemata sind nach einer Darstellung von Charles W. Krueger , formale Beschreibungen von Softwarekomponenten. Software-Schemata unterstützen die Wiederverwendung von Algorithmen und Datenstrukturen. Abbildung 7 zeigt einen Ausschnitt eines Softwareschemas aus dem PARIS System [Katz et. al, 1989] , für das Einfügen in verkettete Listen.
Abbildung 7: partially interpreted schema: Einfügen in verkettete Listen
Das Schema besteht aus einem Rumpf ( Schema Body ) in einer gewählten Hochsprache. An Stellen, die vom Verwendungszweck des Schemas abhängen, stehen nur abstrakte Funktionen, Prädikate, Konstanten und nicht realisierte Programmsegmente, u.a.in Form von freien Variablen, die in der entity List aufgeführt sind. Jedes Schema besitzt zusätzliche Bedingungen in Form von formalen Beschreibungen. Applicability Conditions definieren Anforderungen und Beschränkungen bezüglich der Verwendung des Schemas (Vorbedingungen), Section Conditions stellen Bedingungen an die einzufügenden Codesegmente und Result Assertions sind Nachbedingungen für das Schema. Nach der Auswahl eines Schemas wird es durch Ersetzen der abstrakten Teile auf den Anwendungsfall angepaßt. Der Vorgang ist prinzipiell der gleiche wie bei den im vorherigen Abschnitt vorgestellten generischen Klassen. Zusätzlich ist mit Hilfe der formalen Vor-, Nach- und Programmcodebedingungen ein Korrektheitsnachweis möglich.
Software-Schemata, die auf formalen Spezifikationen basieren, können in einem teilweise automatisierten Prozeß ausgewählt und spezialisiert werden. Allerdings können Schemataspezifikationen bereits bei relativ einfachen Schemata sehr umfangreich und komplex werden. Spezifikationen dieser Art sind für den Menschen nur noch schlecht lesbar. Die Vorteile liegen klar in der formalen Beschreibung und der Beweisbarkeit der Schemata, nicht aber im Benutzerkomfort. "Preparing a large schema is [also] a formidable challenge." [Katz et al., 1989]