Software Engineering Introduction Why are you here? • …alternatively, why do we think you need to be here? • Why a course on software engineering? • How is real-world programming different than what you have been doing so far? Barry Boehm paper • Read it before next class • Make sure you study it for the quiz and final exam • Take notes! What is SE? • Software engineering (SE) is a profession “dedicated to designing, implementing, and modifying software so that it is of higher quality, more affordable, maintainable, and faster to build“ What’s wrong with the previous definition? • A better definition: “SE is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software” – IEEE – Have you been doing this in your classes so far? • Parnas (super famous CS guy) defined software engineering as the “multiperson construction of multiversion software” – Your projects so far were (probably) neither multipurpose nor multiversion Software project failure • “Most” software projects fail • This failure is almost never due to developer incompetence (alone) • If we are late, we can just add more people! • Who needs requirements; just start coding! • Requirements are malleable anyway! • And documentation just slows us down! • Besides, once we ship, we’re done! No. How can SE help? • A set of tools and ideas that can increase the likelihood of success So what are these tools/ideas? • (things we will cover this semester) • A generic approach – Rigor and formality – Separation of concerns – Modularity – Abstraction – Anticipation of change – Generality – Incrementality Leading to a Generic Framework • (things we will cover this semester) • Communication – Heavy collaboration with the customer, other stakeholders and encompasses requirements gathering and related activities • Planning – Establish a plan for the work. Technical task to be conducted, risks, needed resources, work products to be created, and a schedule • Modeling – Creation of models to allow the customer and the developer to better understand the requirements and design that will achieve those requirements • Construction – Combines code generation and testing required to uncover errors in the code • Deployment – The software (as a complete entity or partially complete increment) is delivered to the customer who evaluates it and provides feedback. And the framework is applied • This is called the process model • The framework activities will always be applied on every project ... BUT • The tasks (and degree of rigor) for each activity will vary based on: – the type of project – characteristics of the project – common sense judgment; concurrence of the project team Example • Which activities would you spend the most time on for – Space shuttle controller? – Web-based calendar? – Embedded controller in your refrigerator? – Daily fortune text messenger? Framework Activities Communication Planning Modeling Construction Analysis of requirements Design Code generation Testing Deployment A basic model: Waterfall • Benefit: – Easy to follow • Limitation: – Often associated with project failure. Why might that be? Com m unic a t ion proje c t init ia t ion re quire m e nt ga t he ring Planning es timating sc heduling track ing Mode ling analysis design Const r uc t ion code t est De ploy m e nt de liv e ry s upport f e e dba c k Model types • Prescriptive Models (like waterfall): – Want to limit and change – Provide repeatability/consistency – Coordinate teams • Agile models – Respond to change – Working software rather than documentation – Individuals and interaction • Which would you use for {a large team, a webapp, the space shuttle controller}? Umbrella activities • • • • • • • • Software project management Formal technical reviews Software quality assurance Software configuration management Work product preparation and production Reusability management Measurement Risk management