Course Outline CS-GY 6063 Software Engineering I
Spring 2024
Course Prerequisites:
1) Graduate Status
2) Solid ability to program in Python. Some familiarity with Django is helpful.
Please note: The course will not teach how to program in Python. The students are required to be able to do so already. Experience using version control systems (git in particular) is important.
Course Description:
Learn how to conceptualize, build, deploy, maintain and re-factor software in software development teams.
Course Objectives:
● Learn how to work as part of the Software Development Team
● Lean full cycle software engineering effort including requirements management, software development management and delivery
● Gain exposure to practical approaches for Agile development
● Gain exposure to continuous integration techniques
● Learn efficient unit testing and test-first development principals
Course Structure
Weekly lectures/labs plus a significant practical hands-on project.
● There will be constant communication expected between the team members within the teams as well as between the teams and the instructor.
● The project work will follow Agile methodology organized into week-long Sprints with clearly identified, written down and reported Sprint goals.
● Each team will be presenting a Sprint demo at the end of each Sprint.
● Students are expected to meet in their respective teams outside the lecture hours for daily or near-daily Sprint daily scrum meetings. The team meetings minutes have to be reported in writing and submitted.
Readings
Required book:
Essential Scrum: A Practical Guide to the Most Popular Agile Process (Addison-Wesley Signature): A Practical Guide To The Most Popular Agile Process (Addison-Wesley Signature Series (Cohn))
Optional book, highly recommended:
Software Engineering at Google: Lessons Learned from Programming Over Time - by Hyrum Wright, Titus Winters, and Tom Manshreck
Course requirements
Very few widely-used products are built by an individual, so students must learn to collaborate with others both in design and construction of the codebase. Software engineering is a team sport.
Practical Software Engineering classes require heavy teamwork participation. A student wishing to work “on their own” will not be able to satisfactorily complete the class.
The class will be graded as follows:
● 50% - successful completion of the team project.
○ Format: Working software accessible over the Internet.
○ All project code deployed to GitHub
○ All project code complies with established Code Style guidelines
○ Special emphasis on the test suite completeness and test code coverage percentage
● 40% - Teamwork
○ 360 Team mutual evaluation forms evaluating participation
● 10% Individual Homework Assignments
NOTE: Individual Homework Late Submission Policy:
OnTime, working HW=100 points
Every hour of being late = -1 point.
Every late day = -25 points. (I know there are 24 hours in a day).
Part I: Introduction to Agile Development in Teams.
Note: All Listed Assignments are due prior to the next class unless otherwise noted
Class 1: Introduction and Team Formation
Pre-Requisites review, Required software overview, Process overview, Teams Formation, Ideas for team projects. Grading overview, emphasis on teamwork.
● Assignment: Environment Checklist - required accounts (GitHub, Slack, etc) and all software environment
● Assignment: Team communications established, chat rooms, shared documents repository.
● Assignment: Each Team started and shared with the instructor “team project ideas” document. The document needs to list 2-3 ideas for your team projects.
Class 2: Just enough Agile Process to get started.
Agile development overview. Scrum process overview and essential Scrum ceremonies. Directions for student teams. Daily Scrum meeting reporting requirements. What is the role of Scrum Master? What is the Definition of Done.
● Lab: Daily scrum meeting play-acting
● Class Review: Project Ideas, Class Discussion
● Reading: Chapter 1 Introduction
● Reading: Chapter 2 Scrum Framework
● Reading: Chapter 3 Agile Principles
● Assignment: Sprint 1:
o Sprint Goal: Finish and submit proposals for the team projects. The proposals are expected to be complete documents rather than brief ideas from the week before. Teams are expected to vote internally and submit two-three proposals per team. The team project document is expected to show team collaboration and discussion trail
o Assignment: Team daily scrum meetings conducted by the team and reports submitted. NOTE: From now on each Sprint has to include daily scrum meetings reports as a deliverable every week.
Class 3: First Sprint Demo. How to write user Stories. What is the role of Product Owner.
● Instructor will approve 1 project per team prior to the class
● (Lab) Sprint Demos, all teams. Teams present their projects.
● (Lecture) How to Write User Stories
● Reading: Chapter 4: Sprints
● Reading: Chapter 5, Requirements and User Stories
● Reading: Chapter 6: Product Backlog
● Assignment: Sprint 2:
o Sprint Goal: Produce requirements for team projects.
The team is expected to collaborate, review documents and produce agreed-upon requirements in form of user stories.
Part II: Practical Software Delivery
Class 4: Let’s design our projects.
● (Lab) Sprint Demos, all teams. Review user stories. Class discussion
● (Lecture) Initial System design for team projects. Potentially useful UML diagrams explained
● Assignment: Sprint 3:
o Sprint Goal:
▪ Produce design document for the team’s projects. Use UML as appropriate, explain why the team chose to use or not to use UML
▪ As always team participation and design discussions are expected
● Individual assignment-Django Hello Word developed and deployed. All students are expected to complete and submit individual Code Repositories on GitHub
● Reading: UML sequence diagram explained: https://www.geeksforgeeks.org/unified-modeling-language-uml-sequence-diagrams/
● Reading: Django Tutorial. https://docs.djangoproject.com/en/4.1/intro/tutorial01/
Class 5: Let’s write some code already!
● (Lab) Sprint Demos, all teams. Review project design documents. Class discussion
● (Lecture) Sprint Planning. Agile Poker.
● (Lab) Sprint Planning. Agile poker.
● (Lecture) Django framework overview and how it fits into the project design.
● Assignment: Sprint 4:
o Sprint Goal:
▪ Chosen User Stories documented
▪ Pending user stories documented in the project backlog
▪ Write code to satisfy user stories chosen for Sprint
▪ Deploy Sprint 04 solution to be available for Sprint Demo review
▪ First Sprint Retrospective team discussion and report.
NOTE: From now on, in addition to daily scrum meetings report, the team retrospective report is due prior to the next week class.
● Reading: Django Documentation. https://docs.djangoproject.com/en/4.1/
Class 6: Continuous Integration and the Role of Test Suites in team development
● (Lab) Sprint Demos, all teams. Teams present what they coded. Class discussion on team retrospectives and team backlogs
● (Lecture) Introduce Continuous Integration.
● (Lecture) Team Velocity and its proper use
● (Lecture) Coding Standards, integrating Python linter and formatter into development process
● Assignment: Sprint 5:
o Sprint Goal:
a) All team members set up continuous integration for their respective individual Hello World Django projects.
b) All team members set up Initial Test Suites for their respective individual Hello World Django projects.
NOTE: These are individual goals however the teams are still expected to meet, discuss and help each other out. Each team is responsible for all team members. No one is left behind.
c) Team project development continues
● Reading: Travis CI Tutorial, https://docs.travis-ci.com/user/tutorial/