Overview of Software Engineering Principles CSCI 599: Software Engineering for Embedded Systems August 27, 2002.

Slides:



Advertisements
Similar presentations
Ch.21 Software Its Nature and Qualities. Ch.22 Outline Software engineering (SE) is an intellectual activity and thus human-intensive Software is built.
Advertisements

The System and Software Development Process Instructor: Dr. Hany H. Ammar Dept. of Computer Science and Electrical Engineering, WVU.
Ch 3: Unified Process CSCI 4320: Software Engineering.
Software Engineering CSE470: Process 15 Software Engineering Phases Definition: What? Development: How? Maintenance: Managing change Umbrella Activities:
CS 325: Software Engineering January 13, 2015 Introduction Defining Software Engineering SWE vs. CS Software Life-Cycle Software Processes Waterfall Process.
Chapter 2 – Software Processes
Software Engineering Introduction and Overview RA402 jcmtCSE1320 Intermediate Programming Essence and Accident Inherent Difficulties –Complexity –Conformity.
The Mythical Man-Month by Fred Brooks (I) Published 1975, Republished 1995 Experience managing the development of OS/360 in Central Argument –Large.
Software Architecture for DSD DSD Team. Overview What is software architecture and why is it so important? The role of architecture in determining system.
Architecture is More Than Just Meeting Requirements Ron Olaski SE510 Fall 2003.
1 / 24 CS 425/625 Software Engineering Software Evolution Based on Chapter 21 of the textbook [SE-8] Ian Sommerville, Software Engineering, 8 th Ed., Addison-Wesley,
Overview of Software Engineering Principles
R R R CSE870: Advanced Software Engineering (Cheng): Intro to Software Engineering1 Advanced Software Engineering Dr. Cheng Overview of Software Engineering.
ICS 201- Introduction to Software Engineering. How important is Software? Billions spent annually on software. Billions spent annually on software. Is.
CSC Software Engineering I 1 Overview - Software Lifecycles, Processes, Methods and Tools Software lifecycle basics Software lifecycles – build-and-fix.
CSC x402 Requirements Engineering 1 Overview - Software Lifecycles, Processes, Methods and Tools Software lifecycle basics Software lifecycles – build-and-fix.
Creating Architectural Descriptions. Outline Standardizing architectural descriptions: The IEEE has published, “Recommended Practice for Architectural.
Course Introduction and Overview of Software Engineering Richard N. Taylor ICS 221 Fall 2002.
SE 555 – Software Requirements & Specifications Introduction
Software Lifecycle Software Lifecycle Basics Lifecycle Models Methods and Tools.
1 CMPT 275 Software Engineering Requirements Analysis Process Janice Regan,
Software Quality Assurance For Software Engineering && Architecture and Design.
Architectural Design Establishing the overall structure of a software system Objectives To introduce architectural design and to discuss its importance.
S/W Project Management Software Process Models. Objectives To understand  Software process and process models, including the main characteristics of.
 The software systems must do what they are supposed to do. “do the right things”  They must perform these specific tasks correctly or satisfactorily.
