Software Engineering Principles

Similar documents
COMP 354 Introduction to Software Engineering

Qualities of software and its development

Lecture 1. Chapter 6 Architectural design

Schedule(3/3) March 18th 13:00 Unified Process and Usecase-Driven Approach. (problem definition, use case model)

5/9/2014. Recall the design process. Lecture 1. Establishing the overall structureof a software system. Topics covered

Chapter 6 Architectural Design. Chapter 6 Architectural design

Architectural Design

Chapter 6 Architectural Design. Lecture 1. Chapter 6 Architectural design

CMSC 435: Software Engineering Section 0201

Second. Incremental development model

CSC 330 Object Oriented Software Design. Software Design Phase

Architectural Design

Software Design. Levels in Design Process. Design Methodologies. Levels..

Incremental development A.Y. 2018/2019

Chapter 6 Architectural Design

Requirements and Design Overview

Verification and Validation. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 22 Slide 1

Software Design Fundamentals. CSCE Lecture 11-09/27/2016

CS 292 Software Development

WHAT IS SOFTWARE ARCHITECTURE?

Refactoring Practice: How it is and How it Should be Supported

Introduction to Software Engineering

ICS 52: Introduction to Software Engineering

Software Development Chapter 1

SOFTWARE ENGINEERING. To discuss several different ways to implement software reuse. To describe the development of software product lines.

The Software Design Process. CSCE 315 Programming Studio, Fall 2017 Tanzir Ahmed

Introduction to Software Engineering

Software Engineering with Objects and Components Open Issues and Course Summary

Introduction. Chapter 1. What Is Visual Modeling? The Triangle for Success. The Role of Notation. History of the UML. The Role of Process

A new international standard for data validation and processing

Modularity!! Guidelines for design! in any programming language!

Classes and Objects. Object Orientated Analysis and Design. Benjamin Kenwright

Test-Driven Development (TDD)

PC204. Lecture 5 Programming Methodologies. Copyright 2000 by Conrad Huang and the Regents of the University of California. All rights reserved.

Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 22 Slide 1

1 Software Architecture

Objectives. Architectural Design. Software architecture. Topics covered. Architectural design. Advantages of explicit architecture

Verification and Validation

Sardar Vallabhbhai Patel Institute of Technology (SVIT), Vasad M.C.A. Department COSMOS LECTURE SERIES ( ) (ODD) Code Optimization

Topic 01. Software Engineering, Web Engineering, agile methodologies.

Verification and Validation

Lecture 13 Introduction to Software Architecture

Modularity Guidelines for design in any programming language

COSC 3351 Software Design. Software Design Methodology. Edgar Gabriel. Spring Outline

Information Regarding Program Input.

Object-Oriented Design II - GRASP

An Introduction to Software Architecture. David Garlan & Mary Shaw 94

1 Getting used to Python

From Module To Objects

Design Patterns V Structural Design Patterns, 2

Application Architectures, Design Patterns

Briefing Paper: developing the DOI Namespace

SOFTWARE ENGINEERING. Lecture 6. By: Latifa ALrashed. Networks and Communication Department

Contemporary Design. Traditional Hardware Design. Traditional Hardware Design. HDL Based Hardware Design User Inputs. Requirements.

Object Visibility: Making the Necessary Connections

Part 5. Verification and Validation

Today s Lecture. Architecture Specification. Design Elements. Lecture 28: Software Architecture. Software Architecture

Architectural Design

CS504-Softwere Engineering -1 Solved Objective Midterm Papers For Preparation of Midterm Exam

Introduction to Programming Languages and Compilers. CS164 11:00-12:30 TT 10 Evans. UPRM ICOM 4029 (Adapted from: Prof. Necula UCB CS 164)

CSCI B522 Lecture 11 Naming and Scope 8 Oct, 2009

CS SOFTWARE ENGINEERING QUESTION BANK SIXTEEN MARKS

An Introduction to Software Architecture By David Garlan & Mary Shaw 94

