Software Engineering At Glance
Why We Need Software Engineering? The aim of software engineering is to solve the software crisis Software is delivered –Late –Over budget –With residual faults
Standish Group Data Data on 9236 projects completed in 2004 Stephen R. Schach
Software Engineering A discipline of software production whose aims are to produce a software that is: –Fault-free, –Delivered on time and within budget, –Satisfying client’s needs –Easy to modify when the client’s needs change
Software Lifecycle Requirements phase Specification phase (Analysis Phase) Design phase Implementation phase Integration phase Maintenance phase Retirement
Why Maintenance? Bad software is discarded Good software is maintained, for 10, 20 years or more Different types of maintenance –Corrective maintenance –Enhancement Perfective maintenance Adaptive maintenance
Testing Two types of testing –Execution-based testing –Nonexecution-based testing Who should perform execution-based testing? –Programming is constructive –Testing is destructive A successful test finds a fault –So, programmers should not test their own code artifacts
Terminology Client, developer, user Internal software Contract software Commercial off-the-shelf (COTS) software –Shrink-wrapped software Open-source software