Course Group Status Report


Software Engineering Group

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


1. Summary

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.



2. Detailed Analysis

Section 2.1 describes the individual courses in the group. Section 2.2 explains how the group is related to the rest of program. Section 2.3 explains how the group helps meet a range of ABET and CSE objectives. Section 2.4 provides information on the feedback we have received from students, recruiters, etc. about the courses in the group. Section 2.5 summarizes the changes we are considering in the various courses.

2.1 Summary of the courses

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.

2.2 Relation to rest of the program

CIS560: The prerequisites for CIS560 are CIS321 (or CIS314 for Information Systems majors), CIS360 (or EE265), and a second writing course. The CIS321 (or CIS314) requirement stems from the large programming assignments that form the lab component of this course. Students come to CIS560 with a strong foundation in the use and implementation of components built in C++ using the Resolve discipline. Generally, however, students tend not to use this discipline (and some do not even use C++). We have had discussions with the coordinators of the introductory sequence and believe there are significant similarities between the projects assigned in the two sequences (eg both discuss and implement tokenizers and parsers). The CIS360 (or EE265) requirement stems from the topic of the programming assignments: system software. Students are expected to be familiar with the basics of architecture and some assembly language.

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.

2.3 Relation to program objectives

The courses in this group play a key role in meeting both CSE program objectives as well as ABET Criterion 3 objectives. In section 2.3.1 we consider the CSE objectives that this course group helps us meet, and in section 2.3.2 we consider the ABET objectives.

2.3.1 CSE Objectives

This group of courses strongly contributes toward meeting CSE objectives 1a, 1c, 2b, 3a-c, and 4a; moderately toward objective 4b; and to a limited extent toward objective 2a.


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:

Summary of Relation to CSE Objectives
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

2.3.2 ABET Criterion 3

Engineering programs must demonstrate that their graduates have:
  1. an ability to apply knowledge of mathematics, science, and engineering
  2. an ability to design and conduct experiments, as well as to analyze and interpret data
  3. an ability to design a system, component, or process to meet desired needs
  4. an ability to function on multi-disciplinary teams
  5. an ability to identify, formulate, and solve engineering problems
  6. an understanding of professional and ethical responsibility
  7. an ability to communicate effectively
  8. the broad education necessary to understand the impact of engineering solutions in a global and societal context
  9. a recognition of the need for, and an ability to engage in life-long learning
  10. a knowledge of contemporary issues
  11. an ability to use the techniques, skills, and modern engineering tools necessary for engineering practice.

Summary of Relation to ABET Criterion 3
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  

2.4 Feedback

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.

2.5 Possible changes

Any changes to CIS560 must be done with care, due to the significant number of courses for which it serves as the prerequisite. One area that deserves attention is the choice of textbooks ("System Software" by L. Beck is required and "A Writer's Reference" by D. Hacker is recommended). Many students opt not to buy either book since the technical content of the course does not follow the Beck book very closely and the importance of technical writing has not yet been impressed on them.

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.



3. Conclusions

The Software Engineering Group is a key component of the CSE program and helps us meet a number of objectives of the program as well as a number of the ABET Criterion 3 objectives. The courses, as they stand, are doing reasonably well; students are generally satisfied with the courses, some key industry requirements are being met by the courses, and there is strong faculty commitment to the courses.


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
May 7, 1999.