• 【软件构造】第一章第二节 软件开发的质量属性


    软件构造第一章第二节 软件开发的质量属性

      上一节告诉我们不同视角下“软件构造的结果”分别是什么,在这一节我们要清楚“什么样的结果”算好的。这一章我们介绍了内部、外部的若干质量属性,其中 可理解性(第四章)、可复用性(第五章)、可维护性(第六章)、健壮性(第七章)、性能(第八章)是五个关键质量目标。

    Outline

    • 软件系统的质量属性
      • 外部与内部质量因素
      • 重要的外部质量因素
      • 质量因素之间的权衡
    • 软件构建的五个关键质量目标
      • 了解有哪些质量目标
      • 违反有什么后果
      • 每种质量因素需要研究的施工技术

    Notes

    【外部和内部质量属性】
    • 外部质量属性是指正确性、外观、速度等影响客户的属性
    • 内部属性是指易于理解、可读性等影响开发人员和软件自身的属性
    • 二者关系:外部受内部制约

    # 外部质量属性

    【正确性】
    • 在规格说明书描述范围之内满足正确性
    • 保证正确性的技术
      • 有限制的正确:只保证自己层面正确,假设调用的都是正确的
      • 测试与调试
      • 防御性编程
      • 形式化编程(采用很多数学技术)
    【健壮性】
    • 碰到异常情况进行适当的响应
    • 出现规格说明书说明之外的情况由健壮性处理
      • 响应异常情况
      • 给出错误提示
      • 正常退出或降级
    【可扩展性】
    • 软件产品适应规格变化的容易程度
    • 传统方法通过固化需求(瀑布模型)进行编程
    • 两个基本策略
      • 设计简洁
      • 离散化:低耦合
    【可复用性】
    • 软件模块能否被其他程序很方便地使用
    • 例子:开发备注、封装
    【兼容性】
    • 能够与其他人员进行交互
    • 跨平台、跨软件
    • 实现方法:一致性和标准化(一致的方法和标准)
      • 标准文件格式
      • 标准数据结构
      • 标准用户接口
      • 最通用:标准协议
    【效率】
    • 程序运行中对CPU、硬盘的占用带宽;
    • 实现效率是不能牺牲正确性,要再多指标之间权衡
    • 实现方法:
      • 好的算法
      • I/O技术
      • 内存管理
    • 功能问题都可以加一层抽象进行处理;性能问题都可以去掉一层抽象来解决
    【可移植性】
    • 是否容易由一个环境转移到另一个环境
    • 由于访问OS本地类库、插件等问题导致的移植后无法正常运行
    【应用性】
    • 用户是否容易使用,不影响专业人员的使用情况下,方便初学者
    • 方法:
      • 结构清晰的设置
      • UI设计:理解用户需求
    【功能性】
    • 蠕变特征(不好的现象:开发者开发越来越多的功能,造成程序的复杂和不灵活)
    • 原则:在保证整体质量不降低的情况下进行更新
    • 策略:增量式模型
    【及时性】
    • 在规定时间内完成:时间效率高
    【其他质量特性】
    • 可验证性:如管理系统的效果难以验证
    • 完整性:不会被非法访问干扰修改,防止数据不一致(如使用private)
    • 可修改性
    • 资金 

     # 内部质量属性

    • 从LOC(line of code)到圈复杂度:用来衡量一个模型判定结构的复杂程序
    • 耦合度和内聚度
    • 代码是否可读、可理解、简洁
    • 完整性
    • 大小
    【均衡决策】
    • 完整性与易用性冲突
    • 经济性与功能性冲突
    • 性能与可复用、可移植性冲突
    • 及时性与可延展性冲突
    以效率为导向,以正确性为最重要
     
    【OOP如何保障质量属性(一些技术,在后续博客中会有所涉及)】
     
     

    #五个关键的质量属性

    • easy to understand
    • ready for change
    • cheap for develop
    • safe from bugs
    • efficient to run
    【可理解性】
    • 在构建时
      • 代码层要注意(函数规约)
        • 变量 / 子程序 / 语句 的命名与构造标准
        • 代码布局与风格
        • 注释
        • 复杂度
      • 组件层要注意构件和项目的可理解性
        • 包的组织
        • 文件的组织
        • 命名空间
      • 在时段中,代码层注意重构
    • 在运行时,代码层注意跟踪日志
    【可复用性】
    • 构建时
      • 代码层应注意
        • ADT / OOP
        • 接口与实现分离
        • 继承 / 重载 / 重写
        • 组合 / 代理
        • 多态
        • 自类型与泛型编程
        • OO设计模式
      • 组件层注意
        • API接口设计
        • 类库
        • 框架
    【可维护性与适用性】
    【健壮性】
    • Code level-build time-Moment
      • 错误处理
      • 异常处理
      • 断言
      • 防御型编程
      • 测试优先编程
    • Component level-buildtime-period
      • 单元测试
      • 集成测试
    • Build time-period
      • 回归测试
    • run time-moment
      • 测试转储
    • run time-period
      • 跟踪日志
    【性能】
    • 构建时,使用指定的设计模式
    • 运行时
      • 在代码层次
        • 通过内存管理考虑空间复杂度
        • 通过算法性能计算时间复杂度
        • 利用代码调优生成更高效的目标代码
        • 在时段内进行性能分析和调整
      • 在组件层次
        • 采用分布式系统
        • 编写多线程的并行程序
    E-mail:hithongming@163.com
  • 相关阅读:
    简单复利计算java板
    弹出提示框的方式——java
    实验一 命令解释程序
    简单复利计算c语言实现
    操作系统
    jsp 页面和 jsp标记
    对it行业的一些看法
    又穷自动机的构造
    复利计算——结对编程2.0
    汉堡包
  • 原文地址:https://www.cnblogs.com/hithongming/p/8489672.html
Copyright © 2020-2023  润新知