A team project is an essential way to practice software engineering skills in a real-world setting. Over the semester, each project team will develop the following artifacts for their project:

The goal of the project is not to write a significant amount of code: depending on the project, a few hundred lines of code may be sufficient to make a significant contribution. Rather, the objective is to obtain first-hand experience with the expectations of an actual software project, particularly those related to design and communication. Each project deliverable is specifically modeled after those encountered in open source projects.1

Teams

You are responsible for forming your own project teams. Teams should comprise 4–5 members. When joining a team, consider both the project and the members: your motivation may be lacking if you are not excited about the project, and a team where all members have the same skill sets may not perform as well as one where members have more diverse backgrounds.

Participation

Placing your name on a deliverable signifies that you have contributed significantly to its intellectual content and to its completion. Including your name when you have not satisfied these criteria will be considered to be a violation of the assignment’s Help Policy. It is expected that each student can provide documentation regarding their contribution(s) to each assignment if requested to do so.

Note that enforcement depends on your peers (i.e., team members). If certain individuals are not participating significantly, the others should discuss it with them to seek resolution and, should it prove if necessary, schedule a meeting with the instructor to address the concern. The prior documentation regarding individuals’ contributions will be consulted in such cases.

Descriptions

The following synopses provide an overview of the various projects. The project ideas are grouped into several topic areas: research, education, and “choose your own adventure” for those interested in pursuing a project based on personal interests.

Research

These projects are loosely designed as an introduction to an existing research project. As such, they serve as a good opportunity to learn more about ongoing research in computer science or cybersecurity.

Near-Duplicate Detection

Near-duplication detection algorithms aim to identify content that is highly similar. Such algorithms are used for diverse purposes, ranging from ensuring diversity among web search results to plagiarism, spam, and malware detection. Unfortunately, few open source implementations of these algorithms exist, which makes comparisons with existing techniques challenging because the algorithms must be reimplemented from scratch.

This project will produce a high-quality C implementation of one of the following algorithms:

Preference is given to winnowing due to its generality, but other near-duplicate detection algorithms will be considered. A good implementation may be released under an open source license and support ongoing research projects.

Sentiment Analysis

Student feedback, typically through the form of course evaluations, provide insight into the performance of instructors and the quality of courses. Although course evaluations are critically reviewed, few tools support longitudinal analysis of instructors and courses across multiple semesters. Sentiment analysis supports rapid triage of feedback to identify individuals’ perceptions. For example, a common sentiment analysis task is identifying comments as positive, negative, or neutral; this task can also be extended to identifying emotions such as happy, angry, or disgusted. Recent research (Rani and Kumar 2017) indicates that sentiment analysis can be used to improve teaching and learning.

Course Assessment using Data Exploration of Text (CADET) is an open source tool that leverages sentiment analysis and other natural language processing (NLP) techniques to evaluate the long-term quality of these programs. Although an existing prototype exists, the Python implementation lacks a clean separation between the user interface and computationally-intensive NLP tools. This code should be refactored to support the development of a cross-platform user interface (UI) that supports uploading a file containing comments, displaying topics across comments, and highlighting sentiment extracted from the comments. (Refactoring the existing code base is a major step toward being able to implement these features.)

Education

These projects contribute to computer science education. The ideal outcome is for the project artifacts to be used in another computer science or cybersecurity course.

Algorithm Visualization

Introductory computer science courses study a variety of algorithms and abstract data structures. Teaching these concepts can be challenging, particularly when constrained to “traditional” visualization methods, such as drawing on a whiteboard or presenting slides. Major limitations of these approaches include their static nature (e.g., slides cannot be updated in real-time to use different data) and the time required to build examples.

For this project, you will select an abstract data type or family of algorithms and visualize its use. For example, backtracking is a general approach to satisfying constraints such as those posed by logic puzzles (Sudoku is one well-known example of a logic puzzle). The resulting tool should be suitable for use inside and outside a classroom, illustrating the concept and allowing students to alter key parameters and apply it in different settings.

Cyber 256

Cyber 256: Basic Cyber Operations “supports USAFA Outcomes and helps motivate cadets toward a career in the United States Air Force” through “hands-on training designed to teach the fundamentals of operating, attacking, and defending computers and networks.” Cadets designed this course and wrote much of the software that underlies the missions and scoring teams’ performance on those missions.

This project offers an opportunity to contribute to the Cyber 256 course materials, specifically by adding capabilities to the tools currently used in the course. Interested students should form a team with at least one cadre member who has assisted with the course, and discuss specific ideas to improve existing tools with the instructor.

Choose Your Own Adventure

You are not required to select one of the projects listed above. Talk to the instructor if you have an idea for an alternative project. A project that interests you personally tends to be better than one that is simply assigned for you to complete.

If you are interested in this possibility, you should discuss your idea(s) with the instruction as soon as possible to receive feedback on the project’s feasibility. Recognize that you will probably do more work if you choose this option, partly because you must “sell” the idea and ensure that it is sufficiently well scoped to deliver something of value by the end of the semester. In addition, you must still work as part of a project team, which means that you will have to find a number of other students who are interested in the same topic.


  1. The development practices of open source projects vary widely. Few require the same formality as the deliverables in this course, but many open source projects incorporate elements of them.