软件测试探秘:从各类软件测试入门,领略测试的奥秘

葡萄城技术团队
葡萄城官方账号
博客专家认证
2023-12-05 09:15:14

前言

在软件开发的世界中,软件测试是不可或缺的一部分。它是确保软件质量、功能完整性和用户满意度的关键环节。本文小编将为大家介绍各类软件测试的奥秘,并提供入门级的指导和见解。

本文内容概要:

  • 软件测试是什么?
  • 黑盒测试vs白盒测试
  • 自动化测试vs手工测试
  • 功能测试方法论
  • 非功能测试方法论
  • 软件测试生命周期
  • 软件测试最佳实践

软件测试是什么?

软件测试是在开发流程中被开发者用来持续地评估和纠正特性的功能性的一个循环进行的步骤。软件测试比对软件的当前构建和软件需求,以确认没有疏漏的需求。同样需要验证的是,软件在跨越不同媒介时、与现有软件集成时运行正确。

软件测试是如何运作的?

测试软件有不少办法。通常来讲,开发者首先决定一个需要验证的行为或者特性,创建一个测试来确认特性,接着要么修改特性,要么通过测试就直接继续后面事情了。

在早期软件设计哲学中,测试经常完全被忽视。现在软件已经变得更加复杂,在更大规模被实现,而且在不同设备与操作系统间各不相同。现代的开发周期中,软件测试已经是必要的部分了。它扮演着QA一种不断发展的形式,验证软件可以对各种可能的使用场景和环境正常响应。

黑盒测试vs白盒测试

软件测试有很多不同类型,每种类型在测试中专攻特定的缺陷。所有的测试类型可以宽泛描述为黑盒或白盒测试。这个区分描述软件测试人员需要掌握的背景知识。

黑盒测试:测试人员知道软件产品应该实现什么而不知道是如何实现的。测试人员仅仅目睹了编程的结果或行为,他们自己不必成为程序员。测试人员经常是开发步骤外部的某些人,给出外部的观点。黑盒测试主要用于测试程序行为和评估用户体验。

白盒测试:白盒测试是黑盒测试的反面,测试人员的确知道软件的内部结构。这些测试人员通过特性测试用例输入的使用来评估源代码里面程序的逻辑。通过追踪这些输入的流动,测试人员可以验证这些测试用例在屏幕背后被正确处理。白盒测试人员常常是开发步骤内的程序员,他们被用于检查源代码的效率。

手工测试vs自动化

测试方法另一个主要分类是手工测试vs自动化测试。很多特定测试方法论可以同时被手工或自动化测试完成。这个区别描述测试是如何被完成的。

手工测试:

手工测试需要一个人类测试人员来扮演终端用户的角色,一次检查一个测试用例。这是测试的传统形式,可以找到自动化测试框架难以识别的问题(web应用元素的表现,令人困惑的布局等)。

自动化测试

自动化测试(或测试自动化)是使用软件的步骤,调用一个测试框架来创建使用期望输出对比当前程序输出的自动的测试用例。最常见的框架是Selenium和Cucumber。

自动测试框架的两个最常见的测试步骤是图形用户接口测试和API测试,前者模拟诸如点击或按键的用户接口事件,后者绕开用户接口来验证底层行为。自动化测试被用于快速执行输出驱动的测试或者为维护测试执行重复的测试用例。

功能测试方法论

现在我们将会讨论通过更加广泛类型区分的测试方法论,功能测试或非功能测试。这个区别描述测试关注的是软件行为还是内部运作。

功能测试

黑盒QA测试的一种类型测试的是从软件需求和说明书生成的测试用例。下方是不同功能测试方法论的一些常见类型。

最常见的功能方法论:

  • 单元测试
  • 集成测试
  • 系统测试
  • 验收测试
  • 回归测试
  • 冒烟测试

常见功能测试步骤

绝大多数基础测试经历同样的四步,每个步骤测试范围更加宽广。步骤始于评估单一组件的单元测试,终于评估产品和初始计划关联性的验收测试。

单元测试:

单元测试被用于测试和其他组件分离开的程序组件。举个例子,面向对象程序中,你会在尝试连接到其他类前单元测试一个单独的类。这种类型的测试经常是开发者完成的,用于在无需等待完整测试周期下捕捉缺陷。单元测试绝大多数情况是自动执行的,用于快速获取到结果,但是也能手动进行。

集成测试:

集成测试用于测试诸多互相连接的程序组件的协同运行。这个测试经常是在单元测试后进行的,首先独立验证单一组件,然后验证组件协同的运行。

