PROJECT TITLE:

Experimental Evaluation of Software Engineering Methodologies and Technologies

PROJECT ADVISOR:

David Klappholz and Larry Bernstein

Purpose:

Over the years numerous writers, researchers, and software vendors have proposed myriad methodologies and technologies for use in the software development process. A simple example of competing methodologies is Structured Analysis with its Structured Analysis Diagrams on the one hand and Object-Oriented Analysis with its UML Diagrams --thirteen different varieties at last count-- on the other. An equally simple example of computing technologies is Sun's Java/Corba and Microsoft's COM, both intended for use in the development of distributed software. In both cases, that of methodologies and that of technologies, important adoption decisions are often made on the basis of anecdotal evidence. It is not surprising, however, that is the case; while it would be beneficial to experimentally test newly-introduced methodologies and technologies, both individually and comparatively --on such metrics as steepness of learning curve, productivity once mastered frequency of software defects-- it is virtually impossible to do so in an industrial/commercial setting; the cost of developing software is so great that repeating the experiment of developing a software product, using different methodologies/technologies, is all but impossible.

Approach:

In the context of a Software Engineering course at a university, it is, however, possible to repeat software development experiments, at least on small to medium-sized project, sufficiently many times to produce statistically significant answers to interesting questions. We will set up an experimental infrastructure to perform software engineering evaluations as a research objective. The merits and advantages of specific software engineering approaches for the design of distributed computing systems will be identified and shared with industry.

Status:

Experimental Research on Software Engineering Process, Technology, and Pedagogy

We are revising the curriculum for CS460-461, the required senior-level course in Software Engineering, with an eye toward instrumenting the courses for the purpose of acquiring experimental data relating to software engineering method, process, and pedagogy as a byproduct of the year-long design and implementation projects in which CS460-461 students engage.

Issues being studied include the relative efficacies of competing software engineering methods and processes, and the efficacies of different pedagogical approaches toward teaching the course, issues which are all-too-frequently discussed impressionistically, but rarely with strong experimental support.

The novelty of our approach is that in the setting of this course sequence, with 5-10 project groups each time the sequence is offered, and with each sequence being offered multiple times, it will be possible to run experiments with sufficient numbers of repetitions to obtain statistically significant results. We plan to recruit other universities into a Consortium for Experimental Software Engineering Research, so that experiments with even larger repetition factors can be performed. To date negotiations are underway for collaboration with Software Engineering faculty at Rutgers University, the University of Maine, and the University of Southern California.

The following is the description of a pedagogy experiment currently underway:

The typical Computer Science student who has had no industrial experience, even if -- or, perhaps, especially if -- he or she has had great success in personal software development projects, is entirely unaware of the process-related know-how required to successfully utilize technical skills in group software projects; in fact, many students will even deny the existence of anything but technology expertise as a requirement for success in group software development.

One begins to understand the reason by noting that the typical Computer Science student is oriented towards the solution of problems which provide immediate feedback; for example, the correctness of a small code module written to a given simple specification is easily tested by compiling and executing it with sample data; the validity of the solution to a simple quantitative problem is often directly verifiable through substitution of the result into the specification of the problem. The typical computer science student is probably considerably above the population average at solving such problems. 
The typical Computer Science student is probably not, however, particularly oriented toward, or endowed with more than average talent at, the solution of problems in psychology or group dynamics. In fact, it may very well be the case that the typical Computer Science student is endowed with less-than-average talent in these areas. As a result, the student often defensively views a course designed to teach the principles of software process as irrelevant or trivial, and of no use to those with highly specialized technological expertise. In the worst case students resent being required to take such a soft course.

In order to quickly convince students that if a group software project is to be successful, there actually is something to be learned over and above the relevant technology, we plan to devote the first month or so of the Stevens Senior Project/Software Engineering course (CS460-461) to a Naive Software Development Project, i.e., a project which will shock them into the necessity of software process. At the first meeting of the course students will be divided into groups of approximately ten and will be given (rough) specifications of a software project which they will be required to complete in a month -- without benefit of any training in software development process.
In order to test the pedagogical effectiveness of this approach, students are being surveyed through the use of questionnaires. Students are filling out questionnaires:

*on the first day of the course, to determine students' backgrounds/knowledge of, both software technology and software process, and their expectations of (and prejudices about) the course.
*at the end of the Naive Software Development Project to determine the extent of students' increased awareness/appreciation of the need for software process

Related Publications: