1-1 Multi-Dimensional Views of Software Construction
可以从三个角度看待软件构造
1.时间维度
Moment
从瞬时的角度看待软件
Period
从周期的角度看待软件 即软件的变化
2.编码维度
Build-time
开发阶段:程序员编写代码
Run-time
运行阶段:代码与系统的交互
3.代码-模块维度
Code-level
Source-code Interface Method Class
Component
更加宏观的角度 Package File
下面分情况考虑软件构造的不同维度
1.1 Build-time,Moment,and code-level
词汇层面
语法层面
算法的流程
[AST:结构化,将源代码变成结构树 Abstract Syntax Tree]
语义层面
不同部分之间的联系–类与类之间的关系
图形化或形式化
了解UML语言
1.2 Build-time,Period,and code-level
Code churn 代码变化 版本控制 github+git
1.3 Build-time,Moment,and component-level
组织程序文件
可以采用库函数的方式去组织
Link
Static Link
构造阶段:库被拷贝进代码形成整体
优点:执行时无需提供库文件
缺点:无法升级
Dynamic Link
针对静态链接的缺点产生
库文件不会在build阶段加入可执行软件,仅做出标记
程序执行时,根据标记装载库至内存
1.4 Build-time,Moment,and component-level
软件实体随时间进行变化—Version 版本
2.Run-time
程序被载入目标机器,开始执行
Executable programs
解释型程序:执行一行编译一行
可以移植性好
Libraries
库 复用代码
Configuration and data file
配置文件
Distributed programs
分布式程序
Transformation between views
不同视图之间的联系
1-2Quality Objectives of Software Construction
“存在矛盾的因素–折衷、妥协”
Five key quality of software construction
1.Easy to understand
2.Ready to change
3.Cheap for develop
reuse
4.Safe from bugs
5.Efficient to run
消耗资源较小
外部质量因素和内部质量因素
外部质量因素
1.Correctness
如果是分层开发,确保每一层都是正确的,在开发高层时,假设底层是正确的。
满足软件规格书
验证方法:Testing and Debugging
2.Robustness
鲁棒性即健壮性
软件系统对异常情况做出反应的能力。“如果灾难发生,降低灾难的危害。”
3.Extensibility
软件易于调整以适应变化的能力。
可扩展性同规模相关,越大的程序越难扩展。
使用简单的体系结构,提高模块的自治性。
4.Reusability
利用共性,避免重复实现
5.Compatibility
使用协议实现更通用的兼容性
标准化
6.Efficiency
效率是软件系统对硬件资源尽可能少的需求的能力
7.Portability 可移植性
将软件产品转移到各种硬件和软件环境
8. Ease of use 易用性
用户可以轻松掌握软件的使用,也包括安装、运行和监控的容易度
换位思考,站在用户的角度设计软件
9.Functionality 功能性
10.Timeliness 时效性
10++ Other qualities
是否易于验证
完整性:保护各种组件未经授权可不被修改和访问
可修复性
内部质量因素
Lines of Code
圈复杂度
设计中追求高内聚和低耦合