Class hours: Tues & Thurs 2:00pm - 3:15pm Room: CSIC 2120
Prerequisites: CMSC 430, or equivalent, or permission of the instructor
This core course is about techniques for analyzing and understanding software artifacts. Ultimately, the goal of this area of study is to improve the quality of software. In this course, we will cover three related areas of programming language research:
1. Static analysis. This is the main focus of this course. Static analysis is the name for any automatic technique that reasons about a program's source code. Abstract interpretation underlies any practical static analysis tool. We will discuss data flow analysis, the classical technique used in optimizing compilers. We will also study type systems, which have been gaining popularity in program analysis recently, theorem proving, which can perform deep reasoning about software, and model checking, which has traditionally been applied to hardware. In addition to static analysis, we will also look at dynamic program analysis techniques and the interaction between static and dynamic analysis.
2. Formal systems. In order to develop techniques for analyzing software, we must agree on a notation for talking about programs. We will discuss lambda calculus, which is a convenient archetypical programming language to study. And we will use techniques from axiomatic, denotational, and operational semantics as a foundation for reasoning about programs. In all cases, our study of formal systems will be undertaken with the goal of developing practical tools and ideas.
3. Programming language features. The presence or absence of features in a programming languages greatly affects techniques for analyzing and understanding programs written in that language. In order to enlarge our view of programming, we will look at standard imperative programming, functional programming, and object-oriented programming. We will also study memory management in programming languages and other features such as polymorphism.
Expectations: Course work will include reading assignments, graded homeworks, programming assignments, a final exam, and a course project.
Comps: Yes, to all
Sub area: Software and Programming Languages
Previous Class pages:
http://www.cs.umd.edu/class/fall2004/cmsc631/>
http://www.cs.umd.edu/class/fall2003/cmsc631/
Class hours: Tues & Thurs 11:00am -12:15pm Room: CSIC 3120
Prerequisites: CMSC 435; and STAT 400 or permission of the instructor
Empirical software engineering offers quantitative and qualitative methods for building models of the software processes and products. These models provide insights into the relationship between how software is developed and what is produced. The course discusses the practical aspects experimentation, data collection and analysis, parametric model building, evolving knowledge based upon the analysis and synthesis of data from controlled experiments, case studies, and qualitative analysis. Examples are given of resource, defect, process, and product modeling. A variety of studies and examples will be given to illustrate the ideas. There will be 6 homework assignments, ranging from analyzing a paper in the literature to critique its empirical analysis to developing a study to empirically explore the effects of some technology. There will be a final exam.
Comps: Yes, to all
Sub area: Software Engineering and HCI
Previous Class pages:
http://www.cs.umd.edu/class/fall2004/cmsc735
http://www.cs.umd.edu/class/fall2002/cmsc735
http://www.cs.umd.edu/class/fall2001/cmsc735
Class hours: Mon & Wed 2:00pm - 3:15pm Room: CSIC 3120
This course will survey rigorous approaches to establishing that software behaves correctly. Topics to be studied include formal specification techniques (temporal logic, pre-/post-conditions, state machines, etc.); methods for proving that systems meet specficiations (logic, model checking); and strategies for testing (white-box, black box, coverage criteria).
The course will be discussion-oriented and will use readings from the research literature as well as notes handed out by the instructor as materials. It is a great way to learn about what's going on in software V&V research!
Comps: PhD qualifying; not MS qualifying; not MS comp
Sub area: Software and Programming Languages
Class hours: Tues & Thurs 11:00am - 12:15pm Room: CSIC 3118
What is software engineering research?
All software begins with an idea. Software engineering is the theory and practice of taking that idea, creating software, and then maintaining that software as ideas and users evolve. Software engineering research aims to understand and improve the software engineering process.
Have you worked with code that degraded in quality over time? Code that no one understands? Code with too many bugs from the very beginning? Different programs that should work together nicely yet somehow don't? Software engineering researchers search for solutions to these and other problems, via new methods and tools.
How is this course organized?
This course is an introduction to software engineering research. This offering will be very similar to the Spring 2005 offering of CMSC 838P, except that it will have a larger emphasis on software design. As in the Spring 2005 version, this offering will survey software engineering topics using an idealized software engineering process as a template. This process includes: determining what the software is supposed to do, designing and implementing software, testing and inspecting software, and handling change. At the end of the semester, we'll look at exciting new areas of research: aspects and modularity, DSMs, application of real options theory to software engineering decision making, softawre evolution analysis, and more.
How does this course meet graduate requirements?
This course will meet all comps requirements. Students will read and review papers, make a presentation, take a final exam, work on a research project, and write a high-quality project report.
Who should take this course?
Everybody! This course will be a great introduction or opportunity to reflect on the field of software engineering research. The course content will be useful to anyone who intends to build software here at Maryland or elsewhere. There will be flexibility with course project topics.
Sub area: Software Engineering and HCI
Comps: PhD qualifying; MS qualifying; MS comp: Final
Class hours: Tues & Thurs 9:30am - 10:45pm Room: CSIC 3118
Office hours: Tues & Thurs 11am-noon Room: AVW 3177
Prerequisites: CMSC420 or CMSC434 or permission of instructor. Students from diverse majors are encouraged (e.g. ENGR, PSYC, CLIS, BMGT)
Topics: What is information visualization? How is it related to scientific visualization? How does it combine with data mining? Dozens of innovative visualizations for 1-, 2-, 3-, and multi-dimensional data have been proposed, along with creative designs for temporal, hierarchical, and network data. This seminar will examine the design alternatives (fisheye, overviews, dynamic queries, etc.), algorithms and data structures, coordinated views, plus human factors evaluations of efficacy for a variety of tasks and users.
Students will read current literature and conduct collaborative projects to design, implement, and/or evaluate existing or novel visualizations. Mid-term and final exams will be given, so the course qualifies for MS and PhD comps.
Homework: Students will read, present and critique papers. Students will use existing information visualization tools, such as Spotfire, TimeSearcher, HCE, and Treemaps 4.0 to build useful visualizations on data sets, then conduct a major team project to create or extend an information visualization to deal with a realistic problem.
Readings: Key papers will be assigned for reading, including chapters of "Illuminating the Path: The Research and Development Agenda for Visual Analytics" http://nvac.pnl.gov/agenda.stm
Sub area: Software Engineering and HCI
Comps: PhD qualifying; MS qualifying; MS comp: Midterm + Final
Previous Class pages:
http://www.cs.umd.edu/class/spring2005/cmsc838s/
http://www.cs.umd.edu/~bederson/classes/infovis/index.html
http://www.cs.umd.edu/class/spring2002/cmsc838f/
http://www.cs.umd.edu/class/spring2001/cmsc838b/