CS 477 Lecture Notes

Week Thirteen, Tuesday: Implementation Phase

Choice of Programming Language

World's most popular computer language: COBOL. DoD initiated (Admiral Grace Hopper). Lots of maintenance going on in COBOL and it will continue in the future.

Fourth Generation Languages

SQL (structured query language, standardized by ANSI, pronounced "sequel") is a common example. You will likely gain at least a little familiarity with SQL as your career progresses: SQL is essential for client-server database applications.

Structured Programming

Avoid "goto" except for error handling. Structured programming is the writing of readable code.

Good Programming Practice

Variable naming conventions. Prologue and inline comments. Parameters. Nested if statements.

Coding Standards

Coding standards are intended to make maintenance easier. Overly restrictive standards (such as module size limits) can be counterproductive.

Team Organization

In the implementation phase, programmers can work somewhat independently on different modules.

Democratic Team Approach

"Egoless" programming (Weinberg). Modules belong to the team as a whole.

Classical Chief Programmer Team Approach

Chief programmer is both a manager and a programmer. Reduces communication complexity. If the chief programmer is competent, the approach works well. The "classical" chief programmer team is impractical in many ways.

Beyond Chief Programmer and Democratic Teams

Split the chief programmer into two people: team leader and team manager.

Portability

A product is portable it's significantly less costly to adapt the product to a new system than to write it from scratch. Portability increases the market potential of products.

Module Test Case Selection

Black Box Module-Testing Techniques

Test to specifications.

Glass Box Module-Testing Techniques

Test to exercise code paths.

Code Walkthroughs and Inspections

Code inspection is at least as effective as either black or glass box module testing.

Cleanroom

In this development technique, programmers never compile or execute their own code. Code is written, inspected, and passed to a testing team.

Testing Objects

Inheritance is a form of code reuse. Inherited methods do not (usually) need to be retested.

Management Aspects of Module-Testing

The more faults that are detected in a module, the more likely there are undetected faults remaining. Sometimes it's better to scrap a module with a bad fault history and redesign recode it.

Testing Distributed Software

"Heisenbug:" including debug code to observe this fault causes it to be unobservable.

Testing Real-Time Software

Testing includes structure analysis, correctness proofs, systematic testing, statistical techniques, and, the most important, simulation.


This page established April 6, 1998; last updated January 17, 2000.