into-ali.pdf
Document Details
Uploaded by FelicitousLogarithm4386
Full Transcript
# Overview of Software Engineering and Development Processes ## What is Software Engineering? * Systematic approach for developing software. * Methods and techniques to develop and maintain quality software to solve problems. *(Software Engineering: Methods and Management, Pfleeger, 1990)* * Study...
# Overview of Software Engineering and Development Processes ## What is Software Engineering? * Systematic approach for developing software. * Methods and techniques to develop and maintain quality software to solve problems. *(Software Engineering: Methods and Management, Pfleeger, 1990)* * Study of the principles and methodologies for developing and maintaining software systems. *(Perspectives on Software Engineering," Zelkowitz, 1978)* * Practical application of scientific knowledge in the design and construction of computer programs and the associated documentation required to develop, operate, and maintain them. *(Software Engineering," Boehm, 1976)* * Deals with establishment of sound engineering principles and methods in order to economically obtain software that is reliable and works on real machines. *(Software Engineering," Bauer, 1972)* ## Questions Addressed by Software Engineering * How do we ensure the quality of the software that we produce? * How do we meet growing demand and still maintain budget control? * How do we avoid disastrous time delays? ## Why Apply Software Engineering to Systems? * Provide an understandable process for system development. * Develop systems and software that are maintainable and easily changed. * Develop robust software and system. * Allow the process of creating computing-based systems to be repeatable and manageable. ## Objectives of Course * **Provide exposure to leading-edge topics** * Emphasize model-driven engineering * Emphasize requirements and design * Emphasize assurance of computing-based systems * **Provide hands-on experience to reinforce concepts** * Homework assignments * Modeling and specification assignments * **Synthesize several topics into mini-projects** * Programming/design Project with written component * Prepare presentation materials for lay audience. ## Tentative Topics * Requirements Engineering * Model-driven engineering (UML) * Architectural Styles * Design Patterns * Security * Testing * (Search-based Software Engineering) * (Interplay between SE and ML) ## Historical Perspective * **1940s**: computers invented * **1950s**: assembly language, Fortran * **1960s**: COBOL, ALGOL, PL/1, operating systems * **1969**: First conference on Software Eng * **1970s**: multi-user systems, databases, structured programming * **1980s**: networking, personal computing, embedded systems, parallel architectures * **1990s**: information superhighway, distributed systems, OO in widespread use. * **2000s**: virtual reality, voice recognition, video conferencing, global computing, pervasive computing... * **2010s**: EMRs, autonomous vehicles, new security awareness... ## Hardware Costs vs Software Costs (% of overall costs) A line graph is shown. It has two lines. The first line shows the percentage of hardware costs, starting high and decreasing over time. The second line shows the percentage of software costs, starting low and increasing over time. The two lines intersect in the middle of the graph. ## Why is software so expensive? * Hardware has made great advances. * But, software has made great advances… * We do the least understood tasks in software. * When task is simple & understood, encode it in hardware. * Why? * Demand more and more of software. * Consider your cell phone ## Size of programs continues to grow * **Trivial**: 1 month, 1 programmer, 500 LOC, * Intro programming assignments * **Very small**: 4 months, 1 programmer, 2000 LOC * Course project * **Small**: 2 years, 3 programmers, 50K LOC * Nuclear power plant, pace maker * **Medium**: 3 years, 10s of programmers, 100K LOC * Optimizing compiler * **Large**: 5 years, 100s of programmers, 1MLOC * MS Word, Excel * **Very large**: 10 years, 1000s of programmers, 10MLOC * Air traffic control, Telecommunications, space shuttle * **Very, Very Large**: 15+ years, 1000s programmers, 35MLOC * W2K * **Ultra-Large Scale**: ? years, ? developers distributed, * 1000s of sensors, decision units, heterogeneous platforms, decentralized control. * Intelligent transportation systems; healthcare systems ## New Scale: Ultra-Large Scale SW-Intensive Systems (IOT) * Healthcare Infrastructure A diagram of hospital infrastructure is shown with connected data centers. * Intelligent Transportation and Vehicle Systems Multiple images of cars on a freeway are shown. ## The ULS Ecosystem * **Key elements**: * Computing devices * Business and organizational policies. * Environment (including people) * **Forces**: * Competition for resources * Unexpected environmental changes * Decentralized control * Demand for assurance ## Context: “Sufficient” System Health * **High-level Objective**: * How to design a safe adaptive system with incomplete information and evolving environmental conditions * **Execution environment**: * How to model environment * How to effectively monitor changing conditions * Adaptive monitoring * **Decision-making for dynamic adaptation**: * Decentralized control * Assurance guarantees (functional and non-functional constraints) * **Adaptation mechanisms**: * Application level * Middleware level ## What's the problem? * Software cannot be built fast enough to keep up with: * H/W advances * Rising expectations * Feature explosion * Increasing need for high reliability software. ## What’s the problem? (cont.) * Software is difficult to maintain. *"aging software"* * Difficult to estimate software costs and schedules. * Too many projects fail: * Arianne Missile * Denver Airport Baggage System * Therac ## Why Is Software Engineering Needed? * To predict time, effort, and cost. * To improve software quality. * To improve maintainability. * To meet increasing demands. * To lower software costs. * To successfully build large, complex software systems. * To facilitate group effort in developing software. ## Software Engineering Phases * **Definition**: What? * **Development**: How? * **Maintenance**: Managing change * **Umbrella Activities**: Throughout lifecycle ## Definition * Requirements definition and analysis * Developer must understand: * Application domain * Required functionality * Required performance * User interface ## Definition (cont.) * Project planning: * Allocate resources * Estimate costs * Define work tasks * Define schedule * System analysis: * Allocate system resources to: * Hardware * Software * Users ## Development * Software design * User interface design * High-level design * Define modular components * Define major data structures * Detailed design * Define algorithms and procedural detail ## Development (cont.) * Coding * Develop code for each module * Unit testing * Integration * Combine modules * System testing ## Maintenance * Correction - Fix software defects * Adaptation - Accommodate changes * New hardware * New company policies * Enhancement - Add functionality * Prevention - make more maintainable ## Umbrella Activities * Reviews - assure quality * Documentation - improve maintainability * Version control - track changes * Configuration management - integrity of collection of components ## Development Process * Step-by-step procedure to develop software * Typically involves the major phases: * analysis * design * coding * testing ## Waterfall Process Model A diagram of a waterfall process model is shown. It has five boxes: 1. Requirements 2. Design 3. Coding 4. Testing 5. Maintenance Each box is connected to the box below it. ## Software Process Models: V Model (continued) A diagram of the V-model is shown. The left side of the diagram shows the development process, including requirements analysis, system design, program design, and coding. The right side shows the testing phases, including unit & integration testing, system testing, acceptance testing, and operation & maintenance. ## Prototyping Process Model A diagram of a prototyping process model is shown. It has a box for requirements, a box for quick design, a box for prototype, a box for evaluate, and a box for design. ## When to use prototyping? * Help the customer pin down the requirements * Concrete model to "test out" * Often done via the user interface * Explore alternative solutions to a troublesome component * e.g., determine if an approach gives acceptable performance * Improve morale * Partially running system provides visibility into a project ## Software Process Models: Spiral Model (continued) A diagram of a spiral process model is shown. The diagram includes a spiral with multiple loops. Each loop represents a stage in the development process, and includes activities such as determining goals, evaluating alternatives, risk assessment, review, planning, and development/testing. ## Process Models * Idealized views of the process * Different models are often used for different subprocesses * May use spiral model for overall development * Prototyping for a particularly complex component * Waterfall model for other components ## Capability Maturity Model * **Level 1: Initial**: ad hoc, success depends on people * **Level 2: Repeatable**: track cost, schedule, functionality * **Level 3: Defined**: use standardized processes * **Level 4: Managed**: collect detailed metrics * **Level 5: Optimizing**: continuous process improvement, "built-in" process improvement ## Why Is Software Development So Difficult? * **Communication**: * Between customer and developer * Poor problem definition is the largest cause of failed software projects. * Within development team * More people = more communication. * New programmers need training. * **Project characteristics**: * Novelty * Changing requirements * 5x cost during development. * Up to 100x cost during maintenance. * Hardware/software configuration * Security requirements * Real-time requirements * Reliability requirements ## Why Is Software Development So Difficult? (cont.) * **Personnel characteristics**: * Ability * Prior experience * Communication skills * Team cooperation * Training * **Facilities and resources**: * Identification * Acquisition * **Management Issues**: * Realistic goals * Cost estimation * Scheduling * Resource allocation * Quality assurance * Version control * Contracts ## Summary * Software lifecycle consists of * Definition (what) * Development (how) * Maintenance (change) * Different process models concentrate on different aspects * Waterfall model: maintainability * Prototype model: clarifying requirements * Spiral model: identifying risk * Maintenance costs much more than development. ## Bottom Line * U.S. software is a major part of our societal infrastructure. * Costs upwards of $200 billion/year. * Need to: * Improve software quality * Reduce software costs/risks.