Welcome to Introduction to Software Engineering¶
Discover the art and science of building reliable, scalable software. In this course, you’ll delve into Agile methodologies, requirements engineering, system design, implementation patterns, and quality assurance—core concepts that power innovative products at leading tech firms. Through a collaborative project (e.g., developing a productivity application like a To-Do List), you’ll focus on the process: iterating on ideas, managing teams, and ensuring maintainability, preparing you for dynamic careers in tech.
Whether you’re aiming for roles in startups, big tech, or beyond, this course equips you with a premium skill set to excel.
Course Objectives¶
By the end of this course, you’ll be able to:
Apply Scrum roles, sprints, and tools like GitHub and GitHub Projects to manage projects iteratively, mirroring industry teams at companies like Atlassian.
Elicit, document, and validate user needs using SRS and use cases, preventing common pitfalls seen in real-world product launches.
Create UML models, apply MVC and SOLID principles, and design for scalability—essential for building maintainable architectures like those at Netflix.
Integrate design patterns and refactor code, enhancing applications efficiently as in feature-driven development at Uber.
Conduct TDD, achieve high test coverage, and deliver professional presentations, simulating stakeholder demos in enterprise settings.
Course Schedule¶
Detailed course schedule with weekly topics, readings, and milestones.
Course Modules and Expected Topics¶
The project is supported by modules covering key software engineering topics through lectures and activities. These outline what you’ll learn and what’s expected, setting clear expectations for your growth as an engineer.
Topics Covered:
Software engineering overview,
Agile methodologies (Scrum, sprints), team dynamics, vision crafting, backlog management,
Tool setup (GitHub, GitHub Projects),
Version control with Git/GitHub.
What to Expect:
Lectures on Agile processes and version control, labs for GitHub/GitHub Projects configuration, team meetings to define roles and backlogs. Expected Outcomes:
Form effective teams, align on project goals, establish Git workflows, and practice iterative planning—building habits for adaptable development.
Topics Covered:
Requirements elicitation,
Functional/non-functional requirements,
User stories (INVEST, 3Cs), use cases (main flow, extensions),
SRS structure, MVP development,
A/B testing,
UML basics (use case/class diagrams).
What to Expect:
Discussions on user needs, labs for drafting SRS/user stories and UML diagrams, prototyping CLI-based MVP, basic testing exercises.
Expected Outcomes:
Document and validate requirements, create a CLI-based MVP with use case/class diagrams, ensuring alignment with real-world needs.
Topics Covered:
Advanced UML (activity, sequence diagrams),
Wireframing,
MVC architecture,
SOLID principles (Single Responsibility, Open-Closed, Liskov, Interface Segregation, Dependency Inversion), modular design.
What to Expect:
Modeling tutorials, wireframing labs, MVC refactoring sessions, architecture critiques.
Expected Outcomes:
Design scalable systems with advanced UML and MVC, apply SOLID principles for maintainability—preparing for complex engineering challenges.
Topics Covered:
Design patterns (Factory, Singleton, Observer, Strategy, Adapter),
Feature prioritization,
Code integration,
Documentation refinement.
What to Expect:
Pattern application labs, feature coding, peer reviews, documentation updates.
Expected Outcomes:
Enhance applications with 3-5 design patterns, integrate features efficiently, produce maintainable code—fostering innovative implementation skills.
Topics Covered:
Testing strategies (unit, integration, TDD),
Test coverage analysis (pytest, coverage.py),
Code smells (duplication, long methods),
Refactoring techniques,
Clean code practices (meaningful naming, small functions, minimal comments, formatting, error handling).
What to Expect:
Testing workshops, refactoring labs with clean code focus, coverage report generation.
Expected Outcomes:
Achieve reliable code with 20+ tests (80%+ coverage), refactor for quality, apply clean code principles—simulating professional quality gates.
Topics Covered:
Effective presentations,
Demo best practices,
Retrospective methods,
Project polishing,
Peer feedback,
Reflections on engineering practices,
Career connections.
What to Expect:
Demo rehearsals, revision sessions, reflective writing, career discussions.
Expected Outcomes:
Deliver professional presentations, finalize high-quality projects, gain career insights—emphasizing lifelong learning in software engineering.
The Semester-Long Project¶
At the heart of the course is a team-based project emphasizing software engineering concepts over specific tools. Recommended: Build a practical application like a To-Do List to practice the full lifecycle—from vision to validation. Focus on learning:
Collaboration: Equitable roles and communication protocols.
Adaptability: Iterative planning and risk mitigation.
Excellence: Traceable artifacts and high-quality outcomes.
This project is structured around key milestones that integrate course concepts, allowing you to apply what you’ve learned in a real-world simulation. Below are the milestones, each with deliverables and expectations.
View detailed descriptions: Project Overview
Resources¶
Textbook: Software Engineering: A Practitioner’s Approach (Chapters 1-9).
Tools: GitHub, GitHub Projects, draw.io—access tutorials in the Resources Folder.
Support: MW 5:30 PM - 6:40 PM, TR 11:30 PM - 1:00 PM or By Appointment on MS Team or In-person.
Extra Credit: Will be discussed in class.