软件构造 第一章复习与总结

[软件构造] 02 第一章复习与总结

较之往年的课程,2020年的软件构造课程砍掉了两个实验,删掉了三章内容,但同时增加了三次的习题课。第一次习题课在第2周,内容为关于Java、Eclipse、JUnit的习题课,主要是为了帮助同学们熟练开发环境和工具的使用。第二次习题课在第7周,这一周只安排了一次习题课,同时课程正好进行到了一半,因而这一周是对之前的讲过的前三章内容复习的一个黄金的时机。论语说:“温故而知新”,对之前内容的总结既可以洞察到一些新的观念和想法,也为后七周的继续学习奠定扎实的基础,同时也可以减少期末复习时的负担。因而我打算在这周用三篇博客对前三章的内容进行一个总结。

Chapter 1: Views and Quality Objectives of Software Construction

第一章 软件构造的视图和质量目标


1.1 Multi Dimensional Views of Software Construction

这一节最重要的知识点全部涵盖在下面的这张图中,因此只需要以这张图为中心,依次按照3个维度生成的8个不同的格子进行总结,穿针引线地复习即可。

1. Build-time, moment, and code-level view

  • 词法 Lexical-oriented source code:最基本的源代码中的语句,变量和各种操作符等。
  • 语法 Syntax-oriented program structure: AST 抽象语法树
  • 语义 Semantics-oriented program structure: UML中的Class Diagram类图,通过它描述程序中的类、接口、属性、方法以及它们之间的各种关系
  • 该视图中前两个方面为关于词法、语法的研究,具体属于编译原理课程的内容,因此在此课程中并不会讲到,在此只是提出这些概念,在脑海中有一个印象。
  • UML类图在本课程中也不做强行要求,只要能大致看懂即可,建议阅读关于UML类图的这篇文章,大体了解其中提到的泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)这六种关系。

2. Build-time, period, and code-level view

  • Code churn 代码变化:从一个版本到另一个版本的代码行的增删改查等变化。(在Github上点击每一个commit即可查看当前版本与其上一个版本之间的代码变化)

3. Build-time, moment, and component-level view

  • source code \Rightarrow files \Rightarrow directories
  • files \Rightarrow packages \Rightarrow components \Rightarrow sub-systems
  • reusable modules \Rightarrow libraries
  • static linking:静态链接,在计算机系统课中学习过专门讲述了链接过程的一章,缺点显而易见,如代码与库之间耦合在一起,不能彼此进行修改,占据多余的磁盘和内存空间等等。
  • Component diagram:UML中的组件图
  • Libraries:库包含了一组可重用的方法,可以通过maven来对各种不同的库进行管理,只需要在dependency中添加依赖即可。
  • UML组件图也只需要能看懂即可。

4. Build-time, period, and component-level view

  • Software Configuration Item (SCI,配置项)
  • Version Control System (VCS)

该部分内容第二章会具体讲到如何对配置项进行管理,以及以Git为例的版本控制系统的使用。

5. Run-time, moment, and code-level view

  • Snapshot diagram:快照图,内存中的程序运行时的变量层面的状态
  • Memory dump:内存信息转储,通常是在程序由于特定的内部错误或信号中断时自动生成的,但也可以自己创建

6. Run-time, period and code-level view

  • Sequence diagram:UML中的时序图
  • Execution trace:执行跟踪

7. Run-time, moment, and component-level view

  • Deployment diagram:UML中的部署图

8. Run-time, period, and component-level view

  • Event log:事件日志
  • Execution trace和Event log二者有相似之处,但也有不同之处。其中最重要的一点是:Execution trace关注的是代码层面,而Event log关注的是系统/组件层面。

1.2 Quality Objectives of Software Construction

这一节主要就是给出了软件构造中要考虑的各种各样的质量目标,因而只需要大概了解有哪些质量目标和对应的技术,在课程后四章会具体讲述面向不同的质量目标的具体的实现技术。

1. 外部质量因素和内部质量因素的关系

  • 外部质量因素可以明显地被用户感知到,因而说它影响用户。eg: GUI,speed,ease of use
  • 内部质量因素影响软件本身和它的开发者。eg: modular, readable
  • 外部质量取决于内部质量,也就是说要想提高外部质量,首先要提高软件的内部质量。

2. 外部质量因素有哪些?

  • Correctness 正确性:首要的也是最重要的质量目标,严格执行spec规定的行为。
    技术:测试与调试,防御式编程,形式化推理与检查
  • Robustness 健壮性:对spec未覆盖的情形做出恰当的反应,主要体现在对异常情况的处理。
    技术:Exception handling异常处理
  • Extendibility 可扩展性:Ready for change为将来可能的变化做好准备。
    技术:Design simplicity简约主义设计,Decentralization分离主义设计
  • Reusability 可复用性:Don’t Re-invent the Wheel不要重复造轮子,学会利用在现成的代码基础上进行开发。
    技术:第四章中的各种设计模式
  • Compatibility 兼容性
    技术:各种各样的标准,协议
  • Efficiency 效率:时间和空间折中(算法和操作系统方面考虑的主要问题),性能
    技术:高效的算法,尽量少的I/O操作等
  • Portability 可移植性
  • Ease of use 易用性
  • Functionality 功能性
  • Timeliness 及时性

3. 内部质量因素
代码行数,复杂性,内聚性,耦合性(期望达到高内聚低耦合),可理解性,规模等

4. 质量因素之间的折中
不可能达到十全十美,中庸之道不乏是是一种很好的选择。
虽然需要折中,但正确性绝不能与其他质量因素折中。

5. 本课程的五大质量目标

  • easy to understand
  • cheap for develop
  • ready for changes
  • safe from bug
  • efficient to run

因删除三章的内容,所以实际讲述的面向质量目标的技术只有cheap for develop,ready for changes,safe from bug,但这五种在第三章都或多或少地有所涉及。

原创文章 8 获赞 0 访问量 288

猜你喜欢

转载自blog.csdn.net/qq_30627849/article/details/105390613