Ijk ist der klassische Algorithmus 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Ijk ist der klassische Algorithmus



· ijk ist nicht Cache-freundlich, weil er die B spaltenweise durchläuft

· ikj nutzt Cache und die Abbildung der Felder im Speicher

· ikj ist schneller als ijk sequentiell

Numerische Integration bezeichnet das näherungsweise Berechnen von Integralen

Für jeden Kern ein Intervall, am Ende wird die Summe berechnet

Beschleunigung(Speedup) – S(p) = T(1)/T(p) mit p Prozessoren

Effizienz E(p) = S(p)/p = T(1)/(T(p)*p)

Im Idealfall ist S(p) = p und E(p) = 1

Betrachten wir den Algorithmus mit s – Zeit für sequenzieller Teil, par – Zeit für parallelisierbarer Anteil ausgeführt sequentiell.

T(p) = s + par/p

Amdalsche Gesetz:

S(p) <= (s+par)/s = 1 + par/s= 1/f mit f = s/(s+par)

Bis jetzt wurden folgende Parallelisierung Verfahren benutzt:

· Gebietszerlegung

· Master/Worker

· Erzeuger/Verbraucher mit Puffer, Indexerzeuger

· Fließband

Es gibt noch weitere Verfahren:

· Teile und Herrsche

· Map/Reduce

Programmierrichtlinien

· Konsistenter Stil erleichtert die Lesbarkeit

· Beschleunigt Einarbeitung bei Personalwechsel und Wiedereinarbeitung

· Zeitersparnis bei Fehlerfindung

· Muss konsistent angewandt werden

Selbstkontrolliertes Programmieren

Erfahrener Programmierer:

· Hält sich an die Regeln die der Vermeidung der Fehler dienen

· Programmieren ist dann eine Erfahrungswissenschaft

· Jeder Programmierer soll ein Katalog von Programmierregeln aufstellen und verbessern

· Es entsteht ein Regelkreis des selbstkontrollierten Programmierens

Regelkreis

· Vorzugsweise werden nur die Normalfälle behandelt

· Sonderfalle und Ausnahmen werden übersehen

· Es werden nur die Fälle erfasst, die man für repräsentativ hält

· Bespiele

o Um eins daneben Fehler

o Indexzählfehler

o Null-Zeiger-Zugriff

Falsche Hypothesen

Programmierer haben Faustregeln entwickelt über die Funktionsweise des Rechners, die sind jetzt aber falsch:

· Multiplikation dauert wesentlich länger als Addition

· Potenzieren ist aufwendiger als Multiplizieren

· Cache Effekte sind unwichtig

Tücken der Maschinenarithmetik:

· Der Computer hält sich nicht an die Regeln der Algebra und Analysis

· Reelle Zahlen werden nur mit begrenzter Genauigkeit dargestellt

Typische Fehler:

· Irreführende Namen

· Unvollständige Bedingungen

· Unverhoffte Variablen

o Verwechslung globaler mit Hilfsvariablen

o Falsche oder vergessene Initialisierung von Variablen

· Trügerische Redundanz

o Durch achtloses Kopieren werden Strukturen geschaffen, die den menschlichen Denkapparat überfordern

o Vermeide Copy/Paste, alles länger als 2 Zeilen ist besser als eine Methode zu kleiden

o Bei Programmänderungen Kommentar wichtig, nicht vergessen

Ein Fehler soll in ein Fehlerbuch eingetragen werden, wenn:

· Die Fehlersuche lange gedauert hat

· Die durch den Fehler verursachten Kosten hoch waren

· Der Fehler lange unentdeckt geblieben ist

Folgende Daten sollen im Fehlerbuch erfasst werden:

· Laufende Fehlernummer

· Datum(wann entstanden, wann entdeckt)

· Aus welcher Phase(Anforederung, Entwurf, Impl)

· Fehlerkurzbeschreibung(Titel)

· Ursache (Verhaltensmechanismus)

· Rückverfolgung:

o Gab es schon ähnliche Fehler?

o Warum waren die früheren Maßnahmen dagegen nicht effektiv?

· Programmierregel, Gegenmaßnahme

· Ausführliches Fehlerbeschreibung

· Dauer

Fehlertypen

Zeitlogbuch

· Ein Zeitlogbuch wird geführt, um die Zeit für einzelne Tätigkeiten zu erfassen

· Man muss für viele Aufgaben eine Schätzung angeben.

· Zeitlogbuch hilft,

o Schätzungen mit hinreichender Genauigkeit geben zu können

o Bei der Schätzung genauer zu werden

· Manuell von Hand in Excel o.ä- erstellt

 

 

