Software Engineering I (02161)

Similar documents
Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

02291: System Integration

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

02161: Software Engineering I

Software Engineering I (02161)

Software Engineering I (02161)

02291: System Integration

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

Software Engineering I (02161)

02291: System Integration

02291: System Integration

Software Engineering I (02161)

Outline. Logistics. Logistics. Principles of Software (CSCI 2600) Spring Logistics csci2600/

Software Engineering I (02161)

Analysis of the Test Driven Development by Example

Software Engineering I (02161)

Objects and State. COMP1400 Week 9. Wednesday, 19 September 12

02291: System Integration

Software Engineering I (02161)

Tools for Unit Test - JUnit

San José State University Department of Computer Science CS151, Object Oriented Design, Section 04, Fall, 2016 (42968)

UML for Global Computing Lecture 3: Property-Driven Development

Dealing with Bugs. Kenneth M. Anderson University of Colorado, Boulder CSCI 5828 Lecture 27 04/21/2009

Software Engineering I (02161)

COMP 354 TDD and Refactoring

02267: Software Development of Web Services

Tools for Unit Test JUnit

OHJ-306x: Software Testing Introduction to the Course Project Part 1: General Information and Project phases 1 & 2: Unit testing

Two hours. Appendices A and B are located at the back of the exam UNIVERSITY OF MANCHESTER SCHOOL OF COMPUTER SCIENCE

Testing. My favourite testing quote: Program testing can be used to show the presence of bugs, but never to show their absence!

Tuesday, November 15. Testing

(Movement - Synthesis) Improve existing programming skills by developing much larger and more complex programs than in previous classes.

San Jose State University College of Science Department of Computer Science CS151, Object-Oriented Design, Sections 1,2 and 3, Spring 2017

02267: Software Development of Web Services

Software Testing. Software Testing. in the textbook. Chapter 8. Verification and Validation. Verification Techniques

Introduction to Programming System Design CSCI 455x (4 Units)

CSE 70 Final Exam Fall 2009

Agile Manifesto & XP. Topics. Rapid software development. Agile methods. Chapter ) What is Agile trying to do?

Recreation. MyClass.mogrify(new int[] { 1, 2, 4, 6 }));

System Modelling. Lecture

Trusted Components. Reuse, Contracts and Patterns. Prof. Dr. Bertrand Meyer Dr. Karine Arnout

Test Driven Development. Software Engineering, DVGC18 Faculty of Economic Sciences, Communication and IT Tobias Pulls and Eivind Nordby

Level: M.Ed. Credit Hour: 3 (2+1) Semester: Second Teaching Hour: 80(32+48)

3D Graphics Programming Mira Costa High School - Class Syllabus,

Multiple Inheritance, Abstract Classes, Interfaces

FACULTY OF BUSINESS AND SOCIAL SCIENCES :51 COURSE. Operations and Supply Chain Management

Software Testing Prof. Meenakshi D Souza Department of Computer Science and Engineering International Institute of Information Technology, Bangalore

JUnit in EDA Introduction. 2 JUnit 4.3

San José State University Department of Computer Science CS151, Section 04 Object Oriented Design Spring 2018

Software Engineering 2 A practical course in software engineering. Ekkart Kindler

Week 9 Implementation

Introduc)on to tes)ng with JUnit. Workshop 3

To Think About. MyClass.mogrify(new int[] { 1, 2, 4, 6 }));

San Jose State University - Department of Computer Science

EECS 4313 Software Engineering Testing

Object-Oriented Analysis and Design

Programming II (CS300)

Introduction to Computation and Problem Solving

Software Engineering I (02161)

Credit where Credit is Due. Lecture 29: Test-Driven Development. Test-Driven Development. Goals for this lecture

TIETS14 Introduction to Formal Specification

Introduction to the course and basic programming concepts

The experimental guide: comparing automatic test generation with manual test generation from UML state machine diagrams of a vending machine program

Principles of Software Construction: Objects, Design, and Concurrency

CALEDONIAN COLLEGE OF ENGINEERING, MODULE HANDBOOK. Department of Electrical & Computer Engineering SULTANATE OF OMAN. Module Code

