SENG480A/CSC576A Topics in Software Engineering Software Development, Architecture & Evolution Lectures, Sep 17, 20, 2001 Hausi A. Müller University of Victoria Outline Assignment 1 due Sep 27 Last week Software evolution Definitions Fall 2001 Course schedule Last week Architecture and Evolution of Compiler Systems Holger Kienle Architecture and Evolution of Web Site Systems Daniel German This week continuation of introduction Software evolution Software architecture Definitions Software evolution Software engineering Software architecture Software reverse engineering Software understanding
What is software engineering? Programming vs. engineering Development of software systems whose size/complexity warrants a team or teams of engineers multi-person construction of multi-version software [Parnas87] Scope study of software process, development and evolution principles, techniques and notations Goal Production, modification and evolution of quality software, delivered on time, within budget, satisfying users needs Software engineers must posses a broad range of skills including computer science, mathematics, economics, management, psychology, risk analysis, history, etc. Programming/coding Single developer Module or standalone program Few stakeholders Developer = user One-of-a-kind system Writing from scratch Coding phase Programming skills Engineering Team development, roles Complex systems Multiple stakeholders Developer # user # customer System families/product lines Modify/reuse Spans entire life cycle A variety of skills A unique brand of engineering Software life cycles Software is malleable Software is intangible Software analysis or understanding skills differ from programming skills Digital nature one bug can bring the entire system to its knees Maintenance costs constitute 60-90% of the costs of a software system Waterfall model Spiral model Evolutionary model Incremental model Rapid prototyping Investigate the history of life cycles models by searching the web
Waterfall model Problem Definition Requirements analysis Design Implementation Maintenance Waterfall model Feasibility Defining a preferred concept for the software product, and determining its life-cycle feasibility and superiority to alternative concepts Requirements A complete, verified specification of the required functions, interfaces, and performance for the software product. Product Design A complete verified specification of the overall hardware-software architecture, control structure, and data structure for the product, along with such other necessary components as draft user's manuals and test plans Detailed Design A complete verified specification of the control structure, data structure, interface relations, sizing, key algorithms, and assumptions of each program component Waterfall model Coding A complete, verified set of program components Integration A properly function software product composed of the software components Implementation A fully functioning operational hardware-software system, including such objectives as program and data conversion, installation, and training Maintenance A fully functioning update of the hardware-software system repeated for each update Phaseout A clean transition of the functions performed by the product to its successors. Waterfall model (2167A/498) Systems Concept/System Requirements Analysis Software Requirements Analysis Software Parametric Cost Estimating Preliminary Design Detailed Design Coding and Computer Software unit (CSU) Testing Computer Software Component (CSC) Integration and Testing Computer Software Configuration Item (CSCI) Testing System Integration and Operational Testing
Spiral model (1) Barry Boehm, "A Spiral Model of Software Development and Enhancement", ACM SIGSOFT Software Engineering Notes, August 1986. (2) Barry Boehm "A Spiral Model of Software Development and Enhancement" IEEE Computer, vol.21, #5, May 1988, pp 61-72. Basically, the idea is evolutionary development, using the waterfall model for each step; it's intended to help manage risks. Don't define in detail the entire system at first. The developers should only define the highest priority features. Define and implement those, then get feedback from users/customers (such feedback distinguishes "evolutionary" from "incremental" development). With this knowledge, they should then go back to define and implement more features in smaller chunks. Software qualities Software engineering is concerned with software qualities Qualities (a.k.a. ilities ) are goals in the practice of software engineering External qualities visible to the user reliability, efficiency, usability Internal qualities the concern of developers they help developers achieve external qualities verifiability, maintainability, extensibility, evolvability, adaptability Product qualities concern the developed artifacts maintainability, understandability, performance Process qualities deal with the development activity products are developed through process maintainability, productivity, timeliness
Correctness Ideal quality Established wrt. Requirements specification absolute Reliability Statistical quality Probability that software will operate as expected over a give period of time Relative Robustness Reasonable behaviour in unforseen circumstances Subjective A specified requirement is an issue of correctness Usability Ability of end-users to easily use software Extremely subjective Understandability Ability of developers to understand produced artifacts easily Internal product quality Subjective Verifiabilty Ease of establishing desired properties Performed by formal analysis or testing Internal quality 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 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. 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
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 an aspect of heterogeneity Maintainability the ease with which a software system or component can be modified to correct faults, improve performance, or other attributes, or adapt to a changed environment [IEEE 90]. Addresses corrective, adaptive, and perfective maintenance Evolvability addresses addresses adaptive and perfective maintenance Summary Life cycle models Get more background from your library and the web Software qualities External vs. internal qualities Process vs. product qualities 14 ilities but there are more Exams The posted slides are insufficient as study materials for the exams Attending the lectures and participating in the discussions is critical