A Quick Overview of Software Engineering. Paul Klint

Similar documents
Life Cycle Models. V. Paúl Pauca. CSC Fall Department of Computer Science Wake Forest University. Object Oriented Software Engineering

Software Development Life Cycle (SDLC)

Waterfall to Agile. DFI Case Study By Nick Van, PMP

How to manage agile development? Rose Pruyne Jack Reed

Introduction to Agile Software Development

The Agile Manifesto is based on 12 principles:

Vragen. Software development model. Software development model. Software development model

Introduction to Agile Software Development Process. Software Development Life Cycles

Agile Projects 7. Agile Project Management 21

Software Life Cycle. Main issues: Discussion of different life cycle models Maintenance or evolution

Agile Software Development Methodologies and Its Quality Assurance

Topics covered. Agile methods Plan-driven and agile development Extreme programming Agile project management Scaling agile methods

Advanced Software Engineering. Software Development Processes

COMP 354 Introduction to Software Engineering

Testing in Agile methodologies easier or more difficult?

Agile Project Management By Mark C. Layton

A Glossary of Scrum / Agile Terms

Agile Development with C#

Software Development Life Cycle at SSPL. An Summary of Methodologies We Offer

Software Engineering/Courses Description Introduction to Software Engineering Credit Hours: 3 Prerequisite: (Computer Programming 2).

Extreme Programming, an agile software development process

Introduction to Agile and Scrum

Atomate Development Process. Quick Guide

AGILE & SCRUM. Revised 9/29/2015

Rapid software development. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 17 Slide 1

Ingegneria del Software Corso di Laurea in Informatica per il Management. Agile software development

CSE 435 Software Engineering. Sept 16, 2015

A Capability Maturity Model (CMM)

Comparative Study of Agile Methods and Their Comparison with Heavyweight Methods in Indian Organizations

Software Engineering I (02161)

Whitepaper. Agile Methodology: An Airline Business Case YOUR SUCCESS IS OUR FOCUS. Published on: Jun-09 Author: Ramesh & Lakshmi Narasimhan

Lean and Agile in Safety-critical Software Development Research and Practice. Henrik Jonsson

Copyright protected. Use is for Single Users only via a VHP Approved License. For information and printed versions please see

D25-2. Agile and Scrum Introduction

Introduction to Agile Software Development. EECS 690 Agile Software Development

Rapid Software Development

AGILE METHODOLOGY IN SOFTWARE DEVELOPMENT

Software Requirements and Specification

Agile methods. Objectives

SOFTWARE ENGINEERING INTERVIEW QUESTIONS

Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.

SOFTWARE DEVELOPMENT METHODOLOGIES, TRENDS, AND IMPLICATIONS

Best Practices for Improving the Quality and Speed of Your Agile Testing

Achieving ISO 9001 Certification for an XP Company

Agile and lean methods for managing application development process

Using Simulation to teach project management skills. Dr. Alain April, ÉTS Montréal

Agile Software Development

SECC Agile Foundation Certificate Examination Handbook

Alternative Development Methodologies

Challenges in adopting Agile

In the IEEE Standard Glossary of Software Engineering Terminology the Software Life Cycle is:

LEAN AGILE POCKET GUIDE

Agile Development Overview

Karunya University Dept. of Information Technology

The Impacts Of Agile Development On The System Engineering Process

Getting Started with Agile Project Management Methods for Elearning

Modern practices TIE-21100/

Quality Assurance Software Development Processes

Methodology: Agile development of safety critical systems Annex D1.1.d to deliverable D1.1

Agile with XP and Scrum

Waterfall vs. Agile Methodology

Software Quality Testing Course Material

Agile extreme Development & Project Management Strategy Mentored/Component-based Workshop Series

Outline. Agile Methods. Converse of Conway s Law. The Silver Bullet Fantasy (Brooks, 1986)

SOFTWARE PROCESS MODELS

