← Back to CoursesComputer Science: Intermediate

Neuroanatomy Explorer

Drag to rotate · scroll to zoom · click regions to explore

View
Loading 3D model…

Click a region
to explore it

Memory Deck

Flip each card and rate whether you knew it. Your score is saved.

Term
Definition

Deck complete — score saved.

Match the Pairs

Match each term to its definition. Finish the board to earn your score.

All matched — score saved.

Concept Constellation

Every key idea in this course, mapped as an explorable 3D constellation. Drag to rotate, scroll to zoom, click a node.

Click a node to read its definition.

Software Design, Modularity, and Testing

Manual: General · Subject: Computer Science

Learn how engineers structure programs, reduce complexity, and verify behavior with testing and debugging.

Building maintainable systems

Modularity and separation of concerns

Good software design divides a system into pieces with clear responsibilities. Each module should do one job well and interact with others through simple interfaces. This reduces coupling and makes code easier to understand, test, and change.

Tight vs. loose coupling

Tight coupling

  • Modules depend heavily on each other's internal details
  • Changes in one part can break many others

Loose coupling

  • Modules communicate through stable interfaces
  • Changes are easier to isolate and manage

Testing levels

Unit tests verify small pieces in isolation, integration tests check that components work together, and end-to-end tests validate the full user flow. A healthy test strategy uses all three at different points in the development cycle.

What is the main purpose of unit testing?

Why is loose coupling beneficial?

⚠️

Debugging mindset

When something breaks, form a hypothesis, isolate the cause, reproduce the issue reliably, and change one thing at a time.

A practical debugging routine

  1. 1

    Step 1: Reproduce the bug consistently.

  2. 2

    Step 2: Reduce the problem to the smallest failing case.

  3. 3

    Step 3: Inspect inputs, assumptions, and recent changes.

  4. 4

    Step 4: Add logging or breakpoints to observe state.

  5. 5

    Step 5: Fix the root cause and retest thoroughly.

Which test checks that multiple components work together?

What is one sign of good code organization?