CS1530: Software Engineering
Note that this syllabus is subject to change, but we will cover all of these topics! I may change the ordering based on class/project needs or interests, but these are the topics we will cover.
- Freeman/Pryce - Growing Object-Oriented Software, Guided by Tests
- McConnell - Code Complete, Second Edition
- The Mythical Man-Month is available for free online at the Internet Archive: https://archive.org/details/mythicalmanmonth00fred
- Building and Testing With Gradle is available for free online at: http://www2.gradle.com/l/68052/2015-01-13/6dm
- A Friendly Introduction to Git by Bill Laboon is available for free online at: https://github.com/laboon/friendly_introduction_git/tree/master/presentation
- Software Engineering vs Programming vs Computer Science
- EXERCISE: Group creation (EX1)
Reading: Brooks, "The Tar Pit" and Brooks, "The Mythical Man-Month" (just the titular essay, not the entire book)
- Why is this difficult?
- Overview of the Software Development Life Cycle
- What goes into a software product aside from code?
__Reading: "Manifesto for Agile Software Development", http://agilemanifesto.org/
- Terminology - Sprints, scrums, kanban, retrospective, etc.
- EXERCISE: Stakeholder interaction (EX2)
- BEGIN SPRINT 1
- Building
- Testing
- Other tasks
- EXERCISE: Pair Programming with Gradle (EX3)
- Event-Driven Programming
- Frames and Panels
- Layouts
- Buttons
- EXERCISE: Pair Programming a Swing Application (EX4)
- Reading: A Friendly Introduction to Git by Bill Laboon - https://github.com/laboon/friendly_introduction_git/blob/master/presentation/Git_GitHub_A_Friendly_Introduction.pdf
- Branches and Merging
- EXERCISE: Git 911 (EX5)
- EXERCISE: In-class retrospective and sprint planning (EX6)
- SPRINT 1 ENDS; SPRINT 2 BEGINS
- TFD / TDD
- The Red-Green-Refactor cycle
- The QA process and why it is important
- QA implementation as part of the SDLC
- Code Reviews
- Code review exercise (EX7)
- Why program with threads?
- Threads vs Processes
- Pitfalls
- Thread-safe programming in Java
- Common patterns and anti-patterns
- SPRINT 2 ENDS; SPRINT 3 BEGINS
- Concurrency exercise (EX8)
- Classical models of integration
- Continuous Integration
- Top-down vs bottom-up
- Architecture Models (simple, layered, client-server, n-tier, Big Ball of Mud, etc.)
- SPRINT 3 ENDS; SPRINT 4 BEGINS
- Overview of UML
- SOLID Principles
- DRY
- Command line exercise (EX9)
OPTIONAL READING: Working Effectively With Legacy Code by Michael Feathers (http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf)
OPTIONAL READING: Testable Java by Michael Feathers (http://www.objectmentor.com/resources/articles/TestableJava.pdf)
- SPRINT 4 ENDS; SPRINT 5 BEGINS
- Cost / Benefit analysis
- Making decisions based on the Iron Triangle
- Examples - Apollo Guidance Computer, Adding Metrics to Web Application
- EXERCISE: Trade-off Discussion (EX10)
- Writing good code - maintainable, testable, etc.
- Intellectual humility and avoiding complexity
- Conventions and Abstractions
- Continuous Improvement
- Waterfall (BDUF)
- Prototyping
- Incremental
- RAD
- "Cowboy coding"
- Each group will present their project (~10 min) to the rest of the class
- SPRINT 5 ENDS