软件工程
2004-7
邮电
张海藩
无
本书总结了编者多年来从事软件工程教学与研究的经验,并吸取了国内外众多同类教科书的精华。 本书共7章。第1章概述软件工程与软件过程;第2章讲述结构化分析的任务、过程、方法和工具;第3章讲述结构化设计的任务、准则、方法和工具;第4章着重介绍几种常用的测试技术;第5章讲述面向对象的概念、模型、分析、设计与实现;第6章讲述软件维护;第7章讲述软件项目的计划、组织和质量保证,并简要地介绍了能力成熟度模型。 本书的特点是:讲解深入浅出,通俗易懂,便于自学;把丰富的实例与原理性论述紧密配合,着重讲透基本的要领原理、技术和方法;特别注重实用性,用几个综合性实例概括了本书的主要内容。认真阅读这些实例,不仅对读者深入理解软件工程很有帮助,而且有助于读者学会把软件工程的理论与技术运用一实际工作中去,这些实例还可作为上机实习的材料。 本书可作为大学专科或高等职业技术学院软件工程课程教材,也可作为大学本科相应课程的教学参考书。
第1章 概述 11.1 开发软件不等于编写程序 11.1.1 开发软件应该完成的工作远远多于编写程序应该完成的工作 11.1.2 错误做法导致软件危机 21.1.3 消除软件危机的途径 51.2 软件工程 51.2.1 软件工程的定义 51.2.2 软件工程的基本原理 61.2.3 软件工程方法学 81.3 软件生命周期 101.4 软件过程 121.4.1 瀑布模型 131.4.2 快速原型模型 151.4.3 增量模型 161.4.4 螺旋模型 171.5 小结 18习题一 20第2章 结构化分析 222.1 可行性研究的任务 222.2 可行性研究过程 232.3 需求分析的任务 252.4 需求分析的过程 272.5 与用户沟通的方法 292.5.1 访谈 302.5.2 简易的应用规格说明技术 302.6 分析建模与规格说明 322.6.1 分析建模 322.6.2 软件需求规格说明书 322.7 验证软件需求 352.7.1 至少从四个方面验证软件需求 352.7.2 验证软件需求的方法 352.7.3 用于需求分析的软件工具 362.8 系统流程图 372.8.1 系统流程图的符号 372.8.2 举例 372.8.3 分层画系统流程图 392.8.4 系统流程图的用途 392.9 实体-联系图 402.10 数据流图 412.10.1 数据流图的符号 422.10.2 举例 432.10.3 命名 452.10.4 数据流图的用途 462.11 数据字典 472.11.1 数据字典的内容 482.11.2 定义数据的方法 482.11.3 数据字典的用途 492.11.4 实现数据字典的途径 492.12 其他图形工具 502.12.1 层次方框图 512.12.2 Warnier图 512.12.3 IPO图 522.13 成本/效益分析 532.13.1 成本估计 532.13.2 成本/效益分析方法 552.14 结构化分析实例 562.14.1 工资支付问题定义 562.14.2 可行性研究 582.14.3 需求分析 662.15 小结 74习题二 76第3章 结构化设计 783.1 软件设计的任务 783.1.1 概要设计的任务 783.1.2 详细设计的任务 793.2 从分析过渡到设计 793.3 软件设计准则 803.3.1 模块化与模块独立 803.3.2 抽象 823.3.3 逐步求精 833.3.4 信息隐藏 833.4 试题模块独立性的标准 843.4.1 耦合 843.4.2 内聚 853.5 启发规则 863.5.1 改进软件结构提高模块独立性 863.5.2 模块规模应该适中 863.5.3 深度、宽度、扇入都应适当 873.5.4 模块的作用域应该在控制域之内 873.5.5 力争降低模块接口的复杂程度 883.5.6 设计单入口单出口的模块 883.5.7 模块功能应该可以预测 883.6 描绘软件结构的图形工具 883.6.1 层次图和HIPO图 883.6.2 结构图 893.7 面向数据流的设计方法 913.7.1 概念 913.7.2 变换分析 923.7.3 设计优化 993.8 人机界面设计 993.8.1 应该考虑的设计问题 1003.8.2 人机界面设计过程 1013.8.3 界面设计指南 1023.9 过程设计 1043.10 过程设计的工具 1063.10.1 程序流程图 1063.10.2 盒图 1073.10.3 PAD图 1073.10.4 判定表 1103.10.5 判定树 1113.10.6 过程设计语言(PDL) 1113.11 面向数据结构的设计方法 1123.11.1 Jackson图 1133.11.2 改进的Jackson图 1133.11.3 Jackson方法 1143.12 结构化设计实例 1183.12.1 汉字行编辑程序的规格说明 1193.12.2 概要设计 1213.12.3 概要设计结果 1243.12.4 详细设计 1273.12.5 详细设计结果 1343.13 小结 165习题三 166第4章 结构化实现 1684.1 编码 1684.1.1 选择适当的程序设计语言 1684.1.2 正确的编码风格 1694.2 软件测试概述 1724.2.1 软件必须测试 1724.2.2 软件测试的目标 1724.2.3 两类测试方法 1734.2.4 软件测试准则 1744.3 白盒测试技术 1754.3.1 逻辑覆盖 1754.3.2 控制结构测试 1784.4 黑盒测试技术 1864.4.1 等价划分 1864.4.2 边界值分析 1894.4.3 错误推测 1904.5 测试策略 1914.5.1 测试步骤 1914.5.2 单元测试 1914.5.3 集成测试 1954.5.4 确认测试 1994.6 调试 2004.6.1 调试过程 2004.6.2 调试途径 2014.7 软件可靠性 2024.7.1 基本概念 2034.7.2 估算平均无故障时间的方法 2034.8 小结 205习题四 206第5章 面向对象方法学导论 2105.1 一个面向对象的程序实例 2105.1.1 用对象分解取代功能分解 2105.1.2 设计类等级 2125.1.3 定义属性和服务 2145.1.4 用C++语言实现 2155.2 面向对象的概念 2235.2.1 对象 2235.2.2 其他面向对象的概念 2255.3 面向对象方法学概述 2295.3.1 面向对象方法学的要点 2295.3.2 面向对象建模 2315.3.3 面向对象的软件过程 2325.4 对象模型 2335.4.1 表示类的图形符号 2345.4.2 表示关系的图形符号 2355.5 动态模型 2415.5.1 概念 2415.5.2 图示符号 2425.6 面向对象分析 2445.6.1 确定问题域内的对象 2455.6.2 确定关联 2465.6.3 确定属性 2475.6.4 建立继承关系 2485.6.5 建立动态模型 2485.6.6 建立功能模型 2495.6.7 定义服务 2495.7 面向对象设计 2495.7.1 面向对象设计准则 2505.7.2 启发规则 2515.8 面向对象分析与设计实例 2535.8.1 面向对象分析 2535.8.2 面向对象设计 2545.9 面向对象实现 2605.9.1 面向对象的程序设计语言 2605.9.2 面向对象程序设计风格 2615.9.3 面向对象测试 2635.10 面向对象方法学的主要优点 2645.11 小结 267习题五 269第6章 软件维护 2706.1 软件维护的定义与策略 2706.1.1 定义 2706.1.2 策略 2716.2 软件维护的特点 2726.2.1 结构化维护与非结构化维护判别悬殊 2726.2.2 维护的代价高昂 2736.2.3 维护的问题很多 2736.3 软件维护过程 2746.3.1 维护组织 2746.3.2 维护报告 2746.3.3 维护的事件流 2756.3.4 保存维护记录 2766.3.5 评价维护活动 2766.4 软件的可维护性 2776.4.1 决定软件可维护性的因素 2776.4.2 文档 2786.4.3 可维护性复审 2796.5 预防性维护 2796.5.1 必要性 2796.5.2 可行性 2806.6 软件再工程过程 2816.7 小结 284习题六 284第7章 软件胡萝卜管理 2867.1 试题软件规模 2867.1.1 代码行技术 2867.1.2 功能点技术 2877.2 估算软件开发工作量 2897.2.1 静态单变量模型 2897.2.2 动态多变量模型 2897.2.3 COCOMO2模型 2907.3 进度计划 2937.3.1 估算开发时间 2937.3.2 甘特(Gantt)图 2957.3.3 工程网络 2967.3.4 估算进度 2987.3.5 关键路径 2997.3.6 机动时间 2997.4 人员组织 3017.4.1 民主制程序员组 3017.4.2 主程序员组 3027.4.3 现代程序员组 3037.5 质量保证 3057.5.1 软件质量的定义 3057.5.2 软件质量保证措施 3067.6 软件配置管理 3097.7 能力成熟度模型 3107.8 小结 312习题七 313参考文献 314
无