举个例子,你可以集成测试一个父类和两个关联子类来确保测试用于所有预期属性的用例的输入被分配给预期的类。集成测试,通常都是自动化的测试,是开发者完成的,用于验证互相关联的组件无缝衔接。

系统测试:

系统测试是一起使用所有组件来测试完整产品的构建的。当集成测试测试了互相连接的组件的模块后,系统测试测试所有组件集成后程序如何运作,并且在模块内部操作中捕捉缺陷。

验收测试:

验收测试(或用户验收测试)是一个在开发过程后期执行的,用来评估是否所有初始的特定需求是被最终产品构建满足的测试。内部和外部测试者都要评审初始产品说明书和业务需求,然后当他们使用产品时候逐一检查。使用最常见的apha测试(内部)和beta测试(外部)去做验收测试有很多途径。

专门的功能方法论

在上面步骤之外去测试一个程序的特定层面,也有经过微调的功能测试手段。下面是最常见的专门的功能方法论

回归测试

回归测试是在一个更新或改变后用于测试产品集成性的手段。回归测试套件要么在整个程序,要么仅仅在程序变了的部分运行自动测试。套件接着把输出和早期产品构建记录的输出进行比对。如果输出是匹配的,那么测试成功。如果它们以预期方式改变了,那么测试验证了功能有回归或还原。

回归测试是维护测试最常见的形式,因为其检查程序发布后表现如何。回归测试可以被定期执行来提供持续测试。

冒烟测试

冒烟测试(Smoke Testing)是软件测试中的一种测试方法,旨在快速验证系统的基本功能是否正常工作,以确保软件在进入更详细的测试阶段之前是可用的。

冒烟测试通常在软件构建或发布后的早期阶段进行,它会对软件的核心功能进行一系列的简单测试,以发现可能的严重问题或错误。这些测试通常是预先定义的基本功能测试用例,涵盖了软件的主要功能点。

冒烟测试的目标是在系统经过基本构建之后,对其进行表面层次的测试,以确保没有明显的错误或问题。如果冒烟测试失败,即发现了关键功能的严重问题,那么可能需要回退到先前的开发阶段并解决问题,以避免在后续的详细测试中浪费时间和资源。

冒烟测试的优点包括:

  1. 快速验证:冒烟测试可以在短时间内快速验证软件的基本功能,帮助发现可能的严重问题。
  2. 提早发现问题:通过在早期阶段发现问题,可以节省后续测试阶段的时间和资源。
  3. 提高软件质量:通过确保软件的基本功能正常工作,可以提高软件的质量和稳定性。

非功能测试方法

非功能测试方法测试一个程序如何运行,而不是特定程序表现的成功运行,举个例子,一个非功能测试可能测试的是一个程序在更大规模下如何的运行良好或者当系统运行很长一段时间后表现如何。由于非功能测试定义的主体性,很多非功能测试方法论关注点有所重叠。

常见非功能测试方法论:

  • 性能测试
  • 安全测试
  • 可用性测试
  • 兼容性测试
  • 压力测试

让我们深入了解下这些方法论

性能测试:

性能测试是测试的一种常见形式,评估在预设负载下软件的运行速度、响应和可靠性等。如果软件正常运行,但是在这些分类里面任意一个没有满足期望标准,在继续其软件开发周期前,软件将会把打回开发者去提升性能。

安全测试:

安全测试被用于在使用了诸如基于账号的系统或金融系统软件的敏感信息的信息系统或软件中寻找缺点。下面是安全测试中的一些要求:

  • 保密性:敏感信息是受约束的。
  • 完整性:数据不能被拷贝或修改。
  • 认证:用户比如被验证为是期望的用户。
  • 鉴权:用户必须拥有权限来查看敏感信息。
  • 可用性:当授权用户需要信息时,必须是可用的。
  • 不可否认性:通信两端的用户在发生通信前必须校验各自凭证

易用性测试:

易用性测试用于识别真正的终端用户会在哪里遇到困难或困惑。这个主要是在研究者观察下由一群受控的终端用户进行的。测试者被要求去执行特定任务,比如“创建一个账号”,但是却没有被告诉怎么去完成。他们然后使用产品来完成任务并给出关于体验的高质量反馈。这个方法论允许开发者获取到关于他们程序可用性和直观反应的真实反馈,并且无需很多的说明。

这个与a11y测试联系紧密,a11y测试记录能力各不相同的终端用户能多容易地操作软件。举个例子,文字转语音软件和web应用的可视化元素的交互如何。

兼容性测试:

兼容性测试评估在不同计算环境下软件表现如何。这个通常使用一个测试框架完成的。这种框架使用模拟不同目标设备的很多虚拟机器来执行同样的输入。每个VM的输出被记录和比对,以确认是否所有输出都是一样的并且跨越不同平台时候表现是否有所不同。这种测试确保无论终端用户在哪里使用,都有一致的体验。

举个例子:如果你曾经为iOS和安卓创建了一个移动端APP,你将会需要一个兼容测试,来验证那个APP在两个平台上以相同的预设级别运行。

压力测试:

压力测试是开发者把听他们的软件推送到一个极端测试用例,来验证软件的断点。最常见的压力测试是最大化并发用户来找出当前构建能承载的极限。整个压力测试中性能被完整记录,因此开发者可以发现软件断点,指出可接受级别下合适用户体验会降级。极限情况下,压力测试致力于找出系统在哪里会失效,因此你可以在当前产品版本下规避这些失效条件。

举个例子,设想你正在开发一个在线视频游戏。你可以通过在这个游戏中单次尽可能获得多的在线玩家来进行压力测试。你可以然后记录服务器平台的表现(速率、响应等),同样也能发现何时服务器会崩溃(断点)。

压力测试和负载测试高度重叠。负载测试记录软件在预期负载下的运行。压力测试记录软件在最大负载下的运行。

软件测试生命周期

无论你使用何种方法论,你总是被期望遵循一个特定的测试生命周期。软件测试生命周期帮助你关注产品需求并一次开发一个特性。

让我们深入看看这六步:

需求分析

你和你的开发团队与产品、市场团队会面来讨论产品的最终需求和特性。对每个需求,小组进行头脑风暴,形成一个可以指示需求是否已经被实现的可测试的说明书。这些说明书可以是诸如“运行时间必须低于X”或“客户必须能很容易操作用户界面”等事情。你后面步骤将会用到这些说明书。

测试计划

这个步骤里,你和你的开发团队进行头脑风暴,讨论说明书里如何进行测试的内容。一些常见的点是“我们将会需要什么资源?”,“我们可以用什么量化指标来测试我们的需求?”和“可能影响测试结果的关键风险因素是什么?”。这步最重要的方面是留存测试指标/用例说明并植入进产品说明书。

测试用例开发

测试用例开发是软件测试过程中的一个关键活动,它涉及编写和设计测试用例,以验证软件系统的功能、性能和可靠性。

测试用例开发的目标是为了在系统中发现潜在的问题和错误,以确保软件的质量和稳定性。通过编写测试用例,测试人员可以明确测试的目标、步骤和预期结果,并使用这些测试用例来执行系统测试。

测试用例通常包括以下几个方面:

  1. 测试目标:明确测试的目标和测试的覆盖范围。确定要测试的功能、特性或场景。
  2. 测试步骤:定义具体的测试步骤,包括输入数据、操作或操作流程。
  3. 预期结果:指定每个测试步骤的预期结果,即在正确的情况下预期系统的行为或输出。
  4. 环境设置:确定测试执行所需的测试环境和配置,包括硬件、软件和网络环境等。
  5. 前置条件:指定执行测试用例之前的特定条件或状态,以确保测试的正确性和一致性。
  6. 后置条件:定义执行测试用例之后所期望的系统状态或结果。

测试环境配置

这个步骤里,你将会创建你的测试环境。绝大多数产品是发布在多平台的,这意味着你至少需要一个平台创建一个环境。这个主要是通过测试框架和多个虚拟机来完成的。

你同样将会在这个步骤创建能经过整个程序也能产生稳定输出的测试输入。好的测试输入覆盖测试用例的全部范围,就算反复运行结果也是一致的。

测试执行

这个步骤里,你和你的团队将会执行测试并记录所有决定了的指标。绝大多数团队会进行运行测试以得到多个可以对比的数据点位。请注意所有严重的和不严重的程序缺陷将会在下个开发周期被再次处理。

你也可能认可你的指标并没有记录所有你需要的数据。这是一个评估你为后面测试选择的指标的好机会。

测试用例关闭与分析

这个步骤是关于从测试中回收固化的、可报告的测试结果。绝大多数公司将会要求你书写日报或周报,汇总每个测试的运行和测试后要改变什么。

从这里开始,你可以选择下面一个:

  • 调整测试并重复来获取更多信息(不同指标,优化的测试环境等)
  • 使用测试结果,返回来为产品开发解决方案(优化运行时间,提升量级等)

使用敏捷测试实践,你将在你创造产品代码前和后完成测试周期。这允许你在产品开发中加速开发,因为你把说明书记在脑中了。

