Syllabus
Computer Science 203 Fall 2024
Course Instructor
- Instructor Name: Dr. Gregory M. Kapfhammer
- Office Location: Alden Hall 108
Please visit the instructor’s web site for more information!
Instructor Appointments
- Monday: 11:00 – 12:00 noon and 4:30 PM – 5:00 PM
- Tuesday: 1:00 PM – 3:00 PM
- Wednesday: 11:00 AM – 12:00 noon
- Friday: 11:00 AM – 12:00 noon and 2:30 PM – 3:00 PM
All instructor appointments are 15-minute time slots and take place in Alden Hall, Room 108.
Schedule Overview
Weekly Cadence
- Discussion, Writing, and Programming Sessions
- Developing Professional Skills: Monday, 10:00 AM – 10:50 AM, Alden 109
- SE Book: Software Engineering at Google
- Majority of the class: Discuss executive summaries for chapters read last week
- One-quarter of the class: Prepare for the executive summary for next week’s chapters
- Developing Technical Skills: Wednesday, 10:00 AM – 10:50 AM, Alden 109
- FB Book: Fuzzing Book
- DB Book: Debugging Book
- Majority of the class: Discuss executive summaries for chapters read last week
- One-quarter of the class: Prepare for the executive summary for next week’s chapters
- Developing as Developers: Friday, 10:00 AM – 10:50 AM, Alden 109
- Publish an executive summary for next week’s technical skills
- Publish an executive summary for next week’s professional skills
- Confirm our team’s readiness for next week’s in-class discussions
- When necessary: implement and demonstrate software engineering project
- Every other week: take an in-class programming skill-check
- Developing Professional Skills: Monday, 10:00 AM – 10:50 AM, Alden 109
- Collaborative Software Engineering: Thursday, 2:30 PM – 4:20 PM, Alden 109
Assessment Schedule
- Week Six: In-person assessments and executable examination one
- Week Eleven: In-person assessments and executable examination two
- Week Sixteen: Final examination week
Discussion Leads
Module One Discussion Leads
- Week One: Install development tools and explore projects
- Week Two: Pallas-Athena Cain and Hemani Alaparthi
- Week Three: Rebekah Rudd and Chezka Quinola
- Week Four: Aidan Dyga and Hannah Brown
- Week Five: Molly Suppo and Titus Smith
- Week Six: In-person assessments and executable examination one
Module Two Discussion Leads
- Week Seven: Fall break and research conference travel
- Week Eight: Project development meetings and project demonstrations
- Week Nine: Course instructor
- Week Ten: Coltin Colucci, Philip Olwoc, and Hemani Alaparthi
- Week Eleven: In-person assessments and executable examination two
Module Three Discussion Leads
- Week Twelve: Titus Smith, Aidan Dyga, and Molly Suppo
- Week Thirteen: Pallas-Athena Cain, Coltin Colucci, and Chezka Quinola
- Week Fourteen: Thanksgiving break
- Week Fifteen: Hannah Brown, Philip Olwoc, and Rebekah Rudd
- Week Sixteen: Final examination week
Reading Assignments
Module One Reading Assignments
- Week One: No reading assignment
- Week Two: SE1 (Preface) and FB1 (Introduction to Software Testing)
- Week Three: SE2 (What is Software Engineering?) and FB2 (Coverage)
- Week Four: SE3 (Work Well on Teams) and FB3 (Fuzzing)
- Week Five: SE4 (Knowledge Sharing) and FB4 (Mutation Analysis)
- Week Six: No reading assignment due to assessments
Module Two Reading Assignments
- Week Seven: Fall break and research conference travel
- Week Eight: Project development meetings and project demonstrations
- Week Nine: SE5 (Engineering for Equity and Documentation), FB5 (Mutation-Based Fuzzing), and DB1 (Debugging)
- Week Ten: SE6 (How to Lead a Team) and FB6 (Fuzzing with Grammars)
- Week Eleven: No reading assignment due to assessments
Module Three Reading Assignments
- Week Twelve: SE7 (Leading at Scale) and FB7 (Efficient Grammar Fuzzing)
- Week Thirteen: SE8 (Style Guides and Rules) and FB8 (Parsing Inputs)
- Week Fourteen: Thanksgiving break
- Week Fifteen: SE9 (Code Review) and FB9 (Reducing Failure-Inducing Inputs)
- Week Sixteen: No reading assignment due to final examination week
Course Description
A human-centric study of the principles used during the engineering of high-quality software systems. In addition to examining the human behaviors and social processes undergirding software development methodologies, students participate in teams tasked with designing, developing, and delivering a significant software application for a customer. During a weekly laboratory session, students use state-of-the-art software engineering, management, and communication tools to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
- Prerequisite: CMPSC 101
- Distribution Requirements: SB, SP
Learning Objectives
Allegheny College’s educational program is designed so that its graduates are able to:
AC-1: Think critically and creatively.
AC-2: Communicate clearly and persuasively as speakers and writers.
AC-3: Invoke multiple ways of understanding to organize and evaluate evidence, and to interpret and make sense of their experiences and the experiences of others.
AC-4: Apply their knowledge and learning to engage in informed debate, and to analyze and solve problems.
Computer Science 203 at Allegheny College is a core course in the Software Engineering major. Graduates with the Software Engineering major, who all take the Computer Science 203 course, must demonstrate their attainment of these learning objectives:
SE-1: While working in a team, can effectively design, implement, evaluate, improve, and document a solution to a problem delivered as a maintainable software system.
- Enables the attainment of AC-1 and AC-4
SE-2: Demonstrates competency in the theories, models, and practices of project domains that require the engineering of software.
- Enables the attainment of AC-2 and AC-3
SE-3: Can effectively create and use software engineering tools that support software engineering activities like testing and debugging.
- Enables the attainment of AC-1 and AC-4
SE-4: Can effectively manage and predict the cost, scope, and deadline of a software engineering project.
- Enables the attainment of AC-2 and AC-3
SE-5: Uses effective oral and written communication methods to explain both the technical and product-use details of a software artifact.
- Enables the attainment of AC-1 through AC-5
The following list itemizes the three types of activities and two types of assessments in Computer Science 203 and illustrates their connection to the course learning objectives:
- Course Activities:
- Executive Summaries:
- Technical Development: Develops SE-1, SE-2, SE-3
- Professional Development: Develops SE-3, SE-4, SE-5
- Project Development: Develops SE-1, SE-2, SE-3, SE-4, SE-5
- Executive Summaries:
- Course Assessments:
- Programming Skill-Checks: Assesses SE-3
- Executable Examinations: Assesses SE-1, SE-2, SE-3
- In-Person Assessments: Assesses SE-3, SE-4, SE-5
Finally, the following list illustrates how the learning objectives for Allegheny College are attained through the successful completion of Computer Science 203.
- AC-1 is attained through the course learning objectives SE-1, SE-3, SE-5
- AC-2 is attained through the course learning objectives SE-2, SE-4, SE-5
- AC-3 is attained through the course learning objectives SE-2, SE-4, SE-5
- AC-4 is attained through the course learning objectives SE-1, SE-3, SE-5
All five of the course’s learning objectives support the SP and SB distribution requirements.
Course Textbooks
- Software Engineering at Google: abbreviated on this site as SE
- Fuzzing Book: abbreviated on this site as FB
- Debugging Book: abbreviated on this site as DB
Students who complete all of the work on the course schedule will complete twelve reading assignments in SE (i.e., SE1 through SE12), nine reading assignments in FB (i.e., FB1 through FB9), and four reading assignments in DB (i.e., DB1 through DB4).
The course textbooks are connected to the three main type of course activities in these ways:
- Professional Development as a software engineer:
- Active engagement with content in SE
- Publication of a team-based executive summary on this web site
- Technical Development as a software engineer:
- Active engagement with content in FB and DB
- Publication of a team-based executive summary on this web site
- Project Development to hone professional and technical knowledge and skills:
- Application of SE to technical and professional tasks during project engineering
- Application of FB and DB to the technical tasks during project engineering
- Integration of professional and technical skills during project engineering
All students are responsible for taking the following steps in regards to FB and DB:
- Install an appropriate version of both FB and DB (both currently designate Python
3.10.2
, subject to recent updates) - Complete one-time setup and installation steps for the FB or DB textbooks:
- Create a virtual environment for the book’s dependencies with
python -m venv venv
- Enter into the virtual environment for a textbook with
source venv/bin/activate
- Install all platform-dependent binaries for the book’s dependencies (e.g.,
graphviz
) - Install the book’s dependencies with
pip install -r requirements.txt
- Troubleshoot all of the issues that arise during the installation of the book’s dependencies (e.g., one or more missing dependencies cause a Jupyter Notebook cell to produce a stack trace when you press Shift-EnterShift-Enter to run the cell)
- Create a virtual environment for the book’s dependencies with
- Perform these steps both when reading an article and writing an executive summary:
- Change into the directory that contains the contents of either FB or DB
- Enter into the virtual environment for a textbook with
source venv/bin/activate
- Run a Jupyter Lab server using a command like
venv/bin/jupyter-lab
- Use the Jupyter Lab server to locate and execute notebooks for chapters in FB and DB
- Watch the embedded video(s) and run all of the providing source code segments
- Discussion leads for a weekly reading assignment additionally complete the following tasks:
- Create a fork of the course web site into a publicly available GitHub repository
- Coordinate with your discussion lead partner to write and revise an executive summary
- Use Quarto to write and revise an executive summary for the reading assignment
- Create a pull request from your fork of the course web site and coordinate its review
- The leadership team (i.e., the student technical leader(s) and the course instructor) will then review and comment on your work (and often require revisions to the executive summary), ultimately using GitHub Actions and Netlify to publish the Quarto-based web site
The course will also leverage excerpts from the following supporting text books:
- Software Engineering - The Soft Parts, by Addy Osmani
- A Philosophy of Software Design, by John Ousterhout
- How to Write Good Programs: A Guide for Students, by Perdita Stevens
- The Mythical Man-Month, by Frederick P. Brooks, Jr.
Course Policies
Assessment
The grade that a student receives in this class will be based on the following categories. All of these percentages are approximate and, if the need to do so presents itself, the course instructor may change the assigned percentages during the academic semester.
- Team Participation: 5%
- Executive Summaries:
- Professional Development: 10%
- Technical Development: 10%
- Software Engineering Evaluations:
- In-Person Assessments: 10%
- Programming Skill-Checks: 10%
- Midterm Examinations: 10%
- Final Examination: 15%
- Project Development: 30%
These assessment categories have the following definitions:
Team Participation: Students are expected to regularly attend and actively participate in all class and project development sessions. After either an unexcused absence or a late attendance to either a class or project development session on two separate occasions, a student’s overall team participation grade will be reduced by half a percentage for each additional time they are absent or late in an unexcused fashion. Students who need to miss class or attend class late for an excused reason should communicate their situation to the instructor in a timely fashion. After one warning per week, a student’s weekly team participation grade will be reduced if they are observed undertaking non-course-related activities like viewing email, social media, or other content not connected to the software engineering course.
Midterm Examinations: The two midterm examinations are online cumulative assessments, taken during the laboratory session, that cover all prior technical material from the course sessions, as outlined on the course schedule. Unless prior arrangements are made with the instructor, all students should use their computer to take these tests on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. Each midterm is an executable examination that students will complete through the use of GitHub, VS Code, and the Python programming tools installed on their laptops.
Final Examination: The final examination is an online cumulative assessment, taken during the final examination session, that covers all of the material during all of the course sessions, as outlined on the course schedule. Unless prior arrangements are made with the course instructor, all students should use their computer to take the final examination on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. The cumulative final is an executable examination that students complete through the use of GitHub, VS Code, and the Python programming tools installed on their laptops.
Programming Skill-Checks: The programming skill-checks are in-class online cumulative assessments covering all prior technical material from the course sessions, as outlined on the course schedule. Unless prior arrangements are made with the instructor, all students should use their computer to take these skill-checks on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. Designed to prepare learners for an examination, each skill-check is an in-class executable assessment that students complete through the use of GitHub, VS Code, and the Python programming tools on their laptops.
In-Person Assessments: The three in-person assessments are cumulative evaluations of both technical and professional knowledge conducted through an in-person conversation with the course instructor. All students should be prepared to answer at least one question each about their attainment of professional and technical skills and the source code and documentation of the software project(s). The instructor will assess each student response on a checkmark basis.
Professional Development: Graded on a checkmark basis and building on material in the Software Engineering at Google textbook (i.e., SE) and the content covered during that week’s in-person classroom sessions, the professional development tasks, namely the publication of a team-based executive summary, both have the following goals: (i) help a learner to demonstrate that they can remember the learned material by recalling facts, basic concepts, and answers to questions presented in SE and (ii) allow a learner to demonstrate an understanding of facts and ideas by translating, interpreting, and contextualizing the main professional concepts found in SE.
Technical Development: Graded on a checkmark basis and building on material in the Fuzzing Book (i.e., FB) and Debugging Book textbooks (i.e., DB) and the content covered during that week’s in-person classroom sessions, the technical development tasks, namely the publication of a team-based executive summary, have the following goals: (i) help a learner to show that they can remember the learned material by recalling facts, basic concepts, and answers to questions presented in FB/DB and (ii) allow a learner to demonstrate an understanding of facts and ideas by interpreting and implementing the main technical ideas presented in either FB or DB.
Project Development: These team-based projects invite students to explore different techniques for specifying, designing, implementing, testing, documenting, deploying, and maintaining real-world, open-source Python-based software tools. These projects also encourage students to use and build software engineering tools to complete tasks like debugging and testing. The technical work that a student completes during project development will take place in a public GitHub repository and will be further documented and reflected on in a private GitHub repository that the instructor will use to furnish assessments and feedback to the student. Finally, the professional work that a student undertakes as part of project development will occur in both an in-person setting and through a public GitHub repository, with the use of a private GitHub repository offering the opportunity for the student to document and reflect on their contributions and for the instructor to offer detailed feedback and assessments.
When you are assigned to the discussion lead, both the Professional Development and Technical Development assessment categories require students to complete the following tasks for that week:
- In collaboration with an assigned discussion lead partner, read an assigned article in SE, FB, or DB (recall that the course features one article from SE and one article from either FB or DB every week) and write an executive summary, that should contain, at minimum, these components:
- Brief overview of the executive summary and the contributions that it makes.
- Detailed analysis of the article in a fashion that clearly explains its key points, featuring the translation and/or re-interpretation of its central points into a context that is relevant for you as a developing developer. The executive summary should connect to both prior executive summaries and to the ongoing work on the long-term software engineering projects.
- Detailed description of actions items that will help you and the team of software engineers to enhance their development as developers and the completion of the long-term software engineering projects. Each action item should have a clear description of the steps that the author and/or the team should stop doing, start doing, and keep doing, as described in The Ultimate Guide to the Start, Stop, Continue Retrospective.
- An executive summary for an article from either FB or DB must also contain executable Python source code and the output from running the code. Specifically, the source code segments must appear in fenced code blocks and be directly executable in GitHub Actions and capable of correctly producing output when the web site is built and deployed to Netlify.
- All executive summaries should have a commit message history that clearly explain the changes made to the technical and professional content content. Importantly, the discussion leaders for each executive summary should ensure that all commit messages adhere to the conventional commit format as evidenced by prior commits to this site’s GitHub repository.
- For each the executive summary, the assigned partnership of students must complete their work in advance of the class session during which the content will be discussed, as outlined in the course schedule. When an executive summary is not completed according to the stated schedule or not completed at the agreed-on level of quality, this will result in a reduction in the corresponding technical or professional development score for the assigned students.
The Project Development assessment category requires students to complete, on a weekly basis, both team-based and individual tasks like the following:
- Sprint planning tasks during which between three to five students will lead a team-based discussion to identify the main theme for the weekly sprint and to organize the team and assign work to individuals in the project’s GitHub issue and/or milestone tracker.
- Project implementation tasks when individuals and/or groups of students will implement the required features in preparation for the following week’s project development session.
- A project demonstration during which a team of students will connect a laptop to a projector and then demonstrate the features that were required for the prior sprint.
So as to ensure that they develop as developers, all students are required to participate in all of the activities associated with technical development, professional development, and project development. Every student is also required to document their activities in each of these three categories, including links to relevant artifacts in a GitHub repository. In addition to regularly providing project- and course-relevant feedback in the appropriate public GitHub repository (e.g., the GitHub for a course project), the instructor will furnish individualized feedback to each student in a private GitHub repository used for documentation and reflection. Unless there is a documented extenuating circumstance, the course instructor will not assess a student’s contribution to technical, professional, or project development tasks unless it is evident in a GitHub repository in the form of, for instance, written work in the GitHub issue tracker, project management through the review of a pull request, or contribution of source code or documentation to a pull request that is merged into main branch of a GitHub repository.
Assessment Policies
Unless exempted by the instructor, students must abide by the following assessment policies: All assignments will have a stated due date shared through GitHub, GitHub Classroom, and/or the Developer Development Discord Server. All reflections on and documentation of professional development, technical development, and project development should be committed to private GitHub repositories. Finally, the collaboratively published executive summaries should be reviewed and discussed through GitHub and published on the Developer Development web site and the completed version of each software project should be available in the project’s public GitHub repository. No credit will be awarded for any course work that a student submits to the incorrect GitHub repository or web site. Unless special arrangements are made with the instructor due to extenuating circumstances or a student uses a token, no work will be accepted after the deadline. Students may “spend” up to three “developer development tokens” that they may use to secure seven calendar days of time to revise an already assessed project and subsequently request a reassessment of it and receive a new assessment score. You may use a token to request the reassessment of revised work that you completed as part of specific tasks in the professional development, technical development, or project development categories. For instance, you may choose to spend a token by asking the instructor to reevaluate one of the executive summaries that you posted to the Quarto-based web site. Outside of these three tokens, the instructor will not consider any additional requests for deadline extensions or project reassessment. Students may not request to use a token to re-assess their team participation, their work for a completed phase of a long-term software engineering project, or the final examination. However, they may apply tokens to the midterm examinations, the programming skill-checks, and the executive summaries. The instructor will submit to a student the assessment for work revised as part of token used at the end of a course module. Unless there are extenuating circumstances, you may not spend any tokens in the last two weeks of the semester. Using a report that the instructor shares with you through your GitHub repositories devoted to documentation and reflection, you will privately receive a grade for and feedback on technical development, professional development and project development. Your grade will be a function of whether or not you completed work that fulfills the project’s specification and submitted it by the deadline to the stated platform (e.g., a GitHub repository or Netlify-hosted web site). It is mandatory for all students to attend the course sessions. If, due to extenuating circumstances, you will not be able to attend a session, then, whenever possible, please communicate with the instructor at least one week in advance to describe your situation. Students who have any signs of illness should not attend any in-person course sessions. In order to minimize confusion and maximize learning, students must invest time to prepare for the class sessions that focus on professional development, technical development, and project development. Although the course instructor and the student technical leaders will always be available to serve as guide for individual students, teams of students, and the entire class, it is expected that students will volunteer to lead and actively contribute to all class sessions. Only those students who have prepared for class by reading the assigned material, writing the required executive summaries, and reviewing the content written by other students will be able to effectively participate in these class discussions. In order to help students remain organized and to effectively prepare for classes, the course instructor will maintain a course schedule with reading assignments, project descriptions, and discussion lead assignments for the executive summaries.Assignment Submission
Developer Development Tokens
Assignment Evaluation
Course Attendance
Team Preparation
Seeking Assistance
Students who are struggling to understand the knowledge and skills developed in any of the course sessions are encouraged to seek assistance from the course instructor and/or the student technical leaders. Students should, within the bounds of the Honor Code, ask and answer questions on the Developer Development Discord Server. Instead of sending either an email or a direct message, please request assistance from the instructor and student technical leaders through public Discord channels. Students who need the course instructor’s assistance are invited to schedule a meeting through the course instructor’s appointment scheduler and come to the meeting with all of the details needed to discuss their question(s) about developer development. Students can find out the office hour schedule for student technical leaders by viewing the list of student technical leaders.
Using GitHub and Discord
This course will primarily use GitHub and Discord for all course communication. We will use GitHub for the sharing of both source code and course projects and for reporting issues in those materials. We will use two distinct Discord servers for all course discussions. The Developer Development Discord Server provides a way for members of the developer development community to use text and video to chat with each other and will be the main forum for discussing the professional and technical content in software engineering. The Allegheny College Computer Science Discord Server will be the main forum for Department of Computer and Information Science announcements. Any content that a student wants the instructor to assess (e.g., an executive summary or a contribution to a long-term software engineering project) must be in a GitHub repository. Unless a student needs to share private information with the course instructor, they should not use Discord to send him direct messages.
Using Email
Although we will primarily use the Developer Development Discord Server for class communication, the course instructor will sometimes use email to send announcements about important matters such as changes in the schedule. It is your responsibility to check your email at least once a day and to ensure that you can reliably send and receive emails. This class policy is based on the statement about the use of email that appears in The Compass, the College’s student handbook; please see the course instructor if you do not have this handbook or you cannot access your email.
Honor Code
The Academic Honor Program that governs the entire academic program at Allegheny College is described in the Allegheny Academic Bulletin. The Honor Program applies to all work that is submitted for academic credit or to meet non-credit requirements for graduation at Allegheny College. This includes all work assigned for this class (e.g., executable examinations and course assignments). All students who have enrolled in the College will work under the Honor Program. Each student who matriculates at the College acknowledges this Honor Code pledge:
I hereby recognize and pledge to fulfill my responsibilities, as defined in the Honor Code, and to maintain the integrity of both myself and the College community as a whole.
Effective Engineering
Students who engineer the source code and documentation for their Netlify-hosted web sites, the Developer Development web site, and the two long-term course projects should ensure the implementation of a high-quality final product. While students are permitted to use a wide variety of software engineering tools, such as integrated development environments, testing frameworks, automated debuggers, and code generators (e.g., artificial intelligence systems that leverage large language models like GitHub Copilot) and documentation sites such as StackOverflow, they must take responsibility for all of the source code and documentation that they submit for this course, including artifacts that are automatically generated by a software tool that leverages artificial intelligence.
This policy means that every student must work as an ethical and professional software engineer by documenting the sources for their work and verifying the correctness, maintainability, and long-term reliability of all source code and documentation that they submit. As such, a student who uses software tools to create content is responsible for citing their sources and demonstrating their understanding of it during the in-person assessments. Moreover, all students in the class are responsible for all of the source code and documentation submitted to the GitHub repository that hosts the course projects, including any tool-generated software artifacts. This means that every student should be able to answer questions, during an in-person assessment, about any technical or professional content, including that which was automatically generated by a software tool.
Students who are effective engineers also pledge to abide by the ACM Code of Ethics and Professional Conduct and the Policies of the Department of Computer and Information Science.
Disability Services
Students with disabilities who believe they may need accommodations in this class are encouraged to contact Student Accessibility and Support Services (SASS) at 814-332-2898 or studentaccessibility@allegheny.edu
. SASS is located in the Center for Student Success in Pelletier Library. Please contact SASS as soon as possible to ensure that approved accommodations are implemented in a timely fashion.
Welcome Message
In reference to software, Frederick P. Brooks, Jr. wrote in chapter one of The Mythical Man Month that “the magic of myth and legend has come true in our time.” Software is a pervasive aspect of our society that changes how we think and act. High quality software also has the potential to positively influence the lives of many people. Moreover, the specification, design, implementation, testing, maintenance, and documentation of software are exciting and rewarding activities! At the start of this class, I invite you to pursue, with great enthusiasm and vigor, an adventure in software engineering as you develop as developers and design, implement, and release production-quality software.