Testen

Testing shows the presence oft he bugs, not their absence. (Dijkstra)

Formale Korrektheitsbeweise nur für kleine Programme möglich.

Zentrale Frage: Wann kann man mit dem Testen aufhören, nach Fehlern zu suchen? (Testvollständigkeitskriterien)

Unterscheide:

· Testende Verfahren – Fehler erkennen

· Verifizierende Verfahren – Korrektheit beweisen

· Analysierende Verfahren – Eigenschaften einer Systemkomponente bestimmen

3 Arten von Fehler.:

· Ein Versagen oder Ausfall (failure) ist die Abweichung des Verhaltens der Software von der Spezifikation

· Ein Defekt (defect, bug) ist ein Mangel in einem Softwareprodukt, der zu einem Versagen führen kann. Man sagt, dass sich ein Defekt in einem Versagen manifestiert.

· Ein Irrtum oder Herstellungsfehler (mistake) ist eine menschliche Aktion, die einen Defekt verursacht. Irrtum verursacht Defekt.

Arten von Testhelfern:

· Ein Stummel (stub) ist ein nur rudimentär implementierter Teil der Software und Dient als Platzhalter für noch nicht umgesetzte Funktionalität

· Eine Attrappe (dummy) simuliert die Implementierung zu Testzwecken

· Eine Nachahmung (mock Object) ist eine Attrappe mit zusätzlicher Funktionalität, wie bspw. Das Einstellen der Reaktion der Nachahmung auf bestimmte Eingaben oder das Überprüfen des Verhaltens des Klienten.

Fehlerklassen:

· Anforderungsfehler (Defekt im Pflichtenheft)

o Inkorrekte Angaben der Benutzerwünsche

o Unvollständige Angaben über funktionale Anforderungen, Leistungsanforderungen etc.

o Inkonsistenz der Spezifikation oder des Entwurfs

o Undurchführbarkeit

· Entwurfsfehler (Defekt in der Spezifikation)

o Unvollständige oder Fehlerhafte Umsetzung der Anforderung

o Inkonsistenz der Spezifikation oder des Entwurfs

o Inkonsistenz zwischen Anforderung, Spezifikation und Entwurf

· Implementierungsfehler (Defekt im Programm)

o Fehlerhafte Umsetzung der Spezifikation in ein Programm

Ein Softwaretest, kurz Test, führt eine einzelne Softwarekomponente oder eine Konfiguration von Softwarekomponenten unter bekannten Bedingungen aus und überprüft ihr Verhalten

Die zu überprüfende SW-Komponente oder Konfiguration wird Testling oder Testobjekt oder Prüfling genannt.

Ein Testfall besteht aus einem Satz von Daten für die Ausführung eines Teils oder des ganzen Testlings

Ein Testtreiber oder Testrahmen versorgt Testlinge mit Testfällen und stößt die Ausführung der Testlinge an.

Testtypen:

· Der Komponententest überprüft die Funktion eines Einzelmoduls durch Beobachtung der Verarbeitung von Testdaten. (aus Objektentwurfsdokument)

· Der Integrationstest überprüft schrittweise das fehlerfreie Zusammenwirken von bereits einzeln getesteten System-Komponenten. (Systementwurfsdokument)

· Der Systemtest ist der abschließende Test des Auftragnehmers in realer Umgebung ohne Kunden. (aus Anforderungsanalysedokument)

· Der Abnahmetest ist der abschl. Test in realer Umgebung unter Beobachtung, Mitwirkung ider Federführung des Kunden beim Kunden. (aus Kundenerwartung)

Klassifikation Testender Verfahren:

· Dynamische Verfahren (Testen)

o Strukturtests (white/glass box testing)

§ Kontrollflussorientierte Tests

§ Datenflussorientierte Tests

o Funktionale Tests (black box testing)

o Leistungstests (black box testing)

· Statische Verfahren (Prüfen)

o Manuelle Prüfmethoden (Inspektion, Review, Durchsichten)

o Prüfprogramme (statische Analyse von Programmen)

Dynamische Verfahren

· Das übersetzte Programm wird mit bestimmten Testfällen versehen und ausgeführt

· Das Programm wird in der realen Umgebung getestet

· Stichprobenverfahren: Korrektheit des Programms wird nicht bewiesen

Statische Verfahren

· Das Programm wird nicht ausgeführt, sondern der Quellcode analysiert

White Box ­– mit Kenntnis von Kontrollfluss und/oder Datenfluss

Black Box – ohne Kenntnis, nur Spezifikationen heraus.



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 161; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.252.37 (0.015 с.)