CS6510 Advanced Software Development (ASD)

Instructors

  • Ian Gorton: i.gortonATnortheastern.edu
  • Adrienne Slaughter: a.slaughterATnortheastern.edu

Teaching Assistants

  • Seattle - Meixing Dong: dong.meiAThusky.neu.edu
  • San Jose - Neha Shukla: shukla.neAThusky.neu.edu
  • Boston - Yash Bhavsar: bhavsar.yAThusky.neu.edu

Introduction

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.

Project

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.

Prerequesites

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

Attendance

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.

Learning Objectives

At the end of the course, students will have acquired the following knowledge:

Advanced Software Engineering

  • 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

Experiential

  • 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

Assessment

There will be major deliverables, in week 3, 7, 11, 14. These will be based on the following criteria:

  1. Week 3: User stories defined, development frameworks and build tools environments established, plan for first sprint in place based on prioritized defined tasks. (10%).
  2. Week 6: Initial demonstrable prototype that supports high priority user stories; retrospective on first sprint; plan for next sprint established (15%)
  3. Week 11: Robust implementations of high priority user stories; demonstrations of medium priority user stories; integration of components across teams (20%)
  4. 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%)

Curriculum

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.

Reading

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)

Homework

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