Fail early, fail often, succeed sooner!

Software Development Methodology Development Process Aress

Agile Requirements Generation Model: A Soft-structured Approach to Agile Requirements Engineering. Shvetha Soundararajan

Agile Software Development in the Large

Processes in Software Development. Presented by Lars Yde, M.Sc., at Selected Topics in Software Development, DIKU spring semester 2008

The 2015 State of Scrum Report. How the world is successfully applying the most popular Agile approach to projects

Development Techniques. CSE301 University of Sunderland Harry R. Erwin, PhD

Becoming a Business Analyst

A. Waterfall Model - Requirement Analysis. System & Software Design. Implementation & Unit Testing. Integration & System Testing.

Agile and lean methods for managing application development process

Agile Software Engineering Practice to Improve Project Success

How To Understand The Limitations Of An Agile Software Development

Agile In a Nutshell. Note - all images removed to fit 2MB limit Actual presentation has much more content. Jonathan Rasmusson

Agile Development with Agile Business Suite

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited

PROCESS OF MOVING FROM WATERFALL TO AGILE PROJECT MANAGEMENT MODEL

Comparing Agile Software Processes Based on the Software Development Project Requirements

Agile! Springer. The Good, the Hype and the Ugly. Bertrand Meyer

Agile in a Safety Critical world

Agile Beyond The Team 1

Software Engineering. Introduction. Lecturer: Giuseppe Santucci

PMBOK? You Can Have Both! June 10, Presented by:

Agile-Waterfall Hybrid Jessica LaGoy, MS, PMP

Extreme Programming, an agile software development process

Transcription:

A Quick Overview of Software Engineering Paul Klint

g n i t o qu r o f s ie ch g o t l u o Ap me D pers so wspa ne 2

3

4

Software Engineering is about... Building large software systems Using state-of-the-art scientific knowledge Using solid engineering practices Dealing with evolving software Controlling complexity Controlling quality 5

Societal Relevance All parts of society essentially depend on software: Government (taxes, social security,...) Healthcare Services (banking and insurance companies) Transportation, logistics, telecommunication Entertainment (games, animation)... 6

Facts about Software 50% of all software projects costs more than twice the original budget One-third of all projects has a delay of 200300% 80% of all projects fails Failing software costs in the US 56 billion $ per year 60% of all programmers works on maintenance 7

Software Engineering has to reconcile The requirements of the stakeholders and users of a system The engineering of the system including designing, building, testing, and maintaining it The process how to organize all the above 8

Requirements 9

Requirements 10

Requirements Interviews with stakeholders User stories and Use cases Mock ups Early prototypes Customer on site 11

User Stories Pattern: As a <role>,i want <goal/desire> As a user, I want to search for my customers by their first and last names. As a want made last user closing the application, I to be prompted to save if I have any change in my data since the save. 12

Use Case 13

Message Sequence Chart 14

Mock-ups 15

Engineering Software Architecture Software Design Software Construction Software Quality Assessment Software Maintenance 16

Software Architecture and Design 17

Sagrada Familia Barcelona, Spain, 1883 --... 18

19

20

21

22

23

Antoni Gaudi, 1852 -- 1926 24

Why is Gaudi's Design Good? Forms inspired by nature Organic integration of parts Each facade a separate theme Unconventional Impressive Note: miniature models were used to study the design 25

Johnson Wax Headquarters 1936-1939 26

Fallingwater,271935

Robie House 1908 --1910 28

Frank Loyd Wright 1867 -- 1959 29

Why are Loyd Wright's Designs Good? Clear lines and forms Simple Design has a perfect fit with the environment Careful consideration how light enters building 30

Gasuniegebouw, Groningen, Alberts en Huut, Mooiste gebouw van Nederland, Trouw, 2007. 31

What is Software Architecture? The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both. The term also refers to documentation of a system's "software architecture." Documenting software architecture facilitates communication between stakeholders, documents early decisions about high-level design, and allows reuse of design components and patterns between projects 32

