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:
- The use of component-based software engineering for the philosophical,
theoretical, and technical bases of the sequence.
- The integrated and unified nature of the course sequence.
- 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
- 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.
- 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.
- 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.
- Students will:
- Demonstrate
proficiency in the areas of software design and development, algorithms,
operating systems, programming languages, information systems, and computer
architecture.
- Demonstrate proficiency in relevant aspects of
mathematics, including discrete mathematics and probability, as well as electrical
circuits and devices.
- Successfully apply these principles and practices to a variety of problems.
- Students will:
- Demonstrate an understanding of differential and integral calculus, and of statistics.
-
Demonstrate an understanding of the basic principles of physics and at least one other laboratory-based science.
- Demonstrate an understanding of the basic principles of at least one
other engineering discipline in addition to computing and electrical engineering.
- Students will:
- Demonstrate familiarity with basic concepts and contemporary issues in the social sciences and the humanities.
- Demonstrate
an understanding of social, professional and ethical considerations related
to engineering in general and to computing in particular.
- Students will:
- Demonstrate an ability to work effectively in teams.
- Demonstrate an ability to communicate effectively.
- Graduates will:
- Find suitable positions in industry and government that offer the prospect of challenging and rewarding careers in computing.
- Demonstrate an ability to acquire new knowledge in the computing discipline and to engage in life-long learning.
-
[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:
- an ability to apply knowledge of mathematics, science, and engineering
- an ability to design and conduct experiments, as well as to analyze and interpret data
- 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
- an ability to function on multi-disciplinary teams
- an ability to identify, formulate, and solve engineering problems
- an understanding of professional and ethical responsibility
- an ability to communicate effectively
- the broad education necessary to understand the impact of engineering
solutions in a global, economic, environmental, and societal context
- a recognition of the need for, and an ability to engage in, life-long learning
- a knowledge of contemporary issues
- 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.