Software Engineering Design & Construction

Similar documents
Introduction to Software Engineering

TELEMETRY SOFTWARE DEVELOPMENT LIFE CYCLE

INTEGRATING DESIGN AND ENGINEERING, II: PRODUCT ARCHITECTURE AND PRODUCT DESIGN

Code Complete 2: Realities of Modern Software Construction

Internet Engineering. Jan Nikodem, Ph.D. Software Engineering

Concept Connect. ECE1778: Final Report. Apper: Hyunmin Cheong. Programmers: GuanLong Li Sina Rasouli. Due Date: April 12 th 2013

Code Complete 2: A Decade of Advances in Software Construction Construx Software Builders, Inc. All Rights Reserved.

Ingegneria del Software Corso di Laurea in Informatica per il Management. Introduction to software engineering

Towards Integrated System and Software Modeling for Embedded Systems

UNIT-III LIFE-CYCLE PHASES

Service-Oriented Software Engineering - SOSE (Academic Year 2015/2016)

Computer Science: Who Cares? Computer Science: It Matters. Computer Science: Disciplines

Incidents Elie Bursztein and Jean Goubault Larrecq

Agile Acquisition of Agile C2

Unit 5: Unified Software Development Process. 3C05: Unified Software Development Process USDP. USDP for your project. Iteration Workflows.

Frameworks for Assessing IT Systems Engineering Acquisition Issues and Proposed Approaches in Support of Public Law 111

Scope of OOSE. A. Starts. CMPSC 487 Lecture 01 Topics: Schach - Chap 1. The Scope of Object-Oriented Software Engineering

Grundlagen des Software Engineering Fundamentals of Software Engineering

Course Introduction and Overview of Software Engineering. Richard N. Taylor Informatics 211 Fall 2007

Computer Science: Disciplines. What is Software Engineering and why does it matter? Software Disasters

Behavioral Modeling of Digital Pre-Distortion Amplifier Systems

Read & Download (PDF Kindle) Embedded Systems Architecture: A Comprehensive Guide For Engineers And Programmers (Embedded Technology)

Software LEIC/LETI. Lecture 21

Future Trends of Software Technology and Applications: Software Architecture

Software-Intensive Systems Producibility

Software Engineering Design & Construction Dr. Michael Eichberg Fachgebiet Softwaretechnik Technische Universität Darmstadt

Arduino Platform Capabilities in Multitasking. environment.

Comics as Contracts 2016/04/05 1

Technische Universität München. TUM Computer Games Laboratory SS Prototyping. R. Westermann, N. Thuerey. Fakultät für Informatik

Strategies for Research about Design: a multidisciplinary graduate curriculum

The Impact of Conducting ATAM Evaluations on Army Programs

2. There are many circuit simulators available today, here are just few of them. They have different flavors (mostly SPICE-based), platforms,

Operations Research & Analysis 2025: What are the roots and where do we go next

PREFACE. Introduction

Examen. NU reproducere mecanica ASPC, P11. Foundations of Software Engineering

Digital Transformation. A Game Changer. How Does the Digital Transformation Affect Informatics as a Scientific Discipline?

STUDY ON FIREWALL APPROACH FOR THE REGRESSION TESTING OF OBJECT-ORIENTED SOFTWARE

Where does architecture end and technology begin? Rami Razouk The Aerospace Corporation

Explicit Domain Knowledge in Software Engineering

No Silver Bullet. CSCI 5828: Foundations of Software Engineering Lecture 02 08/27/2015

Immersive Simulation in Instructional Design Studios

Computer Games Laboratory. Prototyping

Object-Oriented Design

Guidance of a Mobile Robot using Computer Vision over a Distributed System

Introduction to Software Engineering

Improving Application Development with Digital Libraries

Designing Architectures

Software Engineering

System of Systems Software Assurance

Automated Driving Systems with Model-Based Design for ISO 26262:2018 and SOTIF

Object-oriented Analysis and Design

Thriving Systems Theory:

