Course Group Status Report


Software Spine Group


Course Title Credit
Hours
Required (R)/
Elective (E)
CSE 221 Software Development Using Components 4
R
CSE 222 Development of Software Components 4
R
CSE 321 Case Studies in Component-Based Software
4
R


1. Summary

The introductory course sequence for CSE majors concentrates on what we call the software spine of the CSE curriculum: CSE 221, CSE 222, and CSE 321, also known as the software component engineering course sequence.  This sequence begins with a second course in programming, ends with an advanced case-study course in design and analysis of reusable software components, and is completely integrated and unified in its philosophical and technical bases.  Funding to support development and evaluation of these courses came from the National Science Foundation (DUE-9555062, CDA-9634425) and the Fund for the Improvement of Post-Secondary Education (P116B960717).

Three key features of this sequence deserve special mention because they entail significant differences relative to a traditional approach to CS1/CS2 courses:

  1. The use of component-based software engineering for the philosophical, theoretical, and technical bases of the sequence.
  2. The integrated and unified nature of the course sequence.
  3. The recognition that the first CS course at a university is not the first programming experience for most prospective CSE students.
Here is a brief summary of each of these points.  Further information is available both later in this report (e.g., Sections 2.4 and 2.5), and in various papers describing details of course content and pedagogy that can be reached through the "Software Component Engineering Course Sequence Home Page" at:
http://www.cse.ohio-state.edu/sce/now
  1. The biology professor can start his first-year course by announcing, "Biology is the study of life. Everything we do in this class is directly related to this theme."  What does the computer science professor announce at this point?  First-year CSE students need to see clearly that computer science as a discipline has an important intellectual role to play and that it offers deep philosophical questions, much like the other hard sciences and mathematics; that CS is not "just programming".  An appropriate intellectual focus for the first year can be built on the foundations of systems thinking and mathematical modeling, as these principles are manifested in a component-based software paradigm.  This is what we try to accomplish, teaching good software engineering principles (not "just programming") in the process.
  2. Most computer science educators cannot agree on what a well-designed piece of software should look like; the same is true for practitioners.  This observation is easily supported by examining computer science textbooks, technical papers, and commercial "industrial-strength" software.  Except for egregiously poor design practices, most software engineers and software engineering educators cannot separate fair-to-good software designs from excellent ones.  Beyond the tenets of structured programming there are few accepted community standards for what software systems should be like, at the detail level.  This is particularly true for component-based software.  We have put together a team of faculty and graduate students who share a common vision of software development and how to teach it.  This is essential for a unified and integrated sequence since, otherwise, there is little hope that students will develop the appropriate knowledge and skills over the sequence as a whole.  So we ask students to be open-minded and to try out what we're teaching them for one entire year, not just for one term.  After that they may do as they wish in subsequent courses: continue to use and further develop the component-based software engineering discipline they have learned in this sequence, revert to their previous methods of programming, or learn yet other ones.  Our experience is that there are a significant number of students of each kind in subsequent courses.
  3. Students entering CSE 221 are expected to have had prior programming experience such as that learned in a high school programming course or in CSE 201 "Elementary Computer Programming".  Several times each quarter before registration, we administer a placement exam for admission to CSE 221 to students who do not have CSE 201 or CSE 202 or EG 167 or AP computer science credit (a score of at least 3 on the CS/A or CS/AB exam).  In student surveys conducted as early as 1995-96, we found that about 65% of students in CSE 221 at that time had had such prior experience in programming.  This contributed to two serious problems: boredom for many during CSE 221, and a significant "intimidation factor" for the minority who had no prior experience with programming.  We hoped that the prerequisite would help alleviate these problems; but see Section 2.4.
