ebook img

Software Engineering: Principles and Practice PDF

560 Pages·2007·4.22 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Software Engineering: Principles and Practice

Software Engineering: Principles and Practice Hans van Vliet (c) Wiley,2007 Contents 1 Introduction 1 Chapter1Introduction 1 1.1 WhatisSoftwareEngineering? . . . . . . . . . . . . . . . . . . . . . 5 1.2 PhasesintheDevelopmentofSoftware . . . . . . . . . . . . . . . . 10 1.3 MaintenanceorEvolution. . . . . . . . . . . . . . . . . . . . . . . . 16 1.4 FromtheTrenches . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.4.1 Ariane5,Flight501. . . . . . . . . . . . . . . . . . . . . . . 18 1.4.2 Therac-25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.3 TheLondonAmbulanceService . . . . . . . . . . . . . . . . 21 1.4.4 WhoCountstheVotes? . . . . . . . . . . . . . . . . . . . . 23 1.5 SoftwareEngineeringEthics . . . . . . . . . . . . . . . . . . . . . . 25 1.6 QuoVadis? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.8 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 I Software Management 33 2 IntroductiontoSoftwareEngineeringManagement 34 Chapter2IntroductiontoSoftwareEngineeringManagement 34 2.1 PlanningaSoftwareDevelopmentProject . . . . . . . . . . . . . . . 37 2.2 ControllingaSoftwareDevelopmentProject . . . . . . . . . . . . . 40 2.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3 TheSoftwareLifeCycleRevisited 45 Chapter3TheSoftwareLifeCycleRevisited 45 3.1 TheWaterfallModel . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.2 AgileMethods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.2.1 Prototyping . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.2.2 IncrementalDevelopment . . . . . . . . . . . . . . . . . . . 56 3.2.3 RapidApplicationDevelopmentandDSDM . . . . . . . . . 57 3.2.4 ExtremeProgramming . . . . . . . . . . . . . . . . . . . . . 61 3.3 TheRationalUnifiedProcess(RUP) . . . . . . . . . . . . . . . . . . 64 3.4 Intermezzo:MaintenanceorEvolution . . . . . . . . . . . . . . . . . 66 3.5 SoftwareProductLines . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.6 ProcessModeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.8 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4 ConfigurationManagement 78 Chapter4ConfigurationManagement 78 4.1 TasksandResponsibilities. . . . . . . . . . . . . . . . . . . . . . . . 80 4.2 ConfigurationManagementPlan . . . . . . . . . . . . . . . . . . . . 85 4.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.4 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5 PeopleManagementandTeamOrganization 89 Chapter5PeopleManagementandTeamOrganization 89 5.1 PeopleManagement . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.1.1 CoordinationMechanisms . . . . . . . . . . . . . . . . . . . 93 5.1.2 ManagementStyles . . . . . . . . . . . . . . . . . . . . . . . 94 5.2 TeamOrganization . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 5.2.1 HierarchicalOrganization . . . . . . . . . . . . . . . . . . . 96 5.2.2 MatrixOrganization . . . . . . . . . . . . . . . . . . . . . . 98 5.2.3 ChiefProgrammerTeam . . . . . . . . . . . . . . . . . . . . 99 5.2.4 SWATTeam . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.2.5 AgileTeam . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.2.6 OpenSourceSoftwareDevelopment . . . . . . . . . . . . . 101 5.2.7 GeneralPrinciplesforOrganizingaTeam . . . . . . . . . . . 103 5.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.4 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6 OnManagingSoftwareQuality 107 Chapter6OnManagingSoftwareQuality 107 6.1 OnMeasuresandNumbers . . . . . . . . . . . . . . . . . . . . . . . 110 6.2 ATaxonomyofQualityAttributes . . . . . . . . . . . . . . . . . . . 116 6.3 PerspectivesonQuality . . . . . . . . . . . . . . . . . . . . . . . . . 123 6.4 TheQualitySystem . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 6.5 SoftwareQualityAssurance . . . . . . . . . . . . . . . . . . . . . . . 128 6.6 TheCapabilityMaturityModel(CMM) . . . . . . . . . . . . . . . . 130 6.7 SomeCriticalNotes. . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6.8 GettingStarted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6.10 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7 CostEstimation 144 Chapter7CostEstimation 144 7.1 AlgorithmicModels . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 7.1.1 Walston--Felix . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.1.2 COCOMO . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 7.1.3 Putnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.1.4 FunctionPointAnalysis. . . . . . . . . . . . . . . . . . . . . 156 7.1.5 COCOMO2:VariationsonaTheme . . . . . . . . . . . . . 159 7.2 GuidelinesforEstimatingCost . . . . . . . . . . . . . . . . . . . . . 166 7.3 DistributionofManpoweroverTime. . . . . . . . . . . . . . . . . . 169 7.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 7.5 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 8 ProjectPlanningandControl 176 Chapter8ProjectPlanningandControl 176 8.1 ASystemsViewofProjectControl . . . . . . . . . . . . . . . . . . . 177 8.2 ATaxonomyofSoftwareDevelopmentProjects . . . . . . . . . . . . 179 8.3 RiskManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.4 TechniquesforProjectPlanningandControl . . . . . . . . . . . . . 189 8.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.6 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 II The Software Life Cycle 197 9 RequirementsEngineering 199 Chapter9RequirementsEngineering 199 9.1 RequirementsElicitation . . . . . . . . . . . . . . . . . . . . . . . . 205 9.1.1 RequirementsEngineeringParadigms . . . . . . . . . . . . . 210 9.1.2 RequirementsElicitationTechniques. . . . . . . . . . . . . . 212 9.1.3 GoalsandViewpoints . . . . . . . . . . . . . . . . . . . . . 220 9.1.4 PrioritizingRequirements . . . . . . . . . . . . . . . . . . . 223 9.1.5 COTSselection . . . . . . . . . . . . . . . . . . . . . . . . 224 9.2 RequirementsDocumentationandManagement . . . . . . . . . . . . 227 9.2.1 RequirementsManagement. . . . . . . . . . . . . . . . . . . 234 9.3 RequirementsSpecificationTechniques . . . . . . . . . . . . . . . . 236 9.3.1 SpecifyingNon-FunctionalRequirements . . . . . . . . . . . 238 9.4 VerificationandValidation . . . . . . . . . . . . . . . . . . . . . . . 239 9.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 9.6 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 10 Modeling 246 Chapter10Modeling 246 10.1 ClassicModelingTechniques . . . . . . . . . . . . . . . . . . . . . . 248 10.1.1 Entity--RelationshipModeling . . . . . . . . . . . . . . . . . 248 10.1.2 FiniteStateMachines . . . . . . . . . . . . . . . . . . . . . . 250 10.1.3 DataFlowDiagrams(DFD) . . . . . . . . . . . . . . . . . . 252 10.1.4 CRCCards . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 10.2 OnObjectsandRelatedStuff . . . . . . . . . . . . . . . . . . . . . . 254 10.3 TheUnifiedModelingLanguage . . . . . . . . . . . . . . . . . . . . 260 10.3.1 TheClassDiagram . . . . . . . . . . . . . . . . . . . . . . . 260 10.3.2 TheStateMachineDiagram . . . . . . . . . . . . . . . . . . 265 10.3.3 TheSequenceDiagram . . . . . . . . . . . . . . . . . . . . . 268 10.3.4 TheCommunicationDiagram . . . . . . . . . . . . . . . . . 271 10.3.5 TheComponentDiagram . . . . . . . . . . . . . . . . . . . 272 10.3.6 TheUseCase . . . . . . . . . . . . . . . . . . . . . . . . . . 273 10.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 10.5 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 11 SoftwareArchitecture 276 Chapter11SoftwareArchitecture 276 11.1 SoftwareArchitectureandtheSoftwareLifeCycle . . . . . . . . . . 280 11.2 Architecturedesign . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 11.2.1 Architectureasasetofdesigndecisions . . . . . . . . . . . . 284 11.3 Architecturalviews . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 11.4 ArchitecturalStyles . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 11.5 SoftwareArchitectureAssessment . . . . . . . . . . . . . . . . . . . 306 11.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 11.7 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 12 SoftwareDesign 313 Chapter12SoftwareDesign 313 12.1 DesignConsiderations . . . . . . . . . . . . . . . . . . . . . . . . . 317 12.1.1 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 12.1.2 Modularity . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 12.1.3 InformationHiding . . . . . . . . . . . . . . . . . . . . . . . 325 12.1.4 Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 12.1.5 SystemStructure . . . . . . . . . . . . . . . . . . . . . . . . 333 12.1.6 Object-OrientedMetrics . . . . . . . . . . . . . . . . . . . . 337 12.2 ClassicalDesignMethods. . . . . . . . . . . . . . . . . . . . . . . . 340 12.2.1 FunctionalDecomposition . . . . . . . . . . . . . . . . . . . 342 12.2.2 DataFlowDesign(SA/SD) . . . . . . . . . . . . . . . . . . . 346 12.2.3 DesignbasedonDataStructures . . . . . . . . . . . . . . . . 351 12.3 Object-OrientedAnalysisandDesignMethods . . . . . . . . . . . . 359 12.3.1 TheBoochMethod . . . . . . . . . . . . . . . . . . . . . . . 366 12.3.2 Fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 12.3.3 RUPRevisited . . . . . . . . . . . . . . . . . . . . . . . . . 369 12.4 HowtoSelectaDesignMethod . . . . . . . . . . . . . . . . . . . . 370 12.4.1 ObjectOrientation:HypeortheAnswer? . . . . . . . . . . . 373 12.5 DesignPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 12.6 DesignDocumentation . . . . . . . . . . . . . . . . . . . . . . . . . 380 12.7 VerificationandValidation . . . . . . . . . . . . . . . . . . . . . . . 383 12.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 12.9 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 13 SoftwareTesting 394 Chapter13SoftwareTesting 394 13.1 TestObjectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 13.1.1 TestAdequacyCriteria . . . . . . . . . . . . . . . . . . . . . 401 13.1.2 FaultDetectionVersusConfidenceBuilding . . . . . . . . . . 402 13.1.3 FromFaultDetectiontoFaultPrevention . . . . . . . . . . . 403 13.2 TestingandtheSoftwareLifeCycle . . . . . . . . . . . . . . . . . . 406 13.2.1 RequirementsEngineering . . . . . . . . . . . . . . . . . . . 407 13.2.2 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 13.2.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . 409 13.2.4 Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . 409 13.2.5 Test-DrivenDevelopment(TDD) . . . . . . . . . . . . . . . 410 13.3 VerificationandValidationPlanningandDocumentation . . . . . . . 411 13.4 ManualTestTechniques . . . . . . . . . . . . . . . . . . . . . . . . 413 13.4.1 Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 13.4.2 WalkthroughsandInspections . . . . . . . . . . . . . . . . . 415 13.4.3 CorrectnessProofs . . . . . . . . . . . . . . . . . . . . . . . 417 13.4.4 StepwiseAbstraction . . . . . . . . . . . . . . . . . . . . . . 418 13.5 Coverage-BasedTestTechniques . . . . . . . . . . . . . . . . . . . . 419 13.5.1 Control-FlowCoverage . . . . . . . . . . . . . . . . . . . . 420 13.5.2 DataflowCoverage . . . . . . . . . . . . . . . . . . . . . . . 423 13.5.3 Coverage-BasedTestingofRequirementsSpecifications . . . 424 13.6 Fault-BasedTestTechniques . . . . . . . . . . . . . . . . . . . . . . 425 13.6.1 ErrorSeeding . . . . . . . . . . . . . . . . . . . . . . . . . . 425 13.6.2 MutationTesting . . . . . . . . . . . . . . . . . . . . . . . . 428 13.7 Error-BasedTestTechniques . . . . . . . . . . . . . . . . . . . . . . 429 13.8 ComparisonofTestTechniques . . . . . . . . . . . . . . . . . . . . 431 13.8.1 ComparisonofTestAdequacyCriteria . . . . . . . . . . . . 432 13.8.2 PropertiesofTestAdequacyCriteria. . . . . . . . . . . . . . 434 13.8.3 ExperimentalResults . . . . . . . . . . . . . . . . . . . . . . 436 13.9 DifferentTestStages . . . . . . . . . . . . . . . . . . . . . . . . . . 438 13.10EstimatingSoftwareReliability . . . . . . . . . . . . . . . . . . . . . 439 13.11Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 13.12FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 14 SoftwareMaintenance 453 Chapter14SoftwareMaintenance 453 14.1 MaintenanceCategoriesRevisited . . . . . . . . . . . . . . . . . . . 456 14.2 MajorCausesofMaintenanceProblems . . . . . . . . . . . . . . . . 459 14.3 ReverseEngineeringandRefactoring . . . . . . . . . . . . . . . . . . 463 14.3.1 Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 14.3.2 InherentLimitations . . . . . . . . . . . . . . . . . . . . . . 469 14.3.3 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 14.4 SoftwareEvolutionRevisited . . . . . . . . . . . . . . . . . . . . . . 474 14.5 OrganizationalandManagerialIssues . . . . . . . . . . . . . . . . . 476 14.5.1 OrganizationofMaintenanceActivities . . . . . . . . . . . . 477 14.5.2 SoftwareMaintenancefromaServicePerspective . . . . . . . 480 14.5.3 ControlofMaintenanceTasks . . . . . . . . . . . . . . . . . 486 14.5.4 QualityIssues . . . . . . . . . . . . . . . . . . . . . . . . . . 489 14.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 14.7 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 15 SoftwareTools 494 Chapter15SoftwareTools 494 15.1 Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 15.2 Language-CenteredEnvironments . . . . . . . . . . . . . . . . . . . 500 15.3 IntegratedEnvironmentsandWorkbenches . . . . . . . . . . . . . . 501 15.3.1 AnalystWorkBenches . . . . . . . . . . . . . . . . . . . . . 501 15.3.2 ProgrammerWorkbenches . . . . . . . . . . . . . . . . . . . 503 15.3.3 ManagementWorkBenches . . . . . . . . . . . . . . . . . . 507 15.3.4 IntegratedProjectSupportEnvironments . . . . . . . . . . . 508 15.4 Process-CenteredEnvironments . . . . . . . . . . . . . . . . . . . . 508 15.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 15.6 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Bibliography 514 1 Introduction LEARNINGOBJECTIVES Tounderstandthenotionofsoftwareengineeringandwhyitisimportant (cid:15) To appreciate the technical (engineering), managerial, and psychological (cid:15) aspectsofsoftwareengineering To understand the similarities and differences between software engineering (cid:15) andotherengineeringdisciplines Toknowthemajorphasesinasoftwaredevelopmentproject (cid:15) Toappreciateethicaldimensionsinsoftwareengineering (cid:15) Tobeawareofthetimeframeandextenttowhichnewdevelopmentsimpact (cid:15) softwareengineeringpractice 2 INTRODUCTION Software engineering concerns methods and techniques to develop large softwaresystems.Theengineeringmetaphorisusedtoemphasizeasystematic approach to develop systems that satisfy organizational requirements and constraints. This chapter gives a brief overview of the field and points at emergingtrendsthatinfluencethewaysoftwareisdeveloped. Computer science is still a young field. The first computers were built in the mid 1940s,sincewhenthefieldhasdevelopedtremendously. Applications from the early years of computerization can be characterized as follows: the programs were quite small, certainly when compared to those that are currentlybeingconstructed;theywerewrittenbyoneperson;theywerewrittenand usedby expertsintheapplicationareaconcerned. Theproblemsto be solvedwere mostlyofatechnicalnature,andtheemphasiswasonexpressingknownalgorithms efficiently in some programming language. Input typically consisted of numerical data, read from such media as punched tape or punched cards. The output, also numeric,wasprintedonpaper.Programswererunoff-line.Iftheprogramcontained errors,theprogrammerstudiedanoctalorhexadecimaldumpofmemory.Sometimes, theexecutionoftheprogramwouldbefollowedbybinaryreadingmachineregisters attheconsole. Independent software development companies hardly existed in those days. Softwarewasmostlydevelopedbyhardwarevendorsandgivenawayforfree.These vendorssometimessetupusergroupstodiscussrequirements,andnextincorporated themintotheirsoftware.Thissoftwaredevelopmentsupportwasseenasaserviceto theircustomers. Present-day applications are rather differentin many respects. Present-day pro- grams are often very large and are being developed by teams that collaborate over periodsspanningseveralyears.Theseteamsmaybescatteredacrosstheglobe.The programmersare not the future users of the system they develop and they have no expert knowledge of the application area in question. The problems that are being tackledincreasinglyconcerneverydaylife:automaticbanktellers,airlinereservation, salary administration, electroniccommerce, automotive systems, etc. Putting a man onthemoonwasnotconceivablewithoutcomputers. Inthe1960s,people startedtorealizethatprogrammingtechniqueshadlagged behindthedevelopmentsinsoftwarebothinsizeandcomplexity.Tomanypeople, programmingwasstillanartandhadneverbecomeacraft.Anadditionalproblemwas thatmanyprogrammershadnotbeenformallyeducatedinthefield.Theyhadlearned bydoing.Ontheorganizationalside,attemptedsolutionstoproblemsofteninvolved adding more and more programmers to the project, the so-called ‘million-monkey’ approach. Asaresult,softwarewasoftendeliveredtoolate,programsdidnotbehaveasthe userexpected,programswererarelyadaptabletochangedcircumstances,andmany errorsweredetectedonlyafterthesoftwarehadbeendeliveredtothecustomer.This

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.