Chapter 1: Views and Quality Objectives of Software Construction

1.1 Multi-Dimensional Views of Software Construction

1. 软件构造过程中的多维度视图

多维度视图

Moment维度关注于程序在某一个时刻的表现,而Period维度更关注于程序在一段时间内的表现;
Build-time维度关注程序还未被投入运行,编码阶段的表现,而Run-time维度更关注于程序运行时的表现;
Code-level维度关注程序的语句层面,Component-level维度更关注于一段代码,当作一个块观察比如一个包、一个库。
(1) Build-time, moment, and code-level view 关注的是源码的组织情况,可在词汇(源码)、语法(抽象语法树)、语义(类图)三个层面分别分析。

(2) Build-time, period, and code-level view 关注的是代码的变化(Code churn代码变化)

(3) Build-time, moment, and component-level view 关注的是包/库,而且是静态链接库

(4) Build-time, period, and component-level view 关注代码的更迭,与(2)中不同的是,这个维度下更关注文件版本的变化,而不是具体语句的变化(2中关注的是哪一行代码被修改了)----VCS的引出

(5) Run-time, moment, and code-level view 关注的是程序在某个时间点内存中的情况,如代码快照图(Code Snapshot)、内存信息转储(Memory dump)。

(6) Run-time, period and code-level view 关注的是代码的执行情况,执行跟踪

(7) Run-time, moment, and component-level view 关注的也是包/库,但却是在代码执行过程中的情况,如动态链接库

(8) Run-time, period, and component-level view 关注的是系统的使用情况,使用日志查看

2. 视图之间的联系

从无到有,写出了代码,就进入了Build-time维度,开始只是单个的没有任何联系的代码文件,所以是在moment+Code-level维度,此时随着时间的推移,代码删删改改,就属于Period+Code-level了,而代码越写越多成为了一个包,甚至形成了一个库,于是就属于moment+Component-level维度了,但是随着时间的推移,你的库文件由于需求的变化发生了变化,所以就属于Period+Component-level。代码写好了,投入运行,进入Run-time维度,观察的如果是某一句代码的执行后结果,那就是moment+Code-level维度,但如果看的是代码执行的轨迹,那就是Period+Code-level维度,而如果看的是一个库文件的连接情况等,那就是moment+Component-level维度了,如果看的是线程或进程的执行过程,也就是通过日志等手段查看一段时间内系统都做了什么事情,那么就是Period+Component-level了。

1.2 Quality Objectives of Software Construction
1. 软件系统的质量

外部质量因素

External 1: Correctness(正确性),正确就是满足spec,这是软件开发最重要的因素,一个可用的软件一定是正确的,所以首要保证软件的正确性,其他的都可以做妥协、让步,但只有这一项不可妥协。

External 2: Robustness(鲁棒性),通过抛出异常然后处理异常等方式让出错的程序恢复到正常的执行流程上。

External 3: Extendibility(易扩展性),要便于软件功能的增加/扩展(ADT、OOP、留下一个Visitor),降低未来修改软件时的成本。

External 4: Reusability(复用性),在异性之间尽可能地寻找共性,以便于未来可以直接使用现在写的这段代码。这样可以降低软件地开发成本。

External 5: Compatibility(兼容性),在不同的环境下都是可用的,不同的软件系统之间相互可容易的集成。

External 6: Efficiency(效率),不要过早的优化,性能在没有正确性保障的条件下是没有意义的。

External 7: Portability(可移植性),软件可方便的在不同的技术环境之间移植。

External 8: Ease of use(易用性),学习成本低,结构简单、清晰,易于使用。

External 9: Functionality(功能性),功能过多会导致易用性的降低。主要功能要首要提升质量。

External 10: Timeliness(时效性),软件要能够在交付时间之前完成开发交给使用者。

External 10++: Other qualities,Verifiability (可验证性),Integrity (完整性),Repairability (可修复性),Economy (经济性)。

内部质量因素
代码行数(LOC)、圈复杂度、结构:高内聚低耦合、可读性、可理解性、整洁度、大小

折中、妥协
Integrity vs. ease of use、Economy vs. functionality、Efficiency vs. portability、Efficiency vs. reusability、Economy vs. reusability、Timeliness vs. extendibility

这些质量属性之间往往不能兼得,当某一项满足的足够好的时候有可能其他项的表现极差,因而需要做权衡,使得各部分的表现都较好,在某些特定要求下也可以放弃优化其他项而做到某一项的极致,这需要靠开发者的经验积累来判断。

正确性是绝不能与其他质量因素折中的!!!

在OOP开发中,通过封装、模块化、组件、抽象、分散、错误处理、信息隐藏、框架、接口等技术来尽可能地满足上述地质量因素,提高软件的开发质量。

2. 五个关键的质量指标