As explained in detail in Section 2.3, courses in this group help us meet a number of ABET and CSE objectives. Briefly, students are required to design and implement application programs using ideas from calculus, discrete mathematics, formal languages, etc., ensuring that these courses contribute to meeting CSE program outcomes I.i, I.ii, and I.iii and ABET criteria 3a, 3c, and 3e; students work in four-person activity teams in class in CSE 221, work in two-person teams during lecture/activity sessions and closed lab sessions in all three courses, and work in two-person teams on a fairly large project in CSE 321, so these courses contribute to meeting CSE outcomes IV.i and IV.ii and ABET objectives 3d and 3g; there is substantial emphasis on evaluating program correctness both by reasoning and by systematic testing, and frequent discussion of the societal consequences of incorrect software, which contributes to meeting CSE outcomes III.i and III.ii and ABET objectives 3b, 3f, and 3k; in order to do certain lab assignments, students have to learn things on their own (e.g., HTML), thereby contributing to meeting ABET objective 3i; and the range of modern techniques and software engineering concepts that the students work with in these courses help these courses contribute to meeting CSE outcomes V.i and V.iii, and ABET objective 3k.

Students and faculty are generally satisfied with the courses in this group.  However, ideas for changes in the sequence always are being considered as a result of constant monitoring of student reactions via SEIs (Student Evaluations of Instruction), as well as discussions with faculty who teach successor courses (especially CSE 560). 



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 the program.  Section 2.3 explains how the group helps meet a range of ABET and CSE objectives.  Section 2.4 provides information on how we have responded to concerns raised in the previous group report.  Section 2.5 summarizes additional changes that have been made, or are in process, since the previous report, while Section 2.6 summarizes continuing concerns.

2.1 Summary of the courses

CSE 221: Students typically take this course at some point during the freshman year, following their first calculus course and (if necessary) CSE 201 or CSE 202 or EG 167 as a traditional introduction to programming.  The course concentrates on component-based software engineering principles from the client view.  That is, students are presented with off-the-shelf software components provided by us, and they are responsible for modifying and developing application programs to solve various problems by using these components and by extending them with additional functionality.

In order to do this purely from the client view, students must understand the components' behavior entirely from their specifications; they are not given and cannot use knowledge of how the components are implemented.  Two current programming projects involve using a "least cost path machine" component to find cheapest airfares, and using a "natural number" component as the basis for a calculator that works with arbitrarily large natural numbers.  In the process of using these components, students are introduced to some classical CS algorithms (Newton iteration, interval halving, fast powering), some classical specification and programming techniques (design-by-contract, programming-by-difference, recursion), and the first pieces of the RESOLVE/C++ discipline for programming in C++ (abstract and concrete classes, extensions, contract-checking components).  They also learn to read simple model-based formal specifications in order to understand what components do.

CSE 222: This is a continuation of CSE 221 in which the first half still focuses purely on the client view, while the second half introduces the implementer view of components.  The course starts by introducing templates and their two main uses: generalization (e.g., a component that provides sequences not just of characters, like the built-in Text component, but of arbitrary items) and decoupling (e.g., extending the functionality of an existing component in a way that does not introduce a by-name dependency between the new component and the one being extended).  Components introduced here are our versions of standard ADTs for CS2: Sequence, Set, Queue, Stack, Partial_Map, Array, List.  The last project in the first half of CSE 222 is one where the students have to select components that they feel are appropriate for the application, and they must develop the entire application on their own without our advice as to what components should be used or how they should be composed.  Currently, this application is to generate an HTML glossary from a text file that contains terms and definitions, where the glossary must have a hypertext link from each occurrence of a term in some definition, to that term's definition.

In the second half of the course, students are introduced to methods for implementing the components they have used in CSE 221 and in the first half of CSE 222.  For example, currently they implement a Partial_Map component using hashing, by layering over an Array of Queues; and two different List components using "raw C++" pointers.  Additional classical topics of general interest include an introduction to loop invariants, and continuation of the introduction to algorithm analysis started in CSE 221.

