Chapter 1: Principles of Programming and Software Engineering
Overview of Software Engineering Principles
-
Upload
ninuthomas123 -
Category
Documents
-
view
222 -
download
0
Transcript of Overview of Software Engineering Principles
-
8/11/2019 Overview of Software Engineering Principles
1/38
Overview of SoftwareEngineering Principles
CSCI 589:Software Engineering for Embedded Systems
August 25, 2003
-
8/11/2019 Overview of Software Engineering Principles
2/38
EngineeringEngineering is
The application of scientific principles and methods
To the construction of useful structures & machinesExamplesMechanical engineeringCivil engineering
Chemical engineeringElectrical engineeringNuclear engineering
Aeronautical engineering
-
8/11/2019 Overview of Software Engineering Principles
3/38
Software EngineeringThe term is 35 years old: NATO Conferences
Garmisch, Germany, October 7-11, 1968
Rome, Italy, October 27-31, 1969The reality is finally beginning to arriveComputer science as the scientific basis
Other scientific bases?
Many aspects have been made systematicMethods/methodologies/techniquesLanguagesToolsProcesses
-
8/11/2019 Overview of Software Engineering Principles
4/38
Software Engineering in a
NutshellDevelopment of software systems whosesize/complexity warrants team(s) of engineers
multi-person construction of multi-version software[Parnas 1987]
Scopestudy of software process, development principles,techniques, and notations
Goalproduction of quality software, delivered on time, withinbudget, satisfying customers requirements and users needs
-
8/11/2019 Overview of Software Engineering Principles
5/38
Ever-Present DifficultiesFew guiding scientific principlesFew universally applicable methods
As muchmanagerial / psychological / sociologicalas technological
-
8/11/2019 Overview of Software Engineering Principles
6/38
Why These Difficulties?SE is a unique brand of engineering
Software is malleable
Software construction is human-intensiveSoftware is intangibleSoftware problems are unprecedentedly complexSoftware directly depends upon the hardware
It is at the top of the system engineering food chain
Software solutions require unusual rigorSoftware has discontinuous operational nature
-
8/11/2019 Overview of Software Engineering Principles
7/38
Software Engineering
Software ProgrammingSoftware programming
Single developer
Toy applications Short lifespanSingle or few stakeholders
Architect = Developer = Manager = Tester = Customer = User
One-of-a-kind systemsBuilt from scratchMinimal maintenance
-
8/11/2019 Overview of Software Engineering Principles
8/38
Software Engineering
Software ProgrammingSoftware engineering
Teams of developers with multiple roles
Complex systemsIndefinite lifespanNumerous stakeholders
Architect Developer Manager Tester Customer User
System familiesReuse to amortize costsMaintenance accounts for over 60% of overalldevelopment costs
-
8/11/2019 Overview of Software Engineering Principles
9/38
Economic and Management
Aspects of SESoftware production =
development + maintenance ( evolution )
Maintenance costs > 60% of all developmentcosts 20% corrective30% adaptive
50% perfectiveQuicker development is not always preferablehigher up-front costs may defray downstream costspoorly designed/implemented software is a critical
cost factor
-
8/11/2019 Overview of Software Engineering Principles
10/38
Relative Costs of Fixing
Software Faults
Requirements Specification Planning Design Implementation Integration Maintenance1 2
3 410
30
200
-
8/11/2019 Overview of Software Engineering Principles
11/38
Mythical Man-Month
by Fred BrooksPublished in 1975, republished in 1995
Experience managing development of OS/360 in 1964-65Central argument
Large projects suffer management problems different inkind than small ones, due to division in laborCritical need is the preservation of the conceptualintegrity of the product itself
Central conclusionsConceptual integrity achieved through chief architectImplementation achieved through well-managed effort
Brookss Law Adding personnel to a late project makes it later
-
8/11/2019 Overview of Software Engineering Principles
12/38
Software Development Lifecycle
Waterfall ModelRequirements
Design
Implementation
Integration
Validation
Deployment
-
8/11/2019 Overview of Software Engineering Principles
13/38
Evaluate alternatives,identify, resolve risks,develop prototypes
Develop, verifynext-level productPlan next phases
Determine objectivesalternatives, constraints
Software Development Lifecycle
Spiral Model
-
8/11/2019 Overview of Software Engineering Principles
14/38
RequirementsProblem Definition Requirements Specification
determine exactly what the customer and user want
develop a contract with the customerspecifies what the software product is to do
Difficultiesclient asks for wrong productclient is computer/software illiteratespecifications are ambiguous, inconsistent, incomplete
-
8/11/2019 Overview of Software Engineering Principles
15/38
Architecture/DesignRequirements Specification Architecture/Design
architecture: decompose software into modules withinterfacesdesign: develop module specifications (algorithms, datatypes)maintain a record of design decisions and traceabilityspecifies how the software product is to do its tasks
Difficultiesmiscommunication between module designersdesign may be inconsistent, incomplete, ambiguous
-
8/11/2019 Overview of Software Engineering Principles
16/38
Architecture vs. Design
[Perry & Wolf 1992] Architecture is concerned with the selection ofarchitectural elements, their interactions, andthe constraints on those elements and theirinteractions necessary to provide a frameworkin which to satisfy the requirements and serveas a basis for the design.Design is concerned with the modularizationand detailed interfaces of the design elements,their algorithms and procedures, and the datatypes needed to support the architecture andto satisfy the requirements.
-
8/11/2019 Overview of Software Engineering Principles
17/38
-
8/11/2019 Overview of Software Engineering Principles
18/38
Component-Based
DevelopmentDevelop generally applicable components of areasonable size and reuse them acrosssystemsMake sure they are adaptable to varyingcontextsExtend the idea beyond code to other
development artifactsQuestion: what comes first?Integration, then deploymentDeployment, then integration
-
8/11/2019 Overview of Software Engineering Principles
19/38
Different Flavors of
ComponentsThird- party software pieces Plug-ins / add-ins
AppletsFrameworksOpen Systems
Distributed object infrastructuresCompound documentsLegacy systems
-
8/11/2019 Overview of Software Engineering Principles
20/38
Verification and Validation Analysis
Static
Science Formal verificationInformal reviews and walkthroughs
Testing
Dynamic Engineering White box vs. black boxStructural vs. behavioral
Issues of test adequacy
-
8/11/2019 Overview of Software Engineering Principles
21/38
Deployment & EvolutionOperation Change
maintain software during/after user operation
determine whether the product still functionscorrectly
Difficultiesrigid design
lack of documentationpersonnel turnover
-
8/11/2019 Overview of Software Engineering Principles
22/38
Configuration Management
(CM) [Tichy 1988]CM is a discipline whose goal is tocontrol changes to large software
through the functions ofComponent identificationChange tracking
Version selection and baseliningSoftware manufactureManaging simultaneous updates (teamwork)
-
8/11/2019 Overview of Software Engineering Principles
23/38
CM in Action
1.1
1.2
1.4
2.0
2.1
2.2
3.1
3.0
1.5
4.0
1.0
1.3
-
8/11/2019 Overview of Software Engineering Principles
24/38
Software Engineering
PrinciplesRigor and formalitySeparation of concerns
Modularity and decomposition Abstraction Anticipation of changeGeneralityIncrementalityScalabilityCompositionality
Heterogeneity
-
8/11/2019 Overview of Software Engineering Principles
25/38
From Principles to Tools
PRINCIPLES
METHODS ANDTECHNIQUES
METHODOLOGIES
TOOLS
-
8/11/2019 Overview of Software Engineering Principles
26/38
Software QualitiesQualities (a.k.a. ilities) are goals in thepractice of software engineeringExternal vs. Internal qualitiesProduct vs. Process qualities
-
8/11/2019 Overview of Software Engineering Principles
27/38
External vs. Internal QualitiesExternal qualities are visible to the user
reliability, efficiency, usability
Internal qualities are the concern ofdevelopers
they help developers achieve externalqualitiesverifiability, maintainability, extensibility,evolvability, adaptability
-
8/11/2019 Overview of Software Engineering Principles
28/38
Product vs. Process QualitiesProduct qualities concern the developedartifacts
maintainability, understandability,performance
Process qualities deal with thedevelopment activity
products are developed through processmaintainability, productivity, timeliness
-
8/11/2019 Overview of Software Engineering Principles
29/38
Some Software QualitiesCorrectness
ideal quality
established w.r.t. the requirements specificationabsolute
Reliabilitystatistical propertyprobability that software will operate as expectedover a given period of timerelative
-
8/11/2019 Overview of Software Engineering Principles
30/38
Some Software Qualities
(cont.)Robustness
reasonable behavior in unforeseencircumstancessubjectivea specified requirement is an issue of correctness;an unspecified requirement is an issue ofrobustness
Usabilityability of end-users to easily use softwareextremely subjective
-
8/11/2019 Overview of Software Engineering Principles
31/38
Some Software Qualities
(cont.)Understandability
ability of developers to easily understand
produced artifactsinternal product qualitysubjective
Verifiabilityease of establishing desired propertiesperformed by formal analysis or testinginternal quality
-
8/11/2019 Overview of Software Engineering Principles
32/38
Some Software Qualities
(cont.)Performance
equated with efficiency
assessable by measurement, analysis, andsimulation
Evolvabilityability to add or modify functionalityaddresses adaptive and perfective maintenanceproblem: evolution of implementation is too easyevolution should start at requirements or design
-
8/11/2019 Overview of Software Engineering Principles
33/38
Some Software Qualities
(cont.)Reusability
ability to construct new software from existingpiecesmust be planned foroccurs at all levels: from people to process, fromrequirements to code
Interoperabilityability of software (sub)systems to cooperate withotherseasily integratable into larger systemscommon techniques include APIs, plug-inprotocols, etc.
-
8/11/2019 Overview of Software Engineering Principles
34/38
Some Software Qualities
(cont.)Scalability
ability of a software system to grow in size
while maintaining its properties andqualitiesassumes maintainability and evolvability
goal of component-based development
-
8/11/2019 Overview of Software Engineering Principles
35/38
Some Software Qualities
(cont.)Heterogeneity
ability to compose a system from pieces developed inmultiple programming languages, on multiple platforms, by
multiple developers, etc.necessitated by reusegoal of component-based development
Portabilityability to execute in new environments with minimal effortmay be planned for by isolating environment-dependentcomponentsnecessitated by the emergence of highly-distributed systems(e.g., the Internet)an aspect of heterogeneity
-
8/11/2019 Overview of Software Engineering Principles
36/38
Software Process QualitiesProcess is reliable if it consistently leads to high-quality productsProcess is robust if it can accommodateunanticipated changes in tools and environmentsProcess performance is productivityProcess is evolvable if it can accommodate new
management and organizational techniquesProcess is reusable if it can be applied acrossprojects and organizations
-
8/11/2019 Overview of Software Engineering Principles
37/38
Assessing Software QualitiesQualities must be measurableMeasurement requires that qualities beprecisely definedImprovement requires accuratemeasurementCurrently most qualities are informallydefined and are difficult to assess
-
8/11/2019 Overview of Software Engineering Principles
38/38
Software Engineering
Axioms Adding developers to a project will likely result infurther delays and accumulated costsBasic tension of software engineering
better, cheaper, faster pick any two!functionality, scalability, performance pick any two!
The longer a fault exists in softwarethe more costly it is to detect and correct
the less likely it is to be properly correctedUp to 70% of all faults detected in large-scale softwareprojects are introduced in requirements and design
detecting the causes of those faults early may reduce theirresulting costs by a factor of 100 or more