PROGRAM OUTLINE. Information Technology with Co-op, System Programming. PROGRAM DESCRIPTION Concentration 1: DELIVERY METHODS PROGRAM DURATION

SLIDE 2. At the beginning of the lecture, we answer question: On what platform the system will work when discussing this subject?

Lecture Notes on Compiler Design: Overview

SDN controller: Intent-based Northbound Interface realization for extended applications

Ch 1: The Architecture Business Cycle

Seng 480b/CSC 586b Building Web Applications

Reducing the costs of rework. Coping with change. Software prototyping. Ways to Cope with change. Benefits of prototyping

Introduction to Control Systems Design

WHO WANTS TO BE A DESILLIONAIRE GAME RULES INTERNATIONAL TEAM OF EXPERTS MAIN IDEA INTERACTIVE SYSTEMS SOFTWARE ARCHITECTURAL STYLES

Review Software Engineering October, 7, Adrian Iftene

Verification Overview Testing Theory and Principles Testing in Practice. Verification. Miaoqing Huang University of Arkansas 1 / 80

Software Design. Software design is a blueprint or a plan for a computerbased solution for system

SOFTWARE LIFE-CYCLE MODELS 2.1

CATCH ERRORS BEFORE THEY HAPPEN. Lessons for a mature data governance practice

Object-Oriented and Classical Software Engineering DESIGN 11/12/2017. CET/CSC490 Software Engineering Design CHAPTER 14. Stephen R. Schach.

Compilers. Prerequisites

Lecture 1: Course Introduction

ITC213: STRUCTURED PROGRAMMING. Bhaskar Shrestha National College of Computer Studies Tribhuvan University

SOFTWARE PRODUCT QUALITY SOFTWARE ENGINEERING SOFTWARE QUALITY SOFTWARE QUALITIES - PRODUCT AND PROCESS SOFTWARE QUALITY - QUALITY COMPONENTS

SOFTWARE ENGINEERING SOFTWARE EVOLUTION. Saulius Ragaišis.

Complexity. Object Orientated Analysis and Design. Benjamin Kenwright

Architectural Design. Architectural Design. Software Architecture. Architectural Models

CPSC 310: Sample Final Exam Study Questions 2014S1 (These are in addition to the Study Questions listed at the end of some lectures)

Chapter : Analysis Modeling

Engr. M. Fahad Khan Lecturer Software Engineering Department University Of Engineering & Technology Taxila

Modern Software Engineering Methodologies Meet Data Warehouse Design: 4WD

Dr. Tom Hicks. Computer Science Department Trinity University

EE382N (20): Computer Architecture - Parallelism and Locality Spring 2015 Lecture 14 Parallelism in Software I

Testing, Module To Object, Reusability

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

Object-Oriented Design I

Compiler Design. Computer Science & Information Technology (CS) Rank under AIR 100

Yahoo! Digits: A Design Driven to Provide Instant Data Driven Insights and its Use in User Experience Design

Verification Black-box Testing & Testing in the Large

Setting the stage... Key Design Issues. Main purpose - Manage software system complexity by improving software quality factors

AERONAUTICAL RESEARCH JOURNAL Name

Rapid Prototyping with APICES

Transcription:

1 / 19 Software Engineering Principles Miaoqing Huang University of Arkansas Spring 2010

2 / 19 Outline 1 2 3 Compiler Construction

3 / 19 Outline 1 2 3 Compiler Construction

Principles, Methodologies, and Tools Principles primarily deal with the process of software engineering, i.e., the development of software The right process will help produce the desired software product Principles will guide the adoption of methodologies and the tools Methodologies and tools change more frequently than principles 4 / 19

Principles, Methodologies, and Tools Example How can we fly? Principle: fight against the gravity Hot air is lighter than cold air Buoyancy (lift-up force) > Gravity (drag-down force) 5 / 19

