- Ian Gorton: i.gortonATnortheastern.edu
- Adrienne Slaughter: a.slaughterATnortheastern.edu
- Seattle - Meixing Dong: dong.meiAThusky.neu.edu
- San Jose - Neha Shukla: shukla.neAThusky.neu.edu
- Boston - Yash Bhavsar: bhavsar.yAThusky.neu.edu
ASD is designed to integrate academic concepts and practical experience of software engineering by having students work as part of a sizeable agile programming team, with options to lead a subteam. The course offers students an opportunity to study, in-depth, some aspects of the development process pertinent to a complex, ill-defined set of system requirements. The goal is to have students participate in a large-scale project, taking time to reflect and analyze the work and the process, and to produce a significant demonstrable outcome in the form of a working, deployed software system.
Each class works collaboratively to build a software project for an external client. The project description for the Spring 2020 Semester is here, and here's the initial class presentation on ClimateTree and an interesting discussion on the background ideas.
Students should have completed FSE and/or a coop/intern. These prerequisites can be waived based on individual circumstances and experience such as that gained on COOPs or in other courses such as Web Development, Data Mining/Machine learning. Please contact the Professors to discuss
Students are expected to attend each class on campus. If there is avalid reason, then a student may request to attend class remotely. All classes are held via video conference across participating campus locations.
At the end of the course, students will have acquired the following knowledge:
- Be able to design and develop distributed, multi-tier, cloud-based systems
- Be able to design RESTful APIs that are robust and high performance
- Understand the advantages of continuous development and deployment
- Have experience with continous build/intergration platforms
- Be able to quantitavely assess and evolve a software system based on metrics
- Be able to design systems for usability and scalability
- Be able to explain the advantages and pitfalls of distributed teams
- Experience in distributed systems testing
- practical experience with scaled agile methods and tools
- acting as team technical lead
- task definition, prioritization and planning
- automated build tools
- designing and developing components in a complex software system
- retrospectives and code reviews
There will be major deliverables, in week 3, 7, 11, 14. These will be based on the following criteria:
- Week 3: User stories defined, development frameworks and build tools environments established, plan for first sprint in place based on prioritized defined tasks. (10%).
- Week 6: Initial demonstrable prototype that supports high priority user stories; retrospective on first sprint; plan for next sprint established (15%)
- Week 11: Robust implementations of high priority user stories; demonstrations of medium priority user stories; integration of components across teams (20%)
- Week 14: Final implementation of high and medium priority user stories; quality of resulting architecture and design; (25%)
There will also be an individual assessment based on contribution reports each sprint from each student. (30%)
Week | Topics |
---|---|
1 | Introductions and project overview from Product Owners Major components to be developed Expected deliverables Logistics of class and project Team formation |
2 | Requirements in an agile project Distributed teams and coordination Test-driven development |
3 | Designing APIs and Interfaces Robustness and Resilience |
4 | Teams present their plans for the first sprint, including user stories, frameworks and development tools selected |
5 | Code Quality: Importance and how to achieve it Unit testing: approaches, tools, frameworks |
6 | Code reviews: why, approaches, best practices |
7 |
Teams present the outcomes from their first sprint. This involves demonstration of working code, review of backlog, and reports on development velocity and story points completed. |
8 and 9 | Code and System Metrics |
10 onwards | The classes focus on monitoring progress for each sprint and presenting and demonstrating deliverables associated with each assessment. The focus is on putting the concept discussed in the early weeks of the course into practice. |
Week | Readings |
---|---|
1 | Overview of SCRUM and Trello The Scrum Primer Scrum Training Series Setting up Trello board Tips for using Trello Scrum for Trello Burndown for Trello |
2 | Agile Requirements Agile Requirements and Definition Agile Requirements-Atlassian Distributed Teams Fully Distributed Scrum Test Driven Development Traditional Testing Principles of TDD Pitfalls of TDD |
3 | API Design and REST How to Design a good API and why it matters by Joshua Bloch REST Principles - Roy Fielding Humane Interface Minimal Interface Robustness and Resilience Stability Patterns Circuit Breaker Circuit Breaker - Microsoft |
4 | Assessment week |
5 | For an overview on code quality in agile developments - here There’s an extensive body of work on developing quality code. Here’s some examples that are worth dipping in to, and are typical books on any good engineer’s book shelf Code Complete, by Steve McConnell. Refactoring: Improving the Design of Existing Code , by Martin Fowler. Design Patterns: Elements of Reusable Object-Oriented Software , by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. Object-Oriented Design Heuristics , by Arthur Riel. This material should give you some insights into unit testing approaches and tools you can use: Martin Fowler's - Unit Test Writing great unit test Service Testing - Microsoft Best Practices in Unit Testing Mocks vs Stubs |
6 |
Code Reviews Proven Practices Best Practices - Microsoft List of Tools Gerrit Code Review |
7 | Assessment week |
8 and 9 |
Software Metrics Software Metrics: A Rigorous and Practical Approach, Third Edition Goal Question Metric Paradigm (Chapter 3) Size Metrics (Chapter 8) Structure Metrics (Chapter 9) |
Week | Homework |
---|---|
1 | Each team nominates a Scrum Master/Team Lead for the first sprint. Teams communicate to agree on a development/build/test environment Setup a Trello environment, including any extensions you choose to use, for each team and document how you will use it for SCRUM |
2 | Select a discussions board and issue tracking tool for use across all the teams Each team must generate a set of candidate user storied based on their understanding of the project requirements and interactions with the Product Owners |
3 | Investigate the libraries you might use for communications in this project and assess candidate libraries for suitability for this project |
5 |
Establish code quality standards for your teams Establish unit testing practices for your teams |
6 | Choose a process and tooling to support code reviews inside your team and across teams. You’ll be graded on code quality, so don’t neglect this step. |
8 and 9 | Evaluate and select tools to use to drive refactoring based on identified metrics |