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 30%; 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
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)