Software Development: Attributes, Processes, and Models

Essential Attributes of Quality Software

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.

Key Takeaways

  • 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 systems. 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 Model

  • 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 team-customer gap
    • Produce a prototype and solicit feedback
    • Quickly and cheaply achieve critical understanding

Incremental development 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 Software Engineering

  • The 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.

Common Needs Addressed by Software Models

Each of these models addresses the following needs:

  • Specification of requirements
    • Identifying services to be provided and environmental constraints
  • Design and implementation
    • Transforming the specification into a 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

Benefits of an Iterative Approach

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 the 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 (RUP)

  • 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
    • Transition