CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.

Slides:



Advertisements
Similar presentations
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 1: Introduction.
Advertisements

CS540 Software Design Lecture 1 1 Lecture 1: Introduction to Software Design Anita S. Malik Adapted from Budgen (2003) Chapters 1.
Introduction To System Analysis and Design
The Unified Software Development Process - Workflows Ivar Jacobson, Grady Booch, James Rumbaugh Addison Wesley, 1999.
Chapter 1: Introduction
R R R CSE870: Advanced Software Engineering (Cheng): Intro to Software Engineering1 Advanced Software Engineering Dr. Cheng Overview of Software Engineering.
CSE 111: Object Oriented Design. Design “To program is human but to design is divine” (WEH)
Introduction to Software Engineering CS-300 Fall 2005 Supreeth Venkataraman.
The Software Product Life Cycle. Views of the Software Product Life Cycle  Management  Software engineering  Engineering design  Architectural design.
Mastering OOA/OOD with UML. Contents Introduction Requirements Overview OOAOOD.
CSC230 Software Design (Engineering)
Introduction to Software Design Chapter 1. Chapter 1: Introduction to Software Design2 Chapter Objectives To become familiar with the software challenge.
Software Process Activities. Process activities Real software processes are inter-leaved sequences of technical, collaborative and managerial activities.
CHAPTER 19 Building Software.
Chapter 1: Introduction
Basic Concepts The Unified Modeling Language (UML) SYSC System Analysis and Design.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 18 Slide 1 Software Reuse.
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 1: Introduction.
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 1 Introduction to Software Engineering CEN 4010.
S/W Project Management Software Process Models. Objectives To understand  Software process and process models, including the main characteristics of.
Conquering Complex and Changing Systems Object-Oriented Software Engineering Chapter 1, Introduction to Software Engineering.
Software Engineering CS B Prof. George Heineman.
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 1: Introduction.
Design Patterns OOD. Course topics Design Principles UML –Class Diagrams –Sequence Diagrams Design Patterns C#,.NET (all the course examples) Design Principles.
1/19 Component Design On-demand Learning Series Software Engineering of Web Application - Principles of Good Component Design Hunan University, Software.
COP 3331 OO Analysis and Design
Object Oriented Analysis and Design Introduction.
© 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 1 A Discipline of Software Design.
1 SYS366 Lecture 1: Introduction to Systems. 2 What is Software Development? Software Development implies developing some software – but it does not involve.
Introduction To System Analysis and Design
Programming in Java Unit 3. Learning outcome:  LO2:Be able to design Java solutions  LO3:Be able to implement Java solutions Assessment criteria: 
CSE 308 Software Engineering Software Engineering Strategies.
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 4, Requirements Elicitation.
Design engineering Vilnius The goal of design engineering is to produce a model that exhibits: firmness – a program should not have bugs that inhibit.
CS 319: Object Oriented Software Engineering
1 Systems Analysis and Design in a Changing World, Thursday, January 18, 2007.
Introduction CS 3358 Data Structures. What is Computer Science? Computer Science is the study of algorithms, including their  Formal and mathematical.
1 Introduction to Software Engineering Lecture 1.
The Systems Development Life Cycle
L8 - March 28, 2006copyright Thomas Pole , all rights reserved 1 Lecture 8: Software Asset Management and Text Ch. 5: Software Factories, (Review)
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 1: Introduction.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
Systems Analysis and Design in a Changing World, Fourth Edition
CEN5011, Fall CEN5011 Software Engineering Dr. Yi Deng ECS359, (305)
Object-Oriented Software Engineering using Java, Patterns &UML. Presented by: E.S. Mbokane Department of System Development Faculty of ICT Tshwane University.
OOAD Unit – I OBJECT-ORIENTED ANALYSIS AND DESIGN With applications
Software Production ( ) First Semester 2011/2012 Dr. Samer Odeh Hanna (PhD)
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 16, Methodologies: Putting it all together.
CS251 – Software Engineering Lecture 9: Software Design Slides by Mohammad El-Ramly, PhD
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
CSPC 464 Fall 2014 Son Nguyen.  Attendance/Roster  Introduction ◦ Instructor ◦ Students  Syllabus  Q & A.
Stand Up Comedy Project/Product Management
4+1 View Model of Software Architecture
1 SYS366 Week 1 - Lecture 1 Introduction to Systems.
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
Design and implementation Chapter 7 – Lecture 1. Design and implementation Software design and implementation is the stage in the software engineering.
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 1: Introduction.
Requirements. Outline Definition Requirements Process Requirements Documentation Next Steps 1.
Chapter 7 Lecture 1 Design and Implementation. Design and implementation Software design and implementation is the stage in the software engineering process.
Introduction to Software Engineering 1. Software Engineering Failures – Complexity – Change 2. What is Software Engineering? – Using engineering approaches.
Why is Design so Difficult? Analysis: Focuses on the application domain Design: Focuses on the solution domain –The solution domain is changing very rapidly.
Review of last class Software Engineering Modeling Problem Solving
Requirements Analysis Scenes
Object-Oriented Software Engineering Using UML, Patterns, and Java,
Decomposition.
Chapter 5 Designing the Architecture Shari L. Pfleeger Joanne M. Atlee
Chapter 1, Introduction to Software Engineering
Introduction To software engineering
Introduction to Systems Analysis and Design Stefano Moshi Memorial University College System Analysis & Design BIT
Presentation transcript:

