Core Concepts in Software Testing and Code Quality

Graphs and Cyclomatic Complexity

A graph is a structure composed of nodes (also called vertices) and the connections between them, known as edges or arcs. They are used to represent relationships between elements.

Graph Types

  • Directed: Connections have a specific direction (e.g., A → B).
  • Undirected: Connections have no specific direction (e.g., A – B).

McCabe’s Cyclomatic Complexity

Cyclomatic complexity measures the number of linearly independent paths through a program’s source code. This metric helps

Read More

Fundamentals of Software Development, Testing, and Modeling

What is Software and Its Common Myths?

Definition of Software

Software is a set of instructions, data, or programs used to operate computers and execute specific tasks. It is the intangible component of computers, as opposed to hardware.

Types of Software

  • System Software: e.g., Operating Systems
  • Application Software: e.g., MS Word, Web Browsers
  • Programming Software: e.g., Compilers, Editors

Common Software Myths

(Content for this section was not provided).

Core Software Engineering Concepts

Software Engineering

Read More

Software Maintenance, Evolution, and Documentation Best Practices

Software Maintenance Fundamentals (Week 1)

Definition of Software Maintenance (SM)

  • “The modification to a software product after delivery to correct faults.”

Maintenance vs. Software Evolution

MaintenanceEvolution
All activities preventing failure or decay of a software system.Activities that provide new or changed functionality only.

Software Aging and Decay

  • Software ages when it does not adapt to changing technology, user needs, or competitors.

Lehman’s Laws of Software Evolution

  1. Continuing Change:
    • Real-
Read More

Foundations of Computation and Compiler Techniques

A Turing Machine (TM) is a theoretical model that defines an abstract machine capable of performing computations using a tape, a head for reading and writing symbols, and a finite set of states. The tape is infinite and divided into cells, each holding a symbol.
The machine reads the current symbol, changes it, moves left or right, and transitions between states based on a predefined set of rules. TMs can simulate any algorithm and are fundamental to understanding the limits of computation.
However,

Read More

Agile vs. Waterfall: Choosing the Right Project Methodology

Agile vs. Waterfall: The Stacey Matrix Framework

Agile and Waterfall represent contrasting software development methodologies. Their suitability is often determined by the Stacey Matrix, which assesses project complexity based on certainty (technology) and agreement (requirements). Agile is an iterative approach that delivers functional software in short cycles and embraces adaptability, making it ideal for complex or chaotic projects with high uncertainty. In contrast, Waterfall is a linear model

Read More

Automated Program Analysis for Enhanced Software Quality

What is Program Analysis?

Program analysis is the automated process of checking computer programs for measurable quality attributes. The focus is on automation that can be integrated into continuous integration and deployment (CI/CD) pipelines, ensuring checks are performed automatically on releases.

The analysis targets specifically measurable qualities, avoiding subjective assessments like user interface aesthetics. While crucial, such aspects are not easily quantifiable through automated means.

Read More