Regression Tests

Quiz about ML (NUS) In machine learning, underfitting is the situation in which the learned model is not a good approximation to the true underlying distribution in the training data. Which of the following approaches reduces the chances of underfitting? A.Using ensemble me. 阅读详情
Black Box Software Testing
Spring 2005
REGRESSION TESTING    
by
Cem Kaner, J.D., Ph.D.
Professor of Software Engineering
Florida Institute of Technology
and
James Bach
Principal, Satisfice Inc.
 
      
Why use regression tests?
• Manage risks of change:
(a) a bug fix didn’t fix the bug or
(b) the fix (or other change) had a side effect or
(c) error in the build process
(d) faulty localization
• Conform to expectations of clients or regulators
• Conform to a misguided notion of “scientific” practice
– Replicability is an important attribute of experiments because it lets us:
• cross-check each other’s work
• obtain a result as needed for application, and
• re-examine an experiment in the face of a new theory
– Replicability is important.
• Repetition may or may not have much value.
• Conform to a faulty analogy to manufacturing
– Software quality is not about making many identical instances of the same widget, within the tightest achievable tolerances
Managing risks of change
(a)   a bug fix didn’t fix the bug
– Bug regression (Show a bug was not fixed)
(b) the fix (or other change) had a side effect
– Old fix regression (Show an old bug fix was broken) Programmers refactor their code to reduce this risk.
– General functional regression (Show that a change caused a working area to break.)
– Unit-level regression (Discover changes while fixing the bugs)
(c) error in the build process
– Build verification testing (Smoke tests have little power but much breadth. The question is whether the build is fit to test). Programmers use source and version control to reduce this risk.
(d) faulty localization
– Localization testing (Determine whether a product has been properly adapted to the language and culture of a specific locale or market.)
Repeat testing after changes
       The essence of regression testing is repetition of tests after changes. But if you scratch the surface, you find several fundamentally different visions.
– Procedural: Run the same tests again in the same ways
• Delegation of labor: Welcome to the factory
• Reuse good tests: Two visions of power (of tests)
• Acts of faith: We do it because (… it’s scientific…?)
– Economical: Repeat tests because (when, if) they’re cheap
– Support refactoring: Help the programmer discover implications of her code changes.
– Risk-oriented: Expose errors caused by change
Automating GUI regression
Automated GUI regression is classic procedural regression.
      
       And the most commonly discussed approach to test automation :
 
– create a test case
– run it and inspect the output
– if the program fails, report a bug and try again later
– if the program passes the test, save the resulting outputs
– in future tests, run the program and compare the output to the saved results. Report an exception whenever the current output and the saved output don’t match.
Procedural regression:
Reusing good tests
• It makes sense to reuse old tests that were carefully crafted.
• Does that mean that regression tests are repetitions of good tests?
– Any test, designed from any other perspective, can be turned into a regression test.
       Just document and / or automate it
              And reuse it
• But what if you create good tests?
– Should they become regression tests?
Procedural regression:
Reusing good tests
• The key design issue for regression tests as regression tests is the expectation of reusability.
• Long term reusability requires maintainability
– Does that imply simplicity?
• If so, does that imply that we should prefer smoke tests to scenario tests? (Some people think so…)
• But complex tests that use a lot of features of the program and enter a lot of data are the ones that might be the most beneficial to automate because this saves so much data entry time and spares use the nuisance of data entry mistakes accidentally made by the tester who is trying to perform the test by hand.
– I think the need for maintainability implies a need for architectural support for strong tests, not a push for weak ones.
Reusing good tests
• If power refers to the ability of a test to detect a bug if it is there, then a test can be powerful even if the program has passed it so often that we are almost certain that bug will never appear.
• On the other hand,
– The probability of finding a bug with a regression test that the program has already passed is very low
– Estimates from LAWST:
       About 15% of the bugs found in a project are found by its regression tests. (Obviously, there’s a lot of variation.)
       However, companies spend as much as 80% of their testing budget on regression testing (development and, especially, maintenance of the tests) and some of these have very low bug find percentages.
• A theoretically less powerful test can be more likely to detect bugs in the same area as the theoretically more powerful test, if you’ve already run the more powerful test (but not the weaker one) and the program consistently passes it
An analogy: Clearing mines
Totally repeatable tests won’t clear the minefield
Variable Tests are Often More Effective
Automated GUI regression
• Look back at the minefield analogy
• Are you convinced that variable tests will find more bugs under all circumstances?
– If so, why would people do repeated tests?
 
 
 