Development of a Dual-Extraction Industrial Turbine Simulator Using General Purpose Simulation Tools

Validation of Frequency- and Time-domain Fidelity of an Ultra-low Latency Hardware-in-the-Loop (HIL) Emulator

Robot Task-Level Programming Language and Simulation

24 Challenges in Deductive Software Verification

A Robotic Simulator Tool for Mobile Robots

Context Sensitive Interactive Systems Design: A Framework for Representation of contexts

Game Programming Algorithms And Techniques: A Platform-Agnostic Approach (Game Design) Ebooks Free

Time-Memory Trade-Offs for Side-Channel Resistant Implementations of Block Ciphers. Praveen Vadnala

CHAPTER 1: INTRODUCTION TO SOFTWARE ENGINEERING DESIGN

Required Course Numbers. Test Content Categories. Computer Science 8 12 Curriculum Crosswalk Page 2 of 14

TURNING IDEAS INTO REALITY: ENGINEERING A BETTER WORLD. Marble Ramp

The Disappearing Computer. Information Document, IST Call for proposals, February 2000.

Patentability of Computer-Implemented Inventions in the field of Computer Security

Realistic Robot Simulator Nicolas Ward '05 Advisor: Prof. Maxwell

Game Artificial Intelligence ( CS 4731/7632 )

Coaching Questions From Coaching Skills Camp 2017

AOSE Agent-Oriented Software Engineering: A Review and Application Example TNE 2009/2010. António Castro

An introduction to software development. Dr. C. Constantinides, P.Eng. Computer Science and Software Engineering Concordia University

Cognitive Radio Systems: A Network Technology Assessment

Evidence Engineering. Audris Mockus University of Tennessee and Avaya Labs Research [ ]

Experiment 9 : Pulse Width Modulation

SAFETY CASES: ARGUING THE SAFETY OF AUTONOMOUS SYSTEMS SIMON BURTON DAGSTUHL,

Software Is More Than Code

Automated Software Engineering Writing Code to Help You Write Code. Gregory Gay CSCE Computing in the Modern World October 27, 2015

Towards a Methodology for Designing Artificial Conscious Robotic Systems

Introduction to Software Engineering (Week 1 Session 2)

A Learning System for a Computational Science Related Topic

Introduction to Computer Science - PLTW #9340

Interior Architecture, BIAR Assessment Report, 2012

CSE 435: Software Engineering

Architecting Systems of the Future, page 1

Country Paper : Macao SAR, China

UW Campus Navigator: WiFi Navigation

Measure it? Manage it? Ignore it? Software Practitioners and Technical Debt

Software Maintenance Cycles with the RUP

VLSI System Testing. Outline

understand the hardware and software components that make up computer systems, and how they communicate with one another and with other systems

Vocal Command Recognition Using Parallel Processing of Multiple Confidence-Weighted Algorithms in an FPGA

The Rise & Fall(?) of Modelling

Digital Scenarios and Future Skills

ICS Security Architecture Where Worlds Collide SecureWorld September 22, 2011

Principled Construction of Software Safety Cases

ICT4 Manuf. Competence Center

Developing a Mobile, Service-Based Augmented Reality Tool for Modern Maintenance Work

Review of the Research Trends and Development Trends of Library Science in China in the Past Ten Years

This is the author s of a work accepted for publication by Springer. The final publication is available at

GUIDE TO SPEAKING POINTS:

The Resource-Instance Model of Music Representation 1

Transcription:

Winter Semester 16/17 Software Engineering Design & Construction Dr. Michael Eichberg Fachgebiet Softwaretechnik Technische Universität Darmstadt Introduction - Software Engineering

Software Engineering Timeline Impressions from the NATO Software Engineering Conferences 2

3 [The major cause of the software crisis is] that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. E. Dijkstra, 1972

Definition of Software Engineering Carnegie Mellon University's Software Engineering Institute (SEI) defines Software Engineering relative to Engineering as: Engineering is the systematic application of scientific knowledge in creating and building cost-effective solutions to practical problems in the service of mankind. Software engineering is that form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems. 4