Principles, Methodologies, and Tools Example How can we fly? Principle: fight against the gravity 1 Air is diverted down from wings 2 Air pushes back Newton s third law 3 The airplane is lifted up into the sky 6 / 19

7 / 19 Outline 1 2 3 Compiler Construction

8 / 19 1 Rigor and formality 2 Separation of concerns 3 Modularity 4 Incrementality 5 Abstraction 6 Generality 7 Anticipation of change

Rigor and Formality Software Engineering must be practiced systematically Rigor is a necessary complement to creativity that increases our confidence in our developments Computer is not the same as human, i.e., it is not able to handle vague commands Formality is rigor at the highest degree Software process is driven and evaluated by mathematical laws Examples: Mathematical (formal) analysis of program correctness Systematic (rigorous) test data derivation Rigorous documentation of development steps helps project management and assessment of timeliness 9 / 19

Separation of Concerns, Modularity Separation of Concerns Separate the complexities and concentrate on one at a time Divide and conquer Example: keep product requirement separate, i.e., functionality, performance, usability Support parallelization of efforts and separation of responsibilities Modularity: the cornerstone principle A complex system may be divided into simpler pieces called modules A system that is composed of modules is called modular Support application of separation of concerns When dealing with a module we can ignore details of other modules 10 / 19

Modularity Cohesion and Coupling High coupling Low coupling Law of Demeter Each unit should only talk to its friends; don t talk to strangers The resulting software tends to be more maintainable and adaptable 11 / 19

Modularity Top-down and bottom-up Top-down Decompose the whole design into modules first and then concentrate on individual module design Bottom-up Concentrate on modules and then on their composition They are two phases of the whole design process Requirement analysis and specification Top-down Design and specification Code and module testing Bottom-up Integration and system testing Delivery and maintenance 12 / 19

13 / 19 Incrementality Process proceeds in a stepwise fashion (increments) Deliver subsets of a system (prototype) early to get early feedback from expected users, then add new features incrementally Deal first with functionality, then turn to performance First step: quick-and-dirty solution Second step: more efficient (i.e., cleaner) design Example: Game Design First 2-D release then work on 3-D design First coarse-grained texture then fine-grained texture

14 / 19 Abstraction Identify the important aspects of a phenomenon and ignore its details Special case of separation of concerns The type of abstraction to apply depends on purpose or roles (user or designer) The user of a software concerns the what it does, not how it does The designer in a team concerns what and how of his/her own part, and what of other parts that belong to other team members After a module is fully tested and verified, only the what part is concerned by its user

15 / 19 Generality Discover if it is an instance of a more general problem whose solution can be reused in other cases Increase the reusability Carefully balance generality against performance and cost The solution to a generalized problem most likely is more expensive than the solution to a special problem A program that can handle the multiplication between two general matrices A program that is specially designed to handle the multiplication between two sparse matrices

Anticipation of Change Ability to support software evolution requires anticipating potential future changes Minimize the changes to the existing module Leave the spots in the program for future features Basis for software evolvability Example A sorting program based on array of fixed length A sorting program based on link of dynamic length 16 / 19

17 / 19 Outline Compiler Construction 1 2 3 Compiler Construction

The modular structure of a compiler Compiler Construction Symbol table Source code Lexical analysis Tokenized code Parsing Parse tree Code Generation Object code Lexical diagnostics Syntax diagnostics Symbol table Parse tree Intermediate code generation Intermediate code Machine code generation Object code Code Generation 18 / 19

Principles breakdown Compiler Construction Rigor and formality Compiler design is one of the most serious business in software development Separation of concerns, modularity, and incrementality Correctness first, performance next, then ease of use Decompose the whole project into small modules that can be designed and verified in a comparatively easy way Cover only a subset of the source language and omit some features in the first release Abstraction and generality Generate intermediate code for an abstract machine Java Virtual machine Use command-line arguments to specify the target machine gcc or g++ compiler Anticipation of change New instruction set with new processor architecture 19 / 19