(一)软构入门
1.什么是软件?
软件的概念最早由阿兰·图灵提出
在我们的生活中,有各种各样的软件,比如说操作系统和应用程序,有PC端、web端、安卓端、IOS端的各种程序等等,它们都被称为软件。
2.从哪些维度来看软件构造
编程时&运行时
说到运行时的话,就不得不考虑程序在靶机上的运行情况,比如如何从磁盘中载出程序,如何载入到内存中等等。内存占用量、运行速度等等因素将会成为注意的对象。届时,我们将使用“代码快照”等方式来进行相应的观测。
微观&宏观
代码的视角(源代码):①源代码如何逻辑组成或依赖程序块(如函数、类、方法、借口等等) ②内存中的程序及其之间如何运行与交互;
模块的视角(结构):①源代码如何物理构成或依赖结构(如文件、目录、包、库等等) ②各个程序包如何在物理环境下配置、运行与交互;
时刻&时期
时刻:某一特定的时间点,代码或模块如何,程序如何运行;
时期:随着时间的推移,代码或模块如何变化,程序如何运行;
编程时、某一时刻、代码视角
在此情况下,我们从小到大有如下三个方面:
词义层面
语法层面
语义层面
编程时、某一时期、代码视角
即:程序本身如何变化?
增、删、改等等
编程时、某一时刻、模块视角
源代码组成文件,进而组成目录
文件封装为包,逻辑上,也叫子系统和元件
可复用的模块形成库
开发者通常并不是从头开发程序,而多是选择复用库中的模块。库存在于各处,来源广泛,我们可以将其看成是一种对标准编程语言的补充。
库的使用方式有两种:动态链接以及静态链接。详细内容可以回顾计算机系统。
3.软件构造的质量目标(Quality Objective of Software Construction)
①External quality factors (外部质量因素)
(1) 正确性:最重要的质量指标
按照预先定义的规约执行
确保正确性的方式:
① Conditional(分层):每一层保证自己的正确性,同时假设其下层是正确的
② 测试和调试:发现不正确,消除不正确
③ 防御式编程:在写程序的时候就确保正确性
④ 形式化方法:通过形式化验证发现问题
(2) 健壮性:针对异常情况的处理
健壮性是对正确性的补充
正确性:软件的行为要严格的符合规约中定义的行为
健壮性:出现规约定义之外的情形的时候,软件要做出恰当的反应,出现异常时不要崩溃
未被specification覆盖的情况即为“异常情况”,所谓的“异常”,取决于spec的范畴
(3) 可扩展性:对软件的规约进行修改,以适应变化。
规模越大,扩展越不容易。
(4) 可复用性:一次开发,多次使用
要点:发现共性。
(5) 兼容性:不同的软件系统之间相互可容易的集成
(6) 性能:对性能的关注要与其他质量属性进行折中
(7) 可移植性:软件可方便的在不同的技术环境之间移植
(8) 易用性
(9) 函数性(Functionality):每增加一小点功能,都确保其他质量属性不受到损失
(10) 及时性:
可验证性,完整性,可修复性,经济性…
②Internal quality factors(内部质量因素)
(1) 圈复杂度:用来衡量一个模块判定结构的复杂程度 。
(2) 耦合度:设计中追求高内聚和低耦合。
可阅读性,可理解性,清晰度,大小…
③Tradeoff between quality properties (折中)
虽然需要折中,但“正确性”绝不能与其他质量因素折中。
最重要的几个质量因素:
正确性和健壮性:可靠;
可扩展性和可复用性:模块化;
浙公网安备 33010602011771号