ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅谈多维度视图与质量目标

2022-06-08 16:01:08  阅读:162  来源: 互联网

标签:浅谈 层面 代码 多维度 视图 质量 time 组件 软件


  多维度视图和质量目标是哈工大软件构造课程的第一章,而软件构造这一课题也是围绕着这章而展开。掌握好这一内容有助于我们对于后续的课程学习有一个整体的框架。所以我整理出了一份关于多维度视图与质量目标的笔记,供我复习以及读者参考。

========================================================================================================================================================  

  1. 多维度视图:

  一个软件有三个维度:Build-time(构建时)和Run-time(运行时);Code-level(代码层面)和Component-level(组件层面);Moment view(时刻)和Period view(时间段)。

  如果把这三个维度都当成一个坐标,那么确定三个维度后就可以唯一确定一块区域,如下图所示:

  

 

   (1)Build-time view

  Build-time是指软件在构造的时候,可以大致理解为在运行代码之前的时候。此时的Moment就是指某一时刻的软件状态,代码层面包括源码,也就是代码,还有AST,就是组成代码的语法结构,包括代码中出现的条件分支、循环结构等,对于面向对象编程还有接口、类这样的类结构,可见代码层面描述的软件的逻辑组织。而组件层面包括包、文件、静态库、测试项等,这里的组件指的是一个软件的物理组织,比如保存在磁盘中的文件、库,以及在链接时的静态链接库。静态链接在生成可执行文件之前就完成了,所以把它归于Build-time而不是Run-time。

  Period是指一段时间内软件构造的变化,当然Build-time指的就是软件部署之前,那么代码层面包括代码变化。这个非常容易理解,因为在编写代码的时候肯定不是一蹴而就,中途肯定需要修改和增删,真实情况是一个好的IDE会在每次做出改动的地方进行不同颜色的标注。组件层面就是设置项、版本这样的,一定阶段内会发生更迭的内容。

  (2)Run-time view

  Run-time是指软件在运行的时候,我认为这个比Build-time更好理解。想象一个情景,当你写完代码开始运行的时候,编译器或者翻译器就辅助操作系统逐行运行你的程序,那么每个时刻你的程序中的变量、常量都被赋予一个特定的值,将在未来的某个阶段参与运算。那么某时刻变量的状态和数值所构成的整体,如果程序员需要进行捕捉分析,那么就要用到代码快照。然后突然运行到某个地方出错了,需要调试,那么查看信息转储中保存的寄存器、栈信息,这就是Memory dump。于是,我们很容易理解运行时,某一时刻代码层面所涵盖的内容。那么组件层面也非常好理解,首先库和包肯定是运行时必须的,然后不同于Build-time的静态链接,Run-time对应的是动态链接,也就是在运行的时候才会链接到程序里的内容,在CSAPP中有详细的讲解。我们都知道可执行文件在运行的时候会被加载到内存,有可能还会请求打开文件或者网络数据,那么就需要硬件、网络以及数据库的辅助,这也是组件层面的。

  那么运行时的Period view,在代码层面包括堆栈轨迹,也就是当报错的时候,时候我们可以根据错误信息一步一步追溯到出错的那一行代码,而之所以编译器能提供这个功能,是因为它在从运行开始到运行结束,把每一个函数(方法)调用或者继承的记录保存在数据结构里,这是一整个阶段里完成的。代码层面还包括并发线程,线程是一个小于进程的,代码层面的内容。而如果是并发进程,则是运行时,Period中组件层面的内容,因为涉及到内存管理、上下文切换等需要OS来完成的工作。组件层面还包括事件日志,可以理解为组件层面的堆栈轨迹,包含的是更加“高级”的,噪音更少、更规范、更容易定位的文件信息,还有分布式程序,例如当你的软件使用了server-client模型的时候,需要一台设备扮演server,以及许多别的设备来扮演client,那么就涉及到分布式管理,这是组件层面的。

========================================================================================================================================================

  2. 质量目标

  质量目标又分为外部质量和内部质量。外部质量是指可以被用户感知的因素,这里的用户不只是终端用户,还包括使用你写的库的程序员等。内部质量是软件产品的质量,影响软件本身和它的开发者。最重要的是外部质量,因为我们构造软件是给人用的,用户的感受是最重要的。但是实现外部质量的关键在于内部质量,只有真正落到代码上才行。

  (1)外部质量

  在外部质量中,最首要的是正确性,且这个指标不与其他任何指标做权衡。正确指的是规约的正确性,就是用户的要求体现在规约里,而你的程序必须按照规约运行。然后是健壮性,在于当程序出现异常情况的时候必须做出恰当反应,不能崩溃。特别要注意异常情况和错误情况是完全两个概念。错误是正确性应该考虑的,而异常情况是指出现函数规约之外的情况,这也不等于边界情况。异常情况往往是一些程序员无法解决的问题,比如运行代码的硬件环境问题,当用户运行你的程序请求打开另一个文件,而他还没下载那个文件,那程序员怎么处理这种情况?没法处理,只能抛出一个异常来提示用户,保证程序不崩溃。兼容性和可移植性,分别指的是代码在不同软件系统和硬件系统(或操作系统)之间泛用能力。性能,指的是代码优化,但是谨记Knuth大佬的名言,过早优化是万恶之源。易用性,在于提供详细的指南。功能性,这里不是说功能越多越好,相反,专注于自己的功能。及时性,在用户有对应需要求前发布新版本。

  (2)内部质量

  内部质量通俗的来说就是程序员自己看的东西,也是最实在的。包括LOC(lines of code)也就是代码长度,越少越好,还有代码的风格,是方便程序员还是方便编译器,这是就源码而言的。结构方面包括耦合度和内聚度。耦合度是指模块之间的重叠度和依赖度,比如函数是否依赖于其他函数。低耦合度意味着模块的高独立性,意味更彻底的抽象,是我们追求的。内聚度指的是模块内部的关联程度,那当然同一个模块里面越相关越好,不然为什么要把它们放在一起。有时低耦合就意味着高内聚,这是高内部质量的体现。

 

标签:浅谈,层面,代码,多维度,视图,质量,time,组件,软件
来源: https://www.cnblogs.com/kujowarma/p/16355972.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有