Project 2

CS 422 Software Methodologies - A. Hornof - October 30, 2026

Due Dates

Identify a User Group

The Identify a User Group (PDF) assignment is described in a separate handout.

The 3-Page Proposal

The 3-Page Proposal should include (a) an initial brief SRS Concept of Operations (see the SRS template) to support user goals and tasks based on what you learned through user observations and interviews, (b) an SDS system overview, software architecture, and list of technology intended to be used, and (c) a project timeline. Each of these three items should be on a separate page of the proposal. You are not committing to what is in the Proposal. It can (and should) evolve. The 3-page proposal should identify a clear initial idea of what your group would like to do.

All writing for this project should follow "Good Writing" as discussed in the course handouts.

Overview

The initial 3-page SRS/SDS/Project Plan should identify a project that is appropriate for the given resources (time and personnel), and that can be decomposed into multiple modules for parallel development. The project should also be one for which realistic requirements can be established through further interactions with real potential users of the system.

Your requirements analysis should be based on what you learn from your users. Please don't make stuff up.

Build systems that address real human needs. Please build systems on what you learn through observation and interviews, not your guesses regarding (a) human needs and (b) technology that might help address human needs. Please don't make stuff up. Your Concept of Operations, Use Cases, and all other aspects of your SRS should be based on correct and real facts about the world, human needs, and technology.

Please support any assertions that you make in your SRS. There are relatively few opinions or ideas that you can state as assertions without providing support. Support usually comes in the form of (a) empirical data (typically direct observation or user interviews) or (b) citations from reputable newspapers, peer-reviewed journal and conference papers, and technical documentation. But please don't make stuff up.

Build a system to support your users.

Please build systems that address real human needs that are not your immediate needs, but are the needs of other people. The initial exercise of finding a user group should help you to identify a group that you could support.

I ask you to please try build a system for someone who is not you partly so you can get some practice talking to users who are not you, and to learn how to "elicit" requirements from those users. We will discuss requirements elicitation in class. I am happy to help you with this aspect of the project.

No Machine Learning

The projects may not use machine learning (deep learning). The primary reason for this is so that you can understand and describe the cause-and-effect relationships inside of the systems that you create. Such as, to explain why an input to the system generates an output from the system.

Design for Installation

Requirements and Design can focus on ease-of-installation by designing for continuous monitoring and reporting of the status of (a) individual components and (b) inter-module connections. For example, you could generate requirements that:

  1. minimize black-box dependencies (don't rely on opaque systems),
  2. require components to continuously report component status and failures,
  3. dictate aspects of the installation process,
  4. specify and plan for testing the installation process,
  5. provide extensive realistic sample data, and
  6. make it easy to see the machine working using all of its functionality.

Technical Requirements

This section presents a minimum set of technical requirements. Your projects should generate many more than just these.

  1. The delivered system should be complete and not require installation of software beyond a Python virtual environment (venv) or docker objects. Please do not expect the person installing the system (such as the instructor) to download any sort of programming environments such as XCode, or gaming engine such as Unity.
  2. The person installing the system should not have to create any accounts on any online services.
  3. All code should be installed using a Python virtual environment (venv) or docker. A current version of Python and Docker Desktop will be pre-installed on the machine that will be used to evaluate your systems (a Mac). No software should need to be installed on the "native" machine used to test the code (such as in the "Applications" or "Library" folders of a Macintosh).
  4. Installation instructions: If you are using Python venv, installation instructions should include the creation of the venv, and approved Python libraries should be installed in the venv. If you are using docker, installation instructions should probably include a "docker-compose.yml" file (ideally with comments explaining what it is doing).
  5. All code and documents should be submitted on Canvas. (It is fine if your documents identify a github repository, but please submit all necessary code on Canvas.)
  6. Systems should use standard libraries to the extent possible. For example, if written in Python, the systems should primarily use the Python Standard Library. Installation of dependencies should be fully documented and tested on Linux and MacOS.
  7. Instructions must be provided in the README.md to compile, run, and install all of the code necessary to use the system.
  8. Deviations from these requirements should be requested in writing. Cite the approvals in the final submission, such as "Approved in email from Anthony Hornof to Chi Zhu on 4-27-2026."

Project Handouts

Evaluation Criteria
How to Comment Your Code
How to Present
How to Submit
Initial Group Meetings
Meetings with the Instructor
Peer Evaluation Form (PDF)
SRS & SDS Templates
System Documentation
Good Writing

Miscellaneous Links

Apple User Observations (PDF)
SRS from NRL Dual Task
SRS from VizFix (PDF)
UML Notation (Kieras) (PDF)
UML Notation (Fowler) (PDF)
Working in Groups (Pausch) (PDF)