Software Engineering Education Andy Gravell, Feb 2007 The Situation at Southampton • Our programmes – BSc/MEng Computer Science – BEng/MEng/MSc Software Engineering – BSc/MSc Information/Web Technology • This year’s intake was (roughly) – – – – – 64 Computer Science 27 Software Engineering 34 Information/Web Technology 75 BEng/BSc 50 MEng/MSc The ACM/IEEE Perspective • The US professional bodies have produced computing curriculum guidelines – ACM Computer Science Curricula 1968, 1978 – ACM/IEEE Computing Curricula 1991, 2001 • In 2004 the ACM/IEEE produced their first set of guidelines for software engineering programmes – SE2004 (a three year effort, 130 pages) – earlier software engineering curricula were published by Freeman 1976 & 1978, and Bagert (SEI) 1999 • They are now working on guidelines covering 5 areas (CS, CE, SE, IT, & IS) SE2004 • • Steering committee had members from the US, Canada, UK, Israel, Japan, Australia Eight main chapters 1. 2. 3. 4. 5. 6. 7. 8. Introduction The Software Engineering Discipline Guiding Principles Software Engineering Education Knowledge (SEEK) Curriculum Design and Delivery Courses and Course Sequences Alternative Environments Implementation and Assessment SEEK Areas and Units Computing Essentials 172 Software V & V 42 Mathematical & Engineering Fundamentals Professional Practice 89 Software Evolution 10 35 Software Process 13 Software Modelling 53 & Analysis Software Quality 16 Software Design Software Management 19 45 The Knowledge Areas • Each area is broken down into topics – about one per hour of lectures • The first three areas are a subset of the standard computer science curriculum – introduction to CS & IT, programming, program construction methods, discrete maths, measurement and statistics, software economics, teamwork, communication skills, and professionalism • The other seven areas are more specialised – 200 lecture hours, about 10 of our modules – yet we only have ~7 specialist modules ourselves The Gaps in our Curriculum • Software Modelling & Analysis • Software Design – except Architectural Design (9) • Software V & V – except Testing (21) – and Problem Analysis & Reporting (4) • • • • Software Evolution (10) Software Process Software Quality Software Management Specialist Areas • In addition, SE2004 recommends that students should specialise in one or more areas such as – networking, information systems, e-commerce, faulttolerant/security/embedded/real-time/safety-critical systems, biomedical systems, scientific computing, telecommunications, transportation, process control, multimedia & entertainment systems, agent-based systems, and mobile applications • We cover 10 or more of these 15 subject areas – but do our students learn “how the characteristics of typical products in these areas influence a system’s design and construction”? A Key Skill • Software engineers need to be able to make rational and justified decisions • Not just design decisions, but also their selection of methods, tools & techniques • So the curriculum must give them opportunities to make decisions and explain the reasons for their choices Going Further • Actually, students should learn several specialist areas, as the methods used vary so much – critical systems: hazard analysis, requirements engineering, formal methods – mass market software: open source, “synchronise and stabilise” – business systems: agile methods, customisation, system integration, outsourcing • This should help them to “compare and contrast” Gaps in SE2004 • SE2004 has good coverage of the methods used for critical systems • But there is not much on agile methods – only ~3 hours on some agile practices: • unit testing, refactoring, test-first programming • Nor on outsourcing – only ~2 hours on a couple of the issues • stakeholder interaction, multi-cultural environments • And nothing about open source software! Other Classic Questions • How to teach programming – object-first or procedures-first – command line versus IDE • Of course, professional software engineers should be comfortable with the full range of techniques – so most of these questions are about educational effectiveness – what to cover first • Which programming languages? Classic Programming Taxonomies • One classification is by generation – 1st G: machine code – 2nd G: assembly language – 3rd G: high level languages – 4th G: very high level languages? • Another is based on English grammar – imperative: structured, object-oriented – declarative: functional, logic programming – interrogative: regular expressions, SQL Top Ten Languages 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. SQL C# C++ Java XML C VB HTML JavaScript UML • • • • • • • • • • Query language OOPL OOPL OOPL Mark-up language Structured language Structured language Mark-up language Scripting language Modelling language A Modern View • The main kinds of computer languages are now 1. 2. 3. 4. 5. 6. • query language object-oriented programming language mark-up language modelling language structured language scripting language A modern curriculum should include at least one the first four types, for example: – SQL, C#, XML, UML, … • SE2004 does not mention mark-up languages Summary • Our Software Engineering degrees are popular • Our curriculum follows SE2004 – but with some gaps • testing, evolution, architecture • SE2004 itself have some gaps – three or more specialist areas (not just one) • relevant methods: agile, open source, and outsourcing – how to make rational, justified decisions – a mark-up language such as XML