Software Engineering in the Academy Bertrand Meyer IEEE Computer, May 2001
Definitions of SE The body of methods, tools and techniques intended to produce quality software. The development (management, maintenance, validation, etc.) of possibly large systems intended for use in production environments, over possibly a long period, worked on by possibly many people, and possibly undergoing many changes.
Goals How to instill software engineering concerns into an entire software curriculum. Principles Practices Applications Tools Mathematics
The Principles: What Software Professionals Know Abstraction: separate essential from the auxiliary. Distinction between specification and implementation: confusing in software. Recursion: apply definition to some of its parts: classes, grammars, functions, etc. Information hiding: what you export and what you hide.
The Principles: What Software Professionals Know Reuse: when to rely on someone else’s job. Battling complexity: recognize simplicity in an apparent mess. Scaling up: which techniques will scale up? Designing for change: change process can be painful, especially for large systems. Classification: class hierarchies.
The Principles: What Software Professionals Know Typing: study of type systems for safe construction of software. Contracts: pre and post conditions and invariants. (How does this apply to aspects?) Exception handling. Errors and debugging.
Practices Configuration management Project management Metrics Ergonomics and user interfaces Documentation User interaction High-level system analysis
Applications Includes traditional areas: Compilers, operating systems, data bases, numerical computing, etc.
Tools Choose a few programming languages and implementations and help students to understand them in depth. Educators are responsible for choosing the appropriate tools on the basis of their best professional assessment of student’s interests over the course of a career.
Mathematics Programming and programming languages are mathematical beasts!