CSE 321:  This is a continuation of CSE 222 that reinforces techniques for the implementer with more elaborate examples.  Students in this course explore several new components ranging from the general-purpose Binary_Tree and Sorting_Machine to special-purpose components involved in a fairly large multi-week programming project.  Currently, this project involves developing a compiler for a small Pascal-like programming language that is used to program the behavior of "bugs" in a "Bugs World" game/simulation.  This project makes use of several components related to regular and context-free language processing and code generation as well as components introduced in CSE 222.  Two-person teams that persist for the quarter give students a "mini-team" experience.  There is considerable emphasis on more advanced uses of recursion and on somewhat more sophisticated algorithm analysis, including a comparative treatment of sorting algorithms.

2.2 Relation to rest of the program

The only prerequisites for this sequence (i.e., for CSE 221) are Math 151 "Calculus and Analytic Geometry", and CSE 201 or CSE 202 or EG 167 or other evidence of prior programming experience via AP examination or the CSE placement test.  These prerequisites have been sufficient in general.  

Math 366 "Discrete Mathematical Structures I" is a corequisite for CSE 321.  Although this course has a checkered history because it serves non-CSE students as well as our majors, it appears to be meeting our needs.  

CSE 321 is a prerequisite for the various CSE 459 "Programming Languages for Programmers" courses.  For most of these there is no problem.  However, it has sometimes been reported by students that CSE 459.21 "Programming in C", CSE 459.22 "Programming in C++", and CSE 459.23 "Programming in Java" are assuming too little background of the students who enter that course through CSE 321.  One problem here is that there is an alternate prerequisite for CSE 459.21: CSE 314 "Business Programming with File Processing", which is taken by students in the College of Business in the Information Systems track.  So long as students can come into CSE 459.21 from that path, it seems impossible to make the course sufficiently interesting and useful to students who have come through CSE 321.  Advisors should be reminded to advise students that CSE 459.21 might not be the best choice of CSE 459's for CSE majors.  CSE 459.22 and CSE 459.23 should be revised to build more directly on the background of students coming out of CSE 321.  Still, qualitatively different languages such as LISP and Perl might be better CSE 459 choices to broaden students' language backgrounds.

CSE 321 is also a prerequisite to CSE 560 "Systems Software Design, Development, and Documentation", which is seen from a prerequisite chart to be the keystone course in the entire CSE program.  In CSE 560, students work in 4-5-person groups on 2-3 fairly large systems-programming projects.  They may use any language they wish for these projects.  In particular, they need not use C++ following the RESOLVE discipline.  CSE 560 instructors report, however, that frequently one-third to one-half of the groups use either the RESOLVE discipline, or at least use components from the RESOLVE catalog.

Apparently there are no issues in terms of prerequisite fulfillment for the other courses that directly require CSE 321, namely CSE 625 "Introduction to Automata and Formal Languages" and CSE 670 "Introduction to Database Systems".

2.3 Relation to program outcomes

There are five groups of outcomes for the CSE program.
  1. Students will:
    1. Demonstrate proficiency in the areas of software design and development, algorithms, operating systems, programming languages, information systems, and computer architecture.
    2. Demonstrate proficiency in relevant aspects of mathematics, including discrete mathematics and probability, as well as electrical circuits and devices.
    3. Successfully apply these principles and practices to a variety of problems.
  2. Students will:
    1. Demonstrate an understanding of differential and integral calculus, and of statistics.
    2. Demonstrate an understanding of the basic principles of physics and at least one other laboratory-based science.
    3. Demonstrate an understanding of the basic principles of at least one other engineering discipline in addition to computing and electrical engineering.
  3. Students will:
    1. Demonstrate familiarity with basic concepts and contemporary issues in the social sciences and the humanities.
    2. Demonstrate an understanding of social, professional and ethical considerations related to engineering in general and to computing in particular.
  4. Students will:
    1. Demonstrate an ability to work effectively in teams.
    2. Demonstrate an ability to communicate effectively.
  5. Graduates will:
    1. Find suitable positions in industry and government that offer the prospect of challenging and rewarding careers in computing.
    2. Demonstrate an ability to acquire new knowledge in the computing discipline and to engage in life-long learning.
    3. [Graduates with an aptitude for, and interest in, graduate studies will] Apply to and be accepted for entry by strong graduate programs in computing.