5 But, as Dijkstra already identified... [...] I would like to insert a warning to those who identify the difficulty of the programming task with the struggle against the inadequacies of our current tools, because they might conclude that, once our tools will be much more adequate, programming will no longer be a problem. Programming will remain very difficult, because once we have freed ourselves from the circumstantial cumbersomeness, we will find our selves free to tackle the problems that are now well beyond our programming capacity. E. Dijkstra, 1972

6 struggle against the inadequacies of our current tools http://imgs.xkcd.com/comics/exploits_of_a_mom.png

2477 Vulnerabilities due to buffer errors (2013-2015) National Vulnerability Database, hkp://nvd.nist.gov On the State of Software Engineering

2230 Vulnerabilities due to cross-site scripting (2013-2015) National Vulnerability Database, hkp://nvd.nist.gov On the State of Software Engineering

2230 Vulnerabilities due to permissions, privileges and access control (2013-2015) National Vulnerability Database, hkp://nvd.nist.gov On the State of Software Engineering

1769 Vulnerabilities due to cryptographic issues (2013-2015) National Vulnerability Database, hkp://nvd.nist.gov On the State of Software Engineering

11 These issues were first described in 1972 - Buffer overflow used in a kernel Computer Security Technology Planning Study, 1972 1988 - Buffer overflow used in the Morris worm 1998 - SQL injection explained in the literature Phrack Magazine, 8(54), article 8 2000 - Cross-site scripting exploits CERT Malicious HTML Tags, 2000

Product Engineering Software as an Engineering Product? 1st Phase: Requirements Analysis The problem to solve is analyzed and documented. 2nd Phase: Design and Validation Engineers translate the requirements into a detailed description of the solution using models and rigorously validate these models. 3rd Phase: Building the Product Workers build the design using appropriate tools and materials. 12

13 Software as an Engineering Product? Hardware vs. Software Design Hardware Design Software Design Product is a physical object Product is the running software Building the product is: done by humans and robots expensive slow hard to redo Building the product is: done by compilers and linkers extremely cheap very fast easy to redo Precise quality measures No precise quality measures

Development of Eclipse 14

Code as Design: Three Essays by Jack W. Reeves http://www.developerdotstar.com/mag/articles/reeves_design_main.html The following essays offer three perspectives on a single theme, namely that programming is fundamentally a design activity and that the only final and true representation of "the design" is the source code itself. [...] What Is Software Design? http://www.developerdotstar.com/mag/articles/reeves_design.html This essay was first published in the Fall 1992 issue of the C++ Journal. [...] in recent years the essay has entered the flow of ideas and discussion in the software development community at large [...]. What Is Software Design: 13 Years Later http://www.developerdotstar.com/mag/articles/reeves_13yearslater.html In this essay the author responds to the most common arguments he has encountered. He also considers certain ideas from the original essay in light of more current trends and techniques. Letter to the Editor http://www.developerdotstar.com/mag/articles/reeves_originalletter.html This is the original letter written by Jack W. Reeves to C++ Journal. It stands as a rewarding essay in its own right, giving first written expression to the themes and ideas found in "What is Software Design?" In some aspects it is even more comprehensive and spirited than the essay it inspired. 15

16 NATO Software Engineering Conference 1968 [...] there is no essential difference between design and production, since the production will include decisions which will influence the performance of the software system, and thus properly belong in the design phase. Peter Naur [ ] Honestly, I cannot see how these activities allow a rigid separation if we are going to do a decent job. Edsger Dijkstra Back in the 1960s, writing the source code was considered to be the "production step".

Questionable Ideas Grounded on Misleading Analogies Software Industrialization Waterfall Model Programmer productivity as "Lines of Code" Outsourcing: Design here, Production elsewhere 17

18 Consequences of the Cheap Software Build?

19 In Software Development Complexity and Change are Invariants!

