Software Engineering
Introduction
Software Engineering is often overlooked in computer science courses, however experienced programmers should know its value. As software projects increase in size, they likelihood of failure increases up to almost 50%.Software engineering is hard becuase it is about managing complexity. Much of the incidental complexity can be removed using tools (such as high level languages,time sharing and integrated development environments) but the intrinsic complexity remains.
The following pages are intended to give an overview of this vast subject, and are mainly culled from lecture notes and classic papers.
Alternative Philosophies and Extreme Programming
Chief Programmer Teams
Chief programmer teams were developed at IBM (70-72) to capitalise on the fact that some programmers are far more productive than others- often by a factor of ten or more.The team revolves around one chief programmer, one apprentice/assistant, a tool smith, a librariran, an administrative assitant etc. to get the maximum productivity from the available talent.
These teams can be very effecive during the implementation stage of a project, and is complementary to project management methodologies eg; Waterfall/ Spiral.
Egoless Programming
Egoless proramming (Weinberg, 1971) is in direct opposition to the "chief programmer team" idea; code should be owned by the team not an individual.Literate Programming
The code should be a work of art, designed not just for the machine but also for subsequent human readers. Code designed to be elegant may take far longer to develop than code designed more practically.Alternative Philosophies and Extreme Programming
Chief Programmer Teams
Chief programmer teams were developed at IBM (70-72) to capitalise on the fact that some programmers are far more productive than others- often by a factor of ten or more.The team revolves around one chief programmer, one apprentice/assistant, a tool smith, a librariran, an administrative assitant etc. to get the maximum productivity from the available talent.
These teams can be very effecive during the implementation stage of a project, and is complementary to project management methodologies eg; Waterfall/ Spiral.
Egoless Programming
Egoless proramming (Weinberg, 1971) is in direct opposition to the "chief programmer team" idea; code should be owned by the team not an individual.Literate Programming
The code should be a work of art, designed not just for the machine but also for subsequent human readers. Code designed to be elegant may take far longer to develop than code designed more practically.Brooks Law
Abstract
The Mythical Man Month attacked the idea that men and months are interchangeable in software engineering. Brook wrote "Oversimplifying outrageously, we state Brooks' Law:""Adding manpower to a late software project makes it later."
Factors
b people means n(n-1)/2 channels and 2n cliques)
Example
Further reading
The Capability Maturity Model
By the mid-80's people had begun to realise the importance of keeping teams together. The ability to work as a team grows over time, this is the basis of the "capability maturity model".As well as a team, good management is required.
Critical Software
Safety Critical Software
Systems where failure could cause death or injury are called safety critical systems. For example, nuclear reactor and flight control systems.Security Cricital Software
Systems where failure could lead to reavealing classified, confidential business or personal data are called security cirtical systems. For example, payroll systems.Business Critical Software
Systems where failure could affect important operations are called business critical systems.Example- Patriot Missiles
Anti-missile patrior missiles failed to intercept an Iraqi SCUD missile on 25/2/91- the SCUD struck a US barracks in Dhahran. Other SCUD's got through to Isreal and Saudi Arabia.Reason for failure
Many critical systems failures are multifactorial: "a reliable system can't fail in a simple way"
Definitions
Some of these definitions are particular to software engineering, especially the contradictory definitions of fault in computer science and electrical engineering (see below).Documentation
A typical project has a number of management and engineering documents. As well as being useful for people outside the original development to read, documents can act as a contract.Engineering Documents
Management Documents
Methods of Ensuring Sufficient Documentation
Hazards
Hazard Analysis
The Federal Aviation Administration (FAA) recognizes five categories of failure conditions and five software-level definitions.



