1、产生软件危机的原因1,软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件,软件缺乏“可见性”2,软件不同于一般程序,它的一个显著特点是规模庞大软件的定义软件是程序、数据及相关文档的完整集合软件工程的定义软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。软件工程具有下述的本质特性1,软件工程关注于大型程序的构造2,软件工程的中心课题是控制复杂性3,软件经常变化4,开发软件的效率非常重要5,和谐地合作是开发软件的关键6,软件必须是有效地支持它的用户7,在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品软件工程的 7 条基本原
2、理1,用分阶段的生命周期计划严格管理2,坚持进行阶段评审3,实行严格的产品控制4,采用现代设计技术5,结果应能清楚地审查6,开发小组的人员应该少而精7,承认不断改进工程实践的必要性软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。软件工程方法学包含 3 个要素:方法、工具和过程最广泛的软件工程方法学,分别是传统方法学和面向对象方法学传统方法学的特点:分阶段、重文档、阶段审查面向对象方法学的特点:面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。软件生命周期概括地说,软件生命周期由软件定义、软件开发和运行维护(
3、也称为软件维护)3 个时期组成。软件定义时期通常进一步划分成 3 个阶段,即问题定义、可行性研究和需求分析。软件生命周期每个阶段的基本任务:1 问题定义 2 可行性研究 3 需求分析 4 总体设计 5 详细设计 6 编码和单元测试 7 综合测试 8 软件维护生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。瀑布模型特点:1,阶段间具有顺序性和依赖性2,推迟实现的观点3,质量保证的观点快速原型模型增量模型螺旋模型喷泉模型研究可行性的解法:技术可行性 经济可行性 操作可行性可行性研究过程:1 复查系统规模和目标 2 研究目前正在使用的系统 3 导出新系统的高层逻
4、辑模型 4 进一步定义问题 5 导出和评价供选择的解法 6 推荐行动方针 7 草拟开发计划 8 书写文档提交审查数据字典的定义数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据字典由 4 类元素的定义组成1 数据流 2 数据流分量 3 数据存储 4 处理需求分析任务1,确定对系统的综合要求2,分析系统的数据要求3,导出系统的逻辑模型4,修正系统开发计划综合要求包括:1 功能需求 2 性能需求 3 可靠性和可用性需求 4 出错处理需求 5 接口需求 6 约束 7 逆向需求 8 将来可能提出的要求与用户沟通获取需求的方法1 访谈 2 面向数据流自顶向下求精3 简易的
5、应用规格说明技术 4 快速建立软件原型设计过程1,分析并选择合理方案(设想供选择的方案选择合理的方案推荐最佳方案)2,合理方案的总体设计(功能分解设计软件结构设计数据库制定测试计划)3,编写总体设计说明书(书写文档审查和复审)设计原理1 模块化 2 抽象 3 逐步求精 4 信息隐藏和局部化 5 模块独立启发规则(记 4 个)1,改进软件结构提高模块独立性2,模块规模应该适中3,深度、宽度、扇出扇入都应适当4,模块的作用域应该在控制域之内5,力争降低模块接口的复杂程度6,设计单入口单出口的模块7,模块功能应该可以预测详细设计包括:1,数据详细设计2,程序详细设计(输入输出、界面、校验)3,性能详
6、细设计(可靠性、响应时间、权限)4,支持环境详细设计实现包括:1,系统架构、实现平台 2 数据库结构建立 3 编码 4 测试软件测试的目标1,测试是为了发现程序中的错误而执行程序的过程2,好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案3,成功的测试是发现了至今为止尚未发现的错误的测试软件测试的方法测试任何产品都有两种方法:黑盒测试、白盒测试单元测试的测试重点1 模块接口 2 局部数据结构 3 重要的执行通路 4 出错处理通路 5 边界条件集成测试包括非渐增式测试和渐增式测试。渐增式测试包括自顶向下集成方法和自底向上集成方法。确认测试包括 Alpha 和 Beta 测试白盒测试技术1,
7、逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖)2,控制结构测试黑盒测试技术1 等价划分 2 边界值分析 3 错误推测软件可靠性定义:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件维护包括:1 改正性维护 2 可靠性维护 3 完善性维护 4 预防性维护面向对象=对象 +类+继承+消息面向对象建模用面向对象方法开发软件,通常需要建立 3 种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。确定关联1 初步确定关联 2 筛选 3 进一步完善面向对象设计的准则1 模块化 2 抽象 3 信息隐藏 4 弱耦合 5 强内聚 6 可重用可靠性(正确性、健壮性、效率、完整性、可用性、风险)