软件构造笔记2

1.2 软件构造的质量目标

软件系统的质量特性:

  • 外在与内在的合格因素
  • 重要的外在合格因素
  • 合格因素之间的折中

五个关键的软件构造qualify;

  • 便于理解:elegant and beautiful code/ understandability
  • 方便修改:maintainability and adaptability
  • Cheap for develop:design for/ with reuse: useability
  • Safe from bugs:健壮性
  • Efficient to run:performance
    各个因素之间相互独立,但是也存在关联与矛盾,也存在折中

Objective of this lecture

  • 在软件构造中了解质量因素
  • 如果质量因素没办法解决的情况下理解结果与重要性
  • 在课程中的每一个质量因素的学习中都要了解什么是构造的技巧

1. 软件系统的质量因素

  • 外部的质量因素:非开发人员、用户与使用者能够感受到的,影响用户的使用,这些东西是设计人员、构造人员需要实现出来的。
  • 内部的质量因素影响代码的相关人员,影响软件本身与开发者。通过内部因素来影响外部因素
    软件开发的外部因素
  1. 正确性
    正确是最基本的特性。正确是软件能够执行确定的被定义的任务的特性。保证正确性的方法可以是分层。假定一个软件系统是分层开发的,每层都要确保自己是正确的,同时假定其调用的底层也是正确的。安装需求规格说明书来理解。
    实现正确性还有一个方法:Test与Debug(测试)。通过断言与静态类型检测来保护程序->健壮性,从开始来进行检查,而不是debugging it into correctness。
    比较完美的方法是形式化开发方法,可以通过数学来证明验证正确性。但是需要用数学语言设计,对数学要求较高,对开发人员的入门门槛较高,属于研究生课程范围。
  2. 健壮性
    健壮性是软件系统对异常情况做出适当反应的能力。正确性与健壮性是互补的。健壮性确保当一些情况产生(不属于需求规格说明书)系统不导致灾难性的时间,他应该生成合适的错误信息,干净的终止执行,或者进入所谓的“优雅降级”模式。
  • 健壮性同异常情况相关,异常或者非异常取决于程序的规格说明。异常情况是程序的规格说明中没有涉及的部分。
  • 如果扩展规格说明,过去是异常的情况也可能是变成正常,即使与那些你认为不会发生的用户的错误输出相关。
  • 正常的意思不代表“desirable”, 而仅仅是为软件的设计做计划。
  • 尽管一开始将错误的输入当做正常情况看起来是反常的,但是任何其他的方法可能都依赖于接管的标准。所以判断软件是否为异常的标准,不取决于客观的正确标准,而取决于程序的规格说明。
  1. 易扩展性(可扩展性)
  • 可扩展性是指软件易于调整以事业变化的能力。
  • 可扩展性同规模密切相关。
    • 小的程序改变通常不是一件困难的事,但是当软件变的越来越大,特也就越来越难改变
    • 一个大的软件系统通常被它的维护人员看成是一个大房子,往里面加入任何一个元素都可能导致这个大厦崩塌。
  • 软件是易变的,需要可扩展性。
  • 传统的方法不做很多的变化,在最初冻结需求,假定没有变化,因此难以适应变化。
  • 对于提高软件的可扩展性,有两条法则是重要的:
    • 设计的简单性:一个简单的体系结构总是比复杂的体系结构更加适应变化。
    • 离散化:模块的自治性越强,变化时对于其他的模块影响也越小。

---->第三章ADT与OOP 第六章模块化与可适应性

  1. 复用性
  • 复用性是软件对于许多不同的应用的构造
  • 软件经常遇到相似的模式,利用共性,避免重复实现。
    • 一个复用的软件元素应该对于许多不同的软件开发都是可适用的。

---->第五章

  1. 兼容性
  • 兼容性是将软件元素与其他部分相结合的容易度。
  • 兼容性很重要,因为他们与其他软件进行交互。
  • 但是困难的地方在于,不同的软件有着不同的设定/规定
  • 兼容性主要依赖于设计的一致性,并且与程序交流的标准化沿袭相一致。
  • 方法包括:
    • 标准化文件格式 如Unix系统
    • 标准化数据结构 如lisp语言
    • 标准化用户接口 如在各种各样的操作系统上,所用的工具都依赖于一个独立的,基于视窗、图标与菜单的范例来与用户进行交互。
  • 还可以通过标准化协议来实现更通用的兼容性。
  • 标准化是解决兼容性的关键。
  1. 效率
  • 效率是软件系统对硬件资源尽可能少的需求的能力。
  • 如果软件不正确,那么效率也是无用的, 对于效率的关注必须要与其他目标进行平衡,比如可扩展性与复用性。

第八章 Performance

  1. 可移植性
  • 可移植性是指便于将软件产品转移到各种硬件和软件环境。
  • 可移植性解决的变化不只是物理硬件的变化,更多的指的是硬件-软件机器。
  1. 易用性
  • 用户可以轻松掌握软件的使用,也包括安装、运行和监控的容易度。
  • 提供给初学者细致的指导与解释,但是又不会使得专业用户感到被打扰。
  • 易用性的一个关键是结构的简洁。一个好的,根据清楚的结构设计的系统,将会比繁杂的更加容易去学习与使用
  • 理解用户,换位思考,站在用户的角度设计软件。

----->第十章 GUI

  1. 功能性
  • 功能性是系统所能提供的可能性的范围。
  • 蠕变特征 程序设计中一致不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是软件变得极为复杂、不灵活、占用过多的磁盘空间。
    • 过多的新功能容易带来一致性的缺失,影响易用性。
    • 更困难的问题是变得过于重视特性而忽略了其他的质量。
  • Osmond建议,在质量提升技术的帮助下,可以在整个项目中保持质量水平不变,而不仅仅是功能性。
  • 可以着眼于主要的功能,然后再一点点增加功能,并且注重开发的质量。
  1. 时效性
  • 时效性是软件在或当用户需要时能够release的功能。

10++ 可验证性, 是否易于验证。完整性,软件系统保护其各种组件(程序和数据)免受未经授权的访问和修改的能力。可修复性。经济性,同及时性相伴,是系统能够按照其分配的预算或低于预算完成的能力。

2. 内部的质量因素

  • 代码行数LOC、圈复杂度,用来衡量一个模块判定结构的复杂程度
  • 耦合度、内聚度。设计中追求高耦合低内聚。
  • 可读性、容易理解、大小、复杂度
  • 内部质量因素通常用作外部质量因素的部分度量。

3. 质量因素之间的权衡

有些因素相互之间互相影响,或者矛盾,或者相关。经济性跟功能性常常看起来有矛盾。有效性可能需要较高的硬件环境,轻便性就会较差。软件的复用性较好,开发的周期可能就会较长。时效性可能会损失掉一些可扩展性。
开发者常常会需要进行权衡,真正的软件工程方法意味着努力清晰地陈述标准,并有意识地做出选择。正确性是首要的,没有正确性其他就没有意义。
关键性的关注:正确性与健壮性,这个总是很困难。
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值