Software Quality Management (SQM)
A practice to quantitatively plan and guide software development, emphasizing Quality engineering, plan & control
- Ensures req'd level of quality is achieved in software product
- Defines appropriate Quality framework, standards, and procedures
- Quality framework, standards, and procedures are followed
- Develop a quality culture - it's everyone's responsibility
Achieving Quality Factors
- Architectural based Tactics:
- Quality models
- Development models
- Common sense
- Architectural based Analysis and trade-off approach:
- General properties essential for quality factors
- Scenario based, quality factors required will satisfy goals
Reliability
Prevent/tolerate faults! Recover or handle fault to recover/limit damage.
Active fault detection
- Periodically check for symptoms OR anticipate when failures will occur
Tolerating by exception
- Situations that cause the system to deviate from its desired behavior
- Apply exception handling with ability to bring system to acceptable state
- Typical exceptions include:
- Deadlocking
- Violating a system invariant (e.g.; security property)
- Corrupting data
- Failing to provide a service
- Providing the wrong service
Fault recovery tactics
- Undoing transactions: manage a series of actions as a single transaction that are easily undone if a fault occurs midway through the transaction
- Checkpoint/rollback: software records a checkpoint of current state; rolls back to that point if system gets in trouble
- Degraded service: return to previous state with the least possible degraded service
Security
Architectural Characteristics:
Immunity
Ability to prevent attacks
- Minimize exploitable security weaknesses
- Ensure security feats are included in the design
Resilience
Ability to recover quickly and easily from an attack
- Segmenting functionality to contain attack
- Enable system to quickly restore functionality
Efficiency - constraints on system speed & accuracy
Response Time
Speed of response to requests
Throughput
Requests/minute
Load
How many users it can support before response time/throughput suffer
Improve Efficiency:
By Perceived Response Time:
Scheduling
- Earliest deadline first
- First come/fist served (FIFO)
- Explicit Priority
Caching
By Utilization of Resources:
Load-Balancing
As a reverse proxy, distributes network or application traffic across a number of servers to increase users and app reliability
Maintainability
Design must be able to change
Directly affected Units
responsibilities change to accommodate a system modification. Minimize impact and focus on
- Expected changes: design decisions most likely change. Put each in it's own software unit
Cohesion: increases chances that a change to system's responsibilities are confined to the few units that are assigned those responsibilities
Indirectly affected units
implementations must be revised, responsibilities remain the same. Focus on reducing Dependencies:
- Coupling: reduces likelihood that change in one unit will affect others
- Interfaces: If a unit interacts with other units only through their interfaces, changes to one unit won't go beyond the unit’s boundary - unless its interface changes
Self-Managing Software
autonomic, adaptive, dynamic, self-configuring, self- optimizing, self-healing, context-aware
Systems that operate optimally in different/changing environments - monitors environment and it's own performance, and changes in response
Usability
Quality of a user's experience when interacting with a product/system. The user's effort for:
- Understandability: recognizing logical concept and applicability
- Learnability: learning it's application (i.e. operation control, input, output)
- Operability: operation and control.