Lesson 4: Characteristics of a Good Software


What makes a software “good”?

  • Software quality is measured by various factors that ensure performance, user satisfaction, and longevity

  • The five key characteristics of good software are reliability, maintainability, scalability, efficiency, and security


Introduction to Software Characteristics

  • Operational Characteristics

  • Revision Characteristics

Revision Characteristics (Maintainability-Related Attributes) - Refers to how easily software can be modified, updated, or improved to fix bugs, enhance performance, or adapt to new requirements. These include: Maintainability, Scalability Operational

Characteristics (Performance-Related Attributes) - defines how well software performs under real-world conditions, ensuring a smooth and reliable user experience. These include: Security, Efficiency, Reliability

Maintainability - refers to how easily it can be modified to fix defects, improve performance, or adapt to changes in requirements or environments. High maintainability reduces long-term costs, speeds up updates, and ensures that software can evolve efficiently as user needs and technologies change.

Key Attributes of Maintainability

Modularity - organized into independent modules or components, allowing changes to one part without affecting others

Readability - easy to understand due to clear naming conventions, proper indentation, and concise comments

Documentation - comprehensive manuals, inline comments, and usage guides aid in understanding and modifying the software

Testability - the system includes automated tests, making it easier to verify that changes don’t introduce bugs

Adaptability - software can be easily adapted to new requirements, platforms, or technologies

Reusable - code components are designed for reuse across different parts of the systems of even in other projects

Stability - the software handles modifications without causing unexpected side effects

Examples of maintainability in software

Version Control System

  • Example: Github allows teams to manage different code versions, merge changes, and revert problematic updates

  • Maintainability benefits: provides a reliable history changes and facilitates team collaboration

Consistent Coding Standards

  • Example: Google’s Engineering Practices enforce uniform coding standards across all projects

  • Maintainability benefits: developers can easily read, understand, and modify code written by others.

Comprehensive Documentation

  • Example: React.js offers detailed documentation with tutorials, best practices, and API references

  • Maintainability benefits: accelerates developer onboarding and reduce misunderstandings during updates


Scalability

- refers to software system’s capacity to handle increasing workloads or expand its capabilities to accommodate growth without compromising performance requiring significant redesign.

- efficiently manages rising numbers, data volumes, and transaction complexities Two types of Scalability

Vertical Scaling (Scaling up) - refers to the process of increasing the capacity or capabilities of an individual hardware or software component within a system

Horizontal Scaling (Scaling out) - refers to the process of increasing the capacity or performance of a system by adding more machines or servers to distribute the workload across a large number of individual units

Vertical Scaling (Scaling Up)

Advantages

Disadvantages

Vertical scaling enhances server performance by upgrading hardware (more RAM, faster CPU) increasing capacity to handle more frequents

Has limitations due to the physical constraints of a single server’s hardware capacity

Simplifies management by focusing on single server, making it easier to implement and maintain compared to managing multiple servers

Can be more costly, as upgrading high-end components is often more expensive

Poses a single point of failure risk, where a server failure leads to downtime, unlike horizontal scaling, which distributes the load across multiple servers to reduce failure impact


Horizontal Scaling (Scaling Out)

Advantages

Disadvantages

Boosts system capacity by adding more servers or instances, allowing it to manage increased traffic and demand efficiently

Horizontal scaling increasing complexity, as managing multiple servers or instances requires robust infrastructure and tools for smooth operation

Improves performance via load balancing, evenly distributing workloads to avoid server overload

Leads to higher cost, including expense for hardware, cloud services, and ongoing maintenance and management of additional resources

Enhances fault tolerance, ensuring service availability by allowing other servers to handle the load if one fails, minimizing downtime

Examples of Scalability in software

Web Applications

  • Example: e-commerce platforms like Amazon or Shopify can handle thousands of simultaneous users during peak seasons (Black Friday Sales) without crashing

  • Scalability feature: load balancers distribute traffic across multiple servers to maintain responsiveness

Cloud Services

  • Example: Netflix scales its content delivery using cloud infrastructure (AWS) to serve millions of viewers globally.

  • Scalability: elastic cloud computing automatically adds or removes resources based on user demand

