Back to Home Page


The Educational Software Process


What is the ESP?

The Educational Software Process is loosely based on the Personal Software Process (PSP) (Watts-Humphrey, ), but has been revised and simplified for an educational environment.  It outlines a process and a framework for a novice programmer to develop the skills and knowledge to be considered a competent, maybe even expert, programmer.  It currently consists of a series of prescriptive recommendations and
 

Why use the ESP?

The current undergraduate curriculum of Georgia Tech's College of Computing has a comprehensive coverage of computing knowledge.  Students develop a good base of programming languages, acquire some practice in small and large scale design, and learn how to develop programs that perform a task.  However, we have observed that graduating students have not necessarily acquired good programming skills and practices.  Frequently, their programs can't be reused, maintained, or extended.  In order to become a skilled programmer or software engineer, a student must have a good understanding of proper programming practices, good design skills, and good metacognitive skills that encourage reflection and introspection.

Our experience also leads us to believe that the critical period in developing good skills occurs outside of the labs and classrooms. Students don't spend enough time with a TA coach or mentor to get good feedback on their performance.
 

Goals

The overall goals of ESP are to:

Methods

ESP takes two approaches to developing and improving programming skills. The first approach takes a lot of hard experience and presents it to the students in a simplified and formalized format. There are many techniques and tricks that expert programmers know or do, but are usually acquired either by observing other expert programmers or reconstructing them during some laborious programming task. The second approach is a process-oriented approach that encourages students to reflect on their programming activity during and after the task and requires them to collect data about their own activities.

Levels

Because students have different levels of knowledge and development, we have adopted Carnegie Mellon's approach used in the Capability Maturity Model and outlined six levels that we expect students to progress through while going through the curriculum.  When implemented, students will eventually make a self-assessment about their current level and once they have met some criteria (not established yet) and have been evaluated by some ESP guru, they are allowed to advance to the next set of processes.  Because the process acknowledges that skills can be difficult to acquire, the advancement process is only loosely coupled to the academic year that the student has completed.  A student can potentially advance from Level 3 to 5 in a year and a half, rather than the two years that the level implies.  Likewise, a student with very little interest in the top-level views of software development may never progress to Level 4 by choice.

ESP Level 0 - Novice programmer

ESP0 is designed for students learning basic programming constructs. ESP0 is designed with three purposes in mind. The first is to accustom students to making predictions and taking metrics without interfering too much with the task at hand. The second purpose is to make students more aware of expenditure of effort. The third is to ensure that students are spending the proper amount of time in planning and thinking through a problem before actually writing code.

At this level, the student is asked to record time estimations for the design, coding, and debugging stages. Then, the student will complete the assignment. Afterwards, the student will record actual time spent for the design, coding, and debugging stages.

ESP Level 1 - Introductory programmer

ESP1 is designed for students learning how to program in their first programming language. At this level, introductory students are using a compiler or interpreter for the first time to run their code. ESP1 was designed with two purposes in mind. The first is to introduce students to good programming practices, such as programming style, debugging skills, and code reviews. The second is to make students think about their mistakes and learn from their mistakes.

There are four themes throughout ESP1. The first is to ensure that a concept works the way you think it does. The second is to break up a large problem into many of easier-to-solve smaller problems. The third is to reduce complexity by keeping things as simple and easy to understand as possible. The fourth is to plan what you are going to do, complete your tasks in a consistent and methodical manner, and then assess how you did.

At this level, the student is asked to keep a time recording log more formalized than that in ESP0. Also introduced at this level is a simplified version of the defect recording log, a simplified version of detailed design, the code framework checklist, the code construction checklist, the code review checklist, the debugging checklist, and process review. Effort estimation (in terms of time) is based on the number of routines in a module.

ESP Level 2 - Intermediate programmer

ESP2 is designed for students that have some experience with coding. ESP2 focuses more on tracking time and errors, and on completeness and efficiency of designs.

Introduced at this level are the High-Level Design Checklist, High-Level Design Review Checklist, Unit Testing Checklist, and Integrated Testing Checklist. The defect recording log is also augmented to record where an error was injected.

ESP Level 3 - Experienced programmer

ESP3 is designed for students with significant experience with coding in multiple programming languages. ESP3 focuses on predictable effort estimations, as well as complete and efficient designs. ESP3 also focuses on software engineering processes (such as configuration management, reusability, etc.).

At this level, the student is asked to make more well-defined predictions. The effort estimation at this level is based on Lines of Code (which is based on estimation and on past experience).

ESP Level 4 - Novice software engineer

To be more clearly defined.

