第一章
软件的多维视角:
按阶段划分:构造时/运行时视图
按动态性划分:时刻/阶段视图
按构造对象的层次划分:代码/构件视图
根据多维视角组合,有8个视角
软件发展圈:
计划》》分析》》设计》》实现》》测试&整合》》维护》》计划
构建阶段(构建阶段):
想法->要求->设计->代码->可安装/可执行包
– 代码级视图:源代码 ---- 源代码的逻辑组织
通过基本程序块,如函数、类、方法、接口、等等,以及它们之间的依赖关系
– 组件级视图:架构 ---- 源代码的物理组织
通过文件、目录、包、库和依赖项之间组织
构造,时刻,代码视角:
词汇,语法,语义三个层次。
词汇:半结构化:近乎自然语言的风格+遵循特定的编程语法
语法:抽象语法树(AST)彻底结构化,将源代码变为一棵树,对树做各种操作==对源码的修改
语义:源代码——现实
构造,阶段,代码级:代码变化
构造,时刻,组件级:
开发者像使用编程语言指令一样使用库中的功能
操作系统提供的库、编程语言提供的库、第三方公司提供的库、自己积累的库
静态链接发生再构造阶段
构造,阶段,组件级:程序版本更新
可执行目标文件(程序)和库,大家懂得都懂。
配置和数据文件,分布式程序(可重定位目标文件)也没什么新颖的。
解释型字节码(高级程序语言):
– 字节码类似于本地机器码,CPU不直接了解他们。
– 首先将它们翻译成本地机器代码或解释它们
– 因此是字节码,环境需要额外的编译器。
程序完全解释执行(机器代码)直接加载到系统
客户端服务器模型,对于不同使用者可以程序不对称
运行,时刻,代码级:内存信息转储
运行,阶段,代码级:日志方式记录程序执行的调用次序
运行,时刻,组件级:deployment diagram in UML(部署图
运行,阶段,组件级:时间日志:系统层次
学习内容:所有构建阶段和运行,代码阶段,共6个
外部质量因素 影响 用户
内部质量因素 影响 软件本身和它的开发者
外部质量取决于内部质量
外部质量:
正确性:最重要的质量指标,按照预先定义的“规约”执行
保证方法:测试和调试,防御式编程,形式化方法
稳定性,鲁棒性,健壮性:正确性的补充,规约之外的恰当反应,异常时不要崩溃。异常是规约之外的主观因素
可扩展性:规模越大,为了应对变化,扩展起来越不容易
方法:简约主义设计(ADT,OOP),分离主义设计
可复用性:一次开发,多次使用,发现共性
兼容性:不同的软件系统之间相互可容易的集成,软件交互
方法:关键是标准化,尤其是标准协议,标准化的文件格式,数据结构,用户界面
性能:性能毫无意义,除非有足够的正确性;对性能的关注要与其他质量属性进行折中;过度的优化导致软件不再适应变化和复用;过早优化是万恶之源
可移植性:软件可方便的在不同的技术环境之间移植,包括不同硬件和不同软件
易用性:容易学、安装、操作、监控;给用户提供详细的指南
功能性:程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂、不灵活、占用过多的磁盘空间。增加花里胡哨的功能而忽略整体品质,或专注的高品质。每增加一小点功能,都确保其他质量属性不受到损失。
及时性:及时性(及时性)是软件系统在用户需要时或之前发布的能力。一个伟大的软件产品出现得太晚可能会完全错过它的目标
可验证性;完整性;可修复性;经济性……
内部质量因素:
源代码相关因素:代码行数,圈复杂度;
与架构相关因素:耦合,内聚;
可读性;可理解性;清晰度;尺寸;
质量属性之间的权衡:
经济性似乎经常与功能性作斗争。最佳效率需要完美适应特定的硬件和软件环境,这与可移植性和完美适应规范相反,其中可重用性推动解决比最初给出的问题更普遍的问题。及时性压力可能会诱使我们使用“快速应用程序开发”技术,其结果可能没有太多可扩展性。
完整性与易用性;经济与功能;效率与便携性;效率与可重用性
经济性与可重用性;及时性与可扩展性。
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来
虽然需要折中,但“正确性”绝不能与其他质量因素折中。
上面讨论的所有品质都很重要,但在软件行业的当前状态下,有四个突出:
– 正确性和稳健性:可靠性
软件构建的系统方法;正式规范;开发过程中的自动检查;更好的语言机制;一致性检查工具
– 可扩展性和可重用性:模块化
OOP(Object Oriented Programming)面向对象编程提高质量方法:
正确性:封装、去中心化
健壮性:封装、错误处理
可扩展性:封装、信息隐藏
可重用性:模块化、组件、模型、模式
兼容性:标准化的模块和接口
可移植性:信息隐藏、抽象
易用性:GUI 组件、框架
效率:可重复使用的组件
及时性:建模、重用
经济:重复使用
功能:可扩展性
总结:
描述软件系统的三个维度:
按阶段:构建和运行时视图
按动态:时刻和周期视图
按级别:代码和组件视图
每个视图的元素、关系和模型
软件构建:视图之间的转换
无-》代码-》组件;构建时 Þ 运行时;时刻 Þ 时期
软件系统的质量特性
– 外部与内部质量因素
– 重要的外部质量因素
– 质量因素之间的权衡
软件构造的五个关键质量目标
– 易于理解:优雅美观的代码/可理解性,构建时刻级
– 准备好改变:可维护性和适应性,构建时刻级+构建阶段组件级
– 开发成本低:设计/重用:可重用性,构建时刻级
– 免受错误影响:健壮性,运行时刻级+构建时刻代码级
– 高效运行:性能,本课程只提及,不是重点
本课程要学习的构造技术(分类为五个关键质量目标的方向)
个人整理自刘铭老师课件,仅供参考学习,请勿转载