----+++ Contents The IEEE Computer Society defines software engineering as <blockquote> The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. </blockquote> Thus software engineering comprises everything that is involved in building and maintaining software systems, including design and construction, manufacturing and distribution, project management, and human factors of software use and development. Many aspects of software engineering are adequately treated in the rest of the computer science curriculum, e.g., algorithms, data structures, programming languages, programming methodology, and software design. In this course we focus on those aspects of the software process that are required to turn programming into (large scale) software development focusing on topics _not_ treated in sister courses like Modelleren en Systeemontwikkeling, Projectmanagement and Software Architecture. * The software lifecycle * Formal requirements specification * Design through specification languages * Software construction tools * Version management * Build management * Deployment * Aspect oriented programming * Testing * Static checking * Dynamic checking (profiling) * Empirical software engineering ----+++ Literature Required reading for the course consists of a number of chapters of [[CourseBook][Software Engineering 9 by Ian Sommerville]]: 1-8, 10-17, 19, 21, 24, 25 In total this is about 550 pages. The information density is, however, quite low. <!-- The following list is still for version 8 of the book: *1-4, 6, 7, 9, 10, 11, 13, 15, 17, 18, 20, 22-24, 29 and 32*. Nieuwe boek: 1, 2, 3, 4, 5, 6, 7 (refresh), 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 24, 25 1, 4, 17, 6+7, 8, 11+12+13, 14, 23, 2, 3, 9, 20, new, 22+24, 18, new, new, 32, new(SIG), 29 --> In addition, the slides of the course (including the guest lectures), the papers you need to read, the assignments you make are also part of the material for the exam. Note that the slides address many things not discussed in the book. ----+++ Course form The course consists of lectures, doing paper reviews and doing practical assignments. You are expected to read the book by yourself, although selected parts of it will recur in the lectures. The book is largely a global overview of the field: comprehensive, but not very deep. The paper reviews should be done individually. The other practical assignments will take place in a computer lab, preferably in pairs, and under supervision of students assistants. ----+++ Prerequisites Students are expected to be mature programmers. It is expected that students are able to acquire skills in new programming languages and environments (e.g., Linux, version management and build tools). ----+++ Exam form and grading The final grade for the course is composed as follows: * 20% : grade for paper reviews * 40% : grade for practical assignments * 40% : grade for final written exam All practical assignments are weighted equally, and all paper reviews are weighted equally. To pass the course the exam grade should be 5.5 or higher, all other grades should be 4 or higher, and the average should be higher than or equal to 5.5. If you have not passed the course yet, you are allowed a 2nd chance exam (aanvullende toetsing) if, by replacing your exam grade by a perfect score of 10, the smallest grade of the practical assignments by a perfect score of 10, and the smallest grade of your paper reviews by a perfect score of 10, the condition for passing the course are fulfilled. What constitutes the 2nd chance exam will be established individually for all who qualify to participate. Note: a part of the course that you did not hand in at all, defaults to the grade zero.