Repeat testing after changes
       The essence of regression testing is repetition of tests after changes. But if you scratch the surface, you find several fundamentally different visions.
– Procedural: Run the same tests again in the same ways
• Delegation of labor: Welcome to the factory
• Reuse good tests: Two visions of power (of tests)
• Acts of faith: We do it because (… it’s scientific…?)
– Economical: Repeat tests because (when, if) they’re cheap
– Support refactoring: Help the programmer discover implications of her code changes.
– Risk-oriented: Expose errors caused by change
The economic perspective
• Cost of reuse versus cost of generation of new tests
– What is the maintenance cost compared to creation cost?
– Will we have the resources available for new tests in the event of
• Patch releases?
• Localization releases?
• Benefit of reused test versus benefit of new tests
– High power, saved data entry time, elimination of user error, performance benchmarking, etc.
• Opportunity cost of working on variants of old tests instead of new tests that
– Focus on new areas of the program or
– Focus on vital areas of the program.
• We might reuse tests not because we think they’re great
– but because it might be better to use weak tests than none, when the cost of creating better tests exceeds the benefit.
Repeat testing after changes
       The essence of regression testing is repetition of tests after changes. But if you scratch the surface, you find several fundamentally different visions.
– Procedural: Run the same tests again in the same ways
• Delegation of labor: Welcome to the factory
• Reuse good tests: Two visions of power (of tests)
• Acts of faith: We do it because (… it’s scientific…?)
– Economical: Repeat tests because (when, if) they’re cheap
– Support refactoring: Help the programmer discover implications of her code changes.
– Risk-oriented: Expose errors caused by change
Refactoring support:
Change detectors
• The programmer modifies working code in order to improve its quality (such as maintainability, performance, etc.)
• The program should pass the same behavioral tests before and after the change(s).
• Unit test libraries make refactoring much easier
– Common case: test-driven development using glass-box testing tools like JUnit, httpUnit, and FIT to create the low-level regression tests.
– The intent of the tests is to exercise every function in interesting ways, so that when the programmer refactors code, she can quickly see
• what would break if she made a change to a given variable, data item or function or
• what she did break by making the change.
Refactoring support: Change detectors
There are enormous practical differences between system-level black-box regression testing and unit-level (or integration-level) glass-box regression testing
– In the unit test situation, the programmer (not an independent tester) writes the tests, typically before she writes the code. The tests focuses the programming, yielding better code in the first place.
– In the unit test case, when the programmer’s change has a side-effect, (under XP) she immediately discovers and fixes it. There is no communication cost. You don't have (as in black box testing) a tester who discovers a bug, replicates it, reports it, and then a project manager who reads the report, maybe a triage team who study the bug and agree it should be fixed, a programmer who has to read the report, troubleshoot the problem, fix it, file the fix, a tester who has to retest the bug to determine that the fix really fixed the problem and then close the bug. All labor-hours considered, this can easily cost 4 hours of processing time, compared to a few minutes to fix a bug discovered at the unit level.
– In the black box case, test case maintenance costs are high, partially because the same broken area of code might be be involved in dozens of system level tests. And partially because it takes a while for the black box tester to understand the implications of the code changes (which he doesn't see). The programmer fixes tests that are directly tied to the changes she makes, and she sees the tests break as soon as she makes the change, which helps her reappraise whether the change she is making is reasonable.
 
– Fowler, Refactoring; Astels, Test-Driven Development; Link, Unit Testing in Java; Rainsberger JUNIT Recipes
Repeat testing after changes
       The essence of regression testing is repetition of tests after changes. But if you scratch the surface, you find several fundamentally different visions.
– Procedural: Run the same tests again in the same ways
• Delegation of labor: Welcome to the factory
• Reuse good tests: Two visions of power (of tests)
• Acts of faith: We do it because (… it’s scientific…?)
– Economical: Repeat tests because (when, if) they’re cheap
– Support refactoring: Help the programmer discover implications of her code changes.
– Risk-oriented: Expose errors caused by change
Risk-oriented regression
In this approach, we might re-use old tests or create new ones. Often, we retest an area or function with tests of increasing power (perhaps by combining them with other functions). The focus of the technique is on testing for side effects of change, not the inventory of old tests.
Here are examples of a few common ways to test a program more harshly while retesting in the same area.
– Do more iterations (one test hits the same function many times).
– Do more combinations (interactions among variables, including the function under test's variables).
– Do more things (sequences of functions that include the function under test).
– Methodically cover the code (all N-length sequences that include the function under test; all N-wide combinations that include the function under test's variables and variables that are expected to interact with or constrain or be constrained by the function under test).
– Look for specific errors (such as similar products’ problems) that involve the function under test.
– Try other types of tests, such as scenarios, that involve the function under test.
– Try to break it (take a perverse view, get creative).
» Thanks to Doug Hoffman for a draft of this list
Summing up
• Regression testing as a technique:
– It primarily specifies an activity
• Retest after changes
– It only weakly specifies a risk
• Changes break things
• Regulators might reject things that don’t look tightly controlled
– It specifies a weak oracle
• Whatever happened last time
– That won’t always be correct
– And it doesn’t help when you first design and run the test
– It doesn’t address coverage or the characteristics of the tester.
• The details of test design come from some other underlying technique.
Summing up
• Regression tests have mixed costs and benefits
– Many regulators and process inspectors like and expect this approach
– The tests exist already (no need for new design, or new implementation, but the maintenance cost can be enormous)
– Because we are investing in re-use, sometimes we can afford to craft each test carefully, making it more likely to be valuable later.
– This is the dominant paradigm for automated testing, so it’s relatively easy to justify and there are lots of commercial tools.
– These tests are often overrated. They lose their power to find bugs over time (the bug find curve for regression has been compared to an immunization curve—Boris Beizer nicknamed it the Pesticide Paradox)
– Repeating the same tests means not looking for the bugs that can be found by other tests.
• You might get the same benefits, with more creativity, in a less structured approach to regression. But that might cost more.
• Much regression testing can / should be done, more efficiently and effectively, as unit tests rather than black box system tests.
Readings
REGRESSION TESTING IN GENERAL
• Marick, How Many Bugs Do Regression Tests Find?
• Beck, Test-Driven Development By Example
GUI-LEVEL AUTOMATED REGRESSION TESTING
• Chris Agruss, Automating Software Installation Testing
• James Bach, Test Automation Snake Oil
• Hans Buwalda, Testing Using Action Words
• Hans Buwalda, Automated testing with Action Words: Abandoning Record & Playback
• Elisabeth Hendrickson, The Difference between Test Automation Failure and Success 
• Doug Hoffman, Test Automation course notes
• John Kent, Advanced Automated Testing Architectures
• Bret Pettichord, Success with Test Automation
• Bret Pettichord, Seven Steps to Test Automation Success
• Keith Zambelich, Totally Data-Driven Automated Testing
 
Zephyr BSP: 45-BSP Regression Test 本文聚焦BSP回归测试,厘清Build、Functional与Regression测试差异,强调其核心为对历史功能的持续验证。提出BSP Regression 11层测试树与“可重复”第一原则,倡导使用稳定Test Case ID追踪结果。深入探讨驱动级回归、间接破坏发现价值及全量/定向回归取舍,推荐两级流程(Fast + Full),并涵盖Regression Matrix、Git Bisect、测试目录设计等实践,助力BSP从“能用”迈向“可长期维护”。 阅读详情

相关推荐

Gaussian Processes for Regression

参考:http://www.robots.ox.ac.uk/~mebden/reports/GPtutorial.pdf

chlele0105的专栏 1万+

十分钟理解回归测试(Regression Testing)

回归测试是一个系统的质量控制过程,用于验证(比如你在家中安装了新的空调系统,发现虽然新的空调系统可以按预期工作,但是本来亮的等却不亮了)。其主要目标是确保旨在改进的修改不会破坏软件的既定性能和可靠性。回归测试是软件开发过程质量控制措施的一个重要方面。每次进行更改时,都会将其付诸实践,以确保它不会无意中导致任何功能或性能问题。

myh919的博客 613

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2600

回归测试

        回归测试: (regression   testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。    ...

Hern(宋兆恒) 4425

基于NE555的触摸延时开关电路设计与实现

本文详细介绍了基于NE555芯片的触摸延时开关电路设计与实现方法。通过分析NE555的单稳态工作模式,结合定时电阻、电解电容等关键元件选型,提供了一套完整的电路搭建方案。文章还包含抗干扰设计、调试技巧及常见故障处理,帮助电子爱好者快速掌握触摸延时灯的制作要点。

weixin_29268267的博客 789

【Isaac Sim】无头服务器远程桌面连接实战:Turbovnc配置与常见问题解决

本文详细介绍了在无头GPU服务器上通过Turbovnc远程桌面连接并运行NVIDIA Isaac Sim的实战教程。针对无图形界面服务器运行仿真软件的核心痛点,文章提供了从Turbovnc安装配置、SSH隧道建立,到以普通用户身份启动服务、解决GLXBadFBConfig等常见图形错误的完整方案,帮助开发者在云端高效部署机器人仿真环境。

weixin_29254673的博客 773

树莓派(Debian/Ubuntu)编译安装gromacs2016.5

1.前言时常看到大家在追求更高的计算能力,计划着去买新的计算机,这里算是娱乐吧,尝试一下在树莓派上安装gromacs2016.5。同时本文也适用与64位的Debian/Ubuntu系统下gromacs的编译安装在树莓派这样的四核arm A53 的硬件上安装显然不会有什么性能,但是可以测试一下集群的配置,不过目前为止我只有一部树莓派,终极目标是搭建一个三个节点的集群,目前还不确定是买三个树莓派还是三...

weixin_38412284的博客 1396

深入解析π型滤波电路:RC与LC滤波器的实战选型指南

本文深入解析了π型滤波电路的工作原理与实战选型。重点对比了RC型与LC型滤波器的核心差异:RC型成本低、体积小,但存在压降与能耗,适用于小电流场景;LC型效率高、滤波性能好,但成本与体积较大,适合中到大电流及高纹波抑制需求。文章提供了基于不同应用场景的选型指南与设计要点,帮助工程师做出精准决策。

weixin_29291069的博客 657

回归测试(Regression Test)

解压 语法:tar [主选项+辅选项] 文件或者目录使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。主选项:c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。x 从档案文件中释放文件。相当于拆包。t 列出档案文件的内容,查看已经备份了哪些文件。特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可

limanjihe的专栏 1万+

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

亲爱的同学,毕设是不是让你既期待创新又担心技术门槛?如果你的毕设方向是计算机视觉、智能检测,那这个绝对能成为你的“毕设王牌”。从数据准备到界面开发,我会把整个项目拆成“傻瓜式”步骤,让你能一步步做出属于自己的毕设成果。

know_F0727的博客 105

搭建AutoSAR开发环境

任何开发都需要一套开发环境,包括软硬件环境,笔者后续将介绍的是 NXP 的 S32K144 配套的开发板。接下来详细介绍怎么获取这些软硬件工具。仅供个人学习使用!

cfl927096306的博客 6113

Statsmodels 回归诊断与设定检验(Regression Diagnostics and Specification Tests)实战指南

Statsmodels 在统计学与计量经济学建模中扮演核心角色,而 `statsmodels.stats.diagnostic` 及其姊妹模块(`stattools`、`outliers_influence`、`_adnorm`、`_lilliefors`)为回归模型提供了体系化的"体检"工具。本文以仓库文档 [docs/source/diagnostic.rst](https://link.gi

gitblog_01132的博客 255

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 864

揭示变化交互误差的回归测试-Regression Tests to Expose Change Interaction Errors

Regression Tests to Expose Change Interaction ErrorsBackgroundProblemMotivating ExampleDefinitionExample For Explanation Böhme M, Oliveira B C S, Roychoudhury A. Regression tests to expose change inte...

wcventure的博客 370

基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)

当前所设计的温室大棚种植监测系统基于STM32单片机开发,它能够对温室大棚内的温度、湿度、光照强度、土壤湿度、二氧化碳含量等环境参数进行实时监测,并将数据传输至OneNET云平台,实现了远程监测和管理。该系统具有体积小、功耗低、可靠性高等特点,适合在温室大棚等场合使用。

7873

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Lemonade App Regression Tests 源码级解析:零依赖渲染层回归守卫的运行机制与实战指南

Lemonade 仓库在 [test/app/app-regression](https://link.gitcode.com/i/2d6bb12436fa91bf926ab6362b3d5b06) 目录下维护了一套面向桌面端渲染层的应用回归测试(App Regression Tests)。它以"零依赖、纯 Node、源码级守卫"为设计原则,专门保护 Model Manager、Model Opt

gitblog_01186的博客 1059

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

zstd 回归测试(Regression tests)完全指南:从 nightly 守护到 results.csv 重建

zstd 的回归测试框架通过固定数据集、固定压缩配置与多种压缩 API 组合,持续监控压缩后的总字节数,防止任何改动悄悄劣化压缩率。本文以 [src/third_party/zstandard/zstd/tests/regression/README.md](https://link.gitcode.com/i/92181eab9304ae2e09d1d950614ca13d) 为核心,结合框架源

gitblog_00697的博客 12

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Stride.Graphics.Tests 跨平台图形回归测试工程指南

Stride(原 Xenko)的图形渲染引擎包含大量依赖具体 GPU 与渲染后端的测试用例,本文以 [Stride.Graphics.Tests/README.md](https://link.gitcode.com/i/f0f2bda0b329f9f311985ef17415ab8c) 为核心,结合 [Stride.Graphics.Tests.csproj](https://link.gitc

gitblog_00188的博客 400

别再混着聊评测了!一张两轴地图,把 LangSmith 评测讲透

LangSmith 官方把评测拆成两轴:何时评对应六种评测类型,怎么评对应五种评估器实现。 本文先铺时间轴,离线四类型加在线两类型,再铺方法轴,五类实现与配置位置。 读完你能对任何评测需求先定类型再选实现,混轴讨论的糊涂账一次理清。

深耕人工智能底层逻辑,专注大模型架构、分布式训练与推理优化。在这里,不贩卖焦虑,只拆解硬核技术。从Transformer的数学之美到Agent的工程落地,用代码和论文说话,记录在AI浪潮中探索技术边界的每一步的专栏 65

ubuntu 12.04 X64 编译安装 clearsilver 时错误

照文档提示安装clearsilver-0.10.5 ./confugure && make sudo make install 发现/usr/local/lib 下只有 -rw-r--r--  1 root root    292420  5月 20 16:26 libneo_cgi.a -rw-r--r--  1 root root    597162  5月 20 16:

snake_baoby的专栏 1324

【亲测免费】 PySR 开源项目教程

PySR 项目的目录结构如下: ``` PySR/ ├── Dockerfile ├── LICENSE ├── README.md ├── examples/ │ ├── pysr_demo.ipynb │ └── ... ├── pysr/ │ ├── __init__.py │ ├── core.py │ └── ... ├── setup.py └── tests/

gitblog_01092的博客 644

告别高DPI模糊:ExplorerPatcher的DPI适配快速指南

把设置窗口从1080p主屏拖到4K副屏,字体瞬间糊成一团,拖回来又恢复锐利——这就是高DPI模糊的典型症状。ExplorerPatcher 通过完整的每显示器 DPI 适配来根治它,本文给出从上手到进阶的完整路径。 ## 5步装好并开始用 1. 下载最新版的 `ep_setup.exe`(Intel/AMD)或 `ep_setup_arm64.exe`(骁龙),来源是项目的 Releases

gitblog_00572的博客 187

企业级视觉回归测试:cypress-visual-regression在CI/CD流程中的集成指南

cypress-visual-regression是一款为Cypress提供强大视觉回归测试能力的插件,能够帮助企业在CI/CD流程中高效实现视觉一致性检查,确保前端界面在迭代过程中保持预期的视觉效果。 ## 快速入门:安装与基础配置 ### 一键安装步骤 通过npm即可快速安装cypress-visual-regression插件: ```nodejs npm install cypress

gitblog_00711的博客 279

从基础到进阶:cypress-visual-regression API全解析与示例演示

cypress-visual-regression是一款为Cypress添加视觉回归测试能力的插件,它能够帮助开发者轻松实现UI界面的自动化视觉测试,通过对比基线截图与实际截图,快速发现界面变化。无论是前端组件库迭代还是大型应用UI重构,这款工具都能为你提供可靠的视觉保障。 ## 为什么选择cypress-visual-regression? 视觉回归测试是前端质量保障的重要环节,但传统测试方

gitblog_00181的博客 943

cypress-visual-regression性能优化:大幅提升测试速度的10个实用技巧

cypress-visual-regression是一款为Cypress添加视觉回归测试能力的工具,通过对比UI截图来确保界面一致性。在实际项目中,随着测试用例增多,视觉回归测试可能会变得缓慢。本文将分享10个实用技巧,帮助你显著提升cypress-visual-regression的测试速度,让视觉测试更高效。 ## 1. 精准设置错误阈值,减少不必要对比 合理配置错误阈值是提升测试效率的基

gitblog_01156的博客 1050
上一篇: Programming By Intention/Intro to JUnit
swverification
博客等级 码龄20年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值