CS1530 Software Engineering
Although the instructor will make a best effort to have the class topic on the day listed, occasionally a change must be made (e.g., a lecture going long, or a guest lecturer unable to make it to class that day). However, these are the topics that will be covered and the expected date that they will be taught.
- McConnell - Code Complete, Second Edition
- Tsui - Essentials of Software Engineering (third or fourth 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
-
(28 Aug) Introduction: What is Software Engineering?
- Software Engineering vs Programming vs Computer Science
-
(30 Aug) Overview: Designing a Software Product
- 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?
-
(4 Sep) NO CLASS - LABOR DAY
-
(6 Sep) Building a Software System
- Reading: Tsui, Chapters 1 and 2
- Overview of requirements, design, testing, estimating
- How is a system built?
- Walkthrough: Developing a system from requirements
- DUE: READING QUIZ 1
-
(11 Sep) Principles of Software Engineering
- Reading: Tsui, Chapter 3
- Why do software projects fail?
- Fundamental Concepts
- Davis's Principles
- Royce's Principles
-
(13 Sep) Overview of Software Process Models
- Reading: Tsui, Chapter 4
- Waterfall
- Incremental and Iterative
- Spiral
- CMMI
- Benefits and Drawbacks of each
- DUE: READING QUIZ 2
-
(18 Sep) Our Model: Agile/Scrum
- Reading: Tsui, Chapter 5 and The Agile Manifesto - http://agilemanifesto.org/
- Why Agile?
- Sprints / Sprint Planning / Retrospective
- Scrum teams
- Benefits and Drawbacks
-
(20 Sep) Requirements and User Stories
- Reading: Tsui, Chapter 6
- Requirement elicitation
- Requirement analysis
- Differences between requirements and user stories
- DUE: READING QUIZ 3
-
(25 Sep) Software Design and Architecture
- Reading: Tsui, Chapter 7
- Phases of design
- Architectural vs Detailed design ("strategy" vs "tactics")
- Architectural styles and patterns
-
(27 Sep) Detailed Software Design
- Reading: Tsui, Chapter 8
- Design metrics
- Object-Oriented and Aspect-Oriented Design
- Coupling and cohesion
- Basic UI Design Principles
- DUE: READING QUIZ 4
-
(2 Oct) Software Project Management
- Reading: Tsui, Chapter 13
- POMA - Planning, Organizing, Monitoring, Adjusting
- Project effort estimation
- Understanding earned value (EV)
- Comparing EV vs story points
-
(4 Oct) Software Implementation
- Reading: Tsui, Chapter 9
- Software development guidelines
- Implementation practices
- DUE: READING QUIZ 5
Note: Classes that are normally held on Monday are shifted to Tuesday on this week due to the Monday holiday.
-
(10 Oct) MIDTERM 1
-
(11 Oct) EXERCISE 1: Group Selection and Requirements
- Sprint 1 begins
-
(16 Oct) EXERCISE 2: Git 911
- Reading: A Friendly Introduction to Git by Bill Laboon
-
(18 Oct) Gradle and Build Systems
- Why a build system?
- Integrating tasks
- Testing with JUnit
-
(23 Oct) EXERCISE 3: Pair Programming a Gradle App
-
(25 Oct) Quality Assurance and Quality Software
- READING: McConnell, Chapters 20-23
- Sprint 1 ends; Sprint 2 begins
-
(30 Oct) EXERCISE 4: GUEST LECTURE - Jenny Liu, Product Manager at TurnItIn, on Product Ownership.
- How does Product Management compare to Program or Project Management?
- Understanding customer needs
- Balancing technical requirements with customer requirements
- Product roadmaps
-
(1 Nov) Defensive Programming
- READING: McConnell, Chapter 8
- Protecting programs from invalid input
- Postel's Principle
- Dealing with errors and exceptions
-
(6 Nov) Function/Method-Level Software Development
- READING: McConnell, Chapters 5 and 10 - 12
- Accidental vs Essential Complexities
- Information Hiding and Encapsulation
- Managing complexity
- Techniques for ensuring loose coupling
-
(8 Nov) Programming with Concurrency
- Why program with threads?
- Threads vs Processes
- Pitfalls (data races, deadlock, livelock, etc.)
- Sprint 2 ends; Sprint 3 begins
-
(13 Nov) Concurrent Programming in Java
- java.util.concurrent
- Thread-safe programming in Java
- Common patterns and anti-patterns
-
(15 Nov) EXERCISE 5: Finding Pi Using Concurrency
-
(20 Nov) Integration and the Software Pipeline
- READING: Tsui, Chapter 11
- Classical models of integration
- Continuous Integration
- Sprint 3 ends; Sprint 4 begins
-
(22 Nov) NO CLASS
-
(27 Nov) Legacy Code
- Refactoring
- Sprout and Wrapper methods/classes
- Pinning tests
- Finding/modifying seams
- Finding/modifying inflection points
-
(29 Nov) Trade-offs In Software Engineering
- Cost / Benefit analysis
- Making decisions based on the Iron Triangle
- Examples - Apollo Guidance Computer, Adding Metrics to Web Application
-
(4 Dec) MIDTERM 2
-
(6 Dec) Software Craftmanship
- READING: McConnell, Chapters 33 - 34
- Writing good code - maintainable, testable, etc.
- Intellectual humility and avoiding complexity
- Conventions and Abstractions
- Continuous Improvement
- Sprint 4 ends