18.12.08

Simple Process Checklist for BPM Workflows

Following questions can serve as a checklist for gathering information about a process;

- What are the individual steps which make up the process?
- Which steps are executed under certain conditions, and which are always executed?
- What Tasks are accomplished at each step?
- Who performs the Tasks at each step?
- What data is to be collected at each step?
- What are the inputs at each step in the process?
- What are the outputs at each step in the process?

(BPM: Business Process Management)

20.8.08

Typische Probleme und Fehler während der SW-Entwicklung

  • Es wird zu früh mit dem Codieren begonnen.
  • Es wird zu spät mit dem Codieren begonnen.
  • Das Vorgehen ist schlecht geplant, ein Vorgehensmodell fehlt.
  • Das Vorgehensmodellist übertrieben genau, lähmend, bürokratisch und praxisfern.
  • Zwischen- und Endergebnisse werden nicht oder unzureichend verifiziert und validiert.
  • Die Anwendungsarchitektur wird nicht klar genug geplant oder entwickelt sich unkontrolliert.
  • Die Entwicklung wird von einem naiven Verständnis der Objektorientierung getrieben.
  • Die Entwicklung wird von einemfür die Praxis zu akademischen Verständnis der Objektorientierung getrieben.
  • Der Geist prozedular SW-Entwicklung tarnt sich nur mit Objektorientierung.
  • Analyse-, Design- und Realisierungsrichtlinien fehlen, werden nicht angewendet oder sind realitätsfern.
  • Die Dokumentation von Ergebnissen und Entwurfsentscheidungen führt ein scheintotes Randdasein.
  • Anforderungen werden nicht systematisch erhoben.
  • Die an der SW-Entwicklung beteiligten Personen (Entwickler, Anwender, Fachabteilung, Auftraggeber)
    kommunizieren kaum oder nicht direkt miteinander.
  • Aus Unsicherheit und Unerfahrenheit heraus wird naiv an vorgeblichen Heilslehren oder Heilsbringern
    festgehalten, z.B. Werkzeuge, Vorgehensmodelle, Berater.
  • Überambitionierte Lösungen (zu abstrakt, zu generisch oder zu kompliziert)

17.8.08

Die Prinzipien des objektorientierten Entwurfs

Prinzip 1: Prinzip einer einzigen Verantwortung (Single Responsibility Principle)

Jedes Modul soll genau eine Verantwortung übernehmen, und jede Verantwortung soll genau einem Modul zugeordnet werden. Die Verantwortung bezieht sich auf die Verpflichtung des Moduls, bestimmte Anforderungen umzusetzen. Als Konsequenz gibt es dann auch nur einen einzigen Grund, warum ein Modul angepasst werden muss: Die Anforderungen, für die es verantwortlich ist, haben sich geändert. Damit lässt sich das Prinzip auch alternativ so formulieren: Ein Modul sollte nur einen einzigen, klar definierten Grund haben, aus dem es geändert werden muss.

Jedes Modul dient also einem Zweck: Es erfüllt bestimmte Anforderungen, die an die Software gestellt werden.

Regel 1: Kohäsion maximieren (high cohesion) Ein Modul soll zusammenhängend (kohäsiv) sein. Alle Teile eines Moduls sollten mit anderen Teilen des Moduls zusammenhängen und voneinander abhängig sein. Haben Teile eines Moduls keinen Bezug zu anderen Teilen, können Sie davon ausgehen, dass Sie diese Teile als eigenständige Module implementieren können. Eine Zerlegung in Teilmodule bietet sich damit an.
Regel 2: Kopplung minimieren (low coupling) Wenn für die Umsetzung einer Aufgabe viele Module zusammenarbeiten müssen, bestehen Abhängigkeiten zwischen diesen Modulen. Man sagt auch, dass diese Module gekoppelt sind. Sie sollten die Kopplung zwischen Modulen möglichst gering halten. Dies können Sie oft erreichen, indem Sie die Verantwortung für die Koordination der Abhängigkeiten einem neuen Modul zuweisen.
image

Vorteile des Prinzips

  • Anforderungen ändern sich
  • Erhöhung der Wartbarkeit
  • Erhöhung der Chance auf Mehrfachverwendung

Prinzip 2: Trennung der Anliegen (Separation of Concerns)