软件测试最佳实践

  • 不要完全依赖自动测试。确保最少要有一套人工测试来捕捉未预期的缺陷。
  • 编码同时以常见语言或伪代码书写测试用例。你的经理和新进成员将会感激你节省了他们解析测试脚本的时间。
  • 仅仅用受控的、隔离的测试环境来避免外部因素。使用一个个人机器或公用的云实例运行测试来去掉可能影响性能或输出的变量。
  • 选择特定的量化指标。对于说明书和测试用例,确保你的指标仅仅衡量单一属性,可以通过数字来追踪,能帮助到回报。
  • 增量测试。在你的测试中创建子条件来追踪测试中程序哪里失效了。
  • 让团队成员为单元和集成测试准备测试工作。避免发生让另一个开发者为你的程序创造测试的确认偏差。当外部测试不可用时候这是个好法子。
  • 使用有帮助的测试名称。以测试的套件或需求来名称测试。规避诸如Test1或performanceTest的无效名称,换成StressTest_10000user。
  • 使用诸如Selenium和Reflect的软件测试工具。测试可能是很难追踪的。使用测试框架/工具来简化你的测试,在组内共享它们。

总结

通过本文的深入探索,我们全面了解了软件测试的奥秘和其在软件开发中的重要性。不同类型的软件测试方法为我们提供了多种手段来保证软件的质量、可靠性和稳定性。无论是功能测试、非功能测试、手工测试还是自动化测试,它们都在不同方面提供了有力的验证和保障。通过合理选择和应用这些测试方法,我们能够发现和解决潜在的问题,并为用户提供高质量的软件产品。软件测试不仅是一项技术活动,更是一种质量文化的体现,它对于整个软件开发生命周期的成功至关重要。

扩展链接:

Redis从入门到实践

一节课带你搞懂数据库事务!

Chrome开发者工具使用教程

从表单驱动到模型驱动,解读低代码开发平台的发展趋势

低代码开发平台是什么?

基于分支的版本管理,帮助低代码从项目交付走向定制化产品开发

