2

Software Engineering: Principles and Practice

560 Pages · 2007 · 4.22 MB · English

  • 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


    Please note: To fully download this free PDF,EBook files you need know All free.
    Found by internet command,site not saved pdf file
You May Also Like

Related PPT Template in the same category.