Loading... # 课程笔记 ## 总览  ## 软件多维视图 ### 构建时 + Code-level view:源码、类结构;代码变化 表示代码的**逻辑**组织 + Component-level view:文件、目录、包、库、静态链接、测试项;配置项、版本 表示代码的**物理**组织 + Moment view:源码、类结构;文件、目录、包、库、静态链接、测试项 表现源码和组件在**特定时刻**的软件形态 + Period view:代码变化;配置项、版本 表现软件形态**随时间的变化** **源码**组织在**文件**中,进而组织在**目录**中 **文件**存档在**包**中,并逻辑上归属于**组件**和**子系统** **可重用**的模块以**库**的形式存在,库存储在**磁盘文件**中 静态链接:库被拷贝进代码形成整体,执行的时候无需提供库文件 ### 运行时 + Code-level view:代码快照、内存转储;堆栈轨迹、并发线程 **逻辑实体**在内存中如何呈现 + Component-level view:包、库、动态链接、数据库、网络、硬件;事件日志、多进程、分布式程序 **物理实体**在物理硬件环境中如何呈现 + Moment view:代码快照、内存转储;包、库、动态链接、数据库、网络、硬件 逻辑/物理实体在内存/硬件环境中**特定时刻**的形态 + Period view:堆栈轨迹、并发线程;事件日志、多进程、分布式程序 逻辑/物理实体在内存/硬件环境中的形态**随时间的变化** 动态链接:库文件不会在构建阶段被加入可执行软件,仅仅做出标记;程序运行时,根据标记装载库至内存;发布软件时,将程序所依赖的所有动态库都复制给用户 分布式程序:需要多个运行程序,分别部署于多个计算机物理环境 代码快照:描述程序运行时内存里变量层面的状态 <img src="https://nullptr.icu/usr/uploads/2022/05/4210653032.png" alt="代码快照" style="zoom:50%;" style=""> 内存转储(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个核心质量因素     # 考试题      <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-dfdb5d2fa5462cfb493b8303295fc4fa14" aria-expanded="true"><div class="accordion-toggle"><span>答案</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-dfdb5d2fa5462cfb493b8303295fc4fa14" class="collapse collapse-content"><p></p> **C C B D C** <p></p></div></div></div> 最后修改:2022 年 06 月 04 日 © 允许规范转载 赞 1 如果觉得我的文章对你有用,请随意赞赏
1 条评论
好!!!