Acceptability Software must be acceptable to the type of users for which it is designed. This means that it must be understandable, usable, and compatible with other systems that they use. Dependability and security Software dependability includes a range of characteristics including reliability, security, and safety. Dependable software should not cause physical or economic damage in the event of system failure. Software has to be secure so that malicious users cannot access or damage the system. Efficiency Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency therefore includes responsiveness, processing time, resource utilization, etc. Maintainability Software should be written in such a way that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable requirement of a changing business environment. ■ Software is not just a program or programs but also includes all electronic documentation that is needed by system users, quality assurance staff, and developers. Essential software product attributes are maintainability, dependability and security, efficiency, and acceptability. ■ The fundamental ideas of software engineering are applicable to all types of software system. These fundamentals include managed software processes, software dependability and security, requirements engineering, and software reuse Software Process and Models • A series of steps for designing and developing software systems – Analysis – Design – Implementation – Verification – Maintenance • Models – Waterfall – Iterative Life-Cycle Phases • Initiate / Contract / Feasibility • Analyze / Requirements Engineering • Design / Architect • Build / Implement / Code • Test / Verify / Validate / Assess / Review / etc. • Release • Maintain Waterfall (Requirements definition) (System and software design) (Implementation and unit testing) (Integration and system testing) (Operation and maintnance) • Cascading from one phase to the next • Each phase ends with a “gate” – Signoff is required before a phase can be considered complete – Increases the likelihood of true completion – Makes it difficult to estimate completion time • In practice, any engineering effort follows this general approach, but also involves iteration – Iterations facilitate learning – It is difficult to estimate the required number of iterations Incremental Development • Achieve a defined “sub-objective” with each iteration • The product is evolved methodically • The focus is on answering questions and resolving challenges • Often used to bridge the project teamcustomer gap – Produce a prototype and solicit feedback – Quickly and cheaply achieve critical understanding. Incremental development (Outline description) (concurrent| Specification, Developement ,Validation) (concurrent connected | Initial Version, Intermediate Version, Final Version)  is based on the idea of developing an initial implementation, getting feedback from users and others, and evolving the software through several versions until the required system has been developed Reuse-Oriented SW Engineering (Requirements specification)( Software discovery Software evaluation)( Requirements refinement) (Configure application system Adapt components Develop new components) (integrate system) • Focus is on reusing previously created system elements – Clearly faster – Defects are limited to points of integration and “inappropriately” applied components • Tradeoffs may be necessary – Existing components may not exactly match requirements • Requires disciplined management of reusable components – Documentation – Testing – Version control, etc  Each of these models addresses the following needs: – Specification of requirements • Identifying services to be provided and environmental constraints – Design and implementation • Transforming specification into working system – Verification and validation • Showing that the system satisfies requirements and meets customer expectations – Evolution • Growing the system over time to accommodate environmental changes and new requirements. • An iterative approach is beneficial because change is likely – Technology evolves rapidly – Competition drives customers to change requirements – Changes to economic conditions can affect strategic approaches • Minimizing time and scope also minimizes opportunity for change – Plan for relatively short, well-defined iterations – Customers can utilize incrementally delivered systems. . The Spiral Model • Iterative, risk-driven approach developed by Barry Boehm • Four phases executed repeatedly – Objective setting – Risk assessment and reduction – Development and validation – Planning for the next iteration The Rational Unified Process • Hybrid model incorporating prototyping and incremental delivery – Based on UML and the Unified Software Development Process • Described from multiple perspectives – Dynamic: phases of the model over time – Static: process activities that are enacted – Practice: suggests good practices to be used during the process • RUP phases: – Inception, elaboration, construction, and transition