Lesson 14 Software Development

The term "software" refers to a computer program, or a collection of programs, that control the computer's hardware in order to achieve some purpose. Programs are written to solve a particular problem, or to perform a specific task. They are written by programmers, who must translate the requirements for solving the problem or carrying out the task into a language that the computer can understand. Computers are highly complex machines that can execute millions of instructions per second, but they have no inherent intelligence, an will only do what they are instructed to do by the programmer. Fo this reason, programs must be carefully designed, correctly coded, and thoroughly tested.

One of the main tasks in any software development project will be to determine what the inputs and outputs to the program will be, i.e. what data will be fed into the program (input), and what data is expected as a result of running the program (output). The next step will be to determine what processing needs to be carried out on the input data in order to produce the required output. The complexity of the processing involved will depend on the size of the software project. A simple model of a software system is shown below.

A simple model of a software system

A simple model of a software system

The Software Development Life Cycle

As with most undertakings, planning is an important factor in determining the success or failure of any software project. Essentially, good project planning will eliminate many of the mistakes that would otherwise be made, and reduce the overall time required to complete the project. As a rule of thumb, the more complex the problem is, the more thorough the planning process must be. Most professional software developers plan a software project using a series of steps generally referred to as the software development life cycle . A number of models exist that differ in the number of stages defined, and in the specific activities that take place within each stage. The following example is a generic model that should give you some idea of the steps involved in a typical software project.

A generic software development life cycle

A generic software development life cycle

Analysis of user requirements

During this stage, the problem is defined so that a clear understanding can be gained of what the system should do, i.e. what the inputs to the system are, what the output should be, and the operational parameters within which the system is expected to work. If the new system is to replace an existing system, the problem may be defined in terms of the additional or enhanced functionality that is required.

Program design

In this stage, a solution to the problem is designed by defining a logical sequence of steps that will achieve each of the stated system objectives. Such a sequence of steps is often referred to as an algorithm . Some of the methods used to define program algorithms are described later in this section, and include flowcharts and pseudocode. These tools allow the program designer to break a given problem down into a series of small tasks which the computer can perform to solve the problem. The user interface will also be designed during this stage, and will determine how input is obtained, how output is displayed, and what controls are available to the user.

Program coding

This stage, sometimes known as the implementation stage, is where the algorithms are translated into a programming language, and tends to be the longest phase of the development life-cycle. In this case, we are using Visual Basic to write the program.

Documentation and testing

The documentation of the program fulfils two main objectives. The first is to provide a technical reference to facilitate ongoing maintenance and development of the software itself. The second is to provide user documentation, i.e. a set of instructions that inform the user about the features of the software and how to use them. The aim of software testing is to find any errors ("bugs") in the program, to eliminate those errors (a process known as "debugging"), and as far as is reasonably practicable should be sufficiently rigorous to ensure that the software will function as expected under all forseeable circumstances.

Operating and maintaining the system

Once the software has been "rolled out" and any necessary user training has been completed, it will be necessary to monitor the performance of the system over time to ensure that it is behaving as expected. The system will need to be maintained, and parts of it will need to be upgraded from time to time to handle evolving user needs or to cope with new problems. Eventually, as the system ages, it may no longer be able to adequately cope with the demands of a growing number of users, take advantage of advances in hardware technology, or adapt to a constantly changing environment. When this time comes, the system will need to be decommissioned and replaced by a new system. Hence, the software development life cycle will begin again.

Using Flowcharts

A flowchart is a way of visually representing the flow of data through an information processing system, the operations performed within the system, and the sequence in which they are performed. A program flowchart describes the sequence of operations required to solve a given problem. A programmer will often create a flowchart before writing a program. The flowchart is drawn according to defined rules, using standard flowchart symbols. Flowcharts help us to understand the logic of complex problems, and make it easier to write programs in a high level programming language. Some commonly used flowcharting symbols are shown below. Flowcharts are a good way of communicating the logic of a system to others, and allow problems to be analysed effectively. They can also form part of the program's documentation, and are useful for facilitating efficient coding and debugging. Flowcharts can, however, become complex and unwieldy if the program in question is large and complex. They may also need to be completely redrawn if changes are required, depending on how they have been produced.
ANSI Flowchart Symbols
Symbol Name Description
Flowline Lines that connect other flowchhart symbols and indicate the direction of logic
Terminal Indicates the start or end of a task
Processing Arithmetic or data-manipulation operations
Input/Output Indicates an input or output operation
Decision Decision making and branching
Connector Used to join different parts of a program
Offpage Indicates that the flowchart continues on another page.
Predefined Represents a group of statements that perform some processing task
Annotation Provides additional information about another flowchart symbol

Flowchart guidelines

  1. Before you begin, list the requirements in a logical order
  2. The flowchart should be clear, unambiguous and easy to follow
  3. Normal direction of flow is left to right or top to bottom
  4. Only one flow line should come from a process symbol
  5. Only one flow line should enter a decision symbol. Several flow lines (one for each possible answer) may exit the decision symbol
  6. Only one flow line is used in conjunction with the terminal symbol
  7. Use only brief comments within symbols (use the annotation symbol to describe data or computational steps more clearly)
  8. For a complex flowchart, use connector symbols to reduce the number of flow lines. Avoid intersecting flow lines
  9. Ensure the flowchart has a logical beginning and end point
  10. Test the validity of the flowchart with simple test data

An example flowchart - a progam for computing the factorial of N

An example flowchart

An example flowchart

Courtesy of Chris Wells.