CS350/550 Software Engineering Lecture 1

Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There will also be homeworks building on each other Class participation is essential

Class participation You will need to create documents and present them in class You will need to criticize other people’s presentations –You may need to build on them You will need to ask questions –Because software engineers must ask the right questions of a customer

Assignment #1 Think of ideas for the class project –More than one would be great It should be a useful idea (somebody actually can use it) It should be feasible in one semester –Not too big, not too small Due next Tuesday You will have to present them next week

Who are you? Good programmer in some language –Survey class for languages –You only wrote programs for your teacher to grade, and then you forgot about it No experience in analyzing or designing systems –what you will probably do in the real world Want to learn technical aspects of designing complex systems

Objectives of Class Appreciate Software Engineering –Build complex systems that frequently change Understand how to produce a quality system in time, and deal with complexity and change Acquire technical knowledge Acquire managerial knowledge (a little)

Why Software Engineering Why don’t you just sit down and start typing a program? Software systems are so big and complex –And they can change You need these techniques to control the construction of software systems I want you to appreciate the fact that without some rigid process, this is impossible

Software is buggy Everybody knows stories of buggy software that can waste lots of money or even kill people If we design things carefully, we can have fewer bugs –Probably not no bugs

You will learn How to model a system –UML is a language that was created for this purpose –Object-oriented vs functional decomposition What is the software lifecycle Component based techniques –Using design patterns for reuse How to run projects

Software Engineering Definition Collection of techniques (methodology) and tools that help with the production of –A high quality software system –With a given budget –Before a given deadline while change occurs

Factors affecting quality Complexity –No single programmer can understand it –Fixing one bug causes another one Change –Each change increases complexity and erodes the structure of a system –At some point, it is too expensive to make a change, and system cannot perform its function

Why are software systems complex? The problem domain is difficult The development process is difficult to manage Software offers extreme flexibility Continuous systems are modeled discretely

Software Engineering Analysis: Understand problem and break it into pieces Synthesis: Put pieces back together

Dealing with complexity 1.Abstraction 2.Decomposition 3.Hierarchy

1. Abstraction Inherent human limitation to deal with complexity Chunking: Group collections of objects Ignore unessential details  Models

2. Decomposition Divide and Conquer Functional Decomposition Object-oriented Decomposition

Functional Decomposition System decomposed into modules Each module is a function in application domain Modules can be decomposed into smaller modules

Object-oriented Decomposition System decomposed into classes (objects) Each class is a major abstraction in application domain Classes can be decomposed into smaller classes

Functional Decomposition Functionality is spread all over the system Maintainer must understand whole system to make a single change Consequence –Code is harder to understand –Complex code is harder to maintain –User interface can be awkward and non- intuitive

3. Hierarchy We got abstractions and decomposition Another way to deal with complexity is to provide relationships between chunks One of the most important relationships is hierarchy –“part-of” hierarchy –“is-kind-of” hierarchy

Where are we? 3 ways to deal with complexity –Abstraction, decomposition, hierarchy Object-oriented decomposition is a good methodology –Depending on purpose of system, different objects can be found How to do it right –Our approach is to start with a description of the functionality, then proceed to object model

Software Lifecycle Definition Software Lifecycle: –Set of activities and their relationship to each other to support the development of a software system Typical Lifecycle questions: –Which activities should I select? –What are the dependencies between them? –How should I schedule them?

Software Lifecycle Activities Requirements Elicitation Analysis System Design Object Design Implementation Testing

Requirements Elicitation Client and Developers define the purpose of the system Result is actors and use cases (model) Actor = role somebody or something plays Use Case = sequence of events that describes possible actions of user with system

Analysis Developer transforms use cases into an object model that completely describes the system Client should understand result of analysis

System Design Developers define design goals and decompose system into smaller subsystems Also select strategies for building system Client cannot understand this

Object Design Developer designs solution domain objects Result of object design is detailed object model with constraints and precise descriptions of each element

Implementation Developers transform solution domain model into source code Note that only this small part of development involves programming

Testing Developers find differences between the system and its model by executing the system with sample input data sets Unit testing, integration testing, system testing

Reusability A good software design solves a specific problem but is general enough to address future problems (changing requirements) Software engineers create reusable software, and reuse solutions others have created Using design patterns

Design Patterns A set of classes that provide a template solution to a recurring design problem On a higher level than data structures