第一章 软件构造的多维视图和质量目标

一.多维视图
1.时刻/阶段;构造/运行;代码/部件
2.构造阶段
(1)code level view:源代码是如何在逻辑上按基本程序块组织的(代码逻辑组织)
(2)component level view:架构 ---- 源代码是如何通过文件、目录、包、库以及它们之间的依赖关系的物理组织方式(代码物理组织)
(3)moment view:源代码和组件在一个特定的时间内是什么样子的?(特定时刻的软件形态)
(4)period view:它们是如何随着时间的推移而演变/改变的(软件形态随时间的变化)
3.组合
(1)Build-time, moment, and code-level view:源代码(面向词法),抽象语法树AST(面向语法),类图表(面向语义)
面向语义通常是图形化或形式化
(2)Build-time, period, and code-level view:描述随着时间而 "变化 "的观点
(3)Build-time, moment, and component-level view:关注代码的更迭,这个维度下更关注文件版本的变化,而不是具体语句的变化
(4)Build-time, period, and component-level view:关注各项软件实体随时间的变化,各文件不同版本集合构成了一个大的软件
(5)Run-time, moment, and code-level view: snapshot diagram->描述运行时内存里变量层面的状态
(6)Run-time, period and code-level view: 关注代码执行情况,执行跟踪,例如程序单元之间的相互作用
(7)Run-time, moment, and component-level view:关注的是在代码执行过程中的包/库,如动态链接库
(8)Run-time, period, and component-level view:事件日志,记录信息、细节,都是在开发周期中考虑的。
在这里插入图片描述

4.library
(1)库被存储在自己的磁盘文件中,收集了一组代码功能,可以在各种程序中重复使用。
(2)不总建立单一可执行文件,而是将定制开发的软件和预置库加入到一个单一的程序中。
(3)开发者像使用编程语言指令一样使用库中的功能。
5.静态链接
(1)在静态链接中,库是单独对象文件的集合
(2)库被拷贝进入代码形成整体,执行的时候无需提供库文件
(3)动态链接可以根据具体内存情况选取代码,算法;静态链接做不到
(4)发生在构建阶段(build time)
(5)最终形成一个单一可执行程序,库与代码不分开
6.动态链接
(1)不复制对象文件,而是注意到需要的,不会在build阶段将库文件加入到可执行文件,只是做出标记
(2)运行时根据标记装载库到内存中
(3)不需要重新创建可执行程序
(4)只将库的单一副本加载到内存中,但与需要相同库的其他程序共享
7.版本管理
(1)软件版本管理是指将唯一的版本名称或唯一的版本号分配给软件的唯一状态的过程。
8.运行观点(Runtime Views)
Runtime:当一个程序在目标机内运行时,它是什么样子的?目标机内运行的程序是什么样子的,目标机需要载入内存的所有磁盘文件是什么?
Code-level view:逻辑实体在内存中如何呈现
Component-level view: 物理实体在物理硬件环境中如何呈现
Moment view:逻辑/物理实体在内存/硬件环境中特定时刻的形态如何
Period view:逻辑/物理实体在内存/硬件环境中的形态随时间如何变化
在这里插入图片描述
二.质量目标
1.综述
(1)外部质量目标:是用户体验到的,例如执行得快不快等等
(2)内部质量目标:程序员感受到的,如模块化、可读性等等
(3)外部质量取决于内部质量
2.外部质量目标
(1)正确性:最重要,不可让步,测试和调试,防御式编程,严格符合规约行为
(2)健壮性:针对异常情况的处理,是对正确性的补充,就是当出现不符合规约行为时会有反应(异常处理子程序等)
注:所谓异常,得看规约的范畴
(3)可扩展性:易于适应规约的变化,要设计得尽量简约、尽量分离设计,各个类之间少联系
(4)可复用性:着重于看软件是否能够用在不同的应用,发现共性,未来可以直接使用这段代码,降低开发成本
(5)兼容性:软件元素与其他元素结合的便利性,不同的软件系统之间相互可容易的集成,例如文件格式的兼容,关键是要保持设计的同构性
(6)效率:软件系统对硬件资源提出的要求尽可能少,性能毫无意义,除非在正确性基础上;与其他质量属性进行折中,过度的优化导致软件不再适应变化和复用
(7)可移植性:软件可方便的在不同的技术环境之间移植(硬件、软件机器变化)
(8)易用性:产品容易学,容易使用(容易学、安装、操作、监控),设计者了解系统的用户群
(9)功能性:一个系统所提供的可能性的范围,增加功能会导致一致性的丧失,影响易用性
(10)及时性:指一个软件系统在用户需要时或之前发布的能力
(11)其他
可验证性:验证验收程序,检测故障的难易程度
完整性:软件系统保护其各个组成部分免受未经授权的访问和修改的能力
可修复性:促进修复缺陷的能力
经济性:指定或低于预算的能力
3.内部质量目标
代码行数(LOC),循环复杂度,结构,耦合,内聚力,可读性,可理解性,清晰度,大小 ->内部质量作为外部质量的部分考量
4.折中
Integrity vs. ease of use
Economy vs. functionality
Efficiency vs. portability
Efficiency vs. reusability
Economy vs. reusability
Timeliness vs. extendibility
这几组往往不可兼得,需要权衡
在OOP开发中,通过封装、模块化、组件、抽象、分散、错误处理、信息隐藏、框架、接口等技术来尽可能地满足上述地质量因素,提高软件的开发质量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值