如何理解在软件过程中的“高内聚、低耦合”?
基本概念:
内聚:衡量一个模块内部各个元素彼此之间的紧密程度
耦合:对一个软件结构内不同模块之间互连程度的度量
软件的设计目标即为软件具有高内聚、低耦合的特性。
高内聚的模块内部元素紧密结合,模块独立性高,模块具有清晰的职责和功能目标,易于理解、测试和维护。
低耦合的设计使模块之间联系松散、相互影响小,可以降低变更的风险,使系统更加灵活且易于扩展,利于协同开发
软件危机
概念:软件危机指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面内容
- 如何开发软件,以满足对软件日益增长的需求
- 如何维护数量不断膨胀的已有软件
软件危机的原因
- 主观原因
- 忽视需求分析
- 轻视软件维护
- 没有认识到越到软件工程后期,引入变动付出的代价越高昂
- 客观原因
- 软件是逻辑实体,缺乏可见性,管理和控制困难
- 软件维护意味着修改设计,维护难度大
- 软件规模庞大,程序负责性随着规模的增加指数上升
软件危机带来的启示
解决软件危机要从技术和管理方面入手,即,既要有技术措施(方法和工具),也要有必要的组织管理措施。
- 消除软件就是程序的错误的概念
- 必须认识到软件的开发不是一个人的事,而是各类人员相互配合,相互协作配合之下共同完成的工程项目
- 推广使用更好的开发技术和方法,并研究探索更好更有效的技术和方法。
- 开发和使用更好的软件工具
软件开发模型
软件过程:是为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型描述软件过程,主要包括:
- 瀑布模型
- 快速原型模型
- 增量模型
- 螺旋模型
- 喷泉模型
- 其他模型
瀑布模型(文档驱动模型)
特点:
- 阶段间具有顺序性和依赖性
- 推迟实现的观点
- 质量保证的观点
每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误
优点
- 强迫开发人员采用规范的方法
- 严格的规定了每个阶段必须提交的文档
- 要求每个阶段交出的所有产品都必须经过质量保证小组的审查
缺点
- 可运行软件产品较复客户之前,用户只能通过文档来了解软件产品是什么样子
- 缺乏灵活性,开发过程中很难发现错误,从而使软件产品难以维护
快速原型模型
快速建立可运行的程序
优点
- 软件产品开发基本是线性过程
- 开发的产品通常满足用户需求
缺点
- 准确原型设计困难
- 所选用的开发技术和工具不一定符合主流发展
- 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下
增量模型(渐增模型)
先完成一个系统子集的开发,再按同样的开发步骤增加功能,直至满足全部系统的需求
优点
- 短时间内向用户提交完成的产品的部分功能
- 逐渐增加产品功能,用户适应产品快
- 有利于系统维护
缺点
- 增加构件困难
- 容易退化为边做边改模型,从而使软件过程的控制失去整体性。
螺旋模型(风险驱动的模型)
在每个阶段之前都增加了风险分析过程的快速原型模型
可看作增加了风险分析的快速原型模型
适用范围:内部开发的大型软件项目
优点:
- 利于把软件质量作为软件开发目标
- 减少测试
- 维护和开发不分开
缺点
- 风险估计困难,要求开发人员具有丰富的风险评估经验和专业知识
喷泉模型(典型的面向对象的软件模型之一)
体现迭代和无缝的特性
优点:
- 提高软件的开发效率,节省开发时间
缺点:
- 开发中需要大量的开发人员,不利于项目的管理
- 要求严格的管理文档,审核难度大
其他模型
- Rational 统一过程
- 敏捷过程(例如:极限编程)
- 微软过程
可行性分析
可行性研究的三种解法:
- 经济可行性
- 技术可行性
- 操作可行性
可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决
可行性研究步骤
- 复查系统规模和目标
- 研究目前正在使用的系统
- 导出新系统的高层逻辑模型
- 进一步定义问题
- 导出和评价供选择的解法
- 推荐行动方案
- 草拟开发计划
- 书写文档提交审查
软件小组成员应该具备的品质
- 技术能力
- 团队合作
- 问题解决
- 质量导向
- 沟通能力
- 自我驱动
- 时间管理
- 适应能力
成本效益分析
程序流程图、流图、计算程序的复杂度
数据流图和软件结构层次图
类图,类与类之间的关系
详细设计-判定树
白盒测试用例
判定覆盖:
使得被测程序中的每个判定表达式的可能结果都出现一次
条件覆盖:
使得判定表达式中的每个条件的各种可能值都出现至少一次
判定/条件覆盖:
使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式的所有可能结果都出现至少一次(判定+条件)
条件组合覆盖
使每个判定表达式中条件的各种可能的值的组合都出现至少一次
黑盒测试
等价类划分法
- 把程序的输入数据集合按输入条件划分为若干个等价类,每一个等价类相对于输入条件表示为一组有效或无效的输入
- 为每一等价类设计一个测试用例
边界值分析法
输入等价类和输出等价类的边界就是应该着重测试的程序边界情况。选取的测试数据应该刚好等于、刚好小于、刚好大于边界值。