Level 5 - Introductory software engineer

ESP Programming Activities

All software engineering lifecycle models have some series of stages required for a program to go from design to completion.  We've taken some of the basic elements of these models, combined them with stages obtained from Watts-Humphrey's PSP, and added one of our own.  Some of these activities

Implementing the ESP

 


Summer 1997 Implementation

We introduced the ESP process into the Introduction to Programming Course offered by the College of Computing at Georgia Tech, which used Java as its base language.  For this iteration of the ESP, we required the students to track the following items: design, the amount of time to complete an assignment, the kinds of errors they discovered during their program, and a self-analysis form describing the general outcomes of their experience.  The forms were made available in Microsoft Word with the expectations that students would be programming in Java on a Windows machine and could alternate between both applications to fill in the information when relevant. Students were required to submit these forms electronically in addition to their assignment.  No forms were required for the first program.  The forms represented a fraction of their grade and students received full credit if the forms were submitted.  They were not graded on the quality of their submissions or on the content.  We didn't want to hold everyone to some standard that we did not have clarity about.  In other words, a good programmer may have been able to complete some assignment in under X hours.  However, it would be unfair to penalize a student who recorded X+3 hours to complete because they did not take some "optimal" time.  We also wanted to remove any incentives to misreport the numbers in hopes of better treatment from the TAs.

Results of the Implementation

  1. Implementation of the Forms Poor - We encountered numerous problems with using the forms in Microsoft Word format.  Essentially, they were a poor choice of medium to implement the ESP.
  2. Students didn't distinguish between different programming activities - In the Time Log, a good number of students didn't record absolute stages.  Instead they would claim to have spent 1 hour designing, coding, and debugging a particular class, for example.  There are two inferences that can be made here.  One is that the students did not understand the programming process as described in class as being a set of individual activities that follow on one another.  The other is that the novice programmer doesn't know how to make distinctions of that kind yet.  For example, if a programmer adds a class, that is clearly a change in design.  On the other hand, if the programmer changes how an algorithm performs in the middle of coding, they are sort of redesigning the program but not in the same way that the Design activity describes.  It's possible that those students saw an activity as all stages that got a piece of code to work.
  3. Granularity unclear - There were some heated arguments from the students about how low the granularity needed to be when reporting times or "nontrivial" errors.  This especially became relevant for programs that took longer than 8 hours.  Does a 2 minute activity have any more significance out of 4800 minutes?  On the other hand, if the program only took 5 hours, does the student or the TA learn anything from the student's reporting of 1 hour spent in 5 activities?  Lastly, in order to report a fine granularity, the student has to disrupt the programming activity many times, creating more work in the long run.
  4. Students misreporting - For various reasons, students misreported their data.  One common form of misreporting had to do with the post-program activity of filling in estimated times, rather than exact times.  This data, while useful for estimating average class times, is almost useless for serving its original purpose; to guide the individual to making more accurate time estimations and becoming more aware of how they spend their time.  Another form of misreporting had to do with students attempting to meet someone's expectations.  No direct expectations were communicated.  However, students believed that their grades were affected by the numbers they reported.  They would inflate their times in hopes of getting more sympathy from the TA (usually when the program didn't work) or they would estimate some optimal time and show that they had completed their program within the optimal range in hopes of getting better grades.
  5. Data Analysis difficult - Given the confounds already described, the data analysis already becomes a fairly difficult process.  Even after throwing out the outliers and seemingly bogus data, the following problems came up.  For example, students who reported doing code review and research showed a significant difference in their ability to code "efficiently."  I use the term efficiently to mean that they spent a smaller percentage of their time in making changes to their design or fixing code.  On the other hand, students who didn't do code review or research finished their programs in less time, on average.  The reason for this result is that expert programs skipped those steps and finished their programs rapidly.  Weaker programmers would report doing those activities, possibly out of desparation, but also showed times that were 1.4x the class average.  Either way, it would be difficult to claim that the ESP served its intended purpose.
  6. Teaching Assistants insufficiently prepared to support ESP - We did not spend an adequate amount of time preparing the teaching assistants to support the students in conducting their ESP activities.  This made it difficult for Teaching Assistants to provide feedback about how students could be altering their programming behavior to make improvements, based on the data they were observing.
  7. Course did not integrate ESP sufficiently - We went to great lengths to ensure that the ESP was integrated into the course structure.  However, the course structure didn't spend a lot of time discussing the particulars of the programming process but rather on the details of implementing the language.  If the latter is unavoidable, then we need to rethink how much of ESP can be deployed at this stage in the curriculum.

Research Issues


Future Implementation Directions