CS685, Software Engineering Research, Fall 2008 Logistics Web Site: http://www.cs.virginia.edu/cs685f08 Instructor: Kevin Sullivan Office: Olsson 211 Office Hours: 10:15-12:00 M/W Prerequisites: You must have graduate standing in either Computer Science or Computer Engineering to take this class. All students of Computer Science and Engineering should read F.P. Brooks, Jr., The Mythical Man-Month: Essays on Software Engineering (Anniversary Edition), Addison-Wesley, 1995. If you have not yet read this book, please do so in preparation for this class. It will not be covered in class. If you did not have an undergraduate class in software engineering, you might also wish to read though one of the many software engineering textbooks, such as Hans van Vliet, Software Engineering: Theory and Practice, John Wiley & Sons, Ltd, 2000. Audience: The audience for this course is Ph.D. students in computer science and engineering who need a basic understanding of software engineering as an area of knowledge and research within the broader field of computer science and engineering. While the course might well be useful to future practitioners of software development, it is not meant primarily to equip students for such practice. Goals: Provide students with an understanding of foundational concepts, principals, approaches, selected seminal works, and selected recent works in the field of software engineering research Introduce students to the state of the art in software engineering research in a few selected areas Help students to develop critical analysis abilities needed for research in software engineering Introduce students to notion of research methodology and evaluation of research quality Approach: Class time will be spent largely in discussing papers from the research literature Students will read papers outside of class and will prepare brief critical analyses of papers, both to develop critical thinking abilities and to prepare for productive in-class discussions Students will complete several small homework assignments, individually or in groups as the instructor permits, in order to develop and demonstrate understanding of selected technical ideas Students will undertake a modest semester-long project to be defined by the instructor, primarily to develop concrete intuitions for the abstract concepts discussed in class Required Readings: See readings page Evaluation: Class participation (30%) Homework assignments (30%) Class project (30%) Above and beyond (10%) Students working in a group on an assignment will generally all receive the same grade. The instructor reserves the right to make exceptions to this rule if circumstances indicate that it is appropriate to do so. HonorPolicy: The University of Virginia Honor Code is in force in this class at all times. Cheating will not be permitted. Unattributed use of the work of others is plagiarism. Plagiarism will be construed as cheating. Possible consequences include failure on an assignment, summary failure of the course, and referral to the Honor Committee for an Honor Trial, possibly resulting in expulsion from the University of Virginia. Reading 1. The Challenge of Software Engineering The module is meant to introduce the field of software engineering research with a particular emphasis on the difficulty of producing good software, and underlying principles explaining that difficulty and why it's not likely to abate any time soon. Two papers from the popular literature provide an informal view of the state of the art, and, in particular, mention the "software crisis," a term that for years has characterized the state of practice in the field. [Dijkstra 72] E.W. Dijkstra, The Humble Programmer, 1972 Turing Award Lecture, Communications of the ACM vol. 15, no. 10, 1972, pp. 859-866. [Gibbs 94] W. Gibbs, Software's Chronic Crisis (recently available here), Scientific American 271, 3, pp. 72-81, 1994. [Mann 2002] Charles Mann, "Why software is so bad", MIT Technology Review, Jul/Aug 2002. [Parnas 1985] D. L. Parnas, Communications of the ACM, Software aspects of strategic defense systems,Volume 28 , Issue 12 (December 1985), pp. 1326 1335. [Brooks 86] F. P. Brooks, "No Silver Bullet - Essence and Accident in Software Engineering" (recently available here), Proceedings of the IFIP Tenth World Computing Conference, pp. 1069-1076, 1986. 2. Software Development as an Engineering Profession with an Underlying Science The importance of software, the long-standing difficulties in improving its quality, the evident technical and intellectual challenges in making progress, and the rapidly growing importance of software to public welfare combine to produce a justification for both a research field and a profession of software engineering. This module is meant to put the field in context with respect to the development of other engineering research and professional disciplines. Among other things, the readings will give an overview of the organization of the field, in the form of one possible taxonomy, and of the significant breadth of knowledge that many people believe all practicing software engineers should have acquired. [Leveson 92] N. Leveson, "High-Pressure Steam Engines and Computer Software," Proceedings of the 14th international conference on Software engineering, Melbourne, Australia, pp. 2 - 14, 1992. [Shaw 90] Shaw, M. "Prospects for an Engineering Discipline of Software," IEEE Software, November 1990, pp.15—24. [Abran 2004] A. Abran et al., eds., Guide to the Software Engineering Body of Knowledge, 2004. Please read the preface and Chapter 1, and just glance over the rest of the document, both to get a sense of what's in the document, and to get a quick, partial view of the breadth of knowledge being developed by and for the field. [Notkin et al., 2000] D. Notkin. M. Gorlick, M. Shaw, An Assessment of the Software Engineering Body of Knowledge, A Report to the ACM Council, 2000. [Finkelstein & Kramer, 2000] A. Finkelstein and J. Kramer, Software engineering: a roadmap, International Conference on Software Engineering, Proceedings of the Conference on The Future of Software Engineering, Limerick, Ireland, pp. 3--22, 2000. 3. What Might Science of Software Actually Mean? [Tichy 95] W.F. Tichy, P. Lukowicz, L. Prechelt, E.A. Heinz. Experimental Evaluation in Computer Science: A Quantitative Study. Journal of Systems and Software 28(1):9-18, January 1995. [Tichy 98] W.F. Tichy. "Should Computer Scientists Experiment More?" IEEE Computer, Volume 31, Issue 5, May 1998, pp. 32-40. [Knight & Leveson 8] J. C. Knight , N. G. Leveson, An experimental evaluation of the assumption of independence in multiversion programming, IEEE Transactions on Software Engineering, v.12 n.1, p.96-109, Jan. 198. [Murphy et al. 99] G.C. Murphy, R.J. Walker, and E.L.A. Baniassad, Evaluating Emerging Software Development Technologies: Lessons Learned from Assessing Aspect-oriented Programming, IEEE Transactions on Software Engineering 24, 4, 1999. [McGrath 95] J. McGrath. Methodology Matters: Doing Research in the Behavioral and Social Sciences (recently available here). In R. Baecker et al., Readings in human-computer interaction : toward the year 2000, Morgan Kaufmann, 1995, pp. 152-169. [Shaw 02] Mary Shaw, "What Makes Good Research in Software Engineering?," Presented as an invited lecture at the European Joint Conference on Theory and Practice of Software, in April 2002 in Grenoble, France. Opinion corner department, International Journal on Software Tools for Technology Transfer, vol. 4, no. 1, Oct. 2002, pp. 1-7. [Walker et al. 03] R. Walker et al., Panel: empirical validation: what, why, when, and how, Proceedings of the 25th International Conference on Software Engineering, Portland, Oregon, pp. 721 - 722, 2003. 4. Requirements and Specification I will be adding to this category as we go. M. Jackson and P. Zave, "Deriving specifications from requirements: an example," Proceedings of the 17th international conference on Software engineering, Seattle, Washington, United States, pp. 15 - 24, 1995. M. Jackson and P. Zave, Four dark corners of requirements engineering, ACM Transactions on Software Engineering and Methodology (TOSEM), Volume 6 , Issue 1 (January 1997), pp. 1 - 30. J.M. Spivey, The Z Notation: A Reference Manual, Prentice Hall (2001). Chapter 1 is the required reading. BY the way, Z is pronounced "zed." 5. Design Architecture W. Stevens, G. Myers, L. Constantine, "Structured Design", IBM Systems Journal, 13 (2), 1974, pp. 115-139. D.L. Parnas, On the criteria to be used in decomposing systems into modules, Communications of the ACM, Volume 15 , Issue 12, pp. 1053 - 1058, 1972. D. Perry and A. Wolf, Foundations for the study of software architecture, ACM SIGSOFT Software Engineering Notes, Volume 17 , Issue 4, pp. 40 - 52, October 1992. D. Garlan and M. Shaw, An Introduction to Software Architecture, Advances in Software Engineering and Knowledge Engineering, Volume I, edited by V.Ambriola and G.Tortora, World Scientific Publishing Company, New Jersey, 1993. Coad, "Object-oriented patterns", CACM 35(9)[PDF] Design Patterns: Abstraction and Reuse of Object-Oriented Design, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Lecture Notes in Computer Science, 707 (1993).