系统分析师学习笔记(十五)

本文详细介绍了系统实现的过程,包括结构化、面向对象、面向方面和可视化的程序设计方法,以及各类程序设计语言与风格。在软件测试方面,探讨了测试的目的、自动化测试的优势、测试用例设计原则、测试自动化工具,以及软件调试方法。文章还详细阐述了静态测试、白盒测试、黑盒测试的策略与技术,并分析了单元测试、集成测试、系统测试等不同类型的测试方法。此外,还特别讨论了面向对象系统的测试策略,包括单元测试、集成测试和多态服务测试。

系统实现与测试

系统实现概述

程序设计方法

1.结构化程序设计
SP采用自顶向下、逐步求精的设计方法和单入口、单出口的控制结构。在设计一个模块的实现算法时,先考虑整体后考虑局部,先抽象后具体,通过逐步细化,最后得到详细的实现算法。

单入口、单出口的控制结构,使程序的静态结构和动态执行过程一致,具有良好的结构,增强了程序的可读性。

任何单入口、单出口、没有死循环的程序都能用三种基本的控制结构来构造,这三种基本的控制结构是顺序结构、IF_THEN_ELSE型分支结构(选择结构)和DO_WHILE型循环结构。

2.面向对象的程序设计
OOP是OO方法学从诞生、发展到走向成熟的第一片领地,也是使OO方法最终落实的重要阶段。在一个比较理想的OOP程序中,问题域中有哪些值得注意的事物,程序中就有哪些对象;问题域中的事务之间是什么关系,程序中的对象之间就具有什么关系。

3.面向方面的程序设计
面向方面的程序设计(Aspect-Oriented Programming,AOP)是一种通过预编译方式和运行期动态代理技术,实现在不修改源代码的情况下为程序动态、统一添加功能的程序设计技术。

4.可视化程序设计
利用程序设计工具所提供的各种控件,像搭积木式地构造应用程序的各种界面。这种程序设计方法称为可视化程序设计(Visual Programming,VP)。VP最大的优点是程序员可以不用编写或只需编写很少的程序代码,就能完成应用程序的设计,从而极大地提高设计人员的工作效率。

程序设计语言与风格

1.程序设计语言的选择
选择OOPL时,还应重点考虑其是否支持OO方法的主要特征,以及类库和开发环境等。

(1)封装性。封装是一种信息隐蔽技术,是指将数据和算法捆绑成一个整体,存取数据时只需知道其算法的外部接口,而无须了解数据的内部结构。C++通过建立类来支持封装性和信息隐蔽。
(2)继承性。继承性是指一种事物保留了另一种事物的全部特征,并且具有自身的独有性质。C++采用继承来支持复用。
(3)多态性。多态性是指当多种事物继承自同一种事物时,同一操作在它们之间表现出不同的行为。C++使用函数重载、模板和虚函数等概念来支持多态性。

2.程序设计风格

(1)与可理解性相关的良好程序设计风格包括有意义的标识符、详细的注解和程序的视觉组织、清晰规范的数据说明和简单明了的语句构造,以及有效、合理、交互化与可视化的I/O设计等。
(2) 与可复用性相关的良好程序设计风格包括提高功能的内聚、减小功能的规模、保持功能的一致性、将接口与实现分开、尽量不使用全局变量和利用继承机制等。
(3)与可扩展性相关的良好程序设计风格包括封装实现策略、利用多态性机制、避免使用多分支语句和精心设计公有服务等。
(4) 与健壮性相关的良好程序设计风格包括预防用户的错误操作、检查参数的合法性、不要预先确定限制条件和先测试后优化等。

软件测试概述

软件测试的目的是验证软件是否满足软件开发合同或项目开发计划、系统/子系统设计文档、SRS、软件设计说明和软件产品说明等规定的软件质量要求。通过测试,发现软件缺陷,为软件产品的质量测量和评价提供依据。

测试用例设计的原则有基于测试需求的原则、基于测试方法的原则、兼顾测试充分性和效率的原则、测试执行的可再现性原则;每个测试用例应包括名称和标识、测试追踪、用例说明、测试的初始化要求、测试的输入、期望的测试结果、评价测试结果的准则、操作过程、前提和约束、测试终止条件。

