Kein Folientitel

Werbung
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Inhalt
• Aufbau des Source Codes
– Dokumentation des Source Codes (Layout)
– Qualitätskriterien berücksichtigen:
• Verständlichkeit  Namenskonventionen
• Wartbarkeit:  Programmierrichtlinien für erlaubte Konstrukte,
Schachtelungstiefe, …
• Erwartungskonformität bei der Benutzerschnittstelle
• ……
•
•
Verwaltung des Source Codes
– Konfigurationsmanagement (KM)
– Einsatz eines KM-Systems
– Bekanntestes KM-Werkzeug (open source) ist CVS (Concurrent Versions
System)
Anhang: Beispiele für schlechten Programmierstil
Datei: ProgrammierungVorlesung.ppt
Seite 1
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Source Code Dokumentation
Kommentare und Header:
•
•
•
•
•
comments shall not contain pseudocode or algorithm description, the code itself explains
this!
Standard header comment section (first item in the declarations section) for modules and
classes (and forms):
– file name, copyright notice, creation date, original developer, brief description
– record of changes in the maintenance phase: name of the person making the
change, date of the change, brief description of the change
Standard header comment section (first item in the declarations section) for procedures,
methods, interfaces and templates:
– brief description of the procedure, description of each parameter & any return value
– record of changes in the maintenance phase (see above)
Variable should have a comment on the same line as the variable declaration (all line up in
the same column). If the comment is long, it should be placed on the preceding line
Inline comments appear above the code of the program block that they describe
proceeded by one blank line
Seite 2
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Source Code Dokumentation
Beispiele für einen Header und für die notwendigen Variablen-Kommentare in C:
/***********************************************************************
** NAME
bsp9.c
** TITEL
**
Speicherreservierung und -freigabe
** KURZBESCHREIBUNG
**
Es werden ueber Bildschirm Textzeilen eingelesen und in einem
**
zusammenhaengenden Speicherbereich gesichert. ...
** PARAMETER
**
-x : Ausgabe in umgekehrter Reihenfolge
**
-n : Ausgabe mit Zeilennummern
** HINWEIS: Kompiliert mit VisualC++ V5.0
** VERSIONSFUEHRUNG
**
V3.0
ERSTELLT: 7.04.1998
AUTOR: Riewerts
***********************************************************************/
char
char
int
int
*zeil_vektor[MAXZEILEN]; /*
/*
*zeiger;
/*
richtig=1;
/*
zeil_zahl=0;
/*
Vektor fuer die Anfangsadressen jeder Zeile
Zeiger auf die Parameter
wenn Parameterangabe ok
wenn keine Zeilen eingegeben
*/
*/
*/
*/
*/
Seite 3
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Source Code Dokumentation
Beispiel für einen Header in Visual Basic:
•
Die Versionsverwaltung wird dabei von dem Konfigurationsmanagement-System
VisualSourceSave (VSS) übernommen, der folgende Informationen beim Ein- und
Auschecken der Source Code Datei generiert:
–
–
–
–
•
Ablage der Datei
Änderungs-Nummer
Datum mit Uhrzeit
Verantwortlicher
Die anderen Angaben im
Header müssen per Hand
gepflegt werden
# region VSS Info
// -- <Project Name>, <Subpackage Name> -// Created:
<Name>
// Copyright:
(C) 2003 Microsoft
// Purpose:
<Short description>
//
// -- SourceSafe Information -/* $Archive: $
* $Revision: $
* $Date: $
* $Author: $
*/
# endregion
Seite 4
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Source Code Dokumentation (mit Javadoc)
Javadoc makes use of ‘flags’ to generate specific links and markup. These flags
include: @author, @version, @param, @see and @return. Javadoc block
comments begin with “/**” on a single line, followed by the comment content, and end
with “*/” on a single line.
Beispiel: javadoc Eingabe.java -author –version generiert:
/***********************************************
<p><b>Kurzbeschreibung:</b>
Die Datei enthält die Klasse Eingabe. Sie dient
zum Testen einer streambasierten Eingabe mit
Konvertierung durch die Klasse InputStreamReader
<p>
<b>Builded:</b> javac Eingabe.java mit Java WorkShop 2.0
@author Christoph Riewerts, DaimlerChrysler, M413
@version V1.000 vom 04/09/15
************************************************/
public class Eingabe
{
// Hier steht die Klassendefinition
}
java.lang.Object
|
+----Eingabe
public class Eingabe
extends Object
Kurzbeschreibung: Die Datei enthält die
Klasse Eingabe. Sie dient zum Testen einer
streambasierten Eingabe mit Konvertierung
durch die Klasse InputStreamReader
Builded: javac Eingabe.java mit Java
WorkShop 2.0
Version:
V1.000 vom 04/09/15
Author:
Christoph Riewerts, DaimlerChrysler, M415
Seite 5
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Hinweise auf guten Programmierstil
Seite 6
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
QS-Kriterium: Verständlichkeit
Namenskonventionen
• In general: the name shall be descriptive and unambiguous, avoid using abbreviation,
acronyms and computer jargon unless it is extremely awkward not to do so!
• Using unique method:
– Writing notation: newAddress
– Underscore notation: new_address
– Consonant notation: nwddrss
– Hungarian notation with tag and optional qualifier (i.e. fst for first): padr (tag p
means pointer), scadr (tag sc means string with a fixed length)
• Name lengths in the range of 9 to 15 characters are considered optimal
• In the case of Boolean objects, the name should reflect the object’s TRUE condition
• Path names will not be hard coded into any application
• Application specific constants will be named as appropriate using all uppercase letters,
numbers and underscore (_) characters (with a single lowercase letter prefix for data type,
for example tAPP_NAME for a String constant)
• User defined types will be declared with the data type in capital letters and the components
following normal variable conventions
Seite 7
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
QS-Kriterium: Wartbarkeit
#ifndef HEADER_H
Einsatz von Programmierrichtlinien, z.B. für Sprache C:
#define HEADER_H
• include-Dateien werden genau einmal bearbeitet
/* Inhalt von header.h */
• Klammerungstiefe von Anweisungen ist maximal 4
#endif
• Ein Ausdruck enthält maximal 6 (gewichtete) Operatoren:
– In Anweisungen zählen arithmetische Operatoren einfach
– In Bedingungen zählen Vergleiche und log. Operatoren einfach
– Alle anderen Operatoren zählen als „unnatürliche“ Operatoren doppelt
– Folgendes Beispiel hat Klammerungstiefe 4 und das Gewicht der Operatoren ist 6:
•
….
if (((c = getchar ()) != EOF) && (n < MAX))
Weitere Beispiele für schlechten Programmierstil:
typedef char string10 [10]
#define SOLANGE
while (
y+=12*x++
While ((c = getchar ()) != EOF);
Seite 8
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
QS-Kriterium: Wartbarkeit
Richtlinien für Java-Code (Qualitätsmaß):
•
•
•
•
•
•
•
•
•
•
(Max 10% aller) Methoden dürfen nicht mehr als 20 Statements haben (oder keine
Methode darf mehr als 40 Statements aufweisen)
Methoden dürfen nicht mehr als vier Parameter haben (Maß: max. 10% aller
Methoden haben zw. 5 und 15 Parameter)
Methoden haben eine max. McCabe-Komplexität (Schachtelung & Pfade) von 5
(Max. 10% aller) Klassen dürfen nicht mehr als 10 Instanzvariable haben
Übergabeparameter dürfen innerhalb einer Methode nicht überschrieben werden
Übergabeparameter dürfen nicht denselben Namen haben wie interne Variable
In booleschen Ausdrücken sind Konstante statt Werte zu verwenden
Alle Variable müssen mit modifiern belegt werden
Die Form „.*“ für Import-Anweisung muss vermieden werden
Jede return-Anweisung ist mit JavaDoc zu kommentieren
Seite 9
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
QS-Kriterium: Ergonomie der Benutzerschnittstelle
z.B. Erwartungskonformität (Dialoggestaltung):
•
•
•
•
Information, was das Programm leistet
– GUI: Im Menüpunkt „info“ oder
– Zeilenorientiert (zo): direkter Hinweis bei der Programmausgabe
Hinweise, wie man das Programm bedient
– GUI: Online-Hilfe oder
– Zo: Aufruf mit der Option –help oder
– Zo: direkter Hinweis bei der Programmausgabe
Informationen über den Hersteller
– Name, Version, Copyright, Support-Adresse
Eindeutige Fehlerbehandlung
– Was hat der Benutzer im Fehlerfall verkehrt gemacht?
– Wie kann er in Zukunft den Fehler vermeiden?
Seite 10
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Konfigurationsmanagement
Programmverwaltung
• Produktionssystem enth. viele Programme mit jeweils einer Version
• Entwicklungssystem enth. ein Programm in unterschiedlichen Versionen:
– Integrationssystem für Integrationstest und Versionsverwaltung
– User area für die Entwicklung einer Version
• Konfigurationsmanagement (KM) umfasst
– Versionsverwaltung: V. bedeutet, dass alle relevanten Dokumente und
Programmbestandteile mit ihrem jeweiligen Änderungsstand archiviert und
dokumentiert werden, so dass man u.a. zwischen den Versionen einer Datei
unterscheiden kann, die sich in unterschiedlichen Phasen der SoftwareEntwicklung befinden (z.B. Version 10 befindet sich in der Entwicklung, Version 9
im Integrationstest und Version 8 bereits in Produktion)
– Releaseverwaltung: R. heißt, dass die einzelnen Release (Auslieferungsstände)
der Applikation dokumentiert und verwaltet werden. Ein Release dokumentiert die
Versionsnummern aller Dateien, die benötigt werden, um das System zu einem
bestimmten Zeitpunkt ausliefern zu können. D.h. das Release 5.0.0 des Systems
beinhaltet z.B. die Version 3 der Datei "applicat.dll" die Version 7 der Datei
"applicat.exe" und die Version 2 der Datei "manual.doc".
Seite 11
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Konfigurationsmanagement
Einsatz eines Konfigurationsmanagement-Systems (zur Versionsverwaltung):
• Beispiel SCCS (source code control system)
– One(!) File for all releases/versions: s.<module name>
– Access rights to the releases/versions: admin
– Support for generating new releases/versions (delta):
• Automatically assign of version number, date of change, operator name
• Reason for changing in a comment
–
–
–
Locking of modules for changing: get
Reporting of differences between releases/versions: sccsdiff
Generating of branches (nomenclature: release.level)
$ get -e -r1.5 s.module
1.5
new delta 1.6
18 lines
$ ....
$ get s.module
1.7
20 lines
$ ....
$ delta s.modul
comments ? change request 22 done
1.6
2 inserted
0 deleted
18 unchanged
$ ....
Seite 12
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Konfigurationsmanagement
Verwalten von Programmteilen (Versionsunterschiede) in einer Datei durch Einsatz
von Präprozessor-Anweisungen in C: Bedingte Übersetzung
• Mittels ifdef-, endif- und define-Anweisungen können einzelne Programmabschnitte
compiliert werden oder auch nicht
Übung:
• Tragen Sie in das
nebenstehende
Programmbeispiel die
notwendigen
PräprozessorAnweisungen ein, um zu
erreichen, dass der
Compiler in der Testphase
auch die print-Befehle
übersetzt.
# ……….
main()
{
….
….
/* Schalter fuer Testbetrieb */
# ……….
/* Printbefehle fuer Testbetrieb -------------*/
….
printf (…);
….
/* Printbefehle ende ------------------------- */
# ……….
….
}
Seite 13
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Anhang
Beispiele für schlechten Programmierstil
(Verständlichkeit):
If (Not State = "WA") Then
SngSalesTax = 0
End If
If blnIsUSCitizen = True Then
Wscript.Echo "This person is a citizen."
Else
Wscript.Echo "This person is not a citizen."
End If
RegPrice = 100
Discount = 5
SalesTax = 1.05
PreferredCustomer = 2
Wscript.Echo RegPrice * SalesTax - Discount * PreferredCustomer
Seite 14
DHBW Stuttgart, Informatik, SW-Engineering, Kapitel 5
Okt 2011
Programmierung
Anhang
If (State = "WA") Then
SngSalesTax = 0.065
End If
If (State <> "WA") Then
SngSalesTax = 0
If blnIsUSCitizen = False Then
End If
Wscript.Echo "This person is not a citizen."
Else
Wscript.Echo "This person is a citizen."
… weil bei „True-Abfragen“ sowohl
End If
1 als auch -1 richtig sein kann
If blnIsUSCitizen Then
(false bedeutet immer = 0)
Wscript.Echo "This person is a citizen."
Else
Wscript.Echo "This person is not a citizen."
End If
Hier sind die Lösungen
RegPrice = 100
Discount = 5
SalesTax = 1.05
PreferredCustomer = 2
Wscript.Echo (RegPrice * SalesTax) - (Discount * PreferredCustomer)
Seite 15
Herunterladen