20 In Software Development Complexity and Change are Invariants! Designing for organizing complexity and facilitating change is the key to support maintainability.

Incomplete and Changing Requirements What is the right question to ask? How do we get complete requirements? Can we get complete requirements at all? 21

Incomplete and Changing Requirements Scenario: You are developing a software for personnel management that advices employees about their benefits, including their retirement plan. Initial Requirement: The first opportunity to withdraw money without penalty is when an employee turns 60. Resulting Code: if(employee.age >= 60) {...} 22 Does this reflect the reality?

Incomplete and Changing Requirements Scenario: (as previously shown) Initial Requirement: (as previously shown) Resulting Code: if(employee.age >= 60) { } Changed Requirement: After testing it is discovered that withdrawing money is possible when the employee is 59.5. Customer's Assessment: This change will be easy to do... But, the following change may not be possible: if(employee.age >= 59.5) {...} 23 Does this reflect the reality?

Incomplete and Changing Requirements Scenario: (as previously shown) Initial Requirement: (as previously shown) The task of the software development team is to engineer the illusion of simplicity. Resulting Code: if(employee.age >= 60) { } in G. Booch: Object-oriented Analysis with Applications, Addison-Wesley, 1993 Changed Requirement: After testing it is discovered that withdrawing money is possible when the employee is 59.5. Customer's Assessment: This change will be easy to do... But, the following change may not be possible: if(employee.age >= 59.5) {...} 24 Does this reflect the reality?

Everything is Part of the Design 1. High-level architectural design 2. Class-level design 3. Low(implementation)-level detailed design 4. The code 25

26 Testing and Debugging is Designing

27 Testing is not just concerned with getting the current design correct, it is part of refining the design.

28 In [...] embedded systems [...] the software requirements change throughout the software development process, even during system testing. This is largely due to unanticipated behavior, dynamic changes in the operating environment, and complex software/hardware and software/software interactions in the systems being developed. Controlling requirement changes (and, hence, the scope and cost of development) is difficult since the changes are often prompted by an improved understanding of the software s necessary interfaces with the physical components [...] in which it is embedded. Analyzing software requirements errors in safety-critical, embedded systems; R. R. Lutz; 1993

Auxiliary Documentation Auxiliary documentation should capture information from the problem space. Auxiliary documentation should document those aspects of the design that are difficult to extract directly from the design itself. But, keeping auxiliary documentation up to date manually is difficult. 29

"Up-to-Date" Auxiliary Documentation package org.eclipse.emf.teneo.hibernate.resource;... /** * Rolls back the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.dounload is not called because that clears * the list resulting in all kinds of undesirable inverse removes. */ @Override protected void dounload() { super.dounload(); }... 30

31 TO CODE IS TO DESIGN. Which doesn't mean that you should start coding right away!

Properties of a good development process recognizes programming as a design activity and does not hesitate to code when coding makes sense. recognizes testing and debugging as design activities - the software equivalent of design validation and refinement of other engineering disciplines - and does not shorten the steps. recognizes that there are other design activities: top level design, module design, class design, etc. recognizes that all design activities interact and allows the design to change as various steps reveal the need. 32

33 If to code is to design, then Programming Languages are Design Languages! Which doesn't mean that you should start coding right away!

34 We need a unified design notation suitable for all levels of design, i.e., programming languages that are suitable for capturing high-level design.

35 Making Code Look Like Design Functional Object-oriented Programming Object-oriented Programming Functional Programming Modular Programming Structured Programming Assembler-like Languages

36 Advances in programming language technology are driven by the need to make programming languages capable of more directly capturing higher-level designs!

Takeaway Consequences of the cheap build for this course Designing means structuring code in modular way so as to support managing complexity and continuous change. We will adopt an agile design process to accommodate change in the design process. We will adopt test-driven development, as we consider testing to be part of design. Languages as design notations will be in focus but also design principles and styles as well as tools for expressing modular structures outside the languages. 37