一.软件多维视图:
软件的多维视图可分为三个层面,即构建时和运行时,代码层面和组件层面,特定时刻和随时间的变化。
构建时
Code-level view:源码、类结构;代码变化
表示代码的逻辑组织
Component-level view:文件、目录、包、库、静态链接、测试项;配置项、版本
表示代码的物理组织
Moment view:源码、类结构;文件、目录、包、库、静态链接、测试项
表现源码和组件在特定时刻的软件形态
Period view:代码变化;配置项、版本
表现软件形态随时间的变化
运行时
Code-level view:代码快照、内存转储;堆栈轨迹、并发线程
逻辑实体在内存中如何呈现
Component-level view:包、库、动态链接、数据库、网络、硬件;事件日志、多进程、分布式程序
物理实体在物理硬件环境中如何呈现
Moment view:代码快照、内存转储;包、库、动态链接、数据库、网络、硬件
逻辑/物理实体在内存/硬件环境中特定时刻的形态
Period view:堆栈轨迹、并发线程;事件日志、多进程、分布式程序
逻辑/物理实体在内存/硬件环境中的形态随时间的变化
二.软件的质量因素:
外部质量因素:可被用户感知的因素,如软件速度、易用性;影响用户
包括:正确性,健壮性,可扩展性,可复用性,兼容性,性能,可移植性,易用性,功能性,及时性
内部质量因素:作为软件产品的质量,如代码可读性;影响软件本身和它的开发者
源码方面:行数(LoC)、逻辑复杂度
结构方面:耦合、内聚
除此之外还有代码可读性、易于理解、清晰、大小等。
外部质量取决于内部质量。
三.软件测试
测试是提高软件质量的重要手段,确认软件是否达到可用级别(用户需求),它关注系统的某一侧面的质量特性。一个好的测试具有这些特征:能发现错误、不冗余、最佳组合、不能太过复杂也不能太过简单。
测试和调试的区别
测试:发现是否存在错误
调试:识别错误根源,消除错误
测试的分类:
从范围上看可分为
单元测试:针对软件的最小单元模型开展测试(一般来说是在单个方法/类的级别),隔离各个模块,容易定位错误和调试
集成测试:将多个程序员/团队编写的类/包/组件/子系统联合起来测试
系统测试:对整个系统进行测试,将硬件、软件、配置信息等看作一个整体
验收测试:产品发布之前所进行的软件测试活动,是技术测试的最后一个阶段,目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务
回归测试:一旦程序被修改,重新执行之前的所有测试以确认修改没有引入新的错误或导致其他代码产生错误
从静态/动态上看
静态测试:在编写代码的阶段由程序员或是代码编辑器、编译器等工具进行检查(如语法检查、代码评审)
动态测试:通过测试用例实际执行了编写的代码
动态测试可能在程序完全编写完成前就用于测试代码的特定节
从结构上看可分为
白盒测试:对程序内部代码结构的测试
黑盒测试:对程序外部表现出来的行为的测试(例如输入输出)
代码的分析工具有如下:
Junit、EclEmma、VisualVM、AppPerfect:动态检查,需要执行代码
EclEmma用于在代码执行阶段给出测试用例的覆盖度,但不能发现代码中潜在的错误
CheckStyle、SpotBugs、PMD:静态检查,无需执行代码