Test suites Obviously you have to test your code to get it working in the first place You can do ad hoc testing (testing whatever occurs to you at

Programming II (CS300)

COMP220: SOFTWARE DEVELOPMENT TOOLS COMP285: COMPUTER AIDED SOFTWARE DEVELOPMENT

Test-Driven Development

CS112 Lecture: Defining Classes. 1. To describe the process of defining an instantiable class

CS112 Lecture: Defining Instantiable Classes

Object Oriented Programming. Week 7 Part 1 Exceptions

Prof. Dr. A. Podelski, Sommersemester 2017 Dr. B. Westphal. Softwaretechnik/Software Engineering

B. Subject-specific skills B1. Problem solving skills: Supply the student with the ability to solve different problems related to the topics

COURSE 11 DESIGN PATTERNS

Object-Oriented Programming CSCI-UA

COURSE OUTLINE. Course lecturer(s) Name Office Tel (07-55) Dr Norsham Idris N /

02291: System Integration

Lab 5 Random numbers!

SYLLABUS / FIȘA DISCIPLINEI

Software Engineering Testing and Debugging Testing

REPAST MODEL TESTING GUIDE

Do not turn to the next page until the start of the exam.

KOMAR UNIVERSITY OF SCIENCE AND TECHNOLOGY (KUST)

Software Testing. Software Testing. in the textbook. Chapter 8. Verification and Validation. Verification and Validation: Goals

Killer Windows 8 App Master Class with David Platt. June 17 June 21, 2013 Belgium (TBD)

Agenda: Discussion Week 7. May 11, 2009

Introduction. Software Architecture VO/KU ( / ) Roman Kern. KTI, TU Graz

Transcription:

Software Engineering I (02161) Week 1 Assoc. Prof. Hubert Baumeister DTU Compute Technical University of Denmark Spring 2016

Contents Course Introduction Introduction to Software Engineering Practical Information First Programming Assignment JUnit Java Tips and Tricks

The course 5 ECTS course 02161: Software Engineering 1 Target group: Bachelor in Software Technology and IT and Communication in the second semester Learning objectives To have an overview over the field software engineering and what is required in software engineering besides programming To be able to take part in bigger software development projects To be able to communicate with other software designers about requirements, architecture, design To be able to conduct a smaller project from an informal and open description of the problem

Who are we? 119 students with different backgrounds Bachelor Softwaretek.: 71 Bachelor It og Kom.: 39 Bacheolor other: 5 Other: 4 Teacher Hubert Baumeister, Assoc. Prof. at DTU Compute (huba@dtu.dk; office 303B.058) 3 Teaching assistants Jonas Holger Hansen Maja Lund Mathias Kirkeskov Madsen

Contents Course Introduction Introduction to Software Engineering Introduction Development Example Practical Information First Programming Assignment JUnit Java Tips and Tricks

Building software Tools and techniques for building software, in particular large software

What is software? Software is everywhere Stand-alone application (e.g. Word, Excel), Mobile applications, Interactive transaction-based applications (e.g. flight booking), Embedded control systems (e.g., control software the Metro, mobile phones), Batch processing systems (e.g. salary payment systems, tax systems), Entertainment systems (e.g. Games), System for modelling and simulation (e.g. weather forecasts), Data collection and analysing software (e.g. physical data collection via sensors, but also data-mining Google searches), System of systems (e.g. cloud, system of interacting software systems),... Types of software Mass production, Customised software, Mixture of both Not one tool, method, or theory Though there are general principles applicable to all domains

Software attributes Maintainability Can be evolved through several releases and changes in requirements and usage Dependability and security Includes: reliability (robustness), security, and safety Efficiency Don t waste system resources such as memory or processor cycles Responsiveness, processing time, memory utilisation Acceptability To the user of the system understandable, usable, and compatible with the other systems the user uses

What belongs to software? Computer program(s), but also Validation (e.g. tests) Documentation (User, System ) Configuration files...

Software Engineering Software Engineering Definition (Sommerville 2010) Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages of system specification through to maintaining the system after it has gone into use. An engineer applies appropriate theories, methods, and tools All aspects of software production: Not only writing the software but also Software project management and creation of tools, methods and theories

Basic Activities in Software Development Understand and document what kind of the software the customer wants Determine how the software is to be built Build the software Document and being able to talk about the software Validate that the software solves the customers problem Each activity has a set of techniques and methods

Example Vending Machine Design and implement a control software for a vending machine

Vending Machine: Requirements documentation Understand and document what kind of the software the customer wants Glossary Use case diagram Detailed use case

Requirements: Glossary Vending machine: The vending machine allows users to buy fruit. User: The user of the vending machine buys fruit by inserting coins into the machine. Owner: The owner owns the vending machine. He is required to refill the machine and can remove the money from the machine. Display: The display shows how much money the user has inserted. Buy fruit: Buy fruit is the process, by which the user inputs coins into the vending machine and selects a fruit by pressing a button. If enough coins have been provided the selected fruit is dispensed. Cancel: The user can cancel the process by pressing the button cancel. In this case the coins he has inserted will be returned....

Requirements: Use case diagram VendingMachine Buy Fruit User Cancel Refill Machine Takeout Money Owner

Requirements: Detailed Use Case: Buy Fruit name: Buy fruit description: Entering coins and buying a fruit actor: user main scenario: 1. Input coins until the price for the fruit to be selected is reached 2. Select a fruit 3. Vending machine dispenses fruit alternative scenarios: a1. User inputs more coins than necessary a2. select a fruit a3. Vending machine dispenses fruit a4. Vending machine returns excessive coins...

Testing: Vending Machine: Specify success criteria Prepare for the validation Create tests together with the customer that show when system fulfils the customers requirements Acceptance tests Test driven development create tests before the implementation Otherwise: after the implementation

Testing: Functional Test for Buy Fruit Use Case: JUnit Tests @Test public void testbuyfruitexactmoney() { VendingMachine m = new VendingMachine(10, 10); m.input(1); m.input(2); assertequals(3, m.getcurrentmoney()); m.selectfruit(fruit.apple); assertequals(fruit.apple, m.getdispenseditem()); } @Test public void testbuyfruitoverpaid() { VendingMachine m = new VendingMachine(10, 10); m.input(5); assertequals(5, m.getcurrentmoney()); m.selectfruit(fruit.apple); assertequals(fruit.apple, m.getdispenseditem()); assertequals(2, m.getrest()); } // more tests // at least one for each main/alternative scenario

Vending Machine: Design and implementation Determine how the software is to be built Class diagrams to show the structure of the system State machines and sequence diagrams to show how the system behaves Build the software Implement the state machine using the state design pattern

Design: High-level Class diagram VendingMachine dispenseditem: Fruit currentmoney: int totalmoney: int restmoney: int input(money: int) select(f: fruit) cancel() * «enumeration» Fruit APPLE BANANA

Design: Application logic as state machine

Design: Design of the system as class diagram Uses the state design pattern VendingMachine dispenseditem: Fruit currentmoney: int totalmoney: int restmoney: int input(money: int) select(f: fruit) cancel() ~setidlestate() ~dispense(f: Fruit) ~setcurrentstateforfruit(f: Fruit) ~hasfruit(f: Fruit) 1 «interface» VendingMachineState input(m: VendingMachine, money: int) select(m: VendingMachinef: fruit) cancel(m: VendingMachine) IdleState input(m: VendingMachine, money: int) select(m: VendingMachinef: fruit) cancel(m: VendingMachine) m.setcurrentmoney(m.getcurrentmoney() + i); if (!m.hasfruit(fruit)) { m.setidlestate(); return; } if (m.hasenoughmoneyfor(fruit)) { m.setidlestate(); m.dispense(fruit); } else { m.setcurrentstateforfruit(fruit); } m.dispense(null); * «enumeration» Fruit APPLE BANANA 1 FruitSelectionState input(m: VendingMachine, money: int) select(m: VendingMachinef: fruit) cancel(m: VendingMachine) super.input(m, i); if (m.hasenoughmoneyfor(selectedfruit)) { m.setidlestate(); m.dispense(selectedfruit); } m.setidlestate(); super.cancel(m);

Design: Vending Machine: Visualization of the Execution Designing the system Documentation the system Use Interaction Diagrams, aka. Sequence Diagrams

Design: Interaction Diagram: Swing GUI sd:buy apple

Contents Course Introduction Introduction to Software Engineering Practical Information First Programming Assignment JUnit Java Tips and Tricks

Course content 1. Requirements Engineering (Use Cases, User Stories, Glossary) 2. Software Testing (JUnit, Test Driven Development, Systematic Tests, Code Coverage) 3. System Modelling (Class Diagrams, Sequence Diagrams, State Machines) 4. Architecture (e.g layered architecture) 5. Design (among others Design Patterns and Design by Contract) 6. Software Development Process (focus on agile processes) 7. Project Management (project planning)

Course activities Lectures every Monday 13:00 approx 15:00 (Lecture plan is on the course Web page) Exercises (databar 003, 015, 019 in building 341) Teaching assistants will be present : 15:00 17:00 Expected work at home: 5 hours (lecture preparation; exercises,... ) Assignments Programming Non-programming not mandatory But hand-in recommended to get feedback Preparation for the examination project

Examination Exam project in groups (2 4) Model, Software, Report, Demonstration Focus on that you have learned the techniques and methods no written examination Week 05: Project introduction and forming of project groups; participation mandatory Week 07: Submission of use cases and design Week 08: Peer review of use cases and design; start of implementation phase Week 13: Demonstration of the projects (each project 15 min)

Course material Course Web page: http://www.imm.dtu.dk/courses/02161 contains practical information: (e.g. lecture plan) Course material (e.g. slides, exercises, notes) Check the course Web page regularly CampusNet: Is being used to send messages; make sure that you receive all messages from CampusNet Books: Textbook: Software Engineering 9/10 from Ian Sommerville and UML Destilled by Martin Fowler Suplementary literature on the course Web page

Course Language The course language is Danish; slides, notes, and other material mostly in English If everybody agrees to that, it can be given in English

Contents Course Introduction Introduction to Software Engineering Practical Information First Programming Assignment JUnit Java Tips and Tricks

Programming Assignments Implementation of a library software Guided development based on agile software development principles User-story driven: The development is done based on user stories that are implemented one by one Test-driven: Each user-story is implemented by first writing the test for it and then writing the code All programming assignments are available directly

Layered Architecture Eric Evans, Domain Driven Design, Addison-Wesley, 1. Development of the application + domain layer (assignments 1 4) 2. Presentation layer: Command line GUI (assignment 5) 3. Simple persistency layer (assignment 6) 2004

First week s exercise Using Test-Driven Development to develop the application + domain layer Basic idea: First define the tests that the software has to pass, then develop the software to pass the tests Writing tests before the code is a design activity, as it requires to define the interface of the code and how to use the code, before the code is written Test are automatic using the JUnit framework First Week s exercise: Tests are given, you implement just enough code to make the tests pass Video on the home page of the course This is done by uncommenting each test one after the other First implement the code to make one test run, only then uncomment the next test and make that test run

Contents Course Introduction Introduction to Software Engineering Practical Information First Programming Assignment JUnit Java Tips and Tricks

JUnit JUnit is designed by Kent Beck in Erich Gamma to allow one to write automated tests and execute them conveniently JUnit can be used standalone, but is usually integrated in the IDE (in our case Eclipse) We are going to use JUnit version 4.x which indicates tests to be run automatically using the @org.junit.test annotation (or just @Test if org.junit.test is imported)

Example of a JUnit Test The following tests one scenario of the login functionality: 1. First check that the adminstrator is not logged in 2. login the adminstrator 3. Check that the login operation returns the correct return value (in this case true) 4. Check with the system, that the user is logged in @Test public void testlogin() { LibraryApp libapp = new LibraryApp(); assertfalse(libapp.adminloggedin()); boolean login = libapp.adminlogin("adminadmin"); asserttrue(login); asserttrue(libapp.adminloggedin()); } The Web site of the course has a link to a video showing you how you should work on the programming assignments

Contents Course Introduction Introduction to Software Engineering Practical Information First Programming Assignment JUnit Java Tips and Tricks User-defined Exceptions Collections

User-defined Exceptions Purpose: To notify the caller about some exceptional or error state of the method public void addbook(book book) throws OperationNotAllowedException { if (!adminloggedin()) throw new OperationNotAllowedException(...);... } Creating a user defined exception public class OperationNotAllowedException extends Exception { public OperationNotAllowedException(String errormsg) { super(errormsg); } } Throwing a user-defined exception throw new OperationNotAllowedException("some error message");

Checked vs. unchecked Exceptions Checked Exception public class MyCheckedException extends Exception {...} Methods which throw MyCheckedException must have throws MyCheckedException in the signature, e.g. public void m() throws MyCheckedException {...} Unchecked Exception public class MyUncheckedException extends Error {...} Methods don t need the throw clause

User-defined Exceptions: Example Catching an user-defined exception try { libapp.addbook(book1); } catch (OperationNotAllowedException e) { // Error handling code }

Compiler error: Unreachable catch block Test code try { libapp.addbook(book1); fail(); } catch (OperationNotAllowedException e) {.. } Code added by Eclipse public void addbook(book book) { } Compiler error: Unreachable catch block for OperationNotAllowedException. This exception is never thrown from the try statement body

Compiler error: Unreachable catch block Test code try { libapp.addbook(book1); fail(); } catch (OperationNotAllowedException e) {.. } Code added by Eclipse public void addbook(book book) { } Compiler error: Unreachable catch block for OperationNotAllowedException. This exception is never thrown from the try statement body Solution public void addbook(book book) throws OperationNotAllowedException { } Problem only occurs with checked exceptions

Testing and exceptions Test for the presence of an exception @Test public void testsomething() {... try { // Some code that is expected to // throw OperationNotAllowedException assertfalse(libapp.adminloggedin()); libapp.addbook(b); fail("expected OperationNotAllowedException to be thrown"); } catch (OperationNotAllowedException e) { // Check, e.g., that the error message is correctly set assertequals(expected, e.getmessage()); } } Alternative test @Test(expected=OperationNotAllowedException.class) public void testsomething() {...} No try-catch if you don t test for an exception: JUnit knows best how to handle not expected exceptions

Lists (Collections) Interface: java.util.list<t> https://docs.oracle.com/javase/8/docs/api/ java/util/list.html Classes implementing the List interface: java.util.arraylist<t>, java.util.vector<t> (among others) Use java.util.list<t> in all methods and as the type of the instance variable Information hiding decoupling implementation from usage

Creating a List Instance variable containing a list List<Book> books = new ArrayList<Book>(); Alternative (not so good) ArrayList<Book> books = new ArrayList<Book>();

Iterating over a list Variant a) for (int i = 0; i < books.size(); i++) { Book book = books.get(i); // do something with book }

Iterating over a list Variant a) for (int i = 0; i < books.size(); i++) { Book book = books.get(i); // do something with book } Variant b) for (Iterator it = books.iterator(); it.hasnext(); ) { Book book = it.next(); // do something with book }

Iterating over a list Variant a) for (int i = 0; i < books.size(); i++) { Book book = books.get(i); // do something with book } Variant b) for (Iterator it = books.iterator(); it.hasnext(); ) { Book book = it.next(); // do something with book } Variant c) recommended way for (Book book : books) { // do something with book }

Iterating over a list Variant a) for (int i = 0; i < books.size(); i++) { Book book = books.get(i); // do something with book } Variant b) for (Iterator it = books.iterator(); it.hasnext(); ) { Book book = it.next(); // do something with book } Variant c) recommended way for (Book book : books) { // do something with book } Variant d) using Streams in Java 8 books.stream().foreach( b -> { /* do something */ });

Pre Java 8 vs Java 8 Finding an element: Using foreach in Java 7 public Book findbook(string name) { for (Book book : books) { if (book.getname().equals(name)) { return book; } } return null; } Using streams in Java 8 public Book findbook(string name) { Optional r = books.stream().filter(b -> b.getname().equals(name)).findfirst(); return r.ispresent()? r.get() : null; }