How maintainability influences scalability: A failure curve respective

A failure curve graph with the x-axis as Time and the y-axis as Failure Rate showing:

  1. Early Failure Phase (High Failure Rate)

  2. Stable Phase Low (Low Failure Rate)

  3. Degradation Phase (Increasing Failures)


Maintainability Impact:

  • Regular updates, bug fixes, and structured code reduce failure growth and extend stability.

  • Poor maintenance leads to technical debt, making later modifications harder.

Scalability Impact

  • Well-maintained software scales smoothly with minimal failures.

  • Poorly maintained software faces bottlenecks, crashes, and inefficiencies when scaling.


Reliability

- ability of a software system to consistently perform its intended functions without interruptions or failures, essentially meaning it can be depended upon to work correctly under specified conditions

- key factors impacting reliability include proper error handling, robust design, thorough testing, and minimizing bugs

Key Aspects of Software Reliability

Consistency - the software should produce the same results under similar conditions repeatedly.

Fault Tolerance - the ability to recover from errors or unexpected situations gracefully

Availability - the system should be accessible and operational when needed Error

Handling - mechanism to detect and manage errors effectively

Factors that affect software reliability

Code Quality - poorly written code with bugs and logical errors

Inadequate Testing - Insufficient testing to identify potential issues

Poor Design - Weak architecture or algorithms that can lead to instability

External dependencies - reliance om unreliable external systems or hardware

Lack of Documentation - poorly documented code can make maintenance and troubleshooting difficult

How to improve Software Reliability

Rigorous testing - comprehensive unit, integration, and system testing throughout development

Code Reviews - peer review of code to catch potential errors

Error handling mechanisms - implementing robust error handling and recovery procedures

Design patterns - using established design patterns that promote reliability

Monitoring and logging - implementing mechanisms to track system behavior and identify potential issues

Efficiency

- ability to use system resources in the most effective and efficient manner

- refers to its ability to user resources such as memory, processing power, and network bandwidth in an optimal way

Factors that affect software efficiency

Poorly designed algorithms & data structure - inefficient algorithms or inappropriate data structures can lead to slow performance and high resource consumption

Inefficient use of memory and processing power - excessive memory usage or underutilized processing power can slow down the system and increase cost

High network latency or bandwidth usage - delays in data transfer or excessive bandwidth consumption can reduce the responsiveness of the software

Unnecessary processing or computation - performing redundant or non-essential task wastes resources and slows down the system

Unoptimized code - poorly written or unoptimized code can lead to slower execution and higher resource usage

Security

- measures and practices implemented to protect applications and systems from unauthorized access, vulnerabilities, and malicious attacks

- ensures the confidentiality, integrity, and availability of data and resources

Examples of Security Measures in Software

Regular Updates and Patch Management - keeping software up to date with the latest security patches to protect against unknown vulnerabilities

Authentication and Authorization - verifying user identities and granting permissions based on roles to ensure that only authorized users can access specific functionalities or data

Input Validation - ensuring that all inputs are checked for correctness and safety to prevent injection attacks and other forms of exploitation

Encryption - protecting data by converting it into a coded format, both at rest and in transit, to prevent unauthorized access

Firewall Implementation - using firewalls to monitor and control incoming and outgoing network traffic based on predefined security rules

The interplay of Reliability, Efficiency, and Security: Finding the right balance

How they interconnect:

  1. Reliability & Efficiency

    1. Efficient software performs better under load, reducing failure rates and improving reliability

    2. Poor efficiency (memory leaks, slow performance) can cause system crashes, reducing reliability

  2. Reliability & Security

    1. A secure system prevents failures caused by cyber threats, ensuring reliability

    2. Security flaws can introduce vulnerabilities that cause unexpected failures, reducing reliability

  3. Efficiency & Security

    1. Overly strict security measures (e.g., heavy encryption, complex authentication) can reduce efficiency by increasing processing time.

    2. Balancing security and efficiency is crucial, ensuring strong protection without excessive resource consumption.

robot