Reading List
Empirical Software Engineering (EMSE)
- Shan Lu, Soyeon Park, Eunsoo Seo, and Yuanyuan Zhou. Learning from mistakes — A comprehensive study on real world concurrency bug characteristics. ASPLOS'08.
- Will Dietz, Peng Li, John Regehr, and Vikram Adve. Understanding integer overflow in C/C++. ICSE'12.
- Abram Hindle, Earl Barr, Mark Gabel, Zhendong Su, and Prem Devanbu. On the naturalness of software. ICSE'12.
- Danilo Silva, Nikolaos Tsantalis, and Marco Tulio Valente. Why we refactor? Confessions of GitHub contributors. FSE'16.
Software Engineering Process (SEP)
- Thomas D. LaToza, Gina Venolia, and Robert DeLine. Maintaining mental models: A study of developer work habits. ICSE'06.
- Sumit Gulwani. Automating string processing in spreadsheets using input-output examples. POPL'11.
- Andrew J. Ko. A three-year participant observation of software startup software evolution. ICSE'17 (SEIP).
- Uri Alon, Meital Zilberstein, Omer Levy, and Eran Yahav. code2vec: Learning distributed representations of code. POPL'19.
Formal Methods (FM)
- James C. King. Symbolic execution and program testing, 1976.
- Patrice Godefroid. Model checking for programming languages using VeriSoft. POPL'97.
- Cristian Cadar, Daniel Dunbar, and Dawson Engler. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. OSDI'08.
- Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. Angelix: Scalable multiline program patch synthesis via symbolic analysis. ICSE'16.
Software Testing and Analysis (STA)
- Michael D. Ernst, Jake Cockrell, William G. Griswold, and David Notkin. Dynamically discovering likely program invariants to support program evolution. IEEE Transactions on Software Engineering (TSE), 27(2), 2001.
- Dawson Engler, David Yu Chen, Seth Hallem, Andy Chou, and Benjamin Chelf. Bugs as deviant behavior: A general approach to inferring errors in systems code. SOSP'01.
- Junfeng Yang, Can Sar, and Dawson Engler. eXplode: A lightweight, general system for finding serious storage system errors. OSDI'06.
- Nicholas Nethercote and Julian Seward. Valgrind: A framework for heavyweight dynamic binary instrumentation. PLDI'07.
Software Maintenance and Evolution (SME)
- James A. Jones, Mary Jean Harrold, and John Stasko. Visualization of test information to assist fault localization. ICSE'02.
- Andreas Zeller and Ralf Hildebrandt. Simplifying and isolating failure-inducing input. IEEE Transactions on Software Engineering (TSE), 28(2), 2002.
- George Candea, Shinichi Kawamoto, Yuichi Fujiki, Greg Friedman, and Armando Fox. Microreboot – A technique for cheap recovery. OSDI'04.
- Kirk Glerum, Kinshuman Kinshumann, Steve Greenberg, Gabriel Aul, Vince Orgovan, Greg Nichols, David Grant, Gretchen Loihle, and Galen Hunt. Debugging in the (very) large: Ten years of implementation and experience. SOSP'09.