Software Architecture Client-server architecture 33

Software Architecture Service Bus 34

What is Software Design? Software design is a process of problemsolving and planning for a software solution. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view. Source: Wikipedia 35

Software Design Design Patterns Algorithm Design Data design Unclear separation between high-level and low-level concerns 36

SW Design is a Wicked Problem No definite formulation of the problem No stopping rule: we never reach the solution Solution not true/false but only good/bad. Many acceptable solutions Every solution may lead to other wicked problems Source: Van Vliet, Software Engineering 37

Global SW Design Strategies Top-down: start from problem domain Pro: good fit with the requirements, global picture Con: unclear whether you can reach good (efficient) solution at the code level Bottom-up: start from solutions domain Pro: good solution for local problems Con: unclear whether you will eventually satisfy the global requirements YoYo: reconcile these strategies 38

YoYo Design Start with global, top-down, design Do bottom-up design of selected parts to verify that detailed design is feasible Integrate with (and change) global design Repeat 39

Software Construction Programming Languages Paradigms: imperative OO functional... Approaches: Design Patterns Domain-specific Languages (DSLs) Model-driven Aspect-oriented programming Tools: IDEs, debuggers, test tools, version management,... 40

Software Quality Assessment Software complies with requirements and is functionally correct? Non-functional quality aspects: Performance, reliability, security, maintainability, documentation, ease-of-use,... Rule of thumb: the earlier a problem is found, the cheaper you can fix it: Requirements (1x); Post-release (100x) 41

Code Review Interactive session, where a developer explains his/her code to colleagues Finds more errors than any other technique! Pair-programming (discussed later) supports this 42

The Word bug In relay-based machines little insects could disrupt machine operation Here a moth found in the Harvard Mark II Now used for software errors Debugging: removing errors 43

Testing Testing can only show the presence of bugs, not their absence (Edsger Dijkstra) White-box testing Black-box testing During testing the implementation is known Implementation is unknown Test levels Unit Integration System 44

Manual Unit Testing Manually write test cases that exercise a function for average values and boundary values Example: test cases for a list sort function: Empty list Non-empty, sorted, lists Non-empty, reversely sorted, lists Random lists of various sizes 45

Automatic Unit Testing Write a predicate issorted to test that a list is sorted. bool testsort(list[int] L) = issorted(sort(l)) Randomly generate lists and use testsort as oracle. This approach is called QuickCheck and is highly effective. 46

Test Tools for the Rascal programmer test is a function modifier, currently for Boolean functions without parameters. Use :test on the command line to run all test functions A Master's project is well-advanced to add QuickCheck functionality to Rascal's test framework. 47

Testing Rascal itself Thousands of tests for basic language elements and libraries Code examples in Tutor are also executed and also act as tests. Developer and tester should wear different hats 48

