具体描述
本书在吸取了国内外大量同类书刊精华的基础上,总结了编者多年来从事软件工程教学研究的经验和体会,全面系统地介绍了软件工程的概念、原理和典型的技术方法。本书的特点是讲解深入浅出,着重讲透基本的概念、原理、技术和方法;既注重系统性、科学性和先进性,又特别注重实用性;既有原理性论述,又有丰富、完整的实例与之配合,利于读者理解和掌握,特别是书后的附录,详细介绍了软件开发文档编写指南,是软件开发人员必备的资料。
本书正文共12章,第1章是概论,第2章讲述可行性分析,第3章讲述结构化分析方法,第4章讲述总体设计,第5章讲述详细设计,第6章讲述编码实现,第7章介绍了面向对象的方法学、面向对象的分析方法和建模技术,第8章介绍面向对象的设计和实现技术,第9章讲述软件测试技术,第10章讲述软件维护,第11章介绍软件工程项目管理技术,第12章介绍软件质量保证技术。
本书内容新颖、实例丰富,即可作为高等院校“软件工程”课程的教材或教学参考书,也可供有一定实际经验的软件工作人员和需要开发应用软件的广大计算机用户阅读参考。
作者简介
目录信息
1.1 软件危机引发的思考
1.1.1 软件的发展与软件危机
1.1.2 产生软件危机的根源
1.1.3 软件产品的特征
1.1.4 软件产品的生产过程与软件生存期
1.1.5 解决软件危机的途径
1.2 软件工程的概念与原理
1.2.1 软件工程的概念
1.2.2 软件工程项目的基本目标
1.2.3 软件工程与传统工程的区别
1.2.4 软件工程的基本原理
1.2.5 软件质量评价
1.3 软件生命周期模型
1.3.1 瀑布模型
1.3.2 演化模型
1.3.3 螺旋模型
1.3.4 增量模型
1.3.5 喷泉模型
1.4 软件开发方法
1.4.1 结构化分析与设计方法
1.4.2 面向对象的分析与设计
1.4.3 软件工具与软件开发环境
习题与思考题
2 可行性分析
2.1 可行性分析的主要任务
2.1.1 分析和澄清问题定义
2.1.2 确定问题是否值得去解
2.2 可行性分析的步骤
2.2.1 复查系统的规模和目标
2.2.2 通过对现实环境的调查研究,获得更多的信息
2.2.3 确定新系统的高层逻辑模型
2.2.4 对新系统的逻辑模型进行验证并重新定义问题
2.2.5 导出可供选择的方案并进行评价
2.2.6 向决策人员提交行动建议
2.2.7 书写文档提交审查
2.3 可行性分析的技术方法
2.3.1 系统流程图
2.3.2 数据流图
2.3.3 数据字典
2.4 成本/效益分析
2.4.1 成本估计
2.4.2 成本/效益分析
习题与思考题
3 需求分析
3.1 需求分析的任务
3.1.1 确定目标系统的综合要求
3.1.2 分析目标系统的数据要求
3.1.3 导出目标系统的逻辑模型
3.1.4 修正软件项目开发计划
3.1.5 开发原型系统
3.1.6 编写软件需求规格说明书
3.2 需求分析的过程
3.3 数据驱动的分析方法
3.3.1 数据流图
3.3.2 数据字典
3.4 功能驱动的分析方法
3.4.1 状态迁移图
3.4.2 petri网
3.5 快速原型驱动的分析方法
3.6 数据与数据库需求
3.6.1 er模型
3.6.2 数据结构的规范化
3.7 需求验证
3.7.1 如何验证软件需求的正确性
3.7.2 软件需求验证的方法
习题与思考题
4 总体设计
4.1 总体设计的目标与任务
4.2 软件设计的基本原理
4.2.1 抽象化
4.2.2 模块化
4.2.3 信息隐蔽原理
4.2.4 模块独立性(模块的内聚性,模块间的耦合性
4.3 软件结构准则
4.3.1 软件结构图
4.3.2 软件结构设计的优化准则
4.4 软件设计的图形工具
4.4.1 ipo图
4.4.2 hipo图
4.5 结构化设计方法
4.5.1 变换流分析
4.5.2 事务流分析
习题与思考题
5 详细设计
5.1 详细设计的目标和任务
5.2 程序的基本结构
5.3 详细设计工具
5.3.1 程序流程图
5.3.2 ns图
5.3.3 pad图
5.3.4 判定表和判定树
5.3.5 伪码
5.4 jackson方法
5.4.1 jackson图
5.4.2 jsp方法
5.4.3 jsd方法
5.5 warnier方法
习题与思考题
6 编码实现
6.1 对源程序质量的要求
6.2 程序设计的风格
6.3 程序设计语言的选择
6.4 程序复杂性度量
6.4.1 代码行度量法
6.4.2 mccabe度量法
6.4.3 综合度量
习题与思考题
7 面向对象的方法学
7.1 “面向对象”的概念
7.1.1 对象
7.1.2 类
7.1.3 属性、操作和方法
7.1.4 消息
7.1.5 封装、继承、多态和重载
7.2 面向对象的方法学简介
7.2.1 面向对象方法的基本活动
7.2.2 coad&yourdon方法
7.2.3 omt方法
7.2.4 booch方法
7.2.5 uml技术
7.3 面向对象的分析
7.3.1 面向对象分析概述
7.3.2 面向对象分析的原则
7.3.3 面向对象分析的基本过程
7.4 面向对象建模
7.4.1 面向对象建模概述
7.4.2 基于uml语言的模型类型
7.4.3 基于uml语言的建模过程
7.4.4 建模实例
习题与思考题
8 面向对象的设计与实现
8.1 面向对象的设计方法
8.1.1 面向对象的设计概述
8.1.2 面向对象设计的任务
8.1.3 面向对象设计的过程
8.2 基于uml的系统设计
8.2.1 基于uml的设计模型
8.2.2 设计模型的结构
8.2.3 基于uml的设计实例
8.3 面向对象的实现
8.3.1 面向对象实现概述
8.3.2 面向对象实现的基本准则
8.3.3 面向对象语言的选择
8.3.4 实现的工作流程
习题与思考题
9 软件测试
9.1 软件测试的基本概念
9.2 软件测试的目的和原则
9.2.1 软件测试的目的
9.2.2 软件测试的原则
9.2.3 测试与软件开发各阶段的关系
9.3 软件测试的方法
9.3.1 静态测试与动态测试
9.3.2 黑盒测试与白盒测试
9.4 白盒测试的测试用例设计
9.4.1 逻辑覆盖
9.4.2 基本路径覆盖
9.5 黑盒测试的测试用例设计
9.5.1 等价类划分
9.5.2 边界值分析
9.5.3 错误推测法
9.5.4 因果图
9.6 软件测试的策略(过程/步骤
9.6.1 单元测试
9.6.2 组装集成测试
9.6.3 确认测试
9.6.4 系统测试
9.7 测试终止标准
9.8 调试
9.8.1 调试的目的
9.8.2 调试的技术策略
习题与思考题
10 软件维护
10.1 维护的概念与内容
10.1.1 软件维护的定义
10.1.2 软件维护的内容
10.2 软件维护的过程
10.2.1 维护机构与维护申请报告
10.2.2 软件维护工作流程
10.2.3 维护档案记录
10.2.4 维护活动评价
10.3 软件的可维护性
10.3.1 软件可维护性的定义与度量
10.3.2 提高可维护性的方法
习题与思考题
11 软件工程项目管理
11.1 软件项目管理概述
11.1.1 软件项目失控原因分析
11.1.2 软件项目管理的特点
11.1.3 软件项目管理的内容
11.2 软件规模度量
11.2.1 软件度量的分类
11.2.2 代码行度量法
11.2.3 功能点度量法
11.2.4 特征点度量法
11.2.5 代码行与功能点度量的比较
11.3 软件开发成本估算
11.3.1 估算方法
11.3.2 分解与类推
11.3.3 基于代码行和功能点的估算
11.3.4 经验估算模型
11.4 软件项目资源管理
11.4.1 人力资源
11.4.2 硬件资源计划
11.4.3 软件资源
11.4.4 软件复用性及软件部件库
11.5 进度计划
11.5.1 进度安排
11.5.2 甘特图
11.5.3 工程网络
11.5.4 软件开发任务的并行性
11.6 风险管理
11.6.1 风险识别
11.6.2 风险估计
11.6.3 风险评价
11.6.4 风险驾驭和监控
11.7 软件工程标准化和软件文档标准化
11.7.1 软件工程标准化的定义
11.7.2 软件工程标准化的层次
11.7.3 文档的作用、分类与编制要求
习题与思考题
12 软件质量保证
12.1 软件质量模型
12.1.1 软件质量的定义
12.1.2 软件质量特性
12.1.3 mccall软件质量模型
12.2 软件质量度量
12.2.1 软件质量度量概论
12.2.2 软件正确性度量
12.2.3 软件可靠性度量
12.2.4 易使用性和可维护性度量
12.3 软件质量保证
12.3.1 软件质量保证的概念
12.3.2 软件质量保证的任务
12.3.3 提高软件质量的技术途径
12.3.4 软件质量保证体系
12.4 质量检验和评审
12.4.1 各阶段质量检验的项目
12.4.2 软件质量检验方法
12.4.3 软件质量评审
12.5 软件能力成熟度模型(cmm)
12.5.1 不成熟的与成熟的软件机构的对比
12.5.2 软件机构能力成熟度模型
12.5.3 成熟度级别的内部结构
12.5.4 关键过程领域
12.5.5 成熟度提问单
12.5.6 利用cmm对软件机构进行成熟度评估
习题与思考题
附录 软件开发文档编写指南
A 可行性研究报告
B 项目开发计划
C 需求规格说明书
D 概要设计说明书
E 详细设计说明书
F 测试计划
G 测试分析报告
H 开发进度月报
参考文献
· · · · · · (收起)
读后感
用户评价
这本书的封面设计就给我一种非常专业、严谨的感觉,那种深蓝色调配上简洁的字体,透露出一种不容置疑的权威性。我一开始抱着很高的期待,毕竟“软件工程”这四个字本身就代表着一套系统化的方法论和成熟的实践经验。然而,当我真正翻开内页,尤其是那些关于项目管理和需求分析的章节时,我发现它更像是一本教科书的精简版,而不是我期望中那种能深入探讨实际操作中各种“陷阱”与“变通”的实战宝典。书中对瀑布模型、敏捷宣言的描述是清晰无疑的,术语定义也无可挑剔,但缺少了太多在真实世界中,团队如何处理利益冲突、如何在资源极度受限的情况下仍然交付高质量产品的鲜活案例。比如,在谈到风险管理时,它罗列了风险识别、评估、应对的步骤,但对于一个初入行的工程师来说,如何识别那些潜藏在日常沟通中的“软性”风险,如何说服管理层为那些尚未发生的危机投入预算,这些才是最让人头疼的实操难题,而这些,这本书只是点到为止,没有给予足够的笔墨去深入剖析。整体而言,它为构建知识体系打下了坚实的基础,但如果想从中汲取足以应对复杂工作环境的智慧,或许还需要搭配其他更具实战色彩的读物。
这本书的篇幅相当可观,厚度让人一拿到手就感觉内容量扎实得惊人。我尤其欣赏作者在某些章节中引入的那些跨学科的思考维度,比如,它不仅仅局限于技术层面,还提到了软件产品与用户体验的深层耦合关系,这在很多传统工程书籍中是很少见的。阅读体验上,它采取了一种非常学术化的论证结构,每提出一个观点,都会辅以严密的逻辑推导和引用支撑,这使得它的论述极具说服力,但同时也带来了一个副作用——阅读节奏相对缓慢。我经常需要停下来,对照着其他资料去理解某些抽象的概念,这对于那些想快速掌握核心技能的读者来说,可能会感到有些吃力。如果说这本书有什么地方让我感到略微不足,那就是在探讨面向对象设计原则(如SOLID)的应用时,案例的复杂度和实际业务场景的贴合度稍显不足。那些示例代码虽然完美地展示了理论的正确性,但在面对一个庞大、历史悠久且耦合度高的遗留系统时,如何平滑地、增量地应用这些原则,书中提供的指导策略显得过于理想化,缺乏那种“修补匠”的实用智慧。
这本书在软件架构设计这一块的内容着实让我眼前一亮,作者对不同架构风格(如微服务、事件驱动)的适用场景和权衡利弊分析得非常透彻,这对于我当前负责的系统重构工作提供了极大的启发。它没有简单地推崇某一种“银弹”架构,而是非常务实地讨论了如何根据业务的稳定性、扩展性和团队的技术栈特点来进行裁决。但是,在后期的维护和演进章节,特别是关于技术债务的管理上,我认为力度稍显不足。技术债务的产生是不可避免的,关键在于如何量化它、如何制定还款计划。这本书更多地是从流程上建议“定期重构”,却缺乏对技术债务具体量化模型(比如使用特定的工具或度量标准)的探讨,也未能充分描述如何将“偿还技术债务”这一非功能性需求成功地向上级进行有效沟通和争取资源。总的来说,它在宏观的、设计层面的指导上非常出色,但在微观的、持续运营和管理落地细节上,感觉略微轻描淡写,留下了不少需要读者自行去实践中摸索的空间。
说实话,这本书的作者群似乎有着深厚的学术背景,这使得全书充满了对“为什么”的深度挖掘,而不是简单地告诉你“怎么做”。对我个人而言,这既是优点也是缺点。优点在于,它强迫你去思考每一个决策背后的理论支撑,避免盲目跟风。比如,它对软件度量的理解非常深刻,不仅仅停留在代码行数或缺陷数量,而是深入探讨了更具业务价值的耦合度、内聚性等指标的科学衡量方法。缺点在于,它对于初学者可能不够友好。语言风格偏向于学术论文,句子结构复杂,充满了长难句,阅读起来需要极高的专注度。我发现,当我试图在快速翻阅寻找某个具体问题的解决方案时,这本书的叙事方式反而成了障碍。它更适合作为参考工具书,放在书架上,在你对某个概念产生哲学层面的疑问时去查阅和研读,而不是作为一本可以被快速消化吸收的入门指南。它的价值在于深化理解,而非快速入门。
我是在一个工作瓶颈期买的这本书,希望能从中找到突破口,尤其是在我对当前团队迭代效率感到不满的时候。这本书的结构清晰得像一张精密的路线图,从软件生命周期的开端到结束,每一步骤的输入、输出、关键活动都被细致地勾勒出来。它成功地帮助我梳理了脑海中那些零散的、碎片化的流程认知,形成了一个完整的框架感。然而,这种“框架感”的代价是牺牲了对“工具链”的关注。现代软件工程早已不再是单纯的流程描述,而是与DevOps文化、自动化测试框架、CI/CD流水线紧密相连。这本书似乎停留在了一个稍微更传统、更侧重于“过程管理”的阶段,对于如何利用最新的工具集来支撑和驱动这些工程实践的描述相对薄弱。比如,提到版本控制,它更多地是强调分支合并的策略性思考,而不是深入讲解在高度并行的开发环境中,如何利用Git的高级特性来优化协作效率。这使得这本书更像是一份优秀的“方法论纲要”,而不是一份“现代工程实践手册”。