Computer Science 290, Fall 2011 Syllabus

Allegheny College

Department of Computer Science

Dr. Gregory M. Kapfhammer

Instructor Office Hours

Monday4:30 - 5:30
Tuesday1:00 - 3:00
Wednesday10:00 - 11:00 and 2:00 - 4:00
Thursday2:00 - 3:00
Friday11:00 - 12:00 and 2:00 - 4:00

For more details about my schedule, please refer to

Instructor Contact Information

Office Number+1 814-332-2880
Home Number+1 814-425-2837

Please feel free to contact me via email if I am not in my office. If you need to schedule an appointment, then you may call my office or my home. I am often able to schedule student meetings at times outside of office hours.

Course Meeting Schedule

Lecture and Discussion: Tuesday and Thursday 11:00 - 12:15, Alden Hall 101

Laboratory Session: Monday 2:30 - 4:20, Alden Hall 109

Course Objectives

The process of developing software involves the application of a number of interesting theories, tools, techniques, and methodologies. In this class we will explore the phases of the major software development life-cycles and examine the important concepts, tools, and open research questions that fit into each phase. Throughout the semester, we will examine the interplay between the theory and practice of software development. We will delve into the details of software specification, design, implementation, testing, and maintenance through a discussion of articles and book chapters from the software engineering and software testing literature. Moreover, students will enhance their ability to write about software in a clear and concise fashion. Finally, students will gain practical software development experience in laboratory sessions and a final software development project.

Performance Objectives

At the completion of this class, a student should be aware of the challenges and complexities of software development. Furthermore, a student should be comfortable with a wide array of tools, techniques, concepts, and methodologies that can be applied to the problem of developing large software systems. However, a successful student of this class will emerge with more than an understanding of the tools (e.g., text editors, compilers, debuggers, integrated development environments, modeling tools, and version control systems) that a software engineer uses. A student should have a fundamental understanding of the major software life-cycles and the activities that take place in each phase of these cycles. Finally, a student should develop a basic understanding of some of the current research and the open research questions in fields such as software engineering, software testing, program analysis, and software maintenance. After completing this class, a student should be equipped for further graduate study in the fields of computer science and software engineering. The student should also be able to more effectively participate in real-world software development projects.

Reading Information

The primary text for this course is Software Engineering: Theory and Practice, by Shari Lawrence Pfleeger and Joanne M. Atlee. This book provides a balanced introduction to all phases of the software life-cycle. The secondary text for this course is The Mythical Man Month by Frederick P. Brooks, Jr. This book contains many thought-provoking essays about the field of software engineering. Students are responsible for carefully reading all of the assignments from these two main text books. In some cases, students will have homework assignments that require them to present and lead discussions about the readings from these two books.

The required text will be supplemented with articles from a number of different sources. Additional articles from important computer science and software engineering magazines and journals, such as Communications of the ACM, IEEE Software, IEEE Computer, IEEE Transactions on Software Engineering, and ACM Transactions on Software Engineering and Methodology could be examined to further expand and deepen the scope of the required material. Technical reports that have been published in the ACM Digital Library or the CiteSeer Repository could also be used as additional texts. Finally, selected chapters from additional texts could be examined during the semester. Candidate books might include, but are not limited to, the following titles.

James F. Peters and Witold PedryczSoftware Engineering: An Engineering Perspective
Roger S. PressmanSoftware Engineering: A Practitioner's Approach
Stephen R. SchachClassical and Object-Oriented Software Engineering
Hans van VlietSoftware Engineering: Principles and Practice
Robert L. BaberThe Spine of Software
Mary Shaw and David GarlanSoftware Architecture: Perspectives on an Emerging Discipline
Kent BeckExtreme Programming Explained: Embrace Change
Allan M. StavelyToward Zero-Defect Programming
Cem KanerTesting Computer Software
Brian MarickThe Craft of Testing Software
Jeffrey M. Voas and Gary McGrawSoftware Fault Injection
Paul Ammann and Jeff OffuttIntroduction to Software Testing
Robert C. MartinAgile Software Development: Principles, Patterns, and Practices

Grading Policy

The grade that a student receives in this class will be based on class participation, grades on two interim exams, the grade on the final exam, the grade for all of the laboratory and homework assignments, and the grade for the final project. The grade breakdown will follow the form below. All percentages are approximate and it is possible for the assigned percentages to change if a need to do so presents itself.

Class Participation5%
First Exam15%
Second Exam15%
Final Exam20%
Laboratories and Homework30%
Final Project15%

Assignment Submission Policy

All assignments will have a given due date. The printed version of the assignment is to be turned in at the beginning of the class on that due date. Late assignments will be accepted for up to one week past the assigned due date with a 10% penalty. All late assignments must be submitted at the beginning of the class that is scheduled one week after the given due date. In a course that requires group project work, like Computer Science 290, students should be aware of the fact that late work can negatively impact the progress of a group project.

Class Attendance Policy

It is mandatory for all students to attend class. If you will not be able to attend a class session, then please see the Instructor at least one week in advance to describe your situation. Students who miss more than five unexcused classes will have their final grade in the course reduced by one letter grade. Students who miss more than ten unexcused classes will automatically fail the course. Students should also bring their textbook and all of the current reading assignments to each of the class sessions.

Laboratory Attendance Policy

