CMSC 838P Spring 2004

Software Engineering: Remote Analysis and Measurement of Software Systems


Instructor Adam Porter
CSI 2120 TuTh 9:30pm-10:45pm

Class requirements will primarily be a mid-term, a final, active class participation (including at least one presentation), and a research project. The results of the research project will be captured in a publishable-quality report. 

This course will count towards the various comprehensive exam requirements. There will be a midterm, a final, and a term paper/project.

 I will not assume (nor require) that students have a background in software engineering before taking this class

Click here for weekly Reading Assignments

Click here for instructions on writing and submitting reviews for each reading assignment

Click here for reading schedule.

Dynamic analyses, such as testing, performance monitoring, and usage profiling, play a key role in state-of-art approaches to software development and quality assurance. With rare exception, these analyses are performed in-house, on developer platforms, using developer-provided input workloads. A benefit of in-house analyses is that programs can be instrumented and analyzed at very fine levels of detail since the developers have unrestricted access to the software. The shortcomings are severe, however, including:

The situation has only worsened with the growth of the Internet and the emergence of ubiquitous computing. First, the widespread use of computer systems has caused a dramatic increase in the demand for software, forcing many companies to shorten their software development time and to release software without performing adequate analysis and testing. Second, many of today's software products are run in very complicated and varying environments, and it is often impractical to analyze and test these software products under all possible runtime environments and configurations before releasing them.

There is a need to develop techniques and tools to bridge the existing gap between the way software is analyzed in-house and the way it is used in the field. We believe that those techniques and tools will save a great deal of time, effort, and resources throughout the software industry.

Consequently, we will explore how to achieve the following objectives:

This course will be logically divided into two, roughly-equal, sections.

  • The first section will be a basic introduction to the field of software engineering.  Consequently, I will not assume (nor require) that students have a background in software engineering before taking this class.  We will discuss the tasks that make up the software lifecycle. These include: requirements analysis, design, coding, testing, and evolution. Finally, we will survey current research in each of these areas.
  • The second section will examine recent research aimed at improving some software lifecycle activity. In particular we will focus on how these activities must change to support internet-scale software development.

This course will count towards the various comprehensive exam requirements. There will be a midterm, a final, and a term paper/project.-