· 4 min read

SDP: Software Development Process - OMSCS 2025 Fall

Key software engineering concepts from Georgia Tech OMSCS SDP (CS 6300): lifecycle models, UML, testing, Android development, and team collaboration.

SDP: Software Development Process - OMSCS 2025 Fall

SDP: Software Development Process

Georgia Tech OMSCS SDP (CS 6300) is a hands-on introduction to software engineering practices. The course bridges the gap between writing code and building maintainable systems. This post captures what I learned in Fall 2025 about processes, testing, design, and team-based development.

Course Focus

SDP treats software development as a disciplined process. You learn that coding is only one part of the story. Requirements, design, testing, and maintenance matter just as much, and ignoring them creates technical debt that compounds over time.

Software Lifecycle Models

The course introduces multiple lifecycle models, from rigid waterfall to flexible agile. The key lesson is that no single model fits all projects. Context matters: team size, requirements stability, and risk tolerance all influence the right choice.

Key models covered:

The practical takeaway is to choose a process that matches your constraints, not to follow a model blindly.

Requirements and Use Cases

Good software starts with clear requirements. The course emphasizes the difference between functional requirements (what the system does) and non-functional requirements (how well it does it).

Use cases provide a structured way to capture requirements from the user’s perspective. A use case describes:

Writing use cases forces you to think through edge cases before coding begins.

UML: Communicating Design

UML diagrams are a shared language for design discussions. The course covers several diagram types:

UML is not about drawing perfect diagrams. It is about communicating intent clearly so the team builds the right thing.

Testing: Catching Bugs Early

Testing is not an afterthought. The course emphasizes multiple testing levels and approaches:

Test-Driven Development (TDD)

Write tests before code. TDD forces you to define expected behavior upfront and keeps the codebase testable by design.

Black-Box Testing

Test without knowing the implementation. Focus on inputs and expected outputs. Techniques include equivalence partitioning and boundary value analysis.

White-Box Testing

Test with full knowledge of the code. Aim for statement coverage, branch coverage, or path coverage depending on criticality.

Category-Partition Method

A systematic approach to generating test cases. Identify parameters, categorize their values, and combine them to cover meaningful scenarios. This technique was used in Assignment 6 to generate comprehensive test specifications.

Android Development

The team project required building an Android application. This provided practical experience with:

The goal was not to master Android, but to apply software engineering principles in a real development environment.

Version Control and Collaboration

The course used Git extensively. Beyond basic commands, students learned:

Working in a distributed team taught that communication and process discipline matter as much as technical skill.

Design Principles

Good design makes code easier to understand, test, and change. The course touched on:

The lesson is that design decisions compound. Small improvements in structure pay off as the system grows.

Practical Constraints

SDP emphasizes that real projects face constraints:

The process exists to manage these constraints, not to eliminate them.

Course Takeaways

SDP is a practical foundation for thinking about software development as engineering rather than just coding. The skills transfer directly to industry work.

Resources