(1)Elegant and beautiful code:代码要容易理解,通过统一变量/方法的命名标准、代码的风格、注释、包组织结构、必要时重构代码等方式让代码尽可能的容易理解。
(2)Design for/with reuse:ADT/OOP、接口、继承(Overload、Override)、多态、泛型、框架等技术可用于提高代码的可复用性。
(3)Low complexity:当复杂度较低的时候,代码就容易被扩展新的功能,所以要高内聚低耦合,遵从SOLID原则、OO设计模式、使用VCS控制代码版本
(4)Robustness and correctness:使用测试驱动的开发、异常处理、Assertion机制、防御式编程等技术保证程序的健壮性和正确性。
(5)Performance and efficiency:使用设计模式、并行/多线程等技术提升性能。

哈工大软件构造期末复习1相关推荐

  1. 哈工大软件构造期末复习

    系列文章目录 哈工大软件构造期末复习(最终章) 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 哈工大软件构造期末复习(最终章) 前言 一.github指令 ...

  2. 哈工大软件构造期末复习(根据老师复习提纲整理)

    软构期末复习1-3章 1.软件构造的多维度视图及其划分 大体上分为build-time和run-time两大类,分别对应视图中的两排. 在build-time中,又按照时刻和时期.代码层面和成员层面区 ...

  3. 哈工大软件构造期末知识点总结

    哈工大软件构造试题构成: 1.30-45分的选择题,10-20题 2.55-70分的简答与设计题,5-6题 考试知识点(不全面): 1.git工具的知识点 2.Java设计模式(一共有23个,主要考察 ...

  4. 2021哈工大软件构造期末考点复习笔记

    第一节 多维视图和质量目标 软件构造多维度视图 红色标注为重点(考试会考选择题) Moment 特定时刻的软件形态 Period 软件形态随时间的变化 AST (Abstract Syntax Tre ...

  5. 哈工大软件构造自我复习总结Part1

    本文结合2019,2018哈工大考试试卷的知识点对于课程中的知识点再次进行总结,方便进行自我复习. Part1 分析各个部分的成绩构成,100分试卷折算60分 选择题共15-16题每题2分,分值约为3 ...

  6. 软件构造期末复习总结【一】:关于SCM和Git的一些概念整理

    目录 0.前言 1.SCM 1.1 一些概念 1.2 对于SCM的一些解释以及个人理解 2.Git 2.1 一些概念 2.2 Git的一些基本指令 0.前言 期末复习的时候感觉这部分的概念有点生疏了. ...

  7. 2022哈尔滨工业大学 软件构造期末复习 一

    Chapter1 软件构造基础软件系统三维度 Build-time&Run-time Code-level&Component-level Moment&period 重点版: ...

  8. 软件构造期末复习错题和高频知识点

    前言: 根据四张考试卷涉及到的部分知识点的总结 对于大题的话,个人写了部分代码可以参考该链接 个人对考试大题的几个代码 今天是6月13号 15号软件构造 没有把握 19号马原 等18号再背 文章目录 ...

  9. 软件构造期末复习考点总结

    [考点 Equals] ==是引用等价性 :而equals()是对象等价性. == 比较的是索引.更准确的说,它测试的是指向相等(referential equality).如果两个索引指向同一块存储 ...

最新文章

  1. gsoap写一个c++ webservice
  2. 预告 | CSIG图像图形学科前沿讲习班:图神经网络
  3. cfa英语不好的怎么学_英语不好,如何备考CFA?
  4. 快速学习R语言的经验分享
  5. 实时控制软件设计第二周作业-停车场门禁控制系统状态机设计
  6. ntldr is missing什么意思应该如何解决
  7. python 初级笔记
  8. MySQL数据库regdate_第十五章 MySQL 数据库
  9. 在机关事业单位工作年满五十岁,工龄三十年提前退休好还是继续工作好?
  10. 四叉树 gis java_GIS中四叉树索引及其分类介绍
  11. Windows10 开机跳过密码验证
  12. editorMd插件的使用总结(包括开启图片上传及拖拉粘贴上传图片)
  13. Linux系统刻盘失败,linux下如何刻盘
  14. python 二进制与十进制之间的转换
  15. Android差分升级原理和实现方式
  16. Linux 设置 时区
  17. IOS11 光标错位问题
  18. 固态硬盘和机械硬盘的区别与硬盘的性能指标
  19. B2C购物网普遍采用的营销策略
  20. Python - 进度条神器 tqdm 用法

热门文章

  1. 世上万事,不过是一懒二拖三不读书
  2. 收集的SQL Server性能相关资料
  3. stata:应用stata学习计量经济学原理 practice 2 stata绘图基础
  4. 2021年全球开关收入大约4944.1百万美元,预计2028年达到6146.3百万美元
  5. Idea内存占用过高解决方法
  6. [机缘参悟-35]:鬼谷子-飞箝篇-远程连接、远程控制与远程测试之术
  7. ML算法工程师的三个层次
  8. 运行python的两种方式磁盘式_day03-python-学习笔记
  9. 统信UOS+win7双系统安装
  10. python学习笔记——字符串操作