Software development is a vital activity in modern American society, and is likely to have increasing significance in the future. Software manages our bank accounts, pays our salaries, controls the aircraft we fly in, regulates power generation and distribution, controls our communications, etc.
Characteristics of high quality software
High quality software shares the following obvious attributes: high quality software is intuitive and easy to use -- the right things happen "automatically" it is efficient -- people use computers to get things done quickly above all, high quality software is correct -- it always produces the advertised results and does not crash!
The need for precision in the specification of software
The notion that software components can be reused is a principal motivation of object-oriented programming, and has virtually become a postulate of programming. To reuse a previously written software component (or create a new one), a software engineer must have a precise description of its behavior. This precision is essential as even a minor misconception of the function of a component that is unapparent at the outset may cause serious errors that are difficult and expensive to correct later in the process.
Typical software development phases
Software development models commonly subdivide the process into phases similar to the following : requirements analysis: determine user needs specification: describe precisely what the role of the software will be design: determine how to realize the software, and devise overall organization implementation: formulate the algorithms and program(s) verification: certify that the program(s) meet the specification maintenance: perform ongoing changes and corrections after the software is in use
The role of formal methods
Formal methods are intended to systematize and introduce rigor into all the phases of software development. This helps us to avoid