Ein in einer Anwendung identifizierbares Anliegen soll durch ein Modul repräsentiert werden. Ein Anliegen soll nicht über mehrere Module verstreut sein.

Eine Aufgabe, die ein Programm umsetzen muss, betrifft häufig mehrere Anliegen, die getrennt betrachtet und als getrennte Anforderungen formuliert werden können.

Mit dem Begriff Anliegen bezeichnen wir dabei eine formulierbare Aufgabe eines Programms, die zusammenhängend und abgeschlossen ist.


Prinzip 3: Wiederholungen vermeiden (Don't repeat yourself)

Eine identifizierbare Funktionalität eines Softwaresystems sollte innerhalb dieses Systems nur einmal umgesetzt sein.

Es handelt sich hier allerdings um ein Prinzip, dem wir in der Praxis nicht immer folgen können. Oft entstehen in einem Softwaresystem an verschiedenen Stellen ähnliche Funktionalitäten, deren Ähnlichkeit aber nicht von vornherein klar ist. Deshalb sind Redundanzen im Code als ein Zwischenzustand etwas Normales. Allerdings gibt uns das Prinzip Wiederholungen vermeiden vor, dass wir diese Redundanzen aufspüren und beseitigen, indem wir Module, die gleiche oder ähnliche Aufgaben erledigen, zusammenführen.


Prinzip 4: Offen für Erweiterung, geschlossen für Änderung (Open-Closed-Principle)

Ein Modul soll für Erweiterungen offen sein.

Das bedeutet, dass sich durch die Verwendung des Moduls zusammen mit Erweiterungsmodulen die ursprüngliche Funktionalität des Moduls anpassen lässt. Dabei enthalten die Erweiterungsmodule nur die Abweichungen der gewünschten von der ursprünglichen Funktionalität.

Ein Modul soll für Änderungen geschlossen sein.

Das bedeutet, dass keine Änderungen des Moduls nötig sind, um es erweitern zu können. Das Modul soll also definierte Erweiterungspunkte bieten, an die sich die Erweiterungsmodule anknüpfen lassen.

Wir müssen hier allerdings einschränken: Ein nichttriviales Modul wird nie in Bezug auf seine gesamte Funktionalität offen für Erweiterungen sein. Auch bei einer Spiegelreflexkamera ist es nicht möglich, den Bildsensor auszuwechseln.

Am einfachsten lässt sich diese Frage beantworten, wenn das Modul nur innerhalb einer Anwendung verwendet oder nur von einem Team entwickelt wird. In diesem Fall können Sie einfach abwarten, bis der Bedarf für eine Erweiterung entsteht. Wenn der Bedarf da ist, sehen Sie bereits, welche Funktionalität allen Verwendungsvarianten gemeinsam ist und in welchen Varianten sie erweitert werden muss. Erst dann müssen Sie das Modul anpassen und es um die benötigten Erweiterungspunkte bereichern.

Zu viele nicht genutzte Erweiterungspunkte machen Module unnötig komplex, zu wenige machen sie zu unflexibel. Die Bestimmung der notwendigen und sinnvollen Erweiterungspunkte ist deshalb oft nur auf der Grundlage von Erfahrung und Kenntnis des Anwendungskontexts möglich.


Prinzip 5: Trennung der Schnittstelle von der Implementierung(program to interfaces)

Jede Abhängigkeit zwischen zwei Modulen sollte explizit formuliert und dokumentiert sein. Ein Modul sollte immer von einer klar definierten Schnittstelle des anderen Moduls abhängig sein und nicht von der Art der Implementierung der Schnittstelle. Die Schnittstelle eines Moduls sollte getrennt von der Implementierung betrachtet werden können.

Schnittstelle ist Spezifikation

In der obigen Definition dürfen Sie unter dem Begriff Schnittstelle nicht nur bereitgestellte Funktionen und deren Parameter verstehen. Der Begriff Schnittstelle bezieht sich vielmehr auf die komplette Spezifikation, die festlegt, welche Funktionalität ein Modul anbietet.

Durch das Befolgen des Prinzips der Trennung der Schnittstelle von der Implementierung wird es möglich, Module auszutauschen, welche die Schnittstelle implementieren. Das Prinzip ist auch unter der Formulierung Programmiere gegen Schnittstellen, nicht gegen Implementierungen bekannt.


Prinzip 6: Umkehr der Abhängigkeiten (Dependency Inversion Principle)

Unser Entwurf soll sich auf Abstraktionen stützen. Er soll sich nicht auf Spezialisierungen stützen.

Ein Entwurf, der grundsätzlich von Modulen ausgeht, die andere Module verwenden (Top-down-Entwurf), ist nicht ideal, weil dadurch unnötige Abhängigkeiten entstehen können. Um die Abhängigkeiten zwischen Modulen gering zu halten, sollten Sie Abstraktionen verwenden.

Abstraktion

Eine Abstraktion beschreibt das in einem gewählten Kontext Wesentliche eines Gegenstand oder eines Begriffs. Durch eine Abstraktion werden die Details ausgeblendet, die für eine bestimmte Betrachtungsweise nicht relevant sind. Abstraktionen ermöglichen es, unterschiedliche Elemente zusammenzufassen, die unter einem bestimmten Gesichtspunkt gleich sind.

Umkehrung des Kontrollflusses (engl. Inversion of Control)

Als die Umkehrung des Kontrollflusses wird ein Vorgehen bezeichnet, bei dem ein spezifisches Modul von einem mehrfach verwendbaren Modul aufgerufen wird. Die Umkehrung des Kontrollflusses wird auch Hollywood-Prinzip genannt: »Don’t call us, we’ll call you«.

Die Umkehrung des Kontrollflusses wird eingesetzt, wenn die Behandlung von Ereignissen in einem mehrfach verwendbaren Modul bereitgestellt werden soll. Das mehrfach verwendbare Modul übernimmt die Aufgabe, die anwendungsspezifischen Module aufzurufen, wenn bestimmte Ereignisse stattfinden. Die spezifischen Module rufen also die mehrfach verwendbaren Module nicht auf, sie werden stattdessen von ihnen aufgerufen.


Prinzip 7: Mach es testbar

Unit-Tests

Ein Unit-Test ist ein Stück eines Testprogramms, das die Umsetzung einer Anforderung an eine Softwarekomponente überprüft. Die Unit-Tests können automatisiert beim Bauen von Software laufen und so helfen, Fehler schnell zu erkennen.

Idealerweise werden für jede angeforderte Funktionalität einer Komponente entsprechende Unit-Tests programmiert.


(Quelle: Bernhard Lahres, Gregor Rayman, Praxisbuch Objektorientierung ISBN: 3-89842-624-6)

16.8.08

Modifizierer in C#

Zugriffsmodifizierer für Klassenmember


ModifiziererBeschreibung
publicUneingeschränkt zugänglich.
protected
internal
Zugänglich für die eigene Klasse, von dieser abgeleitete Klassen und das eigene Programm (Kompilierungsgemeinschaft).
internalZugänglich für das eigene Programm.
protectedZugänglich für die eigene und abgeleitete Klassen.
privateZugänglich für die eigene Klasse. Dies ist der Standardzugriff für Member, die ohne Modifizierer deklariert wurden.

Spezielle Klassen


ModifiziererBeschreibung
staticEine als static deklarierte Klasse darf nur statische Member enthalten. Statische Klassen können weder instanziiert noch vererbt werden.
abstractDie Klasse kann nur als Basisklasse für die Definition weiterer Klassen verwendet werden. Eine Instanziierung der Klasse ist nicht möglich.
sealedDie Klasse kann nicht als Basisklasse für die Definition weiterer Klassen verwendet werden.

Feldmodifizierer



ModifiziererBeschreibung
staticStatische Felder, auch Klassenvariablen genannt, existieren nur einmal. Methoden der Klasse können direkt auf die statischen Felder ihrer Klasse zugreifen. Ansonsten erfolgt der Zugriff über den Klassennamen.
readonlyDeklariert ein Feld als konstant. Einem solchen Feld können Sie nur im Zuge der Deklaration oder innerhalb eines Konstruktors einen Wert zuweisen. Später kann der Wert nur noch abgefragt werden. Dieser Modifizierer kann nicht in Kombination mit volatile oder static vergeben werden. (readonly-Felder sind automatisch static.)
volatileSchützt ein Feld vor ungewünschten Optimierungen durch den Compiler, die zu Fehlern führen können, wenn mehrere Threads unsynchronisiert auf das Feld zugreifen. Dieser Modifizierer kann nicht in Kombination mit readonly vergeben werden.
newZeigt an, dass ein geerbtes Feld bewusst verborgen wird.

Methodenmodifizierer



ModifiziererBeschreibung
staticStatische Methode, die nicht über Objekte der Klasse, sondern über die Klasse angesprochen wird.
externZeigt an, dass die Methode in einer anderen Assembly implementiert wird. Mit extern deklarierte Methoden werden ohne Anweisungsblock definiert. Die Verbindung zur Implementierung wird meist über ein DllImport-Attribut hergestellt.
Die folgenden Modifizierer regeln die Vererbung von Methoden
virtualVirtuelle Methode. Virtuelle Methoden können in abgeleiteten Klassen überschrieben werden (also unter Beibehaltung der Signatur mit neuem Anweisungsblock verbunden werden).
overrideZeigt an, dass hier nicht eine neue Methode eingeführt, sondern eine geerbte Methode überschrieben wird.
newZeigt an, dass diese Methode eine geerbte Methode gleicher Signatur verdeckt.
abstractFührt eine virtuelle Methode ein, ohne jedoch für diese eine Implementierung vorzugeben. Die Methode muss(!) also in abgeleiteten Klassen überschrieben werden, wenn von diesen Klassen Objekte erzeugt werden sollen.
sealedZeigt an, dass diese Methode in abgeleiteten Klassen nicht weiter überschrieben werden kann. Darf nur in Kombination mit override verwendet werden, d. h. die Methode muss selbst eine geerbte Methode überschreiben.

(Quelle: Dirk Louis, Shinja Strasser: Microsoft Visual C# 2008 – Das Entwicklerbuch
Microsoft Press Deutschland, ISBN:978-3-86645-507-8)

6.6.08

What Is Analysis and Design? (OOA/D)

Analysis emphasizes an investigation of the problem and requirements, rather than a solution. For example, if a new computerized library information system is desired, how will it be used?

"Analysis" is a broad term, best qualified, as in requirements analysis (an investigation of the requirements) or object analysis (an investigation of the domain objects).

Design emphasizes a conceptual solution that fulfills the requirements, rather than its implementation. For example, a description of a database schema and software objects. Ultimately, designs can be implemented.

As with analysis, the term is best qualified, as in object design or database design.

Analysis and design have been summarized in the phase do the right thing (analysis), and do the thing right (design).

What Is Object-Oriented Analysis and Design?

During object-oriented analysis, there is an emphasis on finding and describing the objects—or concepts—in the problem domain. For example, in the case of the library information system, some of the concepts include Book, Library, and Patron.

During object-oriented design, there is an emphasis on defining software objects and how they collaborate to fulfill the requirements. For example, in the library system, a Book software object may have a title attribute and a getChapter method.

Finally, during implementation or object-oriented programming, design objects
are implemented.

(Source: Larman C., Applying UML & Patterns: Introduction to Object-Oriented
Analysis & Design, & Iterative Development
)

29.5.08

Error Handling and Exception Guidelines for .NET

Use exceptions only for exceptional cases, not for routine program flow. Exceptions have significant performance overhead.

Guidelines:

  • Pass a descriptive string into the constructor when throwing an exception.
  • Use grammatically correct error messages, including ending punctuation. Each sentence in the description string of an exception should end in a period.
  • If a property or method throws an exception in some cases, document this in the comments for the method. Include which exception is thrown and what causes it to be thrown.
    • Example: Comment for Order.TotalCost property might read "Gets or sets the total cost of an Order. If the TotalCost property is set when the cost should be calculated, an InvalidOperationException is thrown."
  • Use the following exceptions if appropriate:
    • ArgumentException (and ArgumentNull, ArgumentOutOfRange, IndexOutOfRange): Used when checking for valid input parameters to method.
    • InvalidOperationException: Used when a method call is invalid for the current state of an object.
      • Example: TotalCost cannot be set if the cost should be calculated. If the property is set and it fails this rule, an InvalidOperationException is thrown.
    • NotSupportedException: Used when a method call is invalid for the class.
      • Example: Quantity, a virtual read/write property, is overridden by a derived class. In the derived class, the property is read-only. If the property is set, a NotSupportedException is thrown.
    • NotImplementedException: Used when a method is not implemented for the current class.
      • Example: A interface method is stubbed in and not yet implemented. This method should throw a NotImplementedException.
  • Derive your own exception classes for a programmatic scenarios. All new derived exceptions should be based upon the core Exception class.
    • Example: DeletedByAnotherUserException : Exception. Thrown to indicate a record being modified has been deleted by another user.
  • Rethrow caught exceptions correctly.

The following example throws an exception caught and rethrown incorrectly:

catch( Exception ex )
{
LogManager.Publish( ex );
throw ex; // INCORRECT – we lose the call stack of the exception
}

We log all unhandled exceptions in our applications, but may sometimes throw them again to let the higher level systems determine how to proceed. The problem comes in with the throw – it works much better to do this:

catch( Exception ex )
{
LogManager.Publish( ex );
throw; // CORRECT - rethrows the exception we just caught
}

Notice the absence of an argument to the throw statement in the second variation.

The difference between these two variations is subtle but important. With the first example, the higher level caller isn’t going to get all the information about the original error. The call stack in the exception is replaced with a new call stack that originates at the “throw ex” statement – which is not what we want to record. The second example is the only one that actually re-throws the original exception, preserving the stack trace where the original error occurred.

(Source: C# Coding Standards)

13.5.08

Using keywords as element names in C#

If one needs to acces a member of a type, let's assume that a software component is needed to be used, which is not written in .NET. In this case the name of the type or member is the same as C# keyowrd, then all insances of the identifier name in the source-code must be prefixed with at sign (@).

For example, take "operator" and "volatile";

@operator OperatorObj1 = new @operator;
OperatorObj1.@volatile = "something";

2.5.08

Klassifikation von Entwurfmustern

Ein Entwurfsmuster (design pattern) gibt eine bewährte generische Lösung für ein häufig wiederkehrendes Entwurfsproblem an, das in bestimmten Situationen auftritt. Entwurfsmuster;
  • unterstützen die Wiederverwendung von Lösungen,
  • dokumentieren existierende und erprobte Entwurfserfahrungen,
  • benennen und erklären wichtige Entwürfe,
  • helfen bei der Auswahl von Entwurfsalternativen,
  • verhelfen dem Entwerfer schneller zum richtigen Entwurf,
  • bieten ein gemeinsames Entwurfs-Vokabular und -Verständnis für eine Gruppe von Entwicklern.
Eine Klassifikation kann nach den Kriterien Zweck (purpose) und Geltungsbereich (scope) erfolgen.
Der Zweck gibt an, was ein Muster bewirkt.
Der Geltungsbereich gibt an, ob sich das Muster primär auf Klassen oder Objekte bezieht.
  • Ein erzeugendes Muster (creational pattern) befasst sich mit der Erzeugung von Objekten. Erzeugende Klassenmuster verschieben einen Teil der Objekterzeugung hin zu Unterklassen, während erzeugende Objektmuster einen Teil der Objekterzeugung zu anderen Objekten hin verschieben. (Beispiele: Factory Method, Abstract Factory, Singleton)
  • Ein strukturelles Muster (structural pattern) beschreibt die Komposition von Klassen und Objekten. Strukturelle Klassenmuster verwenden die Vererbung, um Klassen miteinander zu kombinieren, während strukturelle Objektmuster Wege angeben, um Objekte zusammenzufügen. (Beispiele: Adapter Class, Adapter (object), Bridge, Decorator, Facade, Proxy)
  • Ein Verhaltensmuster (behavioral pattern) beschreibt, wie Klassen oder Objekte miteinander kommunizieren und wie die Verantwortlichkeiten verteilt sind. Verhaltensmuster für Klassen benutzen die Vererbung, um Algorithmen und Kontrollflüsse zu beschreiben, während Verhaltensmuster für Objekte beschreiben, wie eine Gruppe von Objekten zusammenarbeitet, um eine Aufgabe auszuführen, die ein Objekt alleine nicht erledigen kann. (Beispiele: Template Method, Visitor, State, Strategy)
Glossar:
  • Klassenmuster: behandeln Beziehungen zwischen Klassen und Ihren Unterklassen. Diese werden durch Vererbung ausgedrückt und sind statisch (d.h. sie werden zur Überzetsungszeit [nicht während der Ausführung] festgelegt).
  • Objektmuster: beschreiben Beziehungen zwischen Objekten, die zur Laufzeit geändert werden können und dadurch dynamisch sind.
(Quelle: Balzert H., Lehrbuch der Software-Technik Software Entwicklung, ISBN: 3-8274-04080-0)

29.4.08

Software Processes

Following is a very simplified four step model of a software development process;

There is a problem to be solved. (Problem - Solution)
The approach from problem to solution is as follows;
Analysis: Business analyst analyzes the problem statement (and the needs) in real world with client. The output is a model of solution, for example in form of a use case.
Design: This step is nothing but in Abstract world: Designer makes the appropriate software design, which is supplied by the analyst. Design provides "what to do" for software development ("how to do" is let to software development).
Implementation: Software development team develops the application.

Software development process is an iterative process (QA, Change management, etc. see on Wikipedia)

The development process for a simple database example

(From book: Beginning Database Design, Churcher C., APress, ISBN: 978-1-59059-769-9)

21.4.08

UML-Konzepte und Notation

Geschäftsprozess (use case): spezifiziert einen Arbeitsablauf, der aus einer Menge von Aktionen, einschliesslich Varianten, besteht, die ausgeführt werden, um ein beobachteres Ergebnis hervorzubringen, das einen Wert für den Akteur besitzt. Geschäftsprozess besteht aus mehreren zusammenhängenden Aufgaben, die von einem Akteur durchgeführt werden, um ein Ziel zu erreichen bzw. ein gewünschtes Ergebnis zu erstellen (stets aus der Sicht des Akteurs; von den Akteuren ausgehend [outside-in]).

Akteur (actor): repräsentiert Rollen, die Benutzer einnehmen, wenn sie mit dem Geschäftsprozess interagieren. Akteure könne Menschen oder automatische Systeme sein. Akteure befinden sich ausserhalb des Systems.

Name eines Geschäftsprozesses: Substansiv-Verb (place order) [z.B. Auftrag erteilen]

Generalisierung zwischen Akteuren: Allgemeine Eigenschaften von Akteuren (z.B. Kunde) können definiert und spezialisiert werden (z.B. als Privatkunde).

Assoziationen (association): Akteure werden durch eine Assoziation mit Geschäftsprozessen verbunden. Die Assoziation gibt an, dass der Akteur und der Geschäftsprozess miteinander kommunizieren. Jeder kann Botschaften senden und empfangen. Assoziationen können mit Kardinalitäten versehen werden (z.B. 1->*).

Strukturierung von Geschäftsprozessen:
  • Allgemeines Verhalten von anderen Geschäftsprozessen: include-Beziehung (gemeinsames Verhalten)
  • Varianten in andere Geschäftsprozesse verlagern: extend-Beziehung (erweitertes Verhalten: B-extends-A [A <--- B], ist Prozess-B beendet, wird in Prozess-A zurückgekehrt. Die Erweiterung wird vogenommen, um Komplexität des ursprünglichen Prozesses zu reduzieren.)
  • Generalisierung als abstrakte oder konkrete Eltern-Geschäftsprozesse
Geschäftsprozessdiagramm (use case diagram): zeigt Geschäftsprozess, Akteure und ihre Beziehungen. Geschäftsprozess- diagramm beschreibt die Beziehungen zwischen Akteuren und Geschäftsprozessen in einem System.

Geschäftsprozess-Schablone (use case template): ermöglicht eine semiformale Spezifikation von Geschäftsprozessen. Sie enthält folgende Informationen: Name, Ziel, Kategorie, Vorbedingung, Nachbedingung Erfolg, Nachbedingung Fehlschlag, Akteure, auslösendes Ereignis, Beschreibung des Standardfalls (sowie Erweiterungen und Alternativen zum Standardfall).

(Quelle: Balzert H., Lehrbuch der Software-Technik Software Entwicklung
ISBN: 3-8274-04080-0)

20.4.08

Checkliste Geschäftsprozesse

Ergebnisse
  • Geschäftsprozessdiagramm: Alle Geschäftsprozesse und Akteure sind eingetragen.
  • Beschreibung der Geschäftsprozesse: Alle Geschäftsprozesse sind umgangssprachlich oder mittels Schablone beschrieben.
Konstruktive Schritte

1. Akteure ermitteln
  • Welche Personen führen diese Aufgaben zur Zeit durch und besitzen daher wichtige Kenntnisse über die durchzuführenden Arbeitsabläufe? Welche Rollen spielen diese Personen?
  • Welche Personen werden zukünftig diese Aufgaben durchführen und auf welche Vorkenntnisse muss die Benutzungsoberfläche abgestimmt werden? Welche Rollen spielen diese Personen?
  • Wo befindet sich die Schnittstelle des betrachteten Systems bzw. was gehört nicht mehr zum System?
2. Geschäftsprozesse für die Standardverarbeitung ermitteln
  • Primäre und ggf. sekundäre Geschäftsprozesse betrachten
  • Welche Standardverarbeitung besitzen sie?
2a. mittels Akteuren
  • Sind die Akteure Personen?
  • Welche Arbeitsabläufe lösen sie aus?
  • An welchen Arbeitsabläufen wirken sie mit?
2b. mittels Ereignissen (Akteure sind esterne Systeme)
  • Erstellen einer Ereignisliste
  • Für jedes Ereignis einen Geschäftsprozess identifizieren
  • Externe und zeitliche Ereignisse unterscheiden
2c. mittels Aufgabenbeschreibungen
  • Was sind die Gesamtziele des Systems?
  • Welches sind die zehn wichtigsten Aufgaben?
  • Was ist das Ziel jeder Aufgabe?
3. Geschäftsprozesse für die Sonderfälle formulieren
  • Erweiterungen und Alternativen mittels Schablonen erstellen
  • Aufbauend auf Standardfunktionalität mit extend die Sonderfälle formulieren (erweiterte Geschäftsprozesse beschreiben)
4. Aufteilen komplexer Geschäftsfälle
  • Komplexe Schritte als eigene Geschäftsprozesse spezifizieren (include)
  • Komplexe Geschäftsprozesse (viele Sonderfälle) in mehrere Geschäftsprozesse zerlegen und Gemeinsamkeiten mit include modellieren.
  • Umfangreiche Erweiterungen als Geschäftsprozesse spezifizieren (extend)
5. Gemeinsamkeiten von Geschäftsprozessen ermitteln
  • Auf redundanzfreie Beschreibung achten (include)
Analytische Schritte

6. Gute Beschreibung
  • Verständlich für den Auftraggeber
  • Extern wahrnehmbares Verhalten
  • Fachliche Beschreibung des Arbeitsablaufs
  • Beschreibt Standardfall vollständig und Sonderfälle separat
  • Maximal eine Seite
7. Fehlerquellen
  • Zu kleine und damit zu viele Geschäftsprozesse
  • Zu frühe Betrachtung der Sonderfälle
  • Zu detailierte Beschreibung der Geschäftsprozess
  • Verwechseln von include und extend Beziehungen
  • Geschäftsprozesse beschreiben Dialogabläufe
Im ersten Schritt konzentriert man sich auf die Standardfälle und ignoriert die Sonderfälle. Bei Personen werden typische Arbeitsabäufe analysiert. In Interviews sind folgenden Fragen zu stellen;
  • Welches Ereignis löst den Arbeitsablauf aus?
  • Welche Eingabedaten werden benötigt?
  • Welche Schritte sind auszuführen?
  • Ist eine Reihenfolge der Schritte festgelegt?
  • Welche Zwischenergebnisse werden erstellt?
  • Welche Endergebnisse werden erstellt?
  • Welche Vorbedingungen müssen erfüllt sein?
  • Welche Nachbedingungen (Vorbedingungen anderer Geschäftsprozesse) werden sichergestellt?
  • Wie wichtig ist diese Arbeit?
  • Warum wird diese Arbeit durchgeführt?
  • Kann die Druchführung verbessert werden?
Ist es schwierig anhand von Akteuren oder Ereignissen Geschäftsprozesse zu identifizieren, dann kann man die Aufgaben des Systems beschreiben. Zunächst formuliert man den Zweck (die Ziele des Systems). Aus diesen Zielen werden die notwendigen Aufgaben abgeleitet. Die zehn wichtigsten Aufgaben sind zu überlegen. Jede Aufgabe wird umgangssprachlich mit 25 oder weniger Worten beschrieben. Zu beantworten ist die Frage: Was ist das Ziel dieser Aufgabe bzw. Nutzen dieser Aufgabe für das Gesamtsystem?

(Quelle: Balzert H., Lehrbuch der Software-Technik Software Entwicklung
ISBN: 3-8274-04080-0)

19.4.08

Geschäftprozesse: Definition und Schablone

Mit Hilfe von Geschäftsprozessen kann sowohl die Funktionalität eines Produkts als auch die Ablauforganisation eines Unternehmens beschrieben werden.
Auf Unternehmensebene (Geschäftsprozesse im Grossen) handelt es sich bei einem Geschäftsprozess um einen Unternehmensprozess (Business Process), der aus einer Anzahl von unternehmensinternen Aktivitäten besteht, die durchgeführt werden, um die Wünsche eines Kunden zu befriedigen.
Ein Geschäftsprozess (use case) definiert einen Arbeitsablauf, wenn es sich um ein Software-System handelt, der mit Hilfe der Software durchgeführt wird (aber manuelle und organisatorische Anteile besitzen kann).

Schablone für Geschäftsprozesse (Templates für use cases)
  • Geschäftsprozess: Name (was wird getan?)
  • Ziel: Globale Zielsetzung bei erfolgreicher Ausführung des Geschäftsprozesses
  • Kategorie: primär, sekundär oder optional
  • Vorbedingung: Erwarteter Zustand, bevor Geschäftsprozess beginnt
  • Nachbedingung Erfolg: Erwarteter Zustand nach erfolgreicher Ausführung des Geschäftsprozesses, d.h. Ergebnis des Geschäftsprozesses
  • Nachbedingung Fehlschlag: Erwarteter Zustand wenn das Ziel nicht erreicht werden kann
  • Akteure: Rollen von Personen oder andere Systeme, die den Geschäftsprozess auslösen oder daran beteiligt sind
  • Auslösendes Ereignis: Wenn dieses Ereignis eintritt, dann wird der Geschäftsprozess initiiert
  • Beschreibung:
    1. Erste Aktion
    2. Zweite Aktion
    3. ...
  • Erweiterungen: 1a Erweiterung des Funktionsumfangs der ersten Aktion (falls vorhanden)
  • Alternativen:
    1. a Alternative Ausführung der ersten Aktion
    2. b Weitere Alternative zur ersten Aktion
Der betrachtete Geschäftsprozess kann nur ausgeführt werden, wenn die genannte Vorbedingung erfüllt ist. Die Nachbedingung eines Geschäftsprozesses A kann für einen Geschäftsprozess B eine Vorbedingung bilden. Diese Angaben bestimmen also, in welcher Reihenfolge Geschäftsprozesse ausgeführt werden können.
Unter Beschreibung erfolgt eine umgangssprachliche Spezifikation des Geschäftsprozesses. Die einzelnen Aufgaben werden der besseren Übersicht halber nummeriert. Wichtig ist, dass hier zunächst der Standardfall, d.h. der Fall, der am häufigsten auszuführen ist, beschrieben wird. Alle seltener eingesetzten Fälle werden unter Erweiterungen ausgeführt, wenn sie zusätzlich zu einer Aktion der Standardverarbeitung ausgführt werden und unter Alternativen, wenn sie eine Aktion der Normalverarbeitung ersetzen.

Die Kategorie eines Geschäftsprozesses ist
  • primär: wenn er notwendiges Verhalten beschreibt, das häufig benötigt wird,
  • sekundär: wenn er notwendiges Verhalten beschreibt, das selten benötigt wird,
  • optional: wenn er notwendiges Verhalten beschreibt, das für den Einsatz des Systems zwar nützlich, aber nicht unbedingt notwendig ist.
(Quelle: Balzert H., Lehrbuch der Software-Technik Software Entwicklung
ISBN: 3-8274-04080-0)

6.1.08

Wait (Sleep) in Batch files

To pause for a minute before running the next command in a batch file (for a delay of 60 seconds):

PING -n 61 127.0.0.1>nul

Prerequisite for this command is the TCP/IP-component.

Nvidia's GauGan App

NVIDIA's GauGAN AI Machine Learning Tool creates photorealistic images from Simple Hand Doodling http://nvidia-research-mingyuliu.com/...