The courses in this group play a key role in meeting both CSE program outcomes as well as ABET Criterion 3 objectives. In Section 2.3.1 we consider the CSE outcomes that this course group helps us meet, and in Section 2.3.2 we consider the ABET objectives.

2.3.1 CSE Outcomes

This group of courses strongly contributes toward meeting CSE objectives I.i and I.iii; moderately toward objectives I.ii, IV.i, and IV.ii; and to a limited extent toward objectives II.i, III.ii, V.i, V.ii, and V.iii.

In all three courses, students are required to demonstrate proficiency in the areas of software design and development and algorithms (I.i), and to apply these principles and practices to a variety of problems (I.iii).  Of course, at this level of the curriculum the designs and algorithms are necessarily rather simple compared to what seniors might encounter.  But the software engineering principles needed to do those larger projects are acquired starting in CSE 221.

In all three courses, but especially in CSE 321, students must demonstrate proficiency in relevant aspects of mathematics, including discrete mathematics (I.ii).  They learn to read and to use formal specifications starting in CSE 221.  These specifications involve several discrete math theories -- sets, strings, functions and relations, graphs -- and, in CSE 321, regular and context-free grammars and languages.

CSE 221 uses a couple lab assignments involving root-finding, in which students use an understanding of differential calculus (II.i).  By emphasizing partner activities in all three courses both in lecture/activity and closed lab sessions, and by having two-person teams do the main CSE 321 project, we give students the opportunity to develop their abilities to work with others in both classroom and laboratory environments (IV.i) and to develop their communication skills (IV.ii).  In fact, all three courses explicitly emphasize that computer science is largely about communication: the study of techniques for making precise and understandable descriptions of things.  That is, the subject matter of CS involves the study of communications between humans/computers and humans/computers in all four combinations; software engineering in particular inevitably requires considerable attention to human-to-human communication which is precise and understandable and (as students learn from the team experiences) civil.  We raise student consciousness of social, professional and ethical issues related to computing (III.ii) by assigning readings in CSE 221 that relate to, e.g., the Y2K problem, licensing of software engineers, and other contemporary issues related to software-system safety; by emphasizing that software must be correct because human lives literally depend on it; and by having students spend considerable effort on systematic testing of their software (e.g., with closed-lab "testing contests" and a variety of homework assignments).  Finally, by emphasizing principles that have withstood the test of time and downplaying current fashion with respect to languages and whiz-bang tools, we support the development of students' successful careers in high-technology computer-related positions (V.i) and their preparation for graduate study (V.iii).  CSE 222 involves three assignments that require students to learn some intermediate HTML, e.g., tables, on their own (V.ii).

The contributions that these courses make toward meeting various CSE outcomes are summarized in the following table:

Course
CSE
I.i
CSE
I.ii
CSE
I.iii
CSE
II.i
CSE
II.ii
CSE
II.iii
CSE
III.i
CSE
III.ii
CSE
IV.i
CSE
IV.ii
CSE
V.i

CSE
V.ii

CSE
V.iii

221
XXX
XX
XXX
X


 
X
XX
XX
X

X
222
XXX
XX
XXX
 


 
X
X
X
X
X
X
321
XXX
XX
XXX
 


 
X
XX
XX
X

X

2.3.2 ABET Criterion 3

Under the current ABET Criterion 3, engineering programs must demonstrate that their students attain:
  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 within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability
  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, economic, environmental, 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 necesary for modern engineering practice.
This group of courses strongly contributes toward meeting ABET criteria 3c and 3k; moderately toward criteria 3a, 3d, 3e, and 3g; and to a limited extent toward criteria 3b, 3f, and 3i.

Section 2.3.1 explains how all three courses contribute strongly to developing the student's ability to design a system, component, or process to meet desired needs (3c), and to use techniques, skills, and modern engineering tools necessary for engineering practice (3k).  It also suggests how they contribute moderately to the student's ability to apply knowledge of mathematics, science, and engineering (3a), and to identify, formulate, and solve engineering problems (3e); and how they contribute in a limited way to the student's ability to function on teams (3d), to the understanding of professional and ethical responsibility (3f), and to the ability to communicate effectively (3g).