1 IBM Software Group ® Mastering Object-Oriented Analysis and Design with UML 2.0 Module 1: Best Practices of Software Engineering.
Dillon: CSE470: SE, Process1 Software Engineering Phases l Definition: What? l Development: How? l Maintenance: Managing change l Umbrella Activities:
Software Qualities. Unique Properties of Software (Teams: What are the properties of software that make it unique from other engineering disciplines?)
CSC450 Software Engineering
Topics Covered: Software requirement specification(SRS) Software requirement specification(SRS) Authors of SRS Authors of SRS Need of SRS Need of SRS.
CSE 303 – Software Design and Architecture
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 4 Slide 1 Software Processes.
Architecture-Based Runtime Software Evolution Peyman Oreizy, Nenad Medvidovic & Richard N. Taylor.
©Ian Sommerville 2000, Mejia-Alvarez 2009 Slide 1 Software Processes l Coherent sets of activities for specifying, designing, implementing and testing.
Software Software is omnipresent in the lives of billions of human beings. Software is an important component of the emerging knowledge based service.
OHTO -99 SOFTWARE ENGINEERING “SOFTWARE PRODUCT QUALITY” Today: - Software quality - Quality Components - ”Good” software properties.
Software Engineering Introduction and Overview Takes customer-defined goals and constraints and derives a representation of function, performance, interfaces,
Object-Oriented Software Engineering Practical Software Development using UML and Java Chapter 1: Software and Software Engineering.
CS451 - Lecture 3 1 CS451 Lecture 3: Software Lifecycle and Product Yugi Lee STB #555 (816) * Acknowledgement:
Systems Design Approaches The Waterfall vs. Iterative Methodologies.
Software Engineering Principles Principles form the basis of methods, techniques, methodologies and tools Principles form the basis of methods, techniques,
OHTO -99 SOFTWARE ENGINEERING “SOFTWARE PRODUCT QUALITY” Today: - Software quality - Quality Components - ”Good” software properties.
Software Engineering & Project Management Lecture # 01 Computer Science & Engineering Lucky Sharma Subject Code: CS 603.
Historical Aspects Origin of software engineering –NATO study group coined the term in 1967 Software crisis –Low quality, schedule delay, and cost overrun.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
CS551 - Lecture 5 1 CS551 Lecture 5: Quality Attributes Yugi Lee FH #555 (816)
Software Engineering - Abdul Majeed. What is software? Definition of Software Engineering Software Process Generic view of Software Engineering Software.
Chapter 2 – Software Processes Lecture 1 Chapter 2 Software Processes1.
An Introduction to Software Engineering (Chapter 1 from the textbook)
CSE 303 – Software Design and Architecture
Software Engineering Jon Walker. What is Software Engineering? Why do we call it Software Engineering? Why not just call it programming or software development?
Lecture 13.  Failure mode: when team understands requirements but is unable to meet them.  To ensure that you are building the right system Continually.
Software Development Life Cycle (SDLC)
Lectures 2 & 3: Software Process Models Neelam Gupta.
Chapter 10 Software quality. This chapter discusses n Some important properties we want our system to have, specifically correctness and maintainability.
© Chinese University, CSE Dept. Software Engineering / Topic 3: Software Engineering Principles Your Name: _____________________ Computer Science.
© Chinese University, CSE Dept. Software Engineering / Software Engineering Topic 1: Software Engineering: A Preview Your Name: ____________________.
The Software Lifecycle Stuart Faulk. Definition Software Life Cycle: evolution of a software development effort from concept to retirement Life Cycle.
Advanced Software Engineering Dr. Cheng
Software Quality Control and Quality Assurance: Introduction
Lecture 3 Prescriptive Process Models
Rekayasa Perangkat Lunak Part-10
Rekayasa Perangkat Lunak
The Systems Engineering Context
Applied Software Implementation & Testing
Rekayasa Perangkat Lunak
Chapter 5 Designing the Architecture Shari L. Pfleeger Joanne M. Atlee
Software life cycle models
CS310 Software Engineering Lecturer Dr.Doaa Sami
Presented by KARRI GOVINDA RAO ,
Presentation transcript:

Overview of Software Engineering Principles CSCI 599: Software Engineering for Embedded Systems August 27, 2002

Engineering Engineering is … the application of scientific principles and methods To the construction of useful structures & machines Examples Mechanical engineering Civil engineering Chemical engineering Electrical engineering Nuclear engineering Aeronautical engineering

Software Engineering in a Nutshell Development of software systems whose size/complexity warrants team(s) of engineers multi-person construction of multi-version software [Parnas 1987] Scope study of software process, development principles, techniques, and notations Goal production of quality software, delivered on time, within budget, satisfying customers’ requirements and users’ needs

Ever-Present Difficulties Few guiding scientific principles Few universally applicable methods As much managerial / psychological / sociological as technological

Why These Difficulties? SE is a unique brand of engineering Software is malleable Software construction is human-intensive Software is intangible Software problems are highly complex Software directly depends upon the hardware It is at the top of the system engineering “food chain”

Software Engineering ≠ Software Programming Software programming Single developer “Toy” applications Short lifespan Single or few stakeholders Architect = Developer = Manager = Tester = Customer = User One-of-a-kind systems Built from scratch Minimal maintenance

Software Engineering ≠ Software Programming Software engineering Teams of developers with multiple roles Complex systems Indefinite lifespan Numerous stakeholders Architect ≠ Developer ≠ Manager ≠ Tester ≠ Customer ≠ User System families Reuse to amortize costs Maintenance accounts for over 60% of overall development costs

Economic and Management Aspects of SE Software production = development + maintenance (evolution) Maintenance costs > 60% of all development costs 20% corrective 30% adaptive 50% perfective Quicker development is not always preferable higher up-front costs may defray downstream costs poorly designed/implemented software is a critical cost factor

Relative Costs of Fixing Software Faults Requirements SpecificationPlanningDesignImplementationIntegrationMaintenance

Mythical Man-Month by Fred Brooks Published in 1975, republished in 1995 Experience managing development of OS/360 in Central argument Large projects suffer management problems different in kind than small ones, due to division in labor Critical need is the preservation of the conceptual integrity of the product itself Central conclusions Conceptual integrity achieved through chief architect Implementation achieved through well-managed effort Brooks’s Law Adding personnel to a late project makes it later

Software Development Lifecycle Waterfall Model Requirements Design Implementation Integration Validation Deployment

Software Development Lifecycle Spiral Model

Requirements Problem Definition → Requirements Specification determine exactly what the customer and user want develop a contract with the customer specifies what the software product is to do Difficulties client asks for wrong product client is computer/software illiterate specifications are ambiguous, inconsistent, incomplete Verification extensive specification reviews with the customer identify ambiguity, inconsistency, incompleteness ascertain feasibility, testability develop system/acceptance test plan

Architecture/Design Requirements Specification → Architecture/Design architecture: decompose software into modules with interfaces design: develop module specifications (algorithms, data types) maintain a record of design decisions and traceability specifies how the software product is to do its tasks Difficulties miscommunication between module designers design may be inconsistent, incomplete, ambiguous Verification design inspections to establish conformance to requirements check module interactions develop integration test plan

