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
Software development is a complex process that involves a number of distinct phases, and may employ the skills of a significant number of people over an extended period of time. Some software projects are relatively trivial affairs that can be completed relatively quickly by a single developer working alone; others may require months or even years of work, involve hundreds of developers and support staff, and span multiple geographical locations.
Most software projects fall somewhere between these two extremes, but will still require a number of people to work together if the project is to be completed successfully. The process begins with the identification of a problem to be solved, and ends with the deployment of a working software solution.
In these pages, we will be looking at the activities involved in software development, including defining the problem to be solved, identifying a set of system requirements, designing and implementing an appropriate software solution, deploying the system in the target environment, and carrying out software maintenance.