In all three courses, the emphasis on systematic reasoning about software behavior, and especially on systematic testing, results in students beginning to develop an ability to design and conduct experiments and to analyze and interpret data (3b).  There is a closed lab in which timing experiments reveal interesting and seemingly anomalous phenomena (e.g., quicksort appears to run slower than selection sort on some inputs) which students must interpret and explain.

All these courses stress the need for, and an ability to engage in, life-long learning (3i) by requiring the students to learn things like HTML on their own in order to do several of the lab assignments.  Moreover, most of the course materials available for all three courses currently read far more like reference manuals than like tutorials when it comes to figuring out how to write programs in RESOLVE/C++.  This is quite like "the real world".

The contributions that these courses make toward meeting various ABET objectives are summarized in the following table:

CSE Course ABET
3a
ABET
3b
ABET
3c
ABET
3d
ABET
3e
ABET
3f
ABET
3g
ABET
3h
ABET
3i
ABET
3j
ABET
3k
221 XX X XXX XX XX X XX   X   XXX
222 XX X XXX X XX X X   X   XXX
321 XX X XX XX XX X X   X   XXX

2.4 Responses to concerns raised in the previous report

Concern: CSE 201 "Elementary Computer Programming" is not an adequate prerequisite for CSE 221.
Response: As coordinator for CSE 201, Dr. Bucci has instituted several changes in the content and the emphasis of CSE 201.  As a result, CSE 201 is now serving quite well as a prerequisite for CSE 221.

Concern:  With respect to CSE 459.22 "Programming in C++", we wrote: "We recommend making the prerequisite just CSE 321 (without CSE 459.21), and beefing up the course to take advantage of the fact that students coming out of CSE 321 already know a good deal about C++.  CSE 459.22 should concentrate on illustrating differences encountered when adopting more traditional ways of using C++, not on the syntax of the language assuming that students haven't seen it before."  
Response: These suggestions have not been implemented.  And now that there is a Java course in the CSE 459 grouping (CSE 459.23), the same suggestions apply to it.

Concern: CSE 680 "Data Structures" should be updated to reflect the fact that students entering CSE 680 are now coming through the new CSE 221/222/321 sequence.
Response: CSE 680 has been revised and updated to CSE 680 "Introduction to Analysis of Algorithms and Data Structures".  The new version of CSE 680 reflects the fact that principles previously taught in CSE 680 are now part of the software spine sequence.  

Concern:  "What we really need to address the staffing problems in these courses is more permanent faculty who can teach them, and it is simply very hard to hire such people in the current market."
Response: Staffing problems for CSE 221/222/321 have been greatly alleviated with the addition of Dr. Paolo Bucci and Dr. Wayne Heym as instructors.  Prof. Long and Prof. Weide, along with instructors Dr. Bucci, Dr. Heym, and Dr. Mathias, are the primary instructors for this sequence.  GTAs are used to teach some sections of CSE 221 and CSE 222.  All such GTAs undergo a quarter of training before being allowed to teach in the sequence.  The department has been generous to the course coordinators of CSE 221 and CSE 222 by assigning some of its best GTAs to CSE 221 and CSE 222; many have won department teaching awards, and one recently won a university teaching award.

Concern: "Despite the prior programming prerequisite for CSE 221, two problems mentioned in Section 1 that we hoped to address -- boredom for relatively advanced students in CSE 221, and a significant "intimidation factor" -- remain problem areas.  There is still an astonishingly wide range of backgrounds and abilities represented in CSE 221."
Response: A wide gap remains in student background and abilities, with resulting cases of boredom and intimidation.  This problem is not unique to OSU's CS1. Even so, progress has been made.  The activity-based, cooperative-learning format of CSE 221 (see next section) allows advanced students to take an active role in helping along students with less background in CS, thus reducing their boredom.  Also, the sense of "learning community" associated with cooperative learning helps to reduce the intimidation factor.  However, as stated in the previous report, "we continue to seek ways to address the wide spectrum of student backgrounds more effectively".

