| Course no. | Title | Credit Hours |
Reqd - Core (R)/ Reqd - Option (O)/ Elective (E) |
Capstone? |
|---|---|---|---|---|
| CIS560 | System Software Design, Development, and Documentation |
5 | R |   |
| CIS601 | Social and Ethical Issues in Computing | 1 | R |   |
| CIS757 | Software Engineering | 3 | O |   |
| CIS758 | Software Engineering Project | 4 | E | yes |
Software engineering has emerged as a critical area in the discipline of computer science. With computer systems increasingly being used in mission and safety-critical applications, the development of reliable software for these systems is of paramount importance. The recent prominence of concerns over Y2K compliance is an example of the potential dangers that arise when good engineering practices are not applied to software development. The software engineering course group plays a pivotal role in teaching these good engineering practices, and in developing the appropriate professional and social ethics.
The first course in this sequence is CIS560, System Software (although this sequence is really a continuation of many of the concepts that are introduced in the software spine group). CIS560 is a core course (required for all CSE students) that serves as a prerequisite for the majority of upper-level courses. The technical content of this course centers on the tools (e.g., compilers, assemblers, linkers, loaders, operating systems) that bridge the semantic gap between the machine-level view of instruction execution and the applications developer view of programs. This course expands significantly on several topics that were first introduced in the software spine: teamwork and design. All lab assignments are completed by teams of four or five students. The ability to work well as a team is critical for success in this course, as each assignment is too large to be done by an individual in the allotted time. (An example of a typical assignment in this course is the design, documentation, implementation and testing of an assembler for an abstract machine language.) In order to complete the assignments, teams must make design decisions both at the requirements specification level and at the implementation level. Teams have considerable latitude in these design decisions and feedback is given during team meetings with the instructor, during interactive grading sessions, and also, post factum, in their graded assignments. This course also serves to introduce students to technical writing.
Also included in this group is CIS601, a core course on the social, ethical, and legal issues that arise in the practice of the computing profession as well as in the application of computer technology. This course is structured around student presentations and debates on current issues in the field such as privacy rights, security rights, copyright laws, and antitrust laws. Emphasis is placed on oral communication and on the ability to hold and defend reasoned opinions.
CIS757 is a required course for the Software Systems option. It is a survey course on software engineering principles, tools, and methodologies. Students learn about classic, established techniques as well as about new research results appearing in recent journals. CIS758 is one of the two "highly recommended" capstone courses for this option. This course is an opportunity for students to apply the skills and knowledge acquired over the course of their degree program in the design of a significant, large-scale system. Course projects typically involve practical (real) problems for a larger client community. Students frequently report that the material learned in CIS757 and the experience gained in CIS758 serve them well, both during industry interviews as well as during the practice of their profession.
Overall, students appear to be satisfied with this sequence. CIS560 has a reputation as a very difficult and time-consuming course, but also as an interesting and relevant one, so many students look forward to the challenge. The majority of graduates (53% in academic year 97/98) pursue the Software Systems option for their degree, and the two upper-level software engineering courses form the backbone of this program in the final year. This year, 5 sections (with 40 students per section) of CIS757 are being offered. CIS758 remains the most popular capstone course.
Some issues do exist, however, that require our attention. The transition between CIS560 and CIS321 has historically been a difficult one. Some recent changes in the software spine sequence that leads into CIS560 give us cause for optimism that this gap may be closing. We will continue to monitor this situation and work with the software spine coordinators to improve this interface. CIS560, in general, is a challenge to structure and teach. Its unique role in the curriculum means it is required to deliver many things for many different subsequent courses.
Another concern is the numbering of Software Engineering as a 700 (graduate) level course. The content of the current course is more appropriate for a 600-level numbering, analogous to the 600-level courses for operating systems, graphics, programming languages, theory, etc. A new graduate-level software engineering course (a redesigned CIS757) could then be used to introduce students to research problems and give them the background necessary to begin work in this area. Such a course has not currently been designed, so it is not clear what the eventual content would be, but the opportunity has been identified and the interested faculty will continue discussions in this direction.
CIS560: This is a five-credit course that serves as the keystone of the curriculum. It is a prerequisite to almost all upper-level courses and students generally take this course during their sophomore or junior year. The class meets for 4 lecture hours/week. The extra credits reflect the heavy lab component of the course.
The technical content of the course centers around system software (e.g., compilers, linkers, loaders, interpreters). The emphasis of the course, however, is as much on design, documentation, implementation, testing, teamwork, and communication skills as it is on the pragmatics of system software.
Over the course of the quarter, students design, document, implement, and test several projects. These are large programming assignments, some taking as many as 6 weeks to complete, depending on the instructor. Students are given a description of the abstract machine for which they are building the system software and a good description of the required functionality for each particular assignment (e.g., an assembler). Like many real-world engineering situations, however, the assignment specifications are somewhat incomplete and occasionally ambiguous. It is up to the students to address the omissions and ambiguities by soliciting information from their hypothetical client and by making appropriate design choices. Apart from design choices in their system requirements, students are also free to make many design choices in the completion of their assignments; for example, the implementation language and platform as well as the module decomposition, data structures, and algorithms. For most students, CIS560 is the first time they will face ambiguous requirement requests and the first time they will be given significant latitude in how they satisfy these requirements.
CIS560 is also the first time most students will be building programs that are too large to complete in a single sitting. At the beginning of the quarter, the class is divided into teams of four or five. Assignments are completed by the team as a whole, and the entire team is given a single grade (with the exception of 5% that is reserved for individual effort and is allocated according to a peer review by other group members). Teams are responsible for setting up regular meeting times and for partitioning the workload equitably. Teams do meet with the instructor during the quarter to get direct feedback on their design decisions as well as to analyze and discuss how well the team is working together. Peer evaluations are submitted regularly during the quarter and provide more insight into the team dynamics that have evolved. Students gain first-hand experience in the challenges involved with working with others. They learn the importance of proper task allocation, how to rely on others, and how to take responsibility for completing tasks both as individuals and as a group.
In addition to a working implementation, teams must also deliver extensive documentation in the form of a user's guide, a programmer's guide, a testing guide, and the minutes from all team meetings. CIS560 is officially designated as a writing course. It is not uncommon for this documentation to exceed several hundred pages over the course of the term. Recently, some sections of the course have experimented with Web-based documentation. Some lecture time is set aside to address technical writing issues. For the first assignment, some draft documentation is submitted so that students can get feedback before submitting their first set of documentation. Also, the last assignment is a synthesis of the previous assignments into a single working system and hence much of the documentation submitted for this final assignment is a rewritten form of previously submitted and graded documentation. Also, the College of Engineering maintains a Technical Communication Resource Center whose mission it is to "assist students in the development of effective written and visual communication skills". Students are encouraged to avail themselves of this service. There are two recommended textbooks for CIS560, one of which is a reference book and style guide for technical writing.
CIS601: The primary objective is for each participant to become informed, and to develop reasoned opinions about the ethical, social, and legal dimensions of various situations that may be encountered by computer professionals, and about social issues that arise from computer technology. Participants will practice how to: hold an opinion, have reasons for one's opinions, change opinions when compelled by best judgment, and rationally discuss opinions in cooperative pursuit of truth and good practices. Additional objectives are to develop communication skills, both written and oral, and to encourage ethical and responsible behavior.
The class meets once a week, with a 90 minute time slot. Each student makes one 10 minute classroom presentation on an assigned topic -- either a report-style presentation or an assigned role in a debate. Debates follow a modified town-hall debate format with points of order and points of information. Each student also writes a three-page paper on a topic chosen from a list of possible topics.
The presentation grade is based on: effectiveness of communication, clarity, strength of preparation, accuracy of reported material.
CIS757: This is our software engineering survey course and is required for students in the Software Systems option. The course is a prerequisite for CIS758 and CIS772, and students generally take it during their junior or senior year. The class meets for three lecture hours per week.
The technical content of the course centers around issues in software engineering, especially those that are related to the development and maintenance of large software systems. The course studies the principles of design, implementation, validation, maintenance, and management of computer software, along with tools, methodologies, and environments for effectively applying these principles. Topics include project management, software risk analysis, software engineering life cycle models, process assessment, requirements analysis, software design, software configuration management, software quality assurance, software inspection, and testing techniques.
Students have the opportunity to learn the course material in a variety of ways. Students prepare for class discussions by studying selected readings from an assigned textbook and a collection of papers. The textbook is usually either "Software Engineering: A Practitioner's Approach" by Roger Pressman or "Software Engineering" by Ian Sommerville. Both of these textbooks are widely used by universities for similar software engineering survey courses. The collection of papers supplements the textbook and gives students an opportunity to study one topic in more depth (by reading the paper originally reporting the work) or to study important topics not included in the textbook (such as recent developments and results). These readings stimulate class discussion, and enable group problem-solving, on the topics. Learning how to read and evaluate papers from computer science conference proceedings, journals, and magazines also prepares students for the task of maintaining and expanding their expertise in computer science. Students also submit written summaries of selected papers. These summaries force the students to focus on identifying and evaluating the important points in the paper, and give them an opportunity to practice, and get feedback on, their technical-writing skills. Students also complete a set of labs designed to help them discover some software engineering principles, reinforce material they have studied in their readings, or gain practical experience with software tools.
Students are evaluated on their readings (through class participation in discussions), their written paper summaries, their labs, an in-class midterm exam, and an in-class final exam.
CIS758: This is our most popular four-credit capstone design course. The reason for the course's popularity is easy to see: the type of system that the students in this course design is very similar to the kinds of systems they are likely to design in their future careers in the software industry. Furthermore, the processes they are required to use in arriving at the design also reflect current industrial practice. Students usually take this course during their senior year. The class meets for three lecture hours per week. The extra credit reflects the heavy lab component of the course.
The course project varies from quarter to quarter. However, because a goal of the course is for students to apply software development principles and practices to the design of a real, industrial problem, projects that have an external "customer" are preferred and solicited. Often, the customer participates actively in the project. For example, in one recent project, students designed a Web-based system for the Department of Traffic and Parking at Ohio State University. The project consolidates and expedites the transfer of information regarding current and upcoming events affecting the availability and accessibility of facilities on the Ohio State University campus to the university commuters. For the project, students interacted with members of the Department of Traffic and Parking, the Campus Police Department, and potential users of the system, and representatives from those groups helped review the final project.
For the project, the class is organized into teams, each consisting of four or five students. The teams are required to consider issues such as project-management, cost-estimation, requirements collection and analysis, user-interface design, system design, implementation planning and scheduling, software configuration management, and software quality. After each step of the process, each team is required to present certain deliverables. These deliverables consist of the documents that are appropriate for that step in the process. For example, after the requirements analysis phase, deliverables include the requirements document, the preliminary user's manual, and the test plan. Templates for these deliverables are adapted from IEEE standards for documentation, and students have the option of further refining them to meet their specific needs. Each team is required to present its deliverables for each step of the process and participate in technical reviews and oral presentations of the deliverables; team members might also be required to review some documents of other teams. The teams are also expected to generate and evaluate alternative designs. Since students would have already taken CIS 601, they are expected to consider social, ethical, and political issues as appropriate.
Students are evaluated on the deliverables of their group, their individual participation in the project, their participation in reviews of their project and other projects, their oral presentations, and a final exam.
CIS560 serves as a direct prerequisite for the initial courses in several sub-disciplines: CIS655 (programming languages), CIS660 (operating systems), CIS680 (algorithms), and CIS681 (graphics). Of these, CIS655 and CIS660 require a conceptual model of the underlying hardware including memory and program execution. CIS655 and CIS681 both have extensive programming assignments, and assume the student is comfortable writing large programs.
CIS560 also serves as a direct prerequisite for: CIS731, CIS772, and CIS778.
Finally, CIS560 serves as a prerequisite for two other courses in this course group: CIS601 and CIS757. Please refer to the description of these courses, below, for an evaluation of this prerequisite relationship.
CIS601: The only prerequisite for this course is CIS560. This course does not directly use any of the technical content of CIS560. There are two reasons, however, for this prerequisite. Firstly, students in CIS601 must complete a significant writing assignment (a term paper). They benefit, therefore, from the writing experience gained in CIS560. Secondly, students in CIS601 are expected to have a certain academic sophistication and general familiarity with many aspects of the discipline of computer science. Students should therefore be taking CIS601 in their junior or senior year. The CIS560 prerequisite is a simple mechanism to ensure that CIS601 is not taken too early in the program.
CIS601 is not a prerequisite for any other course.
CIS757: The only prerequisite for CIS757 is CIS560. There are two reasons that CIS560 is a prerequisite for CIS757. Firstly, CIS757 builds on the experience that students have in CIS560. CIS560 serves as an introduction to many of the problems that occur during the software development and maintenance life cycle. It therefore motivates the techniques and solutions presented in CIS757 for managing the complexities of this process. Secondly, students in CIS757 are expected to have a certain academic sophistication and general familiarity with many aspects of the discipline of computer science,
CIS757 serves as a prerequisite for CIS772 ( Information Systems majors may take CIS516 to satisfy the CIS772 prerequisite instead). Question for Doug: what CIS757 content is used in CIS772?
CIS757 also serves as a (the only) prerequisite for CIS758. See the next paragraph for a description of the relationship between these courses.
CIS758: The only prerequisite for CIS758 is CIS757. In CIS757, students learn the principles and practice of software development. In CIS758, students apply this knowledge in the design of a significant, large-scale system.
CIS758 is not a prerequisite for any other course.
In summary, the prerequisites for the courses in the group are satisfactory. Although CIS560 has many responsibilities as the prerequisite for most upper-level courses, it seems to be meeting these diverse needs well.
Objective 1.To provide graduates with a thorough grounding
in the key principles and practices of computing, and in
the basic engineering, mathematical, and scientific principles
that underpin them. Students will:
a.Demonstrate proficiency in the areas of software
design and development, algorithms, operating systems,
programming languages, and architecture.
b.Demonstrate proficiency in relevant aspects of mathematics,
including discrete mathematics, as well as the appropriate
concepts from physics and electrical circuits and devices.
c.Successfully apply these principles and practices to a
variety of problems.
The software engineering sequence contributes significantly
to objective 1(a). In CIS560, students are exposed to software design and
development for large systems, and they design their first large
software system.
In CIS757, they study the principles and practices that guide the development
of software systems, and in CIS758, they use these principles to
design a software system.
The software engineering sequence also contributes significantly to
objective 1(c).
In CIS 758, students use their knowledge about software development
principles and practices in the design of a software system.
Comments on how this objective is met.
Objective 2.To provide graduates with an understanding
of additional engineering principles, and the mathematical
and scientific principles that underpin them. Students will:
a.Demonstrate an understanding of differential and
integral calculus, differential equations, physics
and several areas of basic engineering sciences.
b.Have the ability to work with others and on
multi-disciplinary teams in both classroom and
laboratory environments.
The software engineering sequence contributes significantly to
objective 2(b) by repeatedly requiring students to work in teams.
All assignments in CIS560 are done by teams of 4 or 5 students.
These assignment involve using a variety of skills to address the
range of required tasks (implementation, quality control,
documentation).
Teamwork also plays a central role in CIS757 and CIS758, although
the precise structure of the teams varies between instructors.
In some sections, the entire class has been structured as a matrix
organization with cross-functional teams working towards a single
unified goal.
In other sections, the class has been strictly subdivided into
independent teams each with similar or independent goals.
Objective 3.To provide graduates with an understanding of
the overall human context in which engineering and
computing activities take place. Students will:
a.Demonstrate an ability to communicate effectively.
b.Obtain familiarity with basic ideas and contemporary
issues in the social sciences and humanities.
c.Obtain an understanding of social, professional
and ethical issues related to computing.
The software engineering sequence contributes significantly to
objectives 3(a) and (c).
Written communication is a key component of many of the courses.
CIS560 focuses on technical writing, requiring
extensive technical documentation of various aspects of the delivered
product (e.g., use, maintenance, and testing).
CIS757 and CIS758 also have significant documentation requirements,
and CIS601 requires a term paper.
CIS601, on the other hand, focuses primarily on oral communication, with weekly individual presentations and team debates. Students learn how to communicate their views effectively and persuasively in several ways. Firstly, some lecture time is set aside for instruction in the mechanics of presentation/rhetoric. Secondly, the instructor makes topic presentations similar in style to what is required of the students, so they have the opportunity to learn by example. Finally, students receive direct and immediate feedback both from the instructor and their fellow classmates. During debates, each audience member chooses which side to support and sits on the corresponding side of the room. As the debate progresses and audience members move back and forth, speakers see immediately which arguments are persuasive and which are not.
The "social, professional, and ethical issues related to computing" are exactly the substance of CIS601.
Objective 4.To prepare graduates for both immediate
employment in the CSE profession and for admission to
graduate programs in computing.
a.A large fraction of graduates will be immediately
employed in high-technology companies that utilize
their computing education.
b.Strong graduates from the program will be prepared
to enter good graduate programs in CSE
The software engineering sequence contributes significantly
to objective 4(a). Students report that during their job interviews,
they are asked to discuss many of the topics that they study in
CIS757, and that, because of what they have learned in the course, they
are knowledgeable about the topics.
Students also report that their potential employers are very impressed
with the experience in software design that CIS758 gives them.
The contribution that these courses make toward meeting various CSE objectives is summarized in the following table:
| CIS Course | CSE 1a |
CSE 1b |
CSE 1c |
CSE 2a |
CSE 2b |
CSE 3a |
CSE 3b |
CSE 3c |
CSE 4a |
CSE 4b |
|---|---|---|---|---|---|---|---|---|---|---|
| 560 | XXX |   | XX |   | XXX | XXX |   | X | XX | X |
| 601 |   |   |   |   | X | XXX | XXX | XXX | XXX | XXX |
| 757 | XXX |   | XXX |   |   | XX |   |   | XXX | XXX |
| 758 | X |   | XXX |   | X | XX |   |   | XXX | XXX |
| CIS Course | ABET 3a |
ABET 3b |
ABET 3c |
ABET 3d |
ABET 3e |
ABET 3f |
ABET 3g |
ABET 3h |
ABET 3i |
ABET 3j |
ABET 3k |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 560 | XX | XX | XXX | XXX | X | X | XXX |   |   |   | XX |
| 601 | X | X |   | X | X | XXX | XXX | XXX | XX | XXX | XX |
| 757 |   | XX | XX |   | XXX | X | XX |   | XX | XX |   |
| 758 |   |   | XXX | X | XXX | X | XX |   |   | XX |   |
The principal official vehicle for student feedback has been student evaluations in the form of SETs. These have generally been very positive, even for courses with high loads (CIS560 and CIS758). These courses require a great deal of effort on the part of the students, but this effort seems to be worth the benefit reaped (and perceived by the students).
Unofficially, many students have communicated (either in person or by email) how useful the upper level software engineering courses have been in their subsequent employment. Some have observed that the CIS757 background has been useful during interviews for actually securing second interviews or even job offers. Others have commented how invaluable the design and analysis components of CIS758 have turned out to be in their employment.
A third form of feedback -- and one that is particularly important to the software engineering sequence -- is from practitioners in industry. In addition to alumni surveys that give general indications of the success of various aspects of the program as a whole, CIS757 and CIS758 have benefited in particular from a great deal of input and interaction with practicing software engineers. The two principal instructors for CIS758 are both from local industry. They have interacted closely with the course co-ordinator, Prof. Harrold, in the development of a unified syllabus and have brought a valuable perspective to the design of this course. For example, the methodology presented for system design is directly inspired by the actual methodology in place at a local software development company.
This year, Mike Stovsky, who teaches CIS757, was recognized by the department for his commitment to and excellence in teaching with a departmental Outstanding Teaching Award.
CIS601 is working well, but one small modification planned is a restructuring of how students are given feedback. Currently, presentations and debates are graded by the teaching assistant with little constructive feedback to the students. They do obtain this feedback in other ways, but future offerings will use the evaluation mechanism to also quickly provide constructive feedback to the students. Another possible change would be to eliminate the CIS560 prerequisite in favor of an explicit policy that requires senior standing in the program (which seems to be the intent of the CIS560 prerequisite). A final, more substantial, modification to consider is expanding the time slot for CIS601 from 90 minutes to 2 hours. There is certainly enough material and issues to cover, but it isn't clear there is room in the core for a corresponding increase in the credit hours (from 1 to 2).
For CIS757, one possible change -- as observed above -- would be to renumber the course (with relatively few changes) to the 600-level (657?). There are many things that could be done with a new 700-level software engineering course and this is a current topic of discussion. One concern, however, is the scarcity of resources for teaching more courses in this area. Instructors from outside the department are already being used to teach upper-level software engineering courses and -- while this brings a healthy context for these courses with respect to actual industry practices -- we must be careful to maintain the proper balance between internal and external instructors. There is high demand for these courses and the current faculty are being spread thin. Hopefully we will succeed in hiring new faculty in the near future to address this need.
| Course | Coordinator | Recent Instructors |
|---|---|---|
| 560 | Stutz Sivilotti |
Stutz, Sivilotti, Ware, Ostrove |
| 601 | Josephson | Josephson |
| 757 | Harrold | Harrold, Stovsky, Perry |
| 758 | Harrold | Harrold, Cline, Ramnath |
People involved in preparing report: Paul Sivilotti, Al Stutz, Mary Jean Harrold, John Josephson, Pete Ware.
Date of report: May 24, 1999
Paul Sivilotti