...全文
138 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
Git权威指南 目 录 前 言 第1篇 初识Git 第1章 版本控制的前世和今生/ 2 1.1 黑暗的史前时代/ 2 1.2 CVS—开启版本控制大爆发/ 5 1.3 SVN—集中式版本控制集大成者/ 7 1.4 Git—Linus 的第二个伟大作品/ 9 第2章 爱上 Git 的理由/ 11 2.1 每日工作备份/ 11 2.2 异地协同工作/ 12 2.3 现场版本控制/ 13 2.4 避免引入辅助目录/ 15 2.5 重写提交说明/ 15 2.6 想吃后悔药/ 16 2.7 更好用的提交列表/ 17 2.8 更好的差异比较/ 18 2.9 工作进度保存/ 18 2.10 代理SVN提交实现移动式办公/ 19 2.11 无处不在的分页器/ 20 2.12 快/ 21 第3章 Git的安装和使用/ 22 3.1 在Linux 下安装和使用 Git/ 22 3.1.1 包管理器方式安装/ 22 3.1.2 从源代码进行安装/ 23 3.1.3 从Git版本库进行安装/ 23 3.1.4 命令补齐/ 25 3.1.5 中文支持/ 25 3.2 在Mac OS X 下安装和使用 Git/ 26 3.2.1 以二进制发布包的方式安装/ 26 3.2.2 安装 Xcode/ 27 3.2.3 使用 Homebrew 安装 Git/ 29 3.2.4 从Git源码进行安装/ 29 3.2.5 命令补齐/ 30 3.2.6 其他辅助工具的安装/ 30 3.2.7 中文支持/ 31 3.3 在Windows 下安装和使用 Git(Cygwin篇)/ 31 3.3.1 安装 Cygwin/ 32 3.3.2 安装 Git/ 36 3.3.3 Cygwin 的配置和使用/ 37 3.3.4 Cygwin 下 Git 的中文支持/ 40 3.3.5 Cygwin 下 Git 访问 SSH 服务/ 41 3.4 Windows 下安装和使用 Git(msysGit篇)/ 45 3.4.1 安装 msysGit/ 46 3.4.2 msysGit 的配置和使用/ 48 3.4.3 msysGit中shell环境的中文支持/ 49 3.4.4 msysGit中Git的中文支持/ 50 3.4.5 使用 SSH 协议/ 51 3.4.6 TortoiseGit 的安装和使用/ 52 3.4.7 TortoiseGit 的中文支持/ 55 第2篇 Git独奏 第4章 Git 初始化/ 58 4.1 创建版本库及第一次提交/ 58 4.2 思考:为什么工作区根目录下有一个 .git 目录/ 60 4.3 思考:git config 命令的各参数有何区别/ 63 4.4 思考:是谁完成的提交/ 65 4.5 思考:随意设置提交者姓名,是否太不安全/ 67 4.6 思考:命令别名是干什么的/ 68 4.7 备份本章的工作成果/ 69 第5章 Git 暂存区/ 70 5.1 修改不能直接提交吗/ 70 5.2 理解 Git 暂存区(stage)/ 76 5.3 Git Diff 魔法/ 78 5.4 不要使用 git commit -a/ 81 5.5 搁置问题,暂存状态/ 82 第6章 Git对象/ 83 6.1 Git对象库/ 83 6.2 思考:SHA1 哈希值到底是什么,是如何生成的/ 88 6.3 思考:为什么不用顺序的数字来表示提交/ 90 第7章 Git 重置/ 93 7.1 分支游标master/ 93 7.2 用 reflog 挽救错误的重置/ 95 7.3 深入了解git reset命令/ 96 第8章 Git 检出/ 99 8.1 HEAD 的重置即检出/ 99 8.2 挽救分离头指针/ 102 8.3 深入了解 git checkout 命令/ 103 第9章 恢复进度/ 105 9.1 继续暂存区未完成的实践/ 105 9.2 使用 git stash/ 108 9.3 git stash/ 109 第10章 Git 基本操作/ 114 10.1 先来合个影/ 114 10.2 删除文件/ 114 10.2.1 本地删除不是真的删除/ 115 10.2.2 执行 git rm 命令删除文件/ 116 10.2.3 命令git add -u快速标记删除/ 117 10.3 恢复删除的文件/ 118 10.4 移动文件/ 119 10.5 一个显示版本号的 Hello World/ 120 10.6 使用 git add -i 选择性添加/ 122 10.7 Hello World 引发的新问题/ 124 10.8 文件忽略/ 125 10.9 文件归档/ 129 第11章 历史穿梭/ 130 11.1 图形工具:gitk/ 130 11.2 图形工具:gitg/ 131 11.3 图形工具:qgit/ 135 11.4 命令行工具/ 140 11.4.1 版本表示法:git rev-parse/ 141 11.4.2 版本范围表示法:git rev-list/ 144 11.4.3 浏览日志:git log/ 146 11.4.4 差异比较:git diff/ 150 11.4.5 文件追溯:git blame/ 151 11.4.6 二分查找:git bisect/ 152 11.4.7 获取历史版本/ 156 第12章 改变历史/ 157 12.1 悔棋/ 157 12.2 多步悔棋/ 159 12.3 回到未来/ 161 12.3.1 时间旅行一/ 162 12.3.2 时间旅行二/ 167 12.3.3 时间旅行三/ 171 12.4 丢弃历史/ 174 12.5 反转提交/ 177 第13章 Git 克隆/ 179 13.1 鸡蛋不装在一个篮子里/ 179 13.2 对等工作区/ 180 13.3 克隆生成裸版本库/ 183 13.4 创建生成裸版本库/ 184 第14章 Git库管理/ 187 14.1 对象和引用哪里去了/ 187 14.2 暂存区操作引入的临时对象/ 189 14.3 重置操作引入的对象/ 191 14.4 Git管家:git-gc/ 193 14.5 Git管家的自动执行/ 196 第3篇 Git和声 第15章 Git协议与工作协同/ 200 15.1 Git 支持的协议/ 200 15.2 多用户协同的本地模拟/ 202 15.3 强制非快进式推送/ 203 15.4 合并后推送/ 207 15.5 禁止非快进式推送/ 208 第16章 冲突解决/ 210 16.1 拉回操作中的合并/ 210 16.2 合并一:自动合并/ 212 16.2.1 修改不同的文件/ 212 16.2.2 修改相同文件的不同区域/ 214 16.2.3 同时更改文件名和文件内容/ 215 16.3 合并二:逻辑冲突/ 217 16.4 合并三:冲突解决/ 218 16.4.1 手工编辑完成冲突解决/ 221 16.4.2 图形工具完成冲突解决/ 221 16.5 合并四:树冲突/ 225 16.5.1 手工操作解决树冲突/ 227 16.5.2 交互式解决树冲突/ 228 16.6 合并策略/ 230 16.7 合并相关的设置/ 231 第17章 Git 里程碑/ 233 17.1 显示里程碑/ 234 17.2 创建里程碑/ 236 17.2.1 轻量级里程碑/ 237 17.2.2 带说明的里程碑/ 238 17.2.3 带签名的里程碑/ 239 17.3 删除里程碑/ 242 17.4 不要随意更改里程碑/ 243 17.5 共享里程碑/ 243 17.6 删除远程版本库的里程碑/ 246 17.7 里程碑命名规范/ 247 第18章 Git 分支/ 253 18.1 代码管理之殇/ 253 18.1.1 发布分支/ 253 18.1.2 特性分支/ 256 18.1.3 卖主分支/ 257 18.2 分支命令概述/ 258 18.3 “Hello World”开发计划/ 259 18.4 基于特性分支的开发/ 260 18.4.1 创建分支 user1/getopt/ 261 18.4.2 创建分支 user2/i18n/ 262 18.4.3 开发者 user1 完成功能开发/ 263 18.4.4 将 user1/getopt 分支合并到主线/ 264 18.5 基于发布分支的开发/ 265 18.5.1 创建发布分支/ 266 18.5.2 开发者 user1 工作在发布分支/ 267 18.5.3 开发者 user2 工作在发布分支/ 268 18.5.4 开发者 user2 合并推送/ 270 18.5.5 发布分支的提交合并到主线/ 271 18.6 分支变基/ 275 18.6.1 完成 user2/i18n 特性分支的开发/ 275 18.6.2 分支 user2/i18n 变基/ 277 第19章 远程版本库/ 284 19.1 远程分支/ 284 19.2 分支追踪/ 287 19.3 远程版本库/ 290 19.4 PUSH 和 PULL 操作与远程版本库/ 292 19.5 里程碑和远程版本库/ 294 19.6 分支和里程碑的安全性/ 294 第20章 补丁文件交互/ 296 20.1 创建补丁/ 296 20.2 应用补丁/ 297 20.3 StGit 和 Quilt/ 300 20.3.1 StGit/ 300 20.3.2 Quilt/ 304 第4篇 Git协同模型 第21章 经典Git协同模型/ 308 21.1 集中式协同模型/ 308 21.1.1 传统集中式协同模型/ 309 21.1.2 Gerrit 特殊的集中式协同模型/ 310 21.2 金字塔式协同模型/ 311 21.2.1 贡献者开放只读版本库/ 312 21.2.2 以补丁方式贡献代码/ 313 第22章 Topgit 协同模型/ 314 22.1 作者版本控制系统的三个里程碑/ 314 22.2 Topgit 原理/ 316 22.3 Topgit 的安装/ 317 22.4 Topgit 的使用/ 319 22.5 用Topgit方式改造Topgit/ 330 22.6 Topgit 使用中的注意事项/ 334 第23章 子模组协同模型/ 336 23.1 创建子模组/ 336 23.2 克隆带子模组的版本库/ 339 23.3 在子模组中修改和子模组的更新/ 340 23.4 隐性子模组/ 343 23.5 子模组的管理问题/ 345 第24章 子树合并/ 347 24.1 引入外部版本库/ 347 24.2 子目录方式合并外部版本库/ 349 24.3 利用子树合并跟踪上游改动/ 351 24.4 子树拆分/ 353 24.5 git-subtree 插件/ 353 第25章 Android 式多版本库协同/ 356 25.1 关于 repo/ 357 25.2 安装 repo/ 357 25.3 repo和清单库的初始化/ 359 25.4 清单库和清单文件/ 360 25.5 同步项目/ 361 25.6 建立 Android 代码库本地镜像/ 363 25.7 repo 的命令集/ 365 25.8 repo 命令的工作流/ 370 25.9 好东西不能 Android 独享/ 371 25.9.1 repo+Gerrit 模式/ 371 25.9.2 repo 无审核模式/ 371 25.9.3 改进的 repo 无审核模式/ 372 第26章 Git 和 SVN 协同模型/ 378 26.1 使用 git-svn 的一般流程/ 380 26.2 git-svn 的奥/ 386 26.2.1 Git 库配置文件的扩展及分支映射/ 387 26.2.2 Git工作分支和 Subversion 如何对应/ 388 26.2.3 其他辅助文件/ 390 26.3 多样的 git-svn 克隆模式/ 390 26.4 共享 git-svn 的克隆库/ 393 26.5 git-svn 的局限/ 394 第5篇 搭建Git服务器 第27章 使用 HTTP 协议/ 398 27.1 哑传输协议/ 398 27.2 智能 HTTP 协议/ 400 27.3 Gitweb 服务器/ 401 27.3.1 Gitweb的安装/ 402 27.3.2 Gitweb的配置/ 403 27.3.3 版本库的 Gitweb 相关设置/ 404 27.3.4 即时Gitweb服务/ 405 第28章 使用 Git 协议/ 406 28.1 Git 协议语法格式/ 406 28.2 Git 服务软件/ 406 28.3 以 inetd 方式配置运行/ 406 28.4 以 runit 方式配置运行/ 407 第29章 使用 SSH 协议/ 409 29.1 SSH 协议语法格式/ 409 29.2 服务架设方式比较/ 409 29.3 关于 SSH 公钥认证/ 411 29.4 关于 SSH 主机别名/ 411 第30章 Gitolite 服务架设/ 413 30.1 安装Gitolite/ 414 30.1.1 服务器端创建专用账号/ 414 30.1.2 Gitolite 的安装/升级/ 415 30.1.3 关于 SSH 主机别名/ 417 30.1.4 其他的安装方法/ 418 30.2 管理 Gitolite/ 419 30.2.1 管理员克隆 gitolite-admin 管理库/ 419 30.2.2 增加新用户/ 420 30.2.3 更改授权/ 422 30.3 Gitolite 授权详解/ 423 30.3.1 授权文件的基本语法/ 423 30.3.2 定义用户组和版本库组/ 424 30.3.3 版本库ACL/ 424 30.3.4 Gitolite 授权机制/ 426 30.4 版本库授权案例/ 427 30.4.1 对整个版本库进行授权/ 427 30.4.2 通配符版本库的授权/ 428 30.4.3 用户自己的版本库空间/ 429 30.4.4 对引用的授权:传统模式/ 430 30.4.5 对引用的授权:扩展模式/ 430 30.4.6 对引用的授权:禁用规则的使用/ 431 30.4.7 用户分支/ 431 30.4.8 对路径的写授权/ 432 30.5 创建新版本库/ 432 30.5.1 在配置文件中出现的版本库,即时生成/ 433 30.5.2 通配符版本库,管理员通过推送创建/ 434 30.5.3 直接在服务器端创建/ 435 30.6 对 Gitolite 的改进/ 435 30.7 Gitolite 功能拓展/ 436 30.7.1 版本库镜像/ 436 30.7.2 Gitweb 和 Git daemon 支持/ 438 30.7.3 其他功能拓展和参考/ 439 第31章 Gitosis 服务架设/ 441 31.1 安装 Gitosis/ 442 31.1.1 Gitosis 的安装/ 442 31.1.2 服务器端创建专用账号/ 442 31.1.3 Gitosis 服务初始化/ 443 31.2 管理 Gitosis/ 443 31.2.1 管理员克隆 gitolit-admin 管理库/ 443 31.2.2 增加新用户/ 444 31.2.3 更改授权/ 446 31.3 Gitosis 授权详解/ 447 31.3.1 Gitosis 默认设置/ 447 31.3.2 管理版本库 gitosis-admin/ 447 31.3.3 定义用户组和授权/ 448 31.3.4 Gitweb 整合/ 449 31.4 创建新版本库/ 449 31.5 轻量级管理的 Git 服务/ 450 第32章 Gerrit 代码审核服务器/ 452 32.1 Gerrit 的实现原理/ 452 32.2 架设 Gerrit 的服务器/ 456 32.3 Gerrit 的配置文件/ 461 32.4 Gerrit 的数据库访问/ 462 32.5 立即注册为 Gerrit 管理员/ 464 32.6 管理员访问 SSH 的管理接口/ 467 32.7 创建新项目/ 468 32.8 从已有的 Git 库创建项目/ 472 32.9 定义评审工作流/ 473 32.10 Gerrit 评审工作流实战/ 477 32.10.1 开发者在本地版本库中工作/ 477 32.10.2 开发者向审核服务器提交/ 478 32.10.3 审核评审任务/ 478 32.10.4 评审任务没有通过测试/ 480 32.10.5 重新提交新的补丁集/ 482 32.10.6 新修订集通过评审/ 483 32.10.7 从远程版本库更新/ 485 32.11 更多 Gerrit 参考/ 486 第33章 Git 版本库托管/ 487 33.1 Github/ 487 33.2 Gitorious/ 489 第6篇 迁移到Git 第34章 CVS版本库到Git的迁移/ 492 34.1 安装cvs2svn(含 cvs2git)/ 492 34.1.1 Linux下cvs2svn的安装/ 492 34.1.2 Mac OS X 下 cvs2svn 的安装/ 493 34.2 版本库转换的准备工作/ 494 34.2.1 版本库转换注意事项/ 494 34.2.2 文件名乱码问题/ 494 34.2.3 提交说明乱码问题/ 494 34.3 版本库转换/ 496 34.3.1 配置文件解说/ 496 34.3.2 运行cvs2git完成转换/ 500 34.4 迁移后的版本库检查/ 501 第35章 更多版本控制系统的迁移/ 502 35.1 SVN版本库到Git的迁移/ 502 35.2 Hg 版本库到Git的迁移/ 503 35.3 通用版本库迁移/ 505 35.4 Git 版本库整理/ 511 35.4.1 环境变量过滤器/ 513 35.4.2 树过滤器/ 513 35.4.3 暂存区过滤器/ 513 35.4.4 父节点过滤器/ 514 35.4.5 提交说明过滤器/ 514 35.4.6 提交过滤器/ 515 35.4.7 里程碑名字过滤器/ 516 35.4.8 子目录过滤器/ 516 第7篇 Git的其他应用 第36章 etckeeper/ 518 36.1 安装 etckeeper/ 518 36.2 配置 etckeeper/ 519 36.3 使用 etckeeper/ 519 第37章 Gistore/ 520 37.1 Gistore 的安装/ 520 37.1.1 软件依赖/ 520 37.1.2 从源码安装 Gistore/ 521 37.1.3 用 easy_install 安装/ 521 37.2 Gistore 的使用/ 522 37.2.1 创建并初始化备份库/ 522 37.2.2 Gistore 的配置文件/ 523 37.2.3 Gistore 的备份项管理/ 524 37.2.4 执行备份任务/ 525 37.2.5 查看备份日志/ 525 37.2.6 查看及恢复备份数据/ 527 37.2.7 备份回滚及设置/ 528 37.2.8 注册备份任务别名/ 529 37.2.9 自动备份:crontab/ 529 37.3 Gistore 双机备份/ 529 第38章 补丁中的二进制文件/ 531 38.1 Git 版本库中二进制文件变更的支持/ 531 38.2 对非 Git 版本库中二进制文件变更的支持/ 535 38.3 其他工具对 Git 扩展补丁文件的支持/ 536 第39章 云存储/ 538 39.1 现有云存储的问题/ 538 39.2 Git 式云存储畅想/ 539 第8篇 Git杂谈 第40章 跨平台操作 Git/ 542 40.1 字符集问题/ 542 40.2 文件名大小写问题/ 543 40.3 换行符问题/ 545 第41章 Git 的其他特性/ 549 41.1 属性/ 549 41.1.1 属性定义/ 549 41.1.2 属性文件及优先级/ 550 41.1.3 常用属性介绍/ 552 41.2 钩子和模板/ 557 41.2.1 Git 钩子/ 557 41.2.2 Git 模板/ 562 41.3 稀疏检出和浅克隆/ 563 41.3.1 稀疏检出/ 563 41.3.2 浅克隆/ 566 41.4 嫁接和替换/ 568 41.4.1 提交嫁接/ 568 41.4.2 提交替换/ 568 41.5 Git 评注/ 570 41.5.1 评注的奥/ 570 41.5.2 评注相关命令/ 573 41.5.3 评注相关配置/ 574 第9篇 附录 附录A Git 命令索引/ 576 A.1 常用的Git命令/ 576 A.2 对象库操作相关命令/ 578 A.3 引用操作相关命令/ 578 A.4 版本库管理相关命令/ 579 A.5 数据传输相关命令/ 579 A.6 邮件相关命令/ 580 A.7 协议相关命令/ 580 A.8 版本库转换和交互相关命令/ 581 A.9 合并相关的辅助命令/ 581 A.10 杂项/ 582 附录B Git 与 CVS 面对面/ 583 B.1 面对面访谈录/ 583 B.2 Git 和CVS 命令对照/ 585 附录C Git 与 SVN 面对面/ 587 C.1 面对面访谈录/ 587 C.2 Git 和SVN 命令对照/ 589 附录D Git 与 Hg 面对面/ 592 D.1 面对面访谈录/ 592 D.2 Git和Hg 命令对照/ 593

5,178

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 质量管理/软件测试
功能测试压力测试安全性测试 个人社区 湖南省·长沙市
社区管理员
  • 软件测试
  • 虫无涯
  • 小博测试成长之路
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎大家加入到软件测试的社区,在这里,希望大家勇于发表自己的看法,欢迎大家分享自己在软件测试工作过程中遇到的问题以及工作经验分享。

1.想转行的小伙伴,遇到问题没有及时回复的,可以私聊小博进行反馈

2.大家对社区有好的建议,都可以在社区发帖进行反馈

推荐大家学习的软件测试入门笔记:软件测试入门学习笔记

试试用AI创作助手写篇文章吧