测试自动化

1.自动化测试的特点
自动化测试具有如下优点:

(1)提高测试执行的速度。以测试人员执行一个测试用例为例,阅读测试步骤需要20秒,理解测试目的需要5秒,准备测试数据需要10秒,执行测试需要5秒,填写测试结果需要10秒。也就是说,不包括系统等待时间,以及可能有错误需要报告错误的时间,测试人员执行一个测试用例平均需要大约50秒的时间。如果一次性准备好以上所需的脚本和测试数据,然后用测试工具来完成同样的工作,5秒钟即可达到同样效果。
(2)提高工作效率。由于自动化测试工具的运行,节省出的时间可以让测试人员重新计划和安排测试工作,设计新的测试用例,开发新的测试工具。
(3)保证测试结果的准确性。测试过程是枯燥而繁琐的,任何一点疏忽都可能导致测试结果不准确而需要返工。而测试工具不同,完成的脚本会准确地记录测试过程中发生的一切。
(4)连续运行测试脚本。测试工具可以24小时运行测试脚本,不间断的进行测试,这是测试人员所不能比拟的。而测试人员要做的就是第二天早上收集测试数据,看看系统有哪些问题。
(5)模拟现实环境下受约束的情况。测试过程基本上是模拟真实环境执行相关操作,然而有些情况是很难完全模拟的。

2.测试用例的生成
脚本的基本结构主要有以下五种:

(1)线性脚本。线性脚本是录制手工测试的测试用例时得到的脚本,这些脚本是未作修改的。
(2)结构化脚本。结构化脚本类似于SP,具有各种逻辑结构,包括选择型结构、分支结构、循环迭代结构,而且具有函数调用功能。结构化脚本具有很好的可用性和灵活性,易于维护。
(3)共享脚本。共享脚本是指一个脚本可以被多个测试用例使用,即脚本语言允许一个脚本调用另一个脚本。
(4)数据驱动脚本。数据驱动脚本是指将测试输入存储在独立的数据文件中,而不是脚本中。这样,脚本可以针对不同的数据输入实现多个测试用例。
(5)关键字驱动脚本。关键字驱动脚本是数据驱动脚本的逻辑扩展,它用测试文件描述测试用例,它说明测试用例做什么,而不是如何做。关键字驱动脚本允许使用描述性的方法,只需要提供测试用例的描述,即可生成测试用例。

3.自动化测试工具

(1)单元测试工具。单元测试工具主要包括C/C++测试工具(例如,Panorama C++和C++Test等)、Java开源测试框架JUnit、内存资源泄漏检查工具(例如,Numega的BounceChecker和Rational的Purify等)、代码覆盖率检查工具(例如,Numega的TrueCoverage、Rational的PureCoverage和TeleLogic的LogiScope等)、代码性能检查工具(例如,LogiScope的Macabe等)和软件纠错工具(例如,Rational Purl等)。
(2)负载和性能测试工具。负载和性能测试工具是软件测试中作用最大的工具,可以完成一些难以用手工实现的测试,常用工具包括Mercury Interactive的LoadRunner和Compuware的QALoad,以及IBM Rational的SQA Load、Performance和Visual Quality。
(3)GUI功能测试工具。GUI功能测试工具主要用于回归测试,主要工具包括MercuryInteractive的WinRunner和Compuware的QARun,以及IBM Rational的SQA Robot和Microsoft的Visual Test Suite等。
(4)基于Web应用的测试工具。基于Web应用的测试工具主要进行链接检查、HTML检查、Web功能和安全性等方面的测试。主要的测试工具包括MI公司的Astra系列和RSW公司的E-TestSuite,以及WorkBench、Web Application Stress(WAS)Tool和Link Sleuth等。
软件调试

软件调试是一个相当艰苦的过程,究其原因,除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质:

(1)错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构,此类现象更为严重。
(2)纠正一个错误造成了另一个错误现象(暂时)的消失。
(3)某些错误征兆只是假象。
(4)因操作人员一时疏忽造成的某些错误征兆不易追踪。
(5)错误是由于分时而不是程序引起的。
(6)输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定)。
(7)错误征兆时有时无,此现象对嵌入式系统尤其普遍。
(8)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值