课程笔记

总览

总览

软件多维视图

构建时

  • Code-level view:源码、类结构;代码变化
    表示代码的逻辑组织
  • Component-level view:文件、目录、包、库、静态链接、测试项;配置项、版本
    表示代码的物理组织
  • Moment view:源码、类结构;文件、目录、包、库、静态链接、测试项
    表现源码和组件在特定时刻的软件形态
  • Period view:代码变化;配置项、版本
    表现软件形态随时间的变化

源码组织在文件中,进而组织在目录

文件存档在中,并逻辑上归属于组件子系统

可重用的模块以的形式存在,库存储在磁盘文件

静态链接:库被拷贝进代码形成整体,执行的时候无需提供库文件

运行时

  • Code-level view:代码快照、内存转储;堆栈轨迹、并发线程
    逻辑实体在内存中如何呈现
  • Component-level view:包、库、动态链接、数据库、网络、硬件;事件日志、多进程、分布式程序
    物理实体在物理硬件环境中如何呈现
  • Moment view:代码快照、内存转储;包、库、动态链接、数据库、网络、硬件
    逻辑/物理实体在内存/硬件环境中特定时刻的形态
  • Period view:堆栈轨迹、并发线程;事件日志、多进程、分布式程序
    逻辑/物理实体在内存/硬件环境中的形态随时间的变化

动态链接:库文件不会在构建阶段被加入可执行软件,仅仅做出标记;程序运行时,根据标记装载库至内存;发布软件时,将程序所依赖的所有动态库都复制给用户

分布式程序:需要多个运行程序,分别部署于多个计算机物理环境

代码快照:描述程序运行时内存里变量层面的状态

代码快照

内存转储(Memory dump):一个包含进程内存拷贝的磁盘文件,包含程序异常退出时的寄存器、调用栈、程序数据等,调试器可以加载转储文件并显示信息

执行跟踪(Execution tracing):软件层面,用日志方式记录程序执行的调用次序

事件日志:系统层面的日志

视图转换

  • $\emptyset\rightarrow Code$

    • Programming / Coding (ADT/OOP)
    • Review, static analysis/checking
  • $Code\rightarrow Component$

    • Design (ADT/OOP; Reusability; Maintainability)
    • Build: compile, static link, package, install, etc
  • $Build-time\rightarrow Run-time$

    • Install / deploy
    • Debug, unit/integration testing (Robustness and Correctness)
  • $Moment\rightarrow Period$

    • Version control
    • Loading, dynamic linking, execution (dumping, profiling, logging)
    • Concurrent threads

视图转换

软件的质量因素

外部质量因素:可被用户感知的因素,如软件速度、易用性;影响用户

内部质量因素:作为软件产品的质量,如代码可读性;影响软件本身和它的开发者

外部质量取决于内部质量。

外部质量因素

1. 正确性

正确性:按照预先定义的规约执行,是最重要的质量指标

  • 测试和调试:发现不正确、消除不正确
  • 防御式编程:在写程序的时候就确保正确性
  • 形式化方法:通过形式化验证发现问题

2. 健壮性/鲁棒性

健壮性:针对异常情况的处理,关键在于出现异常时不要崩溃

健壮性是对正确性的补充,正确性保证了软件的行为要严格符合规约中定义的行为;健壮性保证了出现规约定义之外的情形的时候,软件要做出恰当的反应。

“正常”和“异常”是主观而非客观的,未被规约覆盖的情况即为“异常情况”。

3. 可扩展性

可扩展性:对软件的规约进行修改,是否足够容易

软件规模越大,扩展起来越不容易。

4. 可复用性

可复用性:一次开发,多次使用

5. 兼容性

兼容性:不同的软件系统之间相互可容易的集成

核心是保持设计的同构性,关键在标准化。

6. 性能

除非有足够的正确性,否则性能毫无意义。对性能的关注要与其他质量属性进行折中,过度的优化会导致软件不再适应变化和复用。

7. 可移植性

可移植性:软件可方便的在不同的技术环境之间移植,包括硬件和操作系统

8. 易用性

易用性:对用户而言容易学、安装、操作、监控

提升易用性的方法是给用户提供详细的指南。

9. 功能性(Functionality)

程序设计中一种不适宜的趋势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程序极为复杂、不灵活、占用过多的磁盘空间,忽视整体质量,失去可持续性

10. 及时性(Timeliness)

及时性:在用户有对应需求前放出新版本

内部质量因素

源码方面:行数(LoC)、逻辑复杂度

结构方面:耦合、内聚

除此之外还有代码可读性、易于理解、清晰、大小等。

总结:5个核心质量因素

总结

Reusability

Maintainability and Adaptability

Robustness

考试题

2018-1

2019-1

2020-1

2021-1

2021-2

答案

C C B D C

最后修改:2022 年 06 月 04 日
如果觉得我的文章对你有用,请随意赞赏