Testing the Integer Operators @Test public void testint() { asserttrue(runtest("1 == 1;")); asserttrue(runtest("1!= 2;")); asserttrue(runtest("-1 == -1;")); asserttrue(runtest("-1!= 1;")); asserttrue(runtest("1 + 1 == 2;")); asserttrue(runtest("-1 + 2 == 1;")); asserttrue(runtest("1 + (-2) == -1;")); asserttrue(runtest("2-1 == 1;")); asserttrue(runtest("2-3 == -1;")); asserttrue(runtest("2 - -1 == 3;")); asserttrue(runtest("-2-1 == -3;")); asserttrue(runtest("2 * 3 == 6;")); asserttrue(runtest("-2 * 3 == -6;")); asserttrue(runtest("2 * (-3) == -6;")); asserttrue(runtest("-2 * (-3) == 6;")); asserttrue(runtest("8 / 4 == 2;")); asserttrue(runtest("-8 / 4 == -2;")); asserttrue(runtest("8 / -4 == -2;")); asserttrue(runtest("-8 / -4 == 2;")); asserttrue(runtest("7 / 2 == 3;")); asserttrue(runtest("-7 / 2 == -3;")); asserttrue(runtest("7 / -2 == -3;")); asserttrue(runtest("-7 / -2 == 3;")); asserttrue(runtest("5 % 2 == 1;")); asserttrue(runtest("-5 % 2 == -1;")); asserttrue(runtest("5 % -2 == 1;")); asserttrue(runtest("-2 <= -1;")); asserttrue(runtest("-2 <= 1;")); asserttrue(runtest("1 <= 2;")); asserttrue(runtest("2 <= 2;")); assertfalse(runtest("2 <= 1;")); asserttrue(runtest("-2 < -1;")); asserttrue(runtest("-2 < 1;")); asserttrue(runtest("1 < 2;")); assertfalse(runtest("2 < 2;")); asserttrue(runtest("-1 >= -2;")); asserttrue(runtest("1 >= -1;")); asserttrue(runtest("2 >= 1;")); asserttrue(runtest("2 >= 2;")); assertfalse(runtest("1 >= 2;")); asserttrue(runtest("-1 > -2;")); asserttrue(runtest("1 > -1;")); asserttrue(runtest("2 > 1;")); assertfalse(runtest("2 > 2;")); assertfalse(runtest("1 > 2;")); asserttrue(runtest("(3 > 2? 3 : 2) == 3;")); } asserttrue(runtest("0 / 5 == 0;")); asserttrue(runtest("5 / 1 == 5;")); 49

Testing Sort @Test public void sort() { prepare("import List;"); asserttrue(runtestinsameevaluator("{list::sort([]) == [];}")); asserttrue(runtestinsameevaluator("{sort([]) == [];}")); asserttrue(runtestinsameevaluator("{list::sort([1]) == [1];}")); asserttrue(runtestinsameevaluator("{sort([1]) == [1];}")); asserttrue(runtestinsameevaluator("{list::sort([2, 1]) == [1,2];}")); asserttrue(runtestinsameevaluator("{sort([2, 1]) == [1,2];}")); asserttrue(runtestinsameevaluator("{list::sort([2,-1,4,-2,3]) == [-2,-1,2,3, 4];}")); asserttrue(runtestinsameevaluator("{sort([2,-1,4,-2,3]) == [-2,-1,2,3, 4];}")); } 50

Test Driven Developmen (TDD) Write test cases first (they act as a specification) Then write the implementation of the code that is tested 51

The Software Process 52

Software Process All aspects of the software life cycle Two main styles: Waterfall Agile 53

Waterfall Model Requirements Design Implementation Verification Maintenance 54

Waterfall Model All steps are traceable Solid engineering practices Long development cycles Not so easy to steer the project Much bureaucracy 55

Agile Development Originally called Extreme Programming Agile Manifesto Agile Principles Agile Practices Large commercial interests in selling you agile methods 56

57

Agile Principles Customer satisfaction by rapid delivery of useful software Welcome changing requirements, even late in development Working software is delivered frequently (weeks, not months) Working software is the principal measure of progress Sustainable development, able to maintain a constant pace Daily co-operation between business people and developers Face-to-face conversation is the best form of communication (co-location) Projects are built around motivated, trusted, individuals Continuous attention to technical excellence and good design Simplicity- The art of maximizing the amount of work not done - is essential Self-organizing teams Regular adaptation to changing circumstances 58

Agile Practices Pair programming Design patterns Continuous Integration Test-driven development Automated unit testing Refactoring 59

Agile Development Many agile approaches: SCRUM, Kanban, XP, DSDM There is no scientific proof that waterfall methods or agile methods are better We have done various studies; it is hard to obtain and compare data The influence of individual programmers is large (10x difference between individuals) 60

Software Engineering At the core of Many faces: Web technologies Technical Mobile applications Human Gaming Organizational Big Data Scientific computing 61

62