ECE 366 - SW Engineering & Large Systems Design
Spring 2022, Mondays 6-9pm ET, Room 104 in 41CS NAB
Prof. Rob Marano (rob@cooper.edu)
The Cooper Union
Catalog Description:
This course teaches about the development stages of large, robust,
expandable software systems developed as part of a team. Topics include
project management, capturing requirements, system design, UML, program
design, testing, delivery and maintenance. The class will develop a
large project as a team using Java throughout the semester. Tools,
libraries and techniques necessary for the project will be covered in
class,e.g., Eclipse, Javadoc, XML, SOAP, servlets, threads and
processes, Swing, JUnit, mySQL, JDBC, etc. The specific resources might
change from semester to semester.
Credits: 3 credits (45 contact hours)
Prerequisites: ECE365 (Data Structures and Algorithms II).
Required for EE students in the Computer Engineering track.
Textbooks: None required.
References: The lectures will be based on the latest published research
papers in journals, conferences and reference books. Suggested textbooks
and respective presentations for extra reading and guidance include the
following. Lecture materials will come from either or both of these
textbooks.
Project:
This course requires you to choose, design, and develop a major
software project which gives you the opportunity to put into practice
modern software engineering principles and motions. Projects will be
collaborative consisting of three (3) students; other team sizes require
teacher approval. Some suggested projects will be shared, but you will
have the opportunity to propose your own group project. Web applications
(React, Angular, etc) as well as mobile applications (iOS or Android)
are welcome and encouraged, should time allow. As a note for
professional development, corporate recruiters explicitly search for
candidates with the demonstrable (GitHub) experience of a major
completed project.
Grading:
Final Project 40%; Final Presentation 20%; Assignments, Sprint check-ins, & Quizzes 70%; Class participation 10%
Goals and Outcomes:
This course will provide insight into the procedures of software
engineering at scale used by companies and organizations so that teams
of developers can create large, robust, expandable systems. Students
will learn through firsthand experience what it is like to collaborate
with a team of developers to create a useful system, employing good
design principles so that the system can be easily learned, used,
maintained, and expanded in the future. Students will be comfortable
using many Java and related tools to aid their development.
Students will learn the following:
-
Knowledge of the process and procedures used by professional software
engineers;
-
Familiarity with many important tools, techniques, and resources
available to software engineers to craft secure and reliable
solutions;
-
Ability to analyze a problem, design a solution, implement it, and
test it.
-
Experience developing a large, robust, expandable system as part of a
team.
-
Familiarity with ethical issues related to software engineering,
e.g., confidentiality and safety.
Critical Topics:
-
Course overview and term project description;
-
Overview of Java, object-oriented programming, and principles of
software engineering;
-
Overview of resources such as Eclipse, Javadoc, Git, etc. (the exact
resources may vary between semesters);
-
The project development cycle; stages of development; project
management; capturing and documenting requirements;
-
System design; software architecture; object-oriented design; design
patterns;
-
Agile software development;
-
Overview of databases. Resources such as JDBC, JSP, and MySQL (the
exact resources may vary between semesters);
-
Unit and integration testing; system testing. Resources such as
JUnit;
-
Maintenance of software products;
-
Evaluating products, processes, and resources;
-
The ethics of software engineering.
Course GitHub repository:
Project/Code Repo - https://github.com/robmarano/ece366_at_cooper
Discussions - https://github.com/robmarano/ece366_at_cooper/discussions
Microsoft Teams Course Files - General (ECE-366-1-Software Engg _ Lrg Sys Design-2022SP)
Schedule
Check our Microsoft Teams Channel for specific assignments.
Week 1 - 2022-01-18
-
What is Software Engineering?
-
What is the Software Process?
-
Intro to large-scale SW design and engineering
-
Starts with business outcomes, available resources, and work
backwards
-
Intro to large-scale SW implementation
-
You the engineer, starts with always having an easy-to-use,
collaborative work environment
-
We will iterate on the following, interrelated subjects, expanding
our understanding more deeply week-to-week (sprint-to-sprint):
-
Agile Software Development
-
Requirements Engineering
- Systems Modeling
-
Architectural Design
- Implementation
- Software Testing
-
We will cover the following topics throughout the semester and apply
to our projects
- Solution Evolution
-
Reliability Engineering
- Safety Engineering
-
Security Engineering
-
Resilience Engineering
-
Difference between a programmer, a developer, and a software
engineer?
-
Embrace & extend vs Ripout & Replace
-
Shrink-wrapped vs Custom Software solutions
-
Survey of available engineers
-
Survey of computer types (OSes)
-
We will use Un*x/Linux as the OS base
- Using containers
-
Containers (your virtual bare-metal server)
-
Email professor with the team name, members
-
One page proposal for team project (submit via Teams, each member
submits same doc)
-
What problem are you trying to solve
-
Must be an internet-scalable solution
-
Add your two key files to a folder ssh/ in your cloned folder
-
Research some basic building blocks
- JSON
-
Object storage (files)
-
Structured files: Excel spreadsheet; csv file
-
Unstructured files: binary file, image, text file
-
SQL-based: MySql, PostgreSQL (structured query language)
-
noSQL-based (document DBs): MongoDB, Hbase, Hive
- Java (code)
-
Bash scripting (env)
- SQL (database)
-
Docker (scalable virtual machines / containers)
-
GitHub for code repo
Week 2 - 2022-01-24
-
Your project team
-
Your project description, first draft
-
Class project as example
-
The set of Software Development Processes
-
Agile Software Development
-
Requirements Engineering
-
Your work environment
- GitHub repo
-
Docker container
- IntelliJ IDE
-
Bash scripts for building project
-
Bare components for UI, compute, storage
-
Next revision of your team’s project description
-
Create initial template of your project in your respective
team’s repo in the GitHub organization https://github.com/cooper-ece-366.
Week 3 - 2022-01-31
-
Sprint Demo Day Zero
- Sprint 2
- Topics
Week 4 - 2022-02-07
-
“As a [persona], I [want to], [so that].”
-
Capturing the technical using forms
-
Structured Specifications for a Requirement
-
Working with our Java build system
- Build.sh
- Clean.sh
-
Java program’s main class
- Integration with Maven
-
Project Documentation (cont’)
Week 5 - 2022-02-14
-
Ad hoc presentation at the board to describe your team project
-
Deep dive into tools for design and implementation
-
Code repository structure (cont’)
-
Solution architecture
-
UI/UX (front-end using client-side MVC)
-
Backend (serving up your functionality via APIs)
-
Code to implement functionality
- Test your units
-
End-to-end (e2e) testing to validate functionality
-
Client-side MVC
-
Backend service
-
Functionality integration via API
- E2e testing
-
Over next two weeks
-
Formal presentation of the description of your team project
-
High-level requirements + Use Cases to satisfy + User Stories to
backlog
-
High-level solution architecture
-
Client-side MVC wired to fundamental backend service
-
Post ALL to your team project’s GitHub wiki (docs) + GitHub
project (backlog tasks) + GitHub repo (code)
-
Then post each of these three links to the Teams assignment
Week 6 - 2022-02-28
- React
-
Java API running on container
Week 7 - 2022-03-07
-
Debugging current functionality
-
Intro to Social Login
NO CLASS, Week of March 14th
Week 8 - 2022-03-21
-
Each project team will be given 5 minutes to demonstrate their sprint
planning, current requirements gathered to date, and live build and
operational functionality of what requirements have been implemented
to date.
Week 9 - 2022-03-28
-
Sprint Demo Day Gamma
- Sprint 8
- Topics
- Hands-on
Week 10 - 2022-04-04
Week 11 - 2022-04-11
-
Sprint Demo Day Delta
- Sprint 10
- Topics
- Hands-on
Week 12 - 2022-04-18
- Sprint 11
- Topics
- Hands-on
Week 13 - 2022-04-25
-
Sprint Demo Day Epsilon
- Sprint 12
- Topics
- Hands-on
Week 14 - 2022-05-02
- Sprint 13
- Topics
- Hands-on
-
Prepare for MVP demo
Week 15 - 2022-05-02 - FINAL CLASS
Reading Materials
Getting started with distributed coding
-
Using this example repo we will build during the course
Testing (in Java)