Introduction
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, and will only do what they are instructed to do by the programmer. For 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