软件工程(第4版)(图灵计算机科学丛书)
分類: 图书,计算机与互联网,软件工程及软件方法学,软件工程理论,
品牌: [美]Shari Lawrence Pflee
基本信息·出版社:人民邮电出版社
·页码:547 页
·ISBN:9787115205513
·条形码:9787115205513
·版本:第1版
·装帧:其他
·开本:16开 Pages Per Sheet
·丛书名:图灵计算机科学丛书
产品信息有问题吗?请帮我们更新产品信息。
内容简介本书是软件工程领域的经典著作,国际上众多名校均采用本书作为教材。本书分为3个部分。第一部分解释为什么软件工程知识对实践者和研究者同样重要,还讨论了理解过程模型问题的必要性以及敏捷方法和精细地进行项目计划的必要性;第二部分论述开发和维护的主要步骤;第三部分主要讲述软件评估和改进。 本书适合作为计算机相关专业软件工程课程的本科教材,也适用于介绍软件工程的概念与实践的研究生课程,期望进一步学习该领域相关知识的专业人员也可以阅读本书。
目录
目录 第1章软件工程概述1 1.1什么是软件工程1 1.1.1问题求解2 1.1.2软件工程师的角色是什么3 1.2软件工程取得了哪些进展4 1.3什么是好的软件6 1.3.1产品的质量7 1.3.2过程的质量8 1.3.3商业环境背景下的质量8 1.4软件工程涉及的人员10 1.5系统的方法11 1.5.1系统的要素11 1.5.2相互联系的系统13 1.6工程的方法14 1.6.1盖房子15 1.6.2构建系统16 1.7开发团队的成员17 1.8软件工程发生了多大的变化19 1.8.1变化的本质19 1.8.2软件工程的Wasserman规范20 1.9信息系统的例子25 1.10实时系统的例子26 1.11本章对单个开发人员的意义27 1.12本章对开发团队的意义28 1.13本章对研究人员的意义28 1.14学期项目28 1.15主要参考文献29 1.16练习30 第2章过程和生命周期的建模32 2.1过程的含义32 2.2软件过程模型34 2.2.1瀑布模型34 2.2.2V模型37 2.2.3原型化模型37 2.2.4可操作规格说明38 2.2.5可转换模型38 2.2.6阶段化开发:增量和迭代39 2.2.7螺旋模型40 2.2.8敏捷方法41 2.3过程建模工具和技术44 2.3.1静态建模:Lai表示法45 2.3.2动态建模:系统动力学47 2.4实际的过程建模49 2.4.1Marvel的案例研究49 2.4.2过程建模工具和技术应该具有的特性51 2.5信息系统的例子51 2.6实时系统的例子53 2.7本章对单个开发人员的意义54 2.8本章对开发团队的意义54 2.9本章对研究人员的意义54 2.10学期项目54 2.11主要参考文献56 2.12练习57 第3章计划和管理项目58 3.1跟踪项目进展58 3.1.1工作分解和活动图60 3.1.2估算完成时间61 3.1.3跟踪进展的工具65 3.2项目人员67 3.2.1人员角色和特性67 3.2.2工作风格70 3.2.3项目组织71 3.3工作量估算73 3.3.1专家判断75 3.3.2算法方法77 3.3.3机器学习方法81 3.3.4找出适合具体情形的模型83 3.4风险管理84 3.4.1什么是风险84 3.4.2风险管理活动85 3.5项目计划87 3.6过程模型和项目管理88 3.6.1注册管理88 3.6.2责任建模90 3.6.3紧密结合里程碑92 3.7信息系统的例子94 3.8实时系统的例子95 3.9本章对单个开发人员的意义96 3.10本章对开发团队的意义96 3.11本章对研究人员的意义96 3.12学期项目96 3.13主要参考文献97 3.14练习97 第4章获取需求100 4.1需求过程101 4.2需求引发102 4.3需求的类型105 4.3.1解决冲突107 4.3.2两种需求文档108 4.4需求的特性109 4.5建模表示法110 4.5.1实体-联系图111 4.5.2例子:UML类图112 4.5.3事件踪迹114 4.5.4例子:消息时序图114 4.5.5状态机115 4.5.6例子:UML状态图116 4.5.7例子:Petri网119 4.5.8数据流图121 4.5.9例子:用例122 4.5.10函数和关系123 4.5.11例子:判定表124 4.5.12例子:Parnas表124 4.5.13逻辑125 4.5.14例子:对象约束语言(OCL)126 4.5.15例子:Z127 4.5.16代数规格说明129 4.5.17例子:SDL数据130 4.6需求和规格说明语言132 4.6.1统一建模语言(UML)132 4.6.2规格说明和描述语言(SDL)133 4.6.3软件成本降低(SCR)133 4.6.4需求表示法的其他特征134 4.7原型化需求134 4.8需求文档135 4.8.1需求定义136 4.8.2需求规格说明137 4.8.3过程管理和需求的可跟踪性138 4.9确认和验证138 4.9.1需求确认139 4.9.2验证141 4.10测量需求142 4.11选择规格说明技术143 4.12信息系统的例子145 4.13实时系统的例子147 4.14本章对单个开发人员的意义149 4.15本章对开发团队的意义149 4.16本章对研究人员的意义149 4.17学期项目150 4.17.1前提和假设150 4.17.2功能的高层描述150 4.17.3功能需求150 4.17.4数据约束151 4.17.5设计和接口约束152 4.17.6质量需求152 4.18主要参考文献152 4.19练习153 第5章设计体系结构156 5.1设计过程156 5.1.1设计是一种创造性过程157 5.1.2设计过程模型160 5.2体系结构建模161 5.3分解和视图162 5.4体系结构风格和策略165 5.4.1管道和过滤器165 5.4.2客户-服务器166 5.4.3对等网络167 5.4.4发布-订阅168 5.4.5信息库168 5.4.6分层169 5.4.7组合体系结构风格170 5.5满足质量属性171 5.5.1可修改性171 5.5.2性能173 5.5.3安全性174 5.5.4可靠性175 5.5.5健壮性177 5.5.6易使用性178 5.5.7商业目标178 5.6协作设计179 5.7体系结构的评估和改进180 5.7.1测量设计质量181 5.7.2故障树分析181 5.7.3安全性分析183 5.7.4权衡分析184 5.7.5成本效益分析188 5.7.6原型化190 5.8文档化软件体系结构191 5.8.1视图间的映射193 5.8.2文档化设计合理性193 5.9体系结构设计评审193 5.9.1确认194 5.9.2验证194 5.10软件产品线195 5.10.1战略范围197 5.10.2产品线体系结构的优势197 5.10.3产品线的演化198 5.11信息系统的例子198 5.12实时系统的例子200 5.13本章对单个开发人员的意义201 5.14本章对开发团队的意义201 5.15本章对研究人员的意义202 5.16学期项目202 5.17主要参考文献203 5.18练习203 第6章设计模块205 6.1设计方法205 6.2设计原则207 6.2.1模块化207 6.2.2接口212 6.2.3信息隐藏213 6.2.4增量式开发214 6.2.5抽象215 6.2.6通用性216 6.3面向对象的设计218 6.3.1术语218 6.3.2继承与对象组合221 6.3.3可替换性222 6.3.4德米特法则223 6.3.5依赖倒置223 6.4在UML中体现面向对象设计225 6.4.1过程中的UML225 6.4.2UML类图227 6.4.3其他UML图232 6.5面向对象设计模式240 6.5.1模板方法模式241 6.5.2工厂方法模式241 6.5.3策略模式242 6.5.4装饰者模式242 6.5.5观察者模式243 6.5.6组合模式243 6.5.7访问者模式245 6.6设计中其他方面的考虑247 6.6.1数据管理247 6.6.2异常处理247 6.6.3用户界面设计249 6.6.4框架250 6.7面向对象度量250 6.7.1面向对象系统规模的度量251 6.7.2面向对象系统设计质量的度量252 6.7.3在何处进行面向对象测量258 6.8设计文档259 6.9信息系统的例子261 6.10实时系统的例子262 6.11本章对单个开发人员的意义263 6.12本章对开发团队的意义263 6.13本章对研究人员的意义263 6.14学期项目263 6.15主要参考文献264 6.16练习264 第7章编写程序267 7.1编程标准和过程267 7.1.1对单个开发人员的标准268 7.1.2对其他开发人员的标准268 7.1.3设计和实现的匹配269 7.2编程的指导原则269 7.2.1控制结构269 7.2.2算法270 7.2.3数据结构271 7.2.4通用性指导原则273 7.3文档276 7.3.1内部文档276 7.3.2外部文档279 7.4编程过程280 7.4.1将编程作为问题求解280 7.4.2极限编程281 7.4.3结对编程281 7.4.4编程向何处去282 7.5信息系统的例子282 7.6实时系统的例子283 7.7本章对单个开发人员的意义284 7.8本章对开发团队的意义284 7.9本章对研究人员的意义284 7.10学期项目285 7.11主要参考文献285 7.12练习285 第8章测试程序287 8.1软件故障和失效287 8.1.1故障的类型288 8.1.2正交缺陷分类289 8.2测试的相关问题291 8.2.1测试的组织291 8.2.2对测试的态度292 8.2.3谁执行测试293 8.2.4测试对象的视图293 8.3单元测试295 8.3.1检查代码295 8.3.2证明代码正确性297 8.3.3测试程序构件301 8.3.4技术比较304 8.4集成测试305 8.4.1自底向上集成305 8.4.2自顶向下集成306 8.4.3一次性集成308 8.4.4三明治集成308 8.4.5集成策略的比较309 8.5测试面向对象系统311 8.5.1代码测试311 8.5.2面向对象测试和传统测试之间的区别311 8.6测试计划313 8.6.1计划的目的313 8.6.2计划的内容313 8.7自动测试工具314 8.7.1代码分析工具314 8.7.2测试执行工具315 8.7.3测试用例生成器316 8.8什么时候停止测试316 8.8.1故障播种317 8.8.2软件中的可信度318 8.8.3其他的停止测试的标准319 8.8.4识别易出故障的代码319 8.9信息系统的例子320 8.10实时系统的例子321 8.11本章对单个开发人员的意义321 8.12本章对开发团队的意义322 8.13本章对研究人员的意义322 8.14学期项目322 8.15主要参考文献322 8.16练习323 第9章测试系统325 9.1系统测试的原则325 9.1.1软件故障根源325 9.1.2系统测试过程327 9.1.3配置管理329 9.1.4测试小组333 9.2功能测试334 9.2.1目的与职责334 9.2.2因果图335 9.3性能测试338 9.3.1目的和职责338 9.3.2性能测试的类型338 9.4可靠性、可用性以及可维护性339 9.4.1定义339 9.4.2失效数据340 9.4.3测量可靠性、可用性和可维护性341 9.4.4可靠性稳定性和可靠性增长342 9.4.5可靠性预测343 9.4.6操作环境的重要性345 9.5验收测试346 9.5.1目的和职责346 9.5.2验收测试的种类346 9.5.3验收测试的结果347 9.6安装测试348 9.7自动化系统测试348 9.8测试文档349 9.8.1测试计划349 9.8.2测试规格说明和评估351 9.8.3测试描述353 9.8.4测试分析报告355 9.8.5问题报告表355 9.9测试安全攸关的系统357 9.9.1设计多样性358 9.9.2软件安全性案例359 9.9.3净室方法361 9.10信息系统的例子364 9.11实时系统的例子366 9.12本章对单个开发人员的意义367 9.13本章对开发团队的意义367 9.14本章对研究人员的意义367 9.15学期项目367 9.16主要参考文献368 9.17练习368 第10章交付系统372 10.1培训372 10.1.1培训的种类373 10.1.2培训助手374 10.1.3培训的指导原则375 10.2文档375 10.2.1文档的种类375 10.2.2用户帮助和疑难解答379 10.3信息系统的例子380 10.4实时系统的例子381 10.5本章对单个开发人员的意义381 10.6本章对开发团队的意义381 10.7本章对研究人员的意义382 10.8学期项目382 10.9主要参考文献382 10.10练习382 第11章维护系统384 11.1变化的系统384 11.1.1系统的类型384 11.1.2在系统生命周期过程中发生的变化387 11.1.3系统生命周期跨度388 11.2维护的本质389 11.3维护问题392 11.3.1人员问题392 11.3.2技术问题393 11.3.3必要的妥协394 11.3.4维护成本395 11.4测量维护特性397 11.4.1可维护性的外部视图398 11.4.2影响可维护性的内部属性398 11.4.3其他的产品测量400 11.5维护技术和工具401 11.5.1配置管理401 11.5.2影响分析403 11.5.3自动化维护工具406 11.6软件再生407 11.6.1文档重构408 11.6.2重组409 11.6.3逆向工程410 11.6.4再工程410 11.6.5软件再生的前景411 11.7信息系统的例子412 11.8实时系统的例子412 11.9本章对单个开发人员的意义413 11.10本章对开发团队的意义413 11.11本章对研究人员的意义414 11.12学期项目414 11.13主要参考文献414 11.14练习414 第12章评估产品、过程和资源416 12.1评估的方法416 12.1.1特征分析416 12.1.2调查417 12.1.3案例研究417 12.1.4正式试验418 12.1.5准备评估418 12.2选择评估技术419 12.2.1关键选择因素420 12.2.2相信什么420 12.3评价与预测423 12.3.1确认预测系统423 12.3.2确认测量425 12.3.3对确认的紧迫需求425 12.4评估产品426 12.4.1产品质量模型426 12.4.2建立基线和设定目标430 12.4.3软件可复用性431 12.5评估过程437 12.5.1事后分析437 12.5.2过程成熟度模型441 12.6评估资源448 12.6.1人员成熟度模型448 12.6.2投资回报450 12.7信息系统的例子451 12.8实时系统的例子452 12.9本章对单个开发人员的意义452 12.10本章对开发团队的意义452 12.11本章对研究人员的意义453 12.12学期项目453 12.13主要参考文献453 12.14练习454 第13章改进预测、产品、过程和资源455 13.1改进预测455 13.1.1预测的精确性455 13.1.2处理偏误:u曲线456 13.1.3处理噪声:prequential似然度458 13.1.4重新校准预测459 13.2改进产品462 13.2.1审查462 13.2.2复用464 13.3改进过程465 13.3.1过程和能力成熟度465 13.3.2维护467 13.3.3净室方法468 13.4改进资源470 13.4.1工作环境470 13.4.2成本和进度的权衡471 13.5总体改进指导原则472 13.6信息系统的例子473 13.7实时系统的例子473 13.8本章对单个开发人员的意义473 13.9本章对开发团队的意义474 13.10本章对研究人员的意义474 13.11学期项目474 13.12主要参考文献475 13.13练习475 第14章软件工程的未来476 14.1已经取得的进展476 14.1.1Wasserman的获得成熟度的措施476 14.1.2当前要做的工作478 14.2技术转移478 14.2.1现在我们怎样做出技术转移的决策479 14.2.2在技术决策中使用证据479 14.2.3支持技术决策的证据480 14.2.4对证据的进一步讨论481 14.2.5技术转移的新模型483 14.2.6改进技术转移的下一步483 14.3软件工程中的决策484 14.3.1大量的决策484 14.3.2群体决策486 14.3.3我们实际上如何决策486 14.3.4群体实际上如何决策488 14.3.5一个适度的观察研究489 14.3.6获得的经验教训492 14.4软件工程的职业化:执照发放、认证和伦理492 14.4.1将重点放在人员上493 14.4.2软件工程教育493 14.4.3软件工程知识体系495 14.4.4给软件工程师颁发执照496 14.4.5认证500 14.4.6伦理守则502 14.4.7职业发展503 14.4.8研究和实践的进一步发展504 14.5学期项目505 14.6主要参考文献505 14.7练习505 参考文献注解507 索引536
……[看更多目录]