CS 272 - Software Engineering
Fall 2018
Celebrating 50 Years of Software Engineering Research!
Course Description
Origins of software engineering as a research area goes back to a NATO
conference that was held in 1968. 50 top computer scientists, programmers
and industry leaders met at this conference to find a way to solve the
software crisis:
Large software systems often do not provide the
desired functionality, they take too long to build, they cost too much to
build, they require too much resources (time, space) to run, and they cannot
evolve to meet changing needs.
The term software engineering was
first used in this conference to indicate the need to find a systematic,
disciplined, quantifiable approach to the production and maintenance
of software. Software engineering has been an active area of research
for 50 years motivated by the goals identified in this conference.
In this class we will discuss a collection of influential and impactful
software engineering research papers and tools in order to provide an
overview of software engineering research.
Instructor:
Tevfik Bultan
(bultan@cs.ucsb.edu, Phone: x3735)
Office Hours:
Tuesday-Thursday 10:00PM-11:00PM at HFH 2123
Class Webpage: URL:
http://www.cs.ucsb.edu/~bultan/courses/272/
Lectures:
Tuesday/Thursday 11:00AM-12:50PM, PHELP 2510
Course Work
- Reading Assignments:
Students will be required to read the papers discussed
in the class.
- Homeworks:
There will be 4-5 homeworks.
- Class Projects: Students (as two-student-teams)
are required to do a class project.
The class project can either be a survey on a current research area in
software engineering, a tool based project which will be a case study or
an experimental evaluation using an existing software engineering research
tool, or a research project that extends an existing tool or implements a tool based on the
topics we discuss in the class.
You can use
DBLP
and
Google Scholar
to search for publications on different topics.
You can also look at papers in software engineering conferences ICSE, FSE, ESEC/FSE, ASE and ISSTA and
software engineering journals
IEEE TSE and ACM TOSEM.
- Survey projects: If you choose this option you are required to write a
survey paper. To write a survey paper you have to choose
a research topic related to one of topics we will discuss in the class.
You need to identify at least 10 research papers on the topic you chose and
read them. Your survey paper
should explain the results in these papers and how they relate to each other.
- Tool-based projects:
If you choose this option you are required to conduct a case study or an experimental evaluation
of one of the software engineering research tools we discuss in the class or a related tool.
You need to install the tool and find a software system or a set of programs that the tool can be used
for. You need to write a final report explaining
your findings. Your report should explain the application, the results,
and evaluate the tool you used.
- Research projects:
If you choose this option you are required to
either (1) implement an extension to one of the tools we discuss in the class
or a related tool, or (2) implement a tool related to one of the topics
we discuss in the class.
You need to write a final report explaining
the tool you built.
Deliverables for projects (list the team members and the project name in each one, return the printed hard copy in class on the due date):
- Project description (Extended: due October 16th): One page description of the project.
For surveys identify the area you plan to survey and list several related papers.
For tool based projects identify the tool you are you planning to use and what type of software system you are
planning to apply the tool to. For research projects identify the tool you plan to extend and give the general
idea about how you plan to extend it or identify the technique you plan to implement as a tool.
- Progress report (due November 8th):
Prepare a 3-5 page progress report about your project. In the progress report you should explain the topic of your study, and discuss your findings so far.
- Final report (due December 14th, noon): You will need to turn in a final project report (should be about 10 pages, could be longer for survey papers) at the end of the quarter. Please drop a hard copy either at my office or in my mailbox.
- Project presentation (December 12th, noon): Give a 15 minute project presentation (with slides) at the end of the quarter.
Reading Assignments and Lectures
- Week 0
- Week 1
- Week 2
- Week 3
- Tuesday: Lecture 5: Design by Contract and Runtime Contract Monitoring
- Thursday: Lecture 6: Java Modeling Language and Extended Static Checking
-
``An overview of JML tools and applications.''
Lilian Burdy, Yoonsik Cheon, David R. Cok,
Michael D. Ernst, Joseph R. Kiniry, Gary T. Leavens, K. Rustan M. Leino, and Erik Poll.
In International Journal on Software Tools for Technology Transfer, 7(3):212-232, June 2005.
-
``Extended static checking for Java.''
Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe, and Raymie Stata.
In Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language
Design and Implementation (PLDI 2002).
- Week 4
- Tuesday: Lecture 7: Hoare Logic and Weakest Preconditions
-
"An Axiomatic Basis for Computer Programming,”
C. A. R. Hoare,
Communications of the ACM, vol. 12, no. 10, pp. 576-583, 1969
-
“Guarded Commands, Nondeterminacy and Formal Derivation of
Programs,”
E. W. Dijkstra, Communications of the ACM, vol. 18,
no. 8, pp. 453-457, 1975
- Thursday: Lecture 8: Data Model Verification
- Week 5
- Week 6
- Tuesday: Lecture 10:
Symbolic Execution
-
"DART: Directed Automated Random Testing,"
Patrice Godefroid, Nils Klarlund, and Koushik Sen,
In Proceedings of the
ACM SIGPLAN 2005 Conference on Programming Language Design and Implementation (PLDI 2005).
-
"CUTE:
A Concolic Unit Testing Engine for C"
Koushik Sen, Darko Marinov, Gul Agha.
European Software Engineering Conference and Symposium on the
Foundations of Software Engineering (ESEC/FSE 2005).
-
Symbolic PathFinder: integrating symbolic execution with model checking for Java bytecode analysis.
Corina S. Pasareanu, Willem Visser, David H. Bushnell, Jaco Geldenhuys, Peter C. Mehlitz, Neha Rungta.
Autom. Softw. Eng. 20(3): 391-425 (2013)
-
Z3: An Efficient SMT Solver.
Leonardo Mendonça de Moura, Nikolaj Bjørner.
TACAS 2008: 337-340
- Thursday:
Lecture 11: Fuzzing.
- Week 7
- Tuesday Lecture 12:
Automated Debugging
- Thursday:
Lecture 13:
Dynamic Invariant Discovery
-
``Dynamically discovering likely program invariants to support
program evolution,’’
Michael D. Ernst, Jake Cockrell, William G.
Griswold, and David Notkin. IEEE Transactions on Software
Engineering, vol. 27, no. 2, Feb. 2001, pp. 1-25.
-
``Quickly detecting relevant program invariants,’’
Michael D.
Ernst, Adam Czeisler, William G. Griswold, and David Notkin.
ICSE 2000, Proceedings of the 22nd International Conference on
Software Engineering, pp. 449-458.
-
"Static verification of dynamically
detected program invariants: Integrating Daikon and ESC/Java."
Jeremy W. Nimmer, Michael D. Ernst.
Electr. Notes
Theor. Comput. Sci. 55(2): 255-276 (2001)
- Week 8
- Week 9
- Tuesday Lecture 15:
Runtime Monitoring
- Thursday Lecture 16:
Automating Software Engineering Tasks with Automated Logic Solvers
-
"ViewPoints: differential string analysis for discovering client- and server-side input validation inconsistencies."
Muath Alkhalaf, Shauvik Roy Choudhary, Mattia Fazzini, Tevfik Bultan, Alessandro Orso, Christopher Kruegel.
ISSTA 2012: 56-66.
-
Data Model Property Inference, Verification, and Repair for Web Applications.
Jaideep Nijjar, Ivan Bocic, Tevfik Bultan.
ACM Trans. Softw. Eng. Methodol. 24(4): 25:1-25:27 (2015)
-
Finding access control bugs in web applications with CanCheck.
Ivan Bocic, Tevfik Bultan.
ASE 2016: 155-166
- Week 10
List of Topics and Papers
The following list is subject to change.
- Specification and Verification
- Design by Contract
-
"Applying Design by Contract,"
B. Meyer, IEEE Computer, October 1992, pp. 40-51.
-
An overview of JML tools and applications.
Lilian Burdy, Yoonsik Cheon, David R. Cok,
Michael D. Ernst, Joseph R. Kiniry, Gary T. Leavens, K. Rustan M. Leino, and Erik Poll.
In International Journal on Software Tools for Technology Transfer, 7(3):212-232, June 2005.
-
``Extended static checking for Java.''
Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe, and Raymie Stata.
In Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language
Design and Implementation (PLDI 2002).
- Program Verification
- "Bandera:
extracting finite-state models from Java source code"
C. Corbett, Matthew B. Dwyer, John Hatcliff, Shawn Laubach,
Corina S. Pasareanu, Robby, Hongjun Zheng.
Proceedings of the 22nd International Conference on Software
Engineering, 2000.
-
"Model Checking Programs."
W. Visser, K. Havelund, G. Brat, S. Park.
In Automated Software Engineering Journal
Volume 10, Number 2, April 2003.
-
"Modular Verification of Software Components in C"
S. Chaki, E. Clarke, A. Groce, S. Jha, H. Veith.
2003 International Conference on Software Engineering (ICSE 2003).
- "Application
of Design for Verification with Concurrency Controllers
to Air Traffic Control Software"
Aysu Betin Can, Tevfik Bultan, Mikael Lindvall, Benjamin Lux,
Stefan Topp. International Conference on Automated Software Engineering (ASE 2005).
- "Verifying Multi-threaded Software using SMT-based Context-Bounded Model Checking"
Lucas Cordeiro and Bernd Fischer.
33rd International Conference on Software Engineering (ICSE 2011).
- Testing
-
"Software Assurance by Bounded Exhaustive Testing,"
D. Coppit, J. Yang, S. Khurshid, W. Le, and K. Sullivan.
IEEE Transactions on Software Engineering (TSE), Volume 31, Issue 4, Pages 328-339, April 2005.
-
"TestEra: A Novel Framework for Automated Testing of Java Programs."
D. Marinov and S. Khurshid. 16th IEEE Conference on Automated Software Engineeri
ng (ASE 2001), San Diego, CA. Nov 2001.
-
"Korat: Automated Testing Based on Java Predicates"
Chandrasekhar Boyapati, Sarfraz Khurshid, Darko Marinov.
International Symposium on Software Testing and Analysis
(ISSTA 2002).
-
"Scalable
Automatic Test Data Generation from Modeling Diagrams"
Yannis Smaragdakis, Christoph Csallner.
International Conference on Automated Software Engineering (ASE 2007).
-
"Randoop: feedback-directed random testing for Java"
Carlos Pacheco, Michael D. Ernst.
22nd Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems,
Languages, and Applications (OOPSLA 2007).
-
"Invariant-Based
Automatic Testing of AJAX User Interfaces"
Ali Mesbah, Arie van Deursen.
31st International Conference on Software Engineering (ICSE 2009).
-
Test Generation through Programming in UDITA
Milos Gligoric, Tihomir Gvero, Vilas Jagannath, Sarfraz
Khurshid, Viktor Kuncak, Darko Marinov.
32nd International Conference on Software Engineering (ICSE 2010).
-
"Programs, Tests, and Oracles: The Foundations of Testing Revisited"
Matt Staats, Michael W. Whalen, and Mats P.E. Heimdahl.
33rd International Conference on Software Engineering (ICSE 2011).
- Symbolic Execution
-
Generalized Symbolic Execution for Model Checking and Testing.
Sarfraz Khurshid, Corina S. Pasareanu, Willem Visser.
TACAS 2003: 553-568
-
"DART: Directed Automated Random Testing,"
Patrice Godefroid, Nils Klarlund, and Koushik Sen,
In Proceedings of the
ACM SIGPLAN 2005 Conference on Programming Language Design and Implementation (PLDI 2005).
-
"CUTE:
A Concolic Unit Testing Engine for C"
Koushik Sen, Darko Marinov, Gul Agha.
European Software Engineering Conference and Symposium on the
Foundations of Software Engineering (ESEC/FSE 2005).
-
Symbolic PathFinder: integrating symbolic execution with model checking for Java bytecode analysis.
Corina S. Pasareanu, Willem Visser, David H. Bushnell, Jaco Geldenhuys, Peter C. Mehlitz, Neha Rungta.
Autom. Softw. Eng. 20(3): 391-425 (2013)
- Fuzzing
- Hybrid Testing/Fuzzing/Verification/Analysis
- "SYNERGY:
A New Algorithm for Property Checking"
Bhargav S. Gulavani, Thomas A. Henzinger, Yamini Kannan, Aditya
V. Nori, Sriram K. Rajamani.
14th ACM SIGSOFT International Symposium on Foundations of
Software Engineering (FSE 2006).
-
"DSD-Crasher:
A Hybrid Analysis Tool for Bug Finding"
Christoph Csallner, Yannis Smaragdakis.
International Symposium on Software Testing and Analysis (ISSTA 2006).
-
Unleashing Mayhem on Binary Code.
Sang Kil Cha, Thanassis Avgerinos, Alexandre Rebert, David Brumley.
IEEE Symposium on Security and Privacy 2012: 380-394
-
Driller: Augmenting Fuzzing Through Selective Symbolic Execution.
Nick Stephens, John Grosen, Christopher Salls, Andrew Dutcher, Ruoyu Wang, Jacopo Corbetta, Yan Shoshitaishvili, Christopher Kruegel, Giovanni Vigna.
NDSS 2016
- Debugging
- "Yesterday,
my program worked. Today, it does not. Why?"
Andreas Zeller.
Proceedings of the 7th European Software Engineering
Conference Held Jointly with the 7th ACM SIGSOFT
international Symposium on Foundations of Software
Engineering (ESEC/FSE 1999).
-
"Isolating Cause-effect Chains from Computer
Programs"
Andreas Zeller.
10th ACM SIGSOFT Symposium on the Foundations of Software
Engineering (FSE 2002).
-
"Simplifying and Isolating Failure-Inducing Input."
Andreas Zeller and Ralf Hildebrandt;
IEEE Transactions on Software Engineering 28(2), February 2002, pp. 183-200.
-
"Locating Causes of Program Failures,"
by Holger Cleve, Andreas Zeller.
ICSE '05: Proceedings of the 27th international
conference on Software engineering, Pages 342-351, May 2005.
-
"Bug Isolation via Remote Program Sampling"
Ben Liblit, Alex Aiken, Alice X. Zheng, and Michael I. Jordan.
ACM SIGPLAN 2003 Conference on Programming Language Design and Implementation
(PLDI 2003).
- "Scalable Statistical Bug Isolation"
Ben Liblit, Mayur Naik, Alice X. Zheng, Alex Aiken, and Michael I. Jordan.
ACM SIGPLAN 2005 Conference on Programming Language Design and Implementation
(PLDI 2005).
-
"Debugging Reinvented: Asking and Answering Why and Why Not Questions about Program Behavior"
Andrew Ko, Brad Myers.
30th International Conference on Software Engineering (ICSE 2008).
- "DARWIN: An Approach for Debugging Evolving Programs"
Dawei Qi, Abhik Roychoudhury, Zhenkai Liang, and Kapil Vaswani.
7th joint meeting of the European Software Engineering Conference (ESEC) and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (FSE) (ESEC/FSE 2009).
- Program Repair, Patching
- Runtime Analysis and Monitoring
-
"Dynamically discovering likely program invariants to support program evolution"
Michael D. Ernst, Jake Cockrell, William G. Griswold, David Notkin.
21st International Conference on Software Engineering (ICSE 1999).
-
"The Daikon system for dynamic detection of likely invariants."
by Michael D. Ernst, Jeff H. Perkins, Philip J. Guo, Stephen McCamant,
Carlos Pacheco, Matthew S. Tschantz, and Chen Xiao.
Science of Computer Programming, 2007.
-
"Checking and
correcting behaviors of Java programs at runtime with
JavaMOP."
F. Chen, M. D'Amorim, and G. Rosu.
In RV'05, volume 144(4) of ENTCS, 2005.
-
"Efficient Monitoring of Parametric Context-Free
Patterns"
Patrick O'Neil Meredith, Dongyun Jin, Feng Chen and
Grigore Rosu.
23rd IEEE/ACM International Conference on Automated Software
Engineering (ASE 2008).
-
"Synthesizing Monitors for Safety Properties."
K. Havelund and G. Rosu.
Proceedings of the 8th International Conference on
Tools and Algorithms for Construction and Analysis of Systems,
Grenoble, France, Vol. 2280, pp. 342-356, April 2002.
-
"Efficient online monitoring of web-service SLAs"
Franco Raimondi, James Skene and Wolfgang Emmerich.
ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE 2008).
- Interfaces
- Mining
-
"Mining Specifications of Malicious Behavior"
Mihai Christodorescu, Somesh Jha, Christopher Kruegel.
Joint meeting of European Software Engineering Conference and ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE 2007).
-
"Graph-based Mining of Multiple Object Usage Patterns"
Tung Nguyen, Hoan Nguyen, Nam Pham, Jafar Al-Kofahi, and Tien Nguyen.
7th joint meeting of the European Software Engineering Conference and the ACM
SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE 2009).
-
"On-demand Feature Recommendations Derived from Mining Public Product Descriptions"
Horatiu Dumitru, Marek Gibiec, Negar Hariri, Jane Cleland-Huang, Bamshad Mobasher,
Carlos Castro-Herrera, and Mehdi Mirakhorli.
33rd International Conference on Software Engineering (ICSE 2011).
-
Mining input grammars from dynamic taints.
Matthias Höschele, Andreas Zeller.
ASE 2016: 720-725
-
On the naturalness of software.
Abram Hindle, Earl T. Barr, Mark Gabel, Zhendong Su, Premkumar T. Devanbu.
Commun. ACM 59(5): 122-131 (2016)
- Analysis
- "Analysis and testing of Web applications"
Filippo Ricca and Paolo Tonella.
23rd International Conference on Software Engineering (ICSE 2001).
-
"Automatic Extraction of Framework-Specific Models from Framework-Based Application Code"
Michal Antkiewicz, Thiago Bartolomei, Krzysztof Czarnecki.
Joint meeting of European Software Engineering Conference and ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE 2007).
-
"HAMPI: A Solver for String Constraints"
Adam Kiezun, Vijay Ganesh, Philip Guo, Pieter Hooimeijer and Michael Ernst.
International Symposium on Software Testing and Analysis (ISSTA 2009)
-
"Effective Static Deadlock Detection"
Mayur Naik, Chang-Seo Park, Koushik Sen, David Gay.
31st International Conference on Software Engineering (ICSE 2009).
-
"Towards automatically generating summary comments for Java methods"
Giriprasad Sridhara, Emily Hill, Divya Muppaneni, Lori Pollock and K. Vijay-Shanker.
25th IEEE/ACM International Conference on Automated Software Engineering (ASE 2010).
-
"Understanding integer overflow in C/C++"
Will Dietz, Peng Li, John Regehr and Vikram Adve.
34th International Conference on Software Engineering (ICSE 2012).
Related Tools