| Tuesday, Thursday | 11:00 - 12:00 |
| Tuesday | 2:00 - 4:00 |
| Friday | 10:00 - 12:00 |
| 3:00 - 5:00 |
| Office Number | 332-2880 |
| Home Number | 425-2837 |
gkapfham@allegheny.edu
| |
| Internet |
http://cs.allegheny.edu/~gkapfham/
|
Please feel free to contact me via email if I am not in my office. If you need to schedule an appointment, you may call my office or my home. I am often able to schedule student meetings at times outside of office hours.
Lecture and Discussion: Tuesday, Thursday 9:30 - 10:45
Laboratory Session: Thursday, 2:30 - 4:20, Alden Software Development Lab
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 software development life-cycle 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 development and software testing literature. Moreover, students will focus on developing the ability to write about software in a clear and concise fashion. Finally, students will gain practical software development experience in laboratory sessions and a long-term group software development project.
At the completion of this class, a student should be aware of the challenges and complexities of software development. Furthermore, a student should have developed a toolkit 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 will more than an understanding of the tools (i.e. text editors, compilers, debuggers, IDEs, UML modeling tools, etc) that a software engineer uses everyday. A student should have a fundamental understanding of the software life-cycle and the activities that take place in each phase of this cycle. Finally, a student should develop a basic understanding of some of the current research and the open research questions in the fields of software development and software testing. After completing this class, a student should be equipped for further graduate study in the fields of software development and software testing. The student should be able to more effectively participate in real-world software development projects.
There is no required textbook for this course. Unfortunately, none of the currently available texts adequately introduce students to the principles and practice of software development. Because of this deficit, the Instructor has selected articles that have been excerpted from textbooks and conference proceedings and journals. These selections appropriately introduce the field of software engineering. Moreover, these text selections provide a detailed examination of many different facets of the software development process. Clearly, this approach will make the course much more challenging. However, the selected articles will also make the course more meaningful, useful, and rewarding!
The required articles could be supplemented with with excerpts 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, and IEEE Transactions on Software Engineering, could be examined to further expand and deepen the scope of the required material. Technical reports that have been submitted to the Networked Computer Science Technical Report Library (NCSTRL) 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.
| Frederick P. Brooks, Jr. | The Mythical Man Month |
| James F. Peters and Witold Pedrycz | Software Engineering: An Engineering Perspective |
| Roger S. Pressman | Software Engineering: A Practitioner's Approach |
| Stephen R. Schach | Classical and Object-Oriented Software Engineering |
| Hans van Vliet | Software Engineering: Principles and Practice |
| Robert L. Baber | The Spine of Software |
| Mary Shaw and David Garlan | Software Architecture: Perspectives on an Emerging Discipline |
| Kent Beck | Extreme Programming Explained: Embrace Change |
| Allan M. Stavely | Toward Zero-Defect Programming |
| Cem Kaner | Testing Computer Software |
| Brian Marick | The Craft of Testing Software |
| Jeffrey M. Voas and Gary McGraw | Software Fault Injection |
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 homework assignments and laboratories, and the grade for the long-term project. The grade breakdown will follow the form below. It is possible for the assigned percentages to change if a need to do so presents itself.
| "Question of the Day" | 5% |
| First Exam | 10% |
| Second Exam | 10% |
| Final Exam | 15% |
| Homework | 15% |
| Laboratories | 15% |
| Long-term Project | 30% |
Before the beginning of each class (except for the first class of the semester), a random number will be generated. This random number will be used to select a student from the class. This student will be responsible for answering a detailed and difficult question about the material that has been covered in the past two or three classes. Each student response will be graded on the scale of pass or fail. Since the numbers will be chosen randomly, there is no limit to the number of time(s) or the number of sequential time(s) that a student could be selected. The final "question of the day" grade for each student will simply be the average of all of the student's scores (i.e. 1 for pass and 0 for fail).
While it is possible for a student to never be selected throughout the entire semester, this has not happened in past semesters. The Instructor reserves the right to pose a "question of the day" to a student that has not been asked a question if a limited amount of the semester remains. Each student is able to earn one pass for a question of the day. This pass can be applied after the student has heard the question. However, a pass can only be earned after a student posts a review of a "serious" (or, potentially "semi-serious") work of literature on the course Wiki. Students who post reviews of "grocery store books" or computer science textbooks are not eligible for a pass.
All homework assignments will involve the reading of the articles in the course-pack. All students are responsible for reading all of the course-pack articles. However, the Instructor will select groups for each of the homework assignments. These groups of students will be responsible for responding to the questions that have been posted about a specific article or a collection of articles. The students in the group will be expected to collaboratively develop their answers during group meetings. Furthermore, students will be required to collaboratively express their answers in the Wiki pages devoted to a given homework assignment. For each reading, the Instructor will randomly assign groups of three from the choose(16,3) = 560 possible groupings. Students will normally have between three and five days to post their responses to the homework questions. During class discussions, the selected groups will be viewed as the experts on their assigned articles. Each student will be involved in eight different groups and thus responsible for being the expert in each of these different topical areas. All students are responsible for reading all of the homework assignments.
The Instructor will select groups for each of the laboratory assignment. In each laboratory assignments, a student will be responsible for delving into a specific area of the discipline of software engineering. For each laboratory, every group must assign the role of notebook manager. This student will be responsible for developing a Wiki notebook that describes the experience of the group (i.e. pitfalls encountered, problems and solutions, etc.) Finally, all students will be encouraged to use a collaborative Wiki page to post general questions about the laboratory assignment. The Instructor (and other students!) will post responses to these questions throughout the week. Each laboratory assignment will be provided on the laboratory listing the day before our scheduled laboratory session. Students are expected to read the laboratory before attending the session in order to prepare themselves appropriately. Each laboratory assignment will be due at the beginning of the next laboratory session, unless otherwise noted. Tentatively, laboratories will review software development in Java, software architectures, design patterns, software design metrics, aspect-oriented programming, assertions, software performance tuning, and test adequacy measures.
An important component of any class that attempts to understand the art and science of developing software is a long-term project. During the long-term project the entire class will participate in the development of an application. At the completion of the semester, the entire source of the application and the documentation of the application will be contributed to the open-source software engineering community. In order to complete the project successfully, all of the students in the class must work together to produce a reliable, well-tested, and well-documented proof of concept prototype that can be downloaded and used by software developers outside of the Department of Computer Science at Allegheny College.
This project will allow students to gain practical experience with the tools of a software engineer while helping them to gain exposure to a wide range of new technologies. Furthermore, students will obtain an accurate taste of real-world software development challenges which include, but are not limited to the following; the challenges of group communication, hard to meet deadlines, high requirements for application quality, and software integration difficulties. It is important to note that we will not be able to meet the ambitious goals that have been set for this long-term project unless each member of the class works to the best of his or her abilities! Throughout the semester, the Instructor will function as the project manager.
In order to mitigate the challenges that our development team will face, the Instructor has implemented a simple, but working version of the desired application. The provided codebase adheres to a (fairly) standardized software architecture and design. This codebase contains a portion of the desired application's implementation that can be used as an example by the student developers. Also, the implementation includes a suite of tests that demonstrate the correctness of the provided codebase. Currently, the codebase contains approximately 5,000 lines of well-documented Java source code. Students will be required to interact with the CVS repository that contains the source for this project. A commit token will be selected and students who desire to commit code to the CVS repository must "lock" the commit token. Suggestions for unoffensive, yet distinctive (and potentially comical) commit tokens (i.e. hats, stuffed animals, pictures, etc) are welcome.
It is expected that the implementation of the long-term project will result in the publication of a paper at a software engineering or software testing conference. Outstanding students will be invited to participate in the creation of this paper. Depending upon paper acceptance and available funding sources, several of these students will be invited to attend the conference. Moreover, it is expected that the development of this application will provide an opportunity for one or more senior thesis research projects. Juniors that are interested in continuing research in the selected area should contact the Instructor.
The grade for the final project will result from a combination of several different metrics. Groups of students will receive grades that measure their ability to meet the interim checkpoints that were designated by the Instructor. Also, group members will be responsible for writing peer reviews of the other members of their group. Next, groups will be responsible for writing a review of each of the other groups. Finally, the Instructor will conduct a detailed review of the documentation, application source code, and test source code that was submitted by each group.
Throughout the semester, we will be experimenting with many different software tools that are used 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 will facilitate the completion of homework and laboratory assignments and the final project. Moreover, our laboratory facilities in Alden 103 have been specifically design to accommodate group software development (at the beginning of this semester, we will be obtaining completely new furniture for this laboratory). To this end, students will be required to complete all laboratory assignments while using the Department's laboratory facilities. Moreover, students will be required to complete the entire long-term project while using the Department's laboratory facilities. Students are permitted to respond to homework assignments without using the laboratories in Alden Hall. However, students are certainly encouraged to use our facilities to formulate homework responses. Finally, 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.
This project will allow students to gain practical experience with the tools of a software engineer while helping them to gain exposure to a wide range of new technologies. Furthermore, students will obtain an accurate taste of real-world software development challenges which include, but are not limited to the following; the challenges of group communication, hard to meet deadlines, high quality requirements, and software integration difficulties. It is important to note that we will not be able to meet the ambitious goals that have been set for this long-term project unless each member of the class works to the best of his or her abilities! Throughout the semester, the Instructor will function as the project manager.
In order to mitigate the challenges that our development team will face, the Instructor has implemented a simple, but working version of the desired application. The provided codebase adheres to a (fairly) standardized software architecture and design. This codebase contains a portion of the desired application's implementation that can be used as an example by the student developers. Also, the implementation includes a suite of tests that demonstrate the correctness of the provided codebase. Currently, the codebase contains approximately 5,000 lines of well-documented Java source code. Students will be required to interact with the CVS repository that contains the source for this project. A commit token will be selected and students (who must work in the laboratory!) who desire to commit code to the CVS repository must "lock" the commit token. Suggestions for unoffensive yet distinctive (and potentially comical) commit tokens (i.e. hats, stuffed animals, pictures, etc) are welcome.
It is expected that the implementation of the long-term project will result in the publication of a paper at a software engineering or software testing conference. Outstanding students will be invited to participate in the creation of this paper. Depending upon paper acceptance and available funding sources, several of these students will be invited to attend the conference. Moreover, it is expected that the development of this application will provide an opportunity for one or more senior thesis research projects. Juniors that are interested in continuing research in the selected area should contact the Instructor.
The grade for the final project will result from a combination of several different metrics. Groups of students will receive grades that measure their ability to meet the interim checkpoints that were designated by the Instructor. Also, group members will be responsible for writing peer reviews of the other members of their group. Next, groups will be responsible for writing a review of each of the other groups. Finally, the Instructor will conduct a detailed review of the documentation, application source code, and test source code that was submitted by each group.
The study of the computer science discipline is very challenging. Students in this class will be challenged to learn the principles of software development and hone their problem solving skills while also learning about new software engineering "tools of the trade." 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 questionable issue. Only students that have prepared for class by reading the assigned material and reviewing the laboratory and homework assignments will be able to effectively participate in these discussions. More importantly, only prepared students will be able to extract the knowledge needed to be successful in this course. Therefore, it is mandatory for all students to attend class sessions. In order to help students to remain organized and effectively prepare for classes, a class schedule will be maintained with reading assignments and additional Instructor notes. The homework assignments will be directly integrated into the class schedule.
Remember this motto, semper paratus!
In order to explore the discipline of computer science, it is essential for students to have hands-on experience with the tools of the trade. Therefore, it is mandatory for all students to attend laboratory sessions. All laboratory sessions will be conducted in a group. A group without one member will be at a severe disadvantage! Attendance will be taken at the beginning of each laboratory session and missing students will be noted. If you will not be able to attend a laboratory, please see the Instructor at least one week in advance to describe your situation. Of course, documented emergencies will also be taken into account.
No source code will be accepted unless the code is printed with the command
enscript -2rG. This means that your code must be
formatted in a two column format and it must have the date clearly
printed at the top of the page. All source code that is not submitted in
this fashion will be assigned a total of zero points. That is, the
students in the submitting group will earn an "F" on this laboratory or
portion of the long-term project! The first time that a group of students
violates this requirement, they will be given a resubmit option. After this
single resubmit option has been exercised, groups of students will be awarded
a "F" for all further infractions.
The Academic Honor Program that governs the entire academic program at Allegheny College is described on pages eight and nine of 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 concerning the laboratories with their fellow classmates. It will be considered a violation of the honor code for groups of students to share segments of source code on the laboratory assignments. If a student is experiencing difficulties with the low-level details of a laboratory, they are encouraged to seek help from the Instructor. A group of students that is responsible for responding to a specific homework assignment must acknowledge any formative conversations that were conducted with non-group members. The Instructor reserves the right to use several different automated tools that scan Java source code to check for plagiarism violations. Furthermore, the Instructor reserves the right to use different automated tools to scan written responses to homework assignments for plagiarism violations.