Architecture vs. Design [Perry & Wolf 1992] Architecture is concerned with the selection of architectural elements, their interactions, and the constraints on those elements and their interactions necessary to provide a framework in which to satisfy the requirements and serve as a basis for the design. Design is concerned with the modularization and detailed interfaces of the design elements, their algorithms and procedures, and the data types needed to support the architecture and to satisfy the requirements.

Implementation & Integration Design → Implementation implement modules; verify that they meet their specifications combine modules according to the design specifies how the software product does its tasks Difficulties module interaction errors order of integration may influence quality and productivity Verification code reviews to establish conformance to requirements & design check module interactions develop unit test plan: focus on individual modules test on unit, integration and acceptance test plans

Component-Based Development Develop generally applicable components of a reasonable size and reuse them across systems Make sure they are adaptable to varying contexts Extend the idea beyond code to other development artifacts Question: what comes first? Integration, then deployment Deployment, then integration

Different Flavors of Components Third-party software “pieces” Plug-ins / add-ins Applets Frameworks Open Systems Distributed object infrastructures Compound documents Legacy systems

Verification and Validation Analysis Static “Science” Formal verification Informal reviews and walkthroughs Testing Dynamic “Engineering” White box vs. black box Structural vs. behavioral Issues of test adequacy

Deployment & Evolution Operation → Change maintain software during/after user operation determine whether the product still functions correctly Difficulties rigid design lack of documentation personnel turnover Verification extensive reviews to ensure correct changes and updates to documentation test to determine that change is correctly implemented regression testing: ensure that no inadvertent changes are made to compromise system functionality

Configuration Management (CM) [Tichy 1988] CM is a discipline whose goal is to control changes to large software through the functions of Component identification Change tracking Version selection Software manufacture Managing simultaneous updates (team work)

CM in Action

Software Engineering Principles Rigor and formality Separation of concerns Modularity and decomposition Abstraction Anticipation of change Generality Incrementality Scalability Compositionality Heterogeneity

From Principles to Tools

Software Qualities Qualities (a.k.a. “ilities”) are goals in the practice of software engineering External vs. Internal qualities Product vs. Process qualities

External vs. Internal Qualities External qualities are visible to the user reliability, efficiency, usability Internal qualities are the concern of developers they help developers achieve external qualities verifiability, maintainability, extensibility, evolvability, adaptability

Product vs. Process Qualities Product qualities concern the developed artifacts maintainability, understandability, performance Process qualities deal with the development activity products are developed through process maintainability, productivity, timeliness

Some Software Qualities Correctness ideal quality established w.r.t. the requirements specification absolute Reliability statistical property probability that software will operate as expected over a given period of time relative

Some Software Qualities (cont.) Robustness “reasonable” behavior in unforeseen circumstances subjective a specified requirement is an issue of correctness; an unspecified requirement is an issue of robustness Usability ability of end-users to easily use software extremely subjective

Some Software Qualities (cont.) Understandability ability of developers to easily understand produced artifacts internal product quality subjective Verifiability ease of establishing desired properties performed by formal analysis or testing internal quality

Some Software Qualities (cont.) Performance equated with efficiency assessable by measurement, analysis, and simulation Evolvability ability to add or modify functionality addresses adaptive and perfective maintenance problem: evolution of implementation is too easy evolution should start at requirements or design

Some Software Qualities (cont.) Reusability ability to construct new software from existing pieces must be planned for occurs at all levels: from people to process, from requirements to code Interoperability ability of software (sub)systems to cooperate with others easily integratable into larger systems common techniques include APIs, plug-in protocols, etc.

Some Software Qualities (cont.) Scalability ability of a software system to grow in size while maintaining its properties and qualities assumes maintainability and evolvability goal of component-based development

Some Software Qualities (cont.) Heterogeneity ability to compose a system from pieces developed in multiple programming languages, on multiple platforms, by multiple developers, etc. necessitated by reuse goal of component-based development Portability ability to execute in new environments with minimal effort may be planned for by isolating environment-dependent components necessitated by the emergence of highly-distributed systems (e.g., the Internet) an aspect of heterogeneity

Software Process Qualities Process is reliable if it consistently leads to high- quality products Process is robust if it can accommodate unanticipated changes in tools and environments Process performance is productivity Process is evolvable if it can accommodate new management and organizational techniques Process is reusable if it can be applied across projects and organizations

Assessing Software Qualities Qualities must be measurable Measurement requires that qualities be precisely defined Improvement requires accurate measurement Currently most qualities are informally defined and are difficult to assess

Software Engineering “Axioms” Adding developers to a project will likely result in further delays and accumulated costs Basic tension of software engineering better, cheaper, faster — pick any two! functionality, scalability, performance — pick any two! The longer a fault exists in software the more costly it is to detect and correct the less likely it is to be properly corrected Up to 70% of all faults detected in large-scale software projects are introduced in requirements and design detecting the causes of those faults early may reduce their resulting costs by a factor of 100 or more