软件测试与万维网:原理、技术与发展
1. 软件测试概述
软件测试是确保软件质量的关键环节,但不能将其作为保证软件质量的唯一手段。软件开发活动的复杂性决定了每个开发阶段都至关重要,仅仅依靠严格测试无法挽救劣质产品。软件测试领域有众多术语和技术,可根据技术类型(结构或功能)或应用领域进行分类。
1.1 软件开发生命周期中的测试
软件开发生命周期中采用不同的测试策略,反映了特定阶段的测试重点。
-
单元测试
:测试系统中最小的软件单元,通常是可独立编译的组件,如模块或类。这常是后续结构和功能测试技术的重点。
-
集成测试
:将各个模块或组件组合成完整系统,确保它们能正确通信且无不良集体行为。集成测试有多种策略:
-
自顶向下
:先构建系统的顶层外壳,再逐步集成底层模块。在底层模块集成前,用存根(stubs)代替,存根与底层模块接口相同但功能有限,随着集成过程推进,存根会被真实模块替换。
-
自底向上
:与自顶向下相反,先集成底层模块,再向上构建系统外层。此策略需构建驱动程序(drivers),驱动程序代替调用模块,功能不完整,同样会在集成过程中被真实模块替换。
-
三明治
:结合自顶向下和自底向上策略的“由外而内”方法。
-
大爆炸
:一次性集成所有模块,仅适用于模块数量少的系统。
-
构建式
:根据功能线程集成模块,即实现同一需求的模块组合在一起进行测试,一个模块可能因参与多个需求而被多次集成。
| 集成测试策略 | 特点 |
|---|---|
| 自顶向下 | 先顶层后底层,用存根 |
| 自底向上 | 先底层后顶层,用驱动 |
| 三明治 | 结合两者 |
| 大爆炸 | 一次性集成 |
| 构建式 | 按功能线程集成 |
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([开始]):::startend --> B(自顶向下):::process
A --> C(自底向上):::process
A --> D(三明治):::process
A --> E(大爆炸):::process
A --> F(构建式):::process
B --> G(集成完成):::process
C --> G
D --> G
E --> G
F --> G
G --> H([结束]):::startend
-
系统测试
:旨在验证系统功能是否到位,常基于系统的高层设计。系统测试还会分析系统的其他属性,采用的技术包括:
- 性能测试 :考察系统在不同负载和操作条件下有效处理需求的能力,如关注系统响应时间。
- 压力测试 :通过短时间过载,确定系统在高需求时期的处理能力。
- 容量测试 :让系统在最大容量下持续运行。
- 配置测试 :在不同目标平台和环境中执行系统。
-
验收测试
:最高级别的测试,用于确定产品是否能被客户接受,通常基于系统需求,且常涉及用户。若产品面向大众市场,还会进行α测试和β测试:
- α测试 :邀请“典型”客户在开发方场地试用产品,开发方观察客户使用方式并记录问题。
- β测试 :通常在α测试后进行,将产品提供给一些典型客户,让他们在自己的环境中使用,然后向开发方报告问题。
- 回归测试 :在软件更改后重新测试,确保更改正确且未引入不良副作用。回归测试的难点在于确定更改的范围。
1.2 结构测试技术
结构测试技术基于被测试软件的内部结构,也称为白盒或玻璃盒测试,有时也被称为充分性准则。
-
语句测试/覆盖
:要求软件中的每个语句都被执行。
-
分支测试/覆盖
:要求软件中每个分支的真假结果都被执行。
-
多条件覆盖
:要求测试复合条件中所有子条件结果的组合。例如,对于复合条件
((a == b) and (x < y))
,需要进行四次测试。
-
变异测试
:通过故意向系统引入小故障(如操作符、变量或常量的更改),然后测量测试数据能检测到多少故障,来确定测试数据的有效性。
-
数据流测试
:基于程序中变量数据的操作方式,关注变量的定义和使用,旨在测试所有可能的定义 - 使用对。
-
基于状态的测试
:专注于识别模块内所有可能的不同状态,常用于测试单个对象或实现状态机的系统。
1.3 功能测试技术
功能测试技术忽略软件的构建方式,基于软件的规格说明或其他外部描述生成测试数据,常被称为黑盒技术。
-
等价划分
:从规格说明中识别输入数据类,假设同一划分内的数据处理方式相同,每个划分选一个测试用例,同时也建议选择划分外的数据。还应考虑输出域的划分。
-
边界值分析
:在确定等价划分后,选择划分边界的数据,因为边界处更可能出现错误,数据值应尽量接近边界两侧。
-
因果图
:通过布尔图定义程序输入和输出的关系,类似于电路,然后将图转换为决策表,每个表项代表一种输入组合及其对应输出。
-
类别 - 划分测试
:结合等价划分、边界值分析和因果图的元素,识别每个“功能”的参数及其“类别”和“选择”,确定选择之间的约束,最后生成允许的选择组合作为测试用例。
2. 万维网概述
万维网(World Wide Web,WWW)是互联网面向公众的一面,它极大地推动了互联网的普及,也是电子商务领域的重要支撑技术。其目标是让存储在不同格式中的信息,能通过计算机网络,在各种硬件制造商生产的设备上可用,并且信息能以适合接收者的形式呈现。
2.1 万维网的历史
万维网内容由创建网页并将其挂载在Web服务器上的用户贡献,而其架构背后的理念主要归功于蒂姆·伯纳斯 - 李(Tim Berners - Lee)。
- 1980年,伯纳斯 - 李在欧洲核子研究组织(CERN)担任软件顾问时,编写了名为Enquire的程序,用于跟踪CERN的软件信息。该程序的信息存储在页面上,页面通过双向链接连接,可通过链接浏览信息,但它运行在独立计算机上,未利用网络链接。
- 后来,伯纳斯 - 李意识到需要一个能在网络环境中跨平台运行的类似系统,他于1989年提交了项目提案,1990年开始开发“万维网”系统。
- 1991年5月,万维网在CERN全面发布,8月在互联网上公开可用。
- 1993年2月,NCSA的马克·安德森(Marc Andreessen)发布了Mosaic浏览器的α版本,最初仅适用于Unix操作系统,到9月已有适用于微软Windows和苹果Macintosh的版本可供下载,这一程序推动了万维网的普及。
- 1994年5月举办了第一届国际万维网会议,同年12月万维网联盟(W3C)成立,伯纳斯 - 李担任其主任,至今W3C仍在协调万维网新标准的开发。
自1994年以来,万维网发展迅速,如今查看网页内容的软件通常随计算机免费提供,发布网页的软件也容易获取,万维网已成为众多商业公司的广告和直销平台,推动了电子商务的发展。
2.2 万维网的工作原理
万维网建立在互联网软件提供的基础之上,创建万维网所需的额外软件分为服务器和浏览器两类。
2.2.1 服务器
在万维网中,任意数量的计算机可运行服务器软件,这些服务器可访问要提供给用户的信息。服务器软件通常在服务器机器上永久运行,其作用是监听信息请求,收到请求后从可用资源中收集信息并发送给请求者。
服务器通过网络端口接收消息,Web服务器常用端口80(也可使用其他端口)。网站所有者通常会为其机器注册别名,方便用户请求网页,这些别名常以“www”开头。常见的Web服务器软件如Apache和微软的Internet Information Server(IIS),可从互联网免费下载或随操作系统捆绑提供,也有执行特定任务的专业Web服务器软件可供购买,大多数硬件/软件平台都有相应的Web服务器产品。
2.2.2 浏览器
浏览器运行在客户端机器上,用于向服务器请求信息,并在信息到达后将其呈现给用户。浏览器的最初概念并非局限于具有图形用户界面(GUI)的软件,它只是能从Web服务器请求信息并以适合接收者的方式呈现信息的软件产品。
最初的浏览器由蒂姆·伯纳斯 - 李开发,基于NeXT平台,具有GUI界面,同时也开发了纯文本浏览器。W3C通过Web可访问性倡议关注特殊用户的浏览器需求。早期常见浏览器未实现创建网页内容的功能,但后来部分浏览器增加了页面编辑功能。常见的浏览器有微软的Internet Explorer和Netscape Communication的Communicator,还有适用于无图形输出计算机终端的浏览器(如Lynx)以及手持计算机浏览器。
浏览器请求信息有两种方式:
- 用户明确请求特定Web服务器上的特定信息。
- 用户请求已获取信息中引用的其他信息,这种方式利用了超文本链接。超文本是指文档中包含指向相关文档的链接,点击链接可访问扩展相关问题的文档。
| 软件类型 | 功能 | 常见产品 |
|---|---|---|
| 服务器软件 | 监听信息请求,收集并发送信息 | Apache、Internet Information Server(IIS) |
| 浏览器软件 | 请求信息并呈现给用户 | Internet Explorer、Communicator、Lynx |
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([用户]):::startend --> B(浏览器):::process
B --> C(请求信息):::process
C --> D(Web服务器):::process
D --> E(收集信息):::process
E --> F(发送信息):::process
F --> B
B --> G(呈现信息给用户):::process
G --> A
综上所述,软件测试和万维网在软件开发和互联网领域都具有重要地位。软件测试通过多种策略和技术确保软件质量,而万维网则通过服务器和浏览器的协同工作,为全球用户提供了便捷的信息共享和交互平台。随着技术的不断发展,软件测试和万维网也将不断演进,为人们带来更好的软件体验和信息服务。
超级会员免费看
86

被折叠的 条评论
为什么被折叠?



