软件构造第一章2

第1章:软件构建的观点和质量目标1.2软件构建的质量目标
1.2软件构建的质量目标
大纲
软件系统的质量属性 - 外部与内部质量因素 - 重要的外部质量因素 - 质量因素之间的权衡软件构建的五个关键质量目标 - 易于理解:优雅和美观的代码/可理解性 - 随时可用变化:可维护性和适应性 - 开发成本低廉:设计用于/重用:可重用性 - 防止错误:健壮性 - 高效运行:性能总结
1.2软件构建的质量目标
本讲座的目的
了解软件构建中需要关注的质量因素; 了解无法实现质量目标的后果; 了解本课程中每种品质因素的研究方法。
软件构建
1软件系统的质量属性
1.2软件构建的质量目标外部和内部质量因素
外部质量因素:速度或易用性等质量,其用户可以检测到软件产品的存在与否(不仅是实际与最终产品交互的人,还有购买软件或合同的人)它的发展)。 适用于软件产品的其他质量,例如模块化或可读性,是内部因素,只有能够访问实际软件文本的计算机专业人员才能感知。
最后,只有外部因素很重要。 但实现这些外部因素的关键在于内部因素:为了让用户享受可见的品质,设计师和实施者必须运用内部技术来确保隐藏的品质。
外部质量因素会影响用户。
内部质量因素会影响软件本身及其开发人员。
外部质量源于内部质量。
软件构建
(1)外部质量因素
1.2软件构建的质量目标
外部1:正确
正确性是软件产品执行其规范所定义的确切任务的能力。 正确性是最重要的品质。 确保正确性的方法:有条件的。 - 一个严肃的软件系统涉及很多领域,通过在一个层面上处理所有组件和属性来保证其正确性是不可能的。相反,分层方法是必要的,每一层都依赖于较低层。 - 我们应该确保库是正确的,并且单独地确保应用程序是正确的,假设库是。
⇒可重用性(重复使用的设计,第5章)
假设软件系统是分层开发的。
每层都保证其正确性,假设其下层也是正确的。
1.2软件构建的质量目标
外部1:正确
确保正确性的方法:测试和调试。
打字和断言等防御性编程,旨在帮助构建从一开始就正确的软件,而不是将其调试到正确性.⇒Robustness(第7章)
正式方法:“检查”,“保证”和“确保” - 正式计划规范和验证的数学技巧⇒研究生课程
1.2软件构建的质量目标
外部2:稳健
稳健性是软件系统对异常情况做出适当反应的能力。 - 健壮性补充正确性。 - 正确性解决了系统在其规范所涵盖的情况下的行为; - 健壮性表征了该规范之外发生的事情。 稳健性是为了确保如果出现这种情况,系统不会导致灾难性事件;它应该产生适当的错误消息,干净地终止它的执行,或进入所谓的“优雅降级”模式。
1.2软件构建的质量目标
外部2:稳健
稳健性与“异常情况”有关,这意味着正常和异常情况的概念总是相对于某个规范 - 异常情况仅仅是规范未涵盖的情况。 - 如果扩大规范,过去异常的情况变得正常 - 即使它们对应于您不希望发生的错误用户输入等事件。 - “正常”在这个意义上并不意味着“理想”,而只是“计划用于设计软件”。 - 虽然起初看起来似乎很自相矛盾,错误的输入应该被称为正常情况,但任何其他方法都必须依赖主观标准,因此无用。
⇒异常处理(第7章)外部3:可扩展性
可扩展性是指软件产品适应规范变化的便利性。 可扩展性问题是规模问题。 - 对于小型项目,改变通常不是一个难题;但随着软件越来越大,适应变得越来越难。 - 一个大型的软件系统经常将其维护者视为一个巨大的卡片屋,其中拉出任何一个元素可能会导致整个大厦崩溃。 我们需要可扩展性,因为在所有软件的基础上存在一些人类现象,因此变化无常。 传统方法没有充分考虑变化,而是依赖于软件生命周期的理想视图,其中初始分析阶段冻结了需求,其余过程专门用于设计和构建解决方案。
1.2软件构建的质量目标
外部3:可扩展性
两个原则对于提高可扩展性至关重要: - 设计简单:简单的架构总是比复杂的架构更容易适应变化。 - 权力下放:模块越自主,简单变更仅影响一个模块或少量模块的可能性就越大,而不是触发整个系统变化的连锁反应。
⇒第3章(ADT和OOP)⇒第6章(模块性和适应性)
1.2软件构建的质量目标
外部4:可重用性
可重用性是指软件元素用于构建许多不同应用程序的能力。 对可重用性的需求源于观察到软件系统通常遵循类似的模式;应该可以利用这种共性,避免重新解决之前遇到过的问题。 - 通过捕获这样的模式,可重用的软件元素将适用于许多不同的开发。
⇒第5章(设计/重复使用)
1.2软件构建的质量目标
外部5:兼容性
兼容性是将软件元素与其他元素相结合的简便性。 兼容性非常重要,因为我们不会在真空中开发软件元素:它们需要相互交互。 但他们往往难以互动,因为他们对世界其他地方做出了相互矛盾的假设。 - 一个例子是许多操作系统支持的各种不兼容的文件格式。只有在文件格式兼容的情况下,程序才能直接使用其他结果作为输入。
1.2软件构建的质量目标
外部5:兼容性
兼容性的关键在于设计的同质性,以及就程序间通信的标准化约定达成一致。
方法包括: - 标准化文件格式,如在Unix系统中,每个文本文件只是一个字符序列。 - 标准化数据结构,如在Lisp系统中,所有数据和程序也由二叉树(在Lisp中称为列表)表示。 - 标准化的用户界面,如各种版本的Windows,OS / 2和MacOS,所有工具都依赖于单一范例与用户进行通信,基于标准组件,如窗口,图标,菜单等.更通用的解决方案是通过将标准化访问协议定义为由软件操纵的所有重要实体而获得。
兼容性的关键是标准化,尤其是标准协议。
1.2软件构建的质量目标
外部6:效率
效率是指软件系统尽可能减少对硬件资源的需求的能力,例如处理器时间,内部和外部存储器占用的空间,通信设备中使用的带宽。 如果软件不正确,效率并不重要(建议一个新的格言),“不要担心它有多快,除非它也是正确的”)。对效率的关注必须与可扩展性和可重用性等其他目标相平衡;极端优化使软件如此专业化,以至于不适合变更和重用。 - 多种质量因素之间的权衡算法,I / O,内存管理等
⇒第8章(表演)
计算正确性的抽象概念与通过优化实现性能的具体实现
1.2软件构建的质量目标外部7:可移植性(可移植性)
可移植性是将软件产品转移到各种硬件和软件环境的便利性。 可移植性不仅解决了物理硬件的变化,而且更广泛地解决了硬件 - 软件机器,我们真正编程的机器,包括操作系统,窗口系统(如果适用)以及其他基本工具。外部8:易于使用
易于使用是指各种背景和资格的人可以轻松学习使用软件产品并将其应用于解决问题。它还包括易于安装,操作和监控。 如何为新手用户提供详细的指导和解释,而不会打扰那些只想进入业务的专家用户。 易于使用的关键之一是结构简单。一个精心设计的系统,根据清晰,深思熟虑的结构构建,往往比凌乱的系统更容易学习和使用。 了解用户。争论的焦点是,优秀的设计师必须努力了解系统的预期用户社区。 ⇒第10章(GUI)
1.2软件构建的质量目标
外部9:功能
功能是系统提供的可能性范围。 特点(通常是“爬行特征”)程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂,不灵活,占用过多的磁盘空间 - 更容易的问题是新功能的添加可能导致一致性的丧失,从而影响其易用性。事实上,用户确实抱怨产品新版本的所有“花里胡哨”使得它非常复杂。 - 更难的问题是避免如此专注于功能以至于忘记其他品质(忽略整体质量)。
奥斯蒙德的曲线
1.2软件构建的质量目标
外部9:功能
Osmond建议(颜色曲线)在OO开发的质量增强技术的帮助下,在整个项目中保持质量水平不变的所有方面,但功能性。 您不要在可靠性,可扩展性等方面做出妥协:在您对所拥有的功能感到满意之前,您拒绝继续使用新功能。 ⇒第2章(敏捷,SCM)
从一小部分关键特征开始,考虑所有质量因素。
在开发过程中逐渐添加更多功能,并保证与关键功能相同的质量。
1.2软件构建的质量目标
外部10:及时性
及时性是软件系统在用户需要时或之前发布的能力。 出现太晚的优秀软件产品可能会完全错过目标。
1.2软件构建的质量目标外部10 ++:其他品质
可验证性是准备验收程序的简便性,尤其是测试数据,以及在验证和操作阶段检测故障并将其追踪到错误的程序。 完整性是指软件系统保护其各种组件(程序,数据)免受未经授权的访问和修改的能力。 可修复性是指便于修复缺陷的能力。 经济是及时性的伴随,是系统在其指定预算之下或之下完成的能力。
软件构建
(2)内部质量因素
1.2软件构建的质量目标
内部质量因素
源代码相关因素,如代码行(LOC),Cyclomatic Complexity等与架构相关的因素,如耦合,内聚等
可读性,可理解性和清晰度复杂性尺寸
内部质量因素通常用作外部质量因素的部分测量。
软件构建
(3)质量属性之间的权衡
1.2软件构建的质量目标质量属性之间的权衡
如何在不引入各种保护的情况下获得完整性,这将不可避免地妨碍易用性? 经济似乎经常与功能作斗争。 最佳效率需要完美适应特定的硬件和软件环境,这与可移植性相反,并且完全适应规范,其中可重用性推动解决比最初给出的更普遍的问题。 及时性压力可能诱使我们使用“快速应用程序开发”技术,其结果可能无法获得太多可扩展性。质量属性之间的权衡
开发人员需要进行权衡。 - 很多时候,开发人员隐含地进行这些权衡,而没有花时间检查所涉及的问题和各种可用的选择;效率往往是这种沉默决策的主导因素。 - 真正的软件工程方法意味着努力清楚地陈述标准并有意识地做出选择。 由于质量因素之间的权衡可能是必要的,因此其中一个因素突出:正确性。 - 为了效率等其他问题,从来没有任何理由妥协正确性。 - 如果软件没有执行其功能,则其余部分无用。
1.2软件构建的质量目标软件构建的关键问题
上面讨论的所有品质都很重要。 但在目前的软件行业中,有四个突出:

  • 正确性和稳健性:可靠性•软件构建的系统方法•正式规范•开发过程中的自动检查•更好的语言机制•一致性检查工具
  • 可扩展性和可重用性:模块化
    1.2软件构建的质量目标OOP如何提高质量
    正确性:封装,分散稳健性:封装,错误处理可扩展性:封装,信息隐藏可重用性:模块化,组件,模型,模式兼容性:标准化模块和接口可移植性:信息隐藏,抽象易于使用:GUI组件,框架效率:可重用组件,及时性:建模,重用经济:重用功能:可扩展性
    软件构建
    2软件建设的五个关键质量目标
    1.2软件构建的质量目标本课程的质量考虑
    优雅而美观的代码⇒易于理解,易于理解设计/重复使用⇒开发便宜低复杂性⇒准备变更,易于扩展稳健性和正确性⇒安全无瑕,不易出错性能和效率⇒高效运行
    第4章可理解性
    第5章可重用性
    第6章可扩展性/可维护性第7章稳健性/正确性第8章效率/性能
    第3章ADT和OOP第9章重构
    1.2软件构建的质量目标
    易懂
    时刻周期代码级组件级代码级组件级
    构建时
    代码的可理解性(变量/子程序/语句的命名与构造标准,代码布局与风格,注释,复杂度)演练;
    函数规约
    构件/项目的可理解性(包的组织,文件的组织,命名空间)
    重构
    运行
    记录跟踪
    1.2软件构建的质量目标
    可重用性
    时刻周期代码级组件级代码级组件级
    构建时
    ADT / OOP;接口与实现分离;重载;继承/重载/重写;组合/代理;多态;子类型与泛型编程; OO设计模式
    API设计;图书馆;框架(用于/重用)
    运行
    1.2软件构建的可维护性和适应性质量目标
    时刻周期代码级组件级代码级组件级
    构建时
    模块化设计;聚合度/耦合度;固体; OO设计模式;基于表格的编程;国家计划;基于语法的编程
    固体;把握
    SCM版本控制
    运行
    1.2软件构建的质量目标
    稳健性
    时刻周期代码级组件级代码级组件级
    构建时
    错误处理;异常处理;断言;防守编程;测试优先编程
    单元测试集成测试RegressionTesting
    运行
    调试转储
    记录跟踪性能
    时刻周期代码级组件级代码级组件级
    构建时设计模式
    运行
    空间复杂性(内存管理); 时间复杂性(算法性能);代码调优
    分布式系统
    性能分析和调整
    并行/多线程程序
    软件构建
    摘要
    1.2软件构建的质量目标
    摘要
    软件系统的质量属性 - 外部与内部质量因素 - 重要的外部质量因素 - 质量因素之间的权衡软件构建的五个关键质量目标 - 易于理解:优雅和美观的代码/可理解性 - 随时可用变化:可维护性和适应性  - 开发便宜:设计/重复使用:可重用性 - 防止漏洞:稳健性 - 高效运行:性能本课程要研究的建筑技术(按五个关键质量目标的方向分类)
    软件构建
    结束

猜你喜欢

转载自blog.csdn.net/t03010/article/details/93405813