In order to explore the discipline of computer science, it is essential for students to have hands-on experience in a laboratory. Therefore, it is mandatory for all students to attend laboratory sessions. If you will not be able to attend a laboratory, please see the Instructor at least one week in advance to explain your situation. Students who miss more than two unexcused laboratories will have their final grade in the course reduced by one letter grade. Students who miss more than four unexcused laboratories will automatically fail the course.

Laboratory Assignments

Laboratory assignments will require students to explore the concepts, tools, and techniques that are associated with different phases of the software development lifecycle. All laboratory assignments will require the use of the provided tools to design, implement, test, and maintain programs that solve important problems. Each laboratory assignment will normally be provided on the day before our scheduled laboratory session. The Instructor expects students to read the laboratory assignment before attending the session to prepare themselves appropriately. Unless specified otherwise, each laboratory assignment will be due at the beginning of the next laboratory session. Many of the laboratory assignments in this course will require the students to give a presentation and a demonstration of the software that they implemented and tested.

Final Project

This class will present you with the description of a problem and require you to implement solutions using one or more programming languages and a wide variety of other software development tools. The final project in this class will require you to utilize all of the knowledge that you have accumulated during the course of the semester in order to solve a problem and, whenever possible, make your solution publicly available as a free and open source tool. The project will require you to draw upon your problem solving skills and your knowledge of programming languages and software engineering tools. Furthermore, the final project may involve a significant experiment to discover, understand, and/or evaluate one or more algorithms or software applications. Finally, we will aim to publish a research paper describing the implementation, empirical evaluation, and use of the system that you implement for the final project.

Use Policy for Laboratory Facilities

Throughout the semester, we will experiment with many different software tools that computer scientists use throughout the software development life-cycle. The Instructor and the Department's Systems Administrator have invested a considerable amount of time to ensure that our laboratories support the completion of laboratory assignments and the final project. To this end, students will be required to complete all assignments and the final project while using the Department's laboratory facilities. The Instructor and the Systems Administrator will only be able to devote a limited amount of time to the configuration of a student's personal computer.

Preparation for Class Sessions

The study of the computer science discipline is very challenging. Students in this class will be challenged to learn the principles and practice of software development. During the coming semester even the most diligent student will experience times of frustration when they are attempting to understand a challenging concept or complete a difficult laboratory assignment. In many situations some of the material that we examine will initially be confusing : do not despair! Press on and persevere!

In order to minimize confusion, students must invest time to prepare for class discussions and lectures. During our class periods, the Instructor will often pose demanding questions that could require group consultation, the creation of a program, or a vote on a thought-provoking issue. Only students who have prepared for class by reading the assigned material and reviewing the laboratory and reading assignments will be able to effectively participate in these discussions. More importantly, only prepared students will be able to extract the knowledge that is needed to be successful in this course. Important portions of the material that will be discussed during the semester will not be in the textbook.

In order to help students to remain organized and effectively prepare for classes, the Instructor will maintain a class schedule with reading assignments and additional Instructor notes. The reading assignments will be directly integrated into the class schedule. Throughout the class sessions students will also be required to download, use, and modify programs, diagrams, and data sets. All of these materials will be provided on the course Web site. Students who are not comfortable with compiling, editing, and using simple Java programs should see the Instructor immediately.

Remember this motto, semper paratus!

Submitted Source Code Policy

No source code will be accepted unless the code is printed with the command enscript -2rG, the command a2ps --pretty-print=Java, the printing features in a text editor such as emacs, or another equivalent command. This means that your code must have the date clearly printed at the top of the page. (If the enscript or a2ps programs are not correctly printing your files, then please see the course Instructor). All source code that is not submitted in this fashion will be assigned a total of zero points. That is, the student will earn an "F" on this laboratory or portion of the final project. The first time that a student violates this requirement, he/she will be given a resubmit option. After this single resubmit option has been exercised, a student will be awarded an "F" for all further infractions.

Disability Services

The Americans with Disabilities Act (ADA) is a federal anti-discrimination statute that provides comprehensive civil rights protection for persons with disabilities. Among other things, this legislation requires all students with disabilities be guaranteed a learning environment that provides for reasonable accommodation of their disabilities. Students with disabilities who believe they may need accommodations in this class are encouraged to contact Disability Services at +1 814-332-2898. Disability Services is part of the Learning Commons and is located in Pelletier Library. Please do this as soon as possible to ensure that approved accommodations are implemented in a timely fashion.

Honor Code

The Academic Honor Program that governs the entire academic program at Allegheny College is described in the Allegheny Course Catalog. 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 done in class (such as examinations, quizzes, and laboratory work), all papers, and any other material that might be assigned in this class. All students who have enrolled in the College will work under the Honor Program. Each student who has matriculated at Allegheny College has acknowledged the following 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.

In this course, students are encouraged to conduct high-level discussions with their fellow classmates about the laboratory assignments. For group projects, the Instructor considers it a violation of the honor code for students to share source code segments with other students who are not a member of their group. For individual assignments, the Instructor considers it a violation of the honor code for students to share source code segments with any other students in the class. If a student is experiencing difficulties with the low-level details of a laboratory, they are encouraged to seek help from the Instructor. The Instructor reserves the right to use several different automated tools that scan source code to check for plagiarism violations. Furthermore, the Instructor reserves the right to use different automated tools to scan written responses to assignments for plagiarism violations.

Creative Commons LicenseUnless otherwise specified, this work is licensed under a Creative Commons License