2.5 Additional major changes since the previous report

New course project in CSE 321:  In large part, CSE 321 is a project driven course where students experience the application of component-based software to a larger, non-trivial project.  Previously students developed a simple logic database with query-processing capability.  The project lacked in excitement factor.  Currently students write a compiler for a small language that is used to program "bugs" that live in a "Bug's World".  The game/simulation nature of this project together with a fun graphical interface provide plenty of excitement and motivation for the students. Three of the major components involved in this project are a "tokenizer" component, a "statement" component, and a "program" component.  The project involves four programming assignments and two closed lab assignments.

Activity-based, cooperative learning in CSE 221:  CSE 221 now employs an activity-based, cooperative-learning class format.  Students read "lectures" and answer simple questions for homework, before coming to class.  During class, there is a 5-to-10 minute mini-lecture to highlight the important ideas from the reading and to answer student questions.  Then, in groups of four, students work on paper-and-pencil exercises related to the reading.  The instructor circulates around the classroom interacting with the groups as appropriate.  This format appears to be working well.  Surveys have found that approximately 80% of the students prefer the format to traditional lectures.

New approach to teaching pointers in CSE 222:  All pointer manipulations for RESOLVE/C++ programs are now monitored at run-time by contract-checking components that immediately detect and report all pointer contract violations: dereferencing a null or dead ("dangling") pointer, deleting a dead pointer, or creating a storage leak.  Before checked pointers, some students used to spend countless hours debugging "segmentation fault" and "bus error" messages.  There seems to be much less of this now, judging by the number of students complaining about these lab assignments and by the number of office visits to solve such problems.  The checked-pointers work has been described in a SIGCSE paper (available from the CSE 221/222/321 home page).

Monitoring precondition violations:
 Au04 has brought a new investigation that leverages some unique capabilities of contract-checking components.  All the components used in this course sequence -- including the built-in RESOLVE/C++ types such as Integer and Text as well as pointers -- automatically detect component contract violations by the client and immediately report them to the programmer.  For example, if a student divides by zero, tries to pop from an empty stack, etc., there is a contract violation: the precondition of the operation was violated at the point of the call.  The new twist is that we are now logging all such violations for off-line analysis.  This project combines software engineering and education research.  One objective is to analyze the classes of errors students make in using carefully-specified components; for the research aspect, we have an approved human-subjects protocol.  A more immediate pedagogical objective is to identify quickly students who are making many errors on a lab assignment, or who are continually making the same kinds of errors, in order to intervene long before the assignment could be graded and returned.  It should also be possible to identify students who are not making any such errors, which could indicate any number of things (good and bad).  This project is in the initial data-collection and tool-development stage.  By the end of 2004, it should be possible to start analyzing data from Au04.  Starting in Sp05 or Su05, some direct intervention techniques might be ready for trial.

2.6 Continuing concerns

Students in the CSE 221/222/321 sequence are required to adhere to a well-developed discipline for software design and development. Programs that result from following this discipline differ from traditional C++ programs. As a result, some students experience difficulty transitioning to the world of "normal" C++ programming. We need to find ways to smooth this transition for the students.

We would like to integrate more current topics of interest into the sequence. In several instances, we believe this will be easy to do. For example, we would like to introduce XML in connection with our coverage of context-free languages. Some of the programming assignments in CSE 222 provide good opportunities for students to write and use CGI scripts. The larger project in CSE 321 can be used to introduce students to socket programming.


3. Conclusions

The Software Spine group is a key component of the CSE program and helps us meet a number of outcomes 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
221
Long Bucci, Heym, Long, Mathias, Weide; various GTAs
222 Weide Bucci, Heym, Mathias, Weide; various GTAs
321 Long Bucci, Long

People involved in preparing report: Paolo Bucci, Wayne Heym, Tim Long, David Mathias, Bruce Weide.

Date of report: October 2004 


 
Tim Long

October 2004.