Andrew Johnston: Architecture and Consultancy Services

Case Study - Testing Training for Eurotunnel, National Grid Plc and Oracle Corp (1993 - 1998)

I have developed and delivered tester training in the following areas:

bullet Object Oriented Analysis and Design
bullet The Use of Rational Rose and UML
bullet Development of System Architectures
bullet Designing for Test and to Prevent Errors
bullet Objected Oriented Design and Programming using Visual Basic
bullet Unit Testing
bullet System Testing

The training courses are built from a series of modules, each of which can be tailored to a company's environment and requirements. I can also develop new training material to cover other topics.  This allows an individual training course to vary in length from one to several days, and to cover any subset of the above topics, plus local specifics if required. 

I will usually train at your site, provided appropriate resources are available. Please contact me for further details and references from previous clients.

Module Summaries

The following summaries provide a flavour of what is included in the existing modules.

An Introduction to Object Oriented Analysis and Design

  • The Software Crisis
  • The Traditional Analysis Problem, and how OOAD Helps
  • The Origins and Benefits of UML
  • Objects In A Nutshell
  • Encapsulation, Polymorphism and Inheritance
  • Beginning UML with Use Cases
  • Actors and Boundaries
  • How to Find the Use-Cases
  • Use Case Notation and Descriptions
  • Scenarios and Object Interaction
  • Sequence Diagrams
  • Classes and Properties
  • Identifying Classes
  • UML Class Notation and Stereotypes
  • Three-tiered Class Model
  • Boundary, Controller and Collection Class Behaviour
  • Operations and Attributes
  • One Model, Many Diagrams

Object Oriented Analysis

  • Packages - How and Why to Group Elements 
  • Using Packages to Control the Rose Model
  • Associations and Aggregations
  • Multiple Associations and Roles
  • Collaboration Through Relationships
  • Making the Models Work Together
  • Aggregation and Composition
  • Reflexive Relationships and Association Classes
  • Hierarchy Relationships and Inheritance
  • Discovering Hierarchies
  • Inheritance and Polymorphism
  • Multiple Inheritance
  • The Metamorphosis Problem
  • State Transition Diagrams
  • Events and Transitions
  • Guard Conditions
  • Actions and Activities 
  • Nested States


  • Why Do We Need an Architecture?
  • What’s a Good Architecture?
  • How Does Architecture Fit Into the Process?
  • Two-Tier Client-Server
  • Three-Tier Client-Server
  • Advantages of New Architectures
  • Improving Applications
  • Technologies in the New Architecture
  • How Design Should Really Happen
  • How Do Classes Become Components?
  • How is the Architecture Documented?

Physical Design Using Visual Basic

  • Design Principles
  • Where Does the Processing Go?
  • Modularisation
  • When to Use a Class Module, and when Not To!
  • When to Use Property Procedures
  • Keeping the Interfaces Stable
  • Class Design Tips
  • Mimicking Inheritance
  • Using Complex Traditional Structures
  • Key Mechanisms
  • How Does Rose Support the 3-Tier Model?
  • Microsoft Transaction Server
  • Standards and Templates

Moving from Analysis to Design

  • What Happens In Design?
  • Physical Scenario Diagrams
  • Converting Scenario Diagrams
  • Completing the Business Classes and introducing Implementation Classes
  • Adding Key Mechanism Items
  • Handling Events
  • Defining the Data Structure
  • Designing User Service Classes
  • Design Documentation

The Principles of Testing

  • What Can Go Wrong
  • Common Misconceptions About Testing
  • Error-Centric Testing
  • Principles of Good Testing
  • Benefits of Good Testing
  • A Building Block Approach
  • Static and Dynamic Testing
  • Structural and Functional Testing
  • Influences on the Testing Process
  • Cost per Error
  • Test Stage, Test Script and Test Case Structure
  • Why Do Inspections?
  • Selecting Good Test Cases
  • DOs and DON'Ts of Good Testing 
  • What to Emphasise
  • When to Stop Testing
  • Further Reading

Understanding and Preventing Errors

  • Error-prone Areas
  • Error Lifecycles
  • Sources of Error - Before and During Coding
  • Typical Error Rates
  • Prevention is Better than Cure
  • Testing and System Quality
  • Error Analysis
  • Using Error Targets
  • Verifying the Requirements
  • Modular Design
  • "Testing" the Design
  • Preventing Common Errors
  • Defensive Programming
  • Verifying Assumptions and Checking Your Work
  • The Value of Inspections

Unit Test Techniques

  • Interpreting the Requirements
  • Ad Hoc vs Unit Testing
  • Path, Statement and Decision Coverage
  • Paths in VB or Oracle Forms
  • A Good Way of Finding Paths
  • Covering Paths
  • Code and Form Loops
  • Choosing Good Test Cases
  • Equivalence Partitioning
  • Boundary Value Analysis
  • Error Guessing 
  • Input Validation Testing
  • Date-Related Testing
  • Concurrency Testing
  • Recommended Structural Testing
  • Stages in Preparing Unit Testing
  • Grouping Tests

Link Testing

  • Layered and Service Architectures
  • What is Link testing?
  • Integration Strategies
  • Stub and Driver
  • Build and Test Strategies
  • Link Test Cases
  • The Ariane V Problem

System Test Techniques

  • Test Types for System Testing
  • Process for System Testing
  • Interpreting the Requirements
  • Flow Graphs
  • Path, Statement and Decision Coverage
  • Why Use Models?
  • Transaction Flows
  • Fault Tree Analysis
  • Choosing Good  Test Cases
  • Equivalence Partitioning
  • Boundary Value Analysis
  • Error Guessing 
  • Date-Related Testing
  • Concurrency Testing
  • Security Testing
  • Why Can’t We Test for Reliability and Availability?
  • Performance Testing

See more: