软件测试基本功、专业技能及团队分工
基本功篇
1. 什么是软件测试?
测试其实是发现并解决问题的过程,而其目标是让软件产品以尽可能高的质量交付给客户,使软件产品中存在的问题尽可能少,这样,软件的用户可以得到最完美的体验。(测试是软件开发过程中必不可少的重要流程。在追求质量和效率的软件工程里,如何有效地对复杂的软件半成品进行测试,其实有许多问题值得工程师们去思考和探索。)
2. 进行完全的测试是不可行的,那么如何进行测试呢?
可行的方法是运用风险分析和不同系统功能的测试优先级,来确定测试的关注点,从而替代穷尽测试。(软件开发本身是追求产出和投入比的工程性过程。因此,考虑测试的内容和方式时,都应当以高产出投入比为最终目标,最大化地利用现有资源排除潜在的问题。)
3. 什么是测试驱动开发(Test Driven Development, TDD)?
测试驱动开发的核心是把单元测试用例先做好,功能开发以通过相应的单元测试用例为目标。单元测试是粒度最小的软件测试。
4. 如何搭建测试环境?
在操作系统基础上,安装测试需要的应用程序,并部署测试的功能代码,准备测试数据,建立一个可供测试的环境。(一个完整的企业级网络应用程序,通常需要集成多个服务器,包括网络服务器、应用服务器、数据库服务器等)。
小技巧:搭建环境时,正确的流程和步骤一定要及时记录。有了流程和步骤的指引,可以避免大量不必要的重复劳动。
5. 构建测试是个烦琐、重复性的过程,有什么有效的方式改善呢?
为了有效搭建环境,避免人为原因的错误,采取的策略是最大程度上的使构建过程自动化。因为环境的原型和步骤基本上是类同的,于是可以使用参数化的脚本、响应文件等元素将其自动化,由于平台本身的复杂性,自动化元素的构建由构建组专门维护,并执行BVT测试验证环境安装的正确性。
6. 什么是中间件?
中间件是提供系统软件和应用软件之间连接的软件,以便于各种部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑。中间件不提供具体的功能,它却是系统中各个部件有机连接的桥梁。中间件技术建立在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、连接器、商业流程、网络并发、HTTP服务器、Web服务器等功能集于一身或者分别在不同品牌的不同产品中分别完成。
7. 使用敏捷项目管理的目的?
为了提高开发效率,激发团队的积极性并尽可能降低项目失败的风险。
8. 敏捷开发的核心点?
迭代开发(Iterative Development), 增量开发(Incremental Development).
9. 什么是迭代开发及迭代开发的好处是什么?
迭代开发把一个完整的瀑布模型开发流程分成多个迭代,每个迭代可以看作独立的开发过程,其中包含了项目的主要步骤,如设计、开发、测试等。把完整过程分成多个持续时间较短的迭代,其好处是生产的周期变短了,每个完整的周期都会产出相应的产品,有利于在完整项目开发过程中跟踪和控制开发进度及产品质量。
10. 什么是增量开发?
增量开发用的是一种“分段完成”策略,系统中不同的部分被安排在多个阶段完成,各个部分完成后再集成到系统中。增量地实现系统的思想是迭代开发的基础。项目成员通过不断学习和总结,使开发效率不断提高,同时避免在后期的迭代中重犯某些错误。
注: 敏捷开发模式中,迭代开发和增量开发的策略通常会被同时使用,并统称为迭代开发。
11. 描述敏捷开发过程?
项目周期称为Sprint,每个Sprint通常持续2~6周时间。
在Sprint开始之前,项目组进行Sprint计划会议,安排当前开发周期任务,在Sprint结束后,需要进行简明扼要的Sprint回顾会议,总结回顾以便在下一周期提高开发效率。
在Sprint之中,举行每日站立会议,确定各个小组成员更新已经完成的任务,即将开始的任务及使进度受阻的问题,并通过讨论得出解决方案,由Scrum Master主持。
12. 不同的项目使用不同的开发方式,如敏捷开发,测试驱动开发,极限编程,开发统一过程,结对开发等,使用它们的基础是什么?
所有这些方法的基础是计划和流程。
计划定义的是做什么,什么时候做,即What, When, 计划内容包括要执行的任务、任务依赖条件、负责人选、执行任务的时间等。测试计划详细描述了测试环境、场景、执行要点、依赖等内容。好的计划是项目成功的基础。
流程是项目成功的保障,它定义了怎么做,即How. 流程控制每个步骤的正确完成,有了流程控制,软件的质量才得以保证。
专业技能篇
1.开发技能:
a. 一名专业的测试工程师,应该把开发技能作为其技能体系的基础。掌握开发技能,有利于理解功能实现的方法和逻辑。测试工程师掌握了开发方法,基于对开发的了解,更容易设计出有效的测试场景和用例。
b. 测试工程师应该掌握数据结构和算法设计、设计模式和体系结构,了解不同的开发语言和平台的差异。
c. 测试人员了解代码的发布和部署,能够评估新代码的影响范围,并根据评估适当地调整测试的内容。当然,掌握代码发布和部署以后,至少不会糊里糊涂地就开始测试,而能够在确认代码发布和版本都没有问题之后再行动。
2. 测试专业技能:真正的测试中,有效可控的测试方法通常有两类:白盒测试和黑盒测试。
a. 白盒测试:直接访问内部数据结果、算法及其代码实现测试
i. 编程应用接口测试,通过调用应用程序的公有或私有接口,验证返回内容的正确性的方式。通常一个测试用例可以用于验证一个被测的接口,如果需要验证一个代码分支,还可以把分支需要使用的多个接口调用放在一个用例中。
ii. 代码覆盖率测试,检验代码是否满足指定覆盖率的测试。最大限度地覆盖代码,评估代码的整体质量。
iii. 缺陷注入关注代码在错误和临界条件的表现,确保代码的健壮性。
b. 黑盒测试:通过触发业务相关功能点,检验集成条件下系统的正确性。
3. 自动化测试:要进行自动化测试,首先,测试团队必须有一套完备的测试工具集,其次,测试人员需要掌握测试工具的使用方法,包括如何编写自动化测试代码,如何执行并收集结果等;最后,对测试资源的维护也有更高的要求。
4. 手工操作:灵活,只需要有测试用例作为指导,而不需要花费时间准备自动化测试材料。
5. 回归测试:自动化测试在重复执行方面的优势正好满足这种测试的要求。
团队分工篇
1. Scrum团队的核心角色主要包括产品负责人(Product Owner), Scrum Master及团队成员(Team),在Scrum团队的外围还包括客户(Stakeholder), 经理(Manager)等角色。
2. 团队成员主要负责产品的具体开发。团队成员组成执行团队,这是个自组织,自定向和跨功能的执行团队。执行团队通过直接的行动推进项目的进度,达到计划的目标。
a. 架构师:对软件开发过程的各个领域都具备一定专业技能的人员,主要任务是把软件开发的需求转化为可以实现的抽象设计和具体设计,并完成相应的设计文档。同时,架构师还需要把业务化的需求转化为技术化的功能性需求及非功能性需求。架构师需要参与软件开发的各个阶段,也作为审核人员对详细设计和开发计划进行审查。技能特点:具有更高视角,对技术的发展方向能够有全局的把握,对业务也有深刻的认识。
b. 开发人员:根据抽象设计和高层次的具体设计进行更细化的具体设计,按照设计完成编码实现及单元测试任务,完成问题分析和解决缺陷的任务。开发人员具有把宏观任务抽象化和把抽象概念具体化的能力,以微观的视角完成功能细节的开发。技能:卓越的理解能力和编码能力。
c. 测试人员:根据软件设计文档编写测试计划,按照测试计划对软件进行测试。工作重点是发现问题和解决问题,技能:洞察能力、分析能力、良好的抽象思维能力和逻辑分析能力。
d. 文档设计人员:根据需求文档和设计文档,设计编写交付给用户的说明文档和使用手册。技能:表达能力、叙述能力了、善于把抽象的问题具体化,一定的艺术才能。
3. 外围角色:
a. 客户:软件产品的直接利益相关者,从业务的角度提出对软件产品的需求。是开发软件的根本动力。特点:对业务有深入的了解,能清晰理解业务流程。
b. 经理:控制开发进度、解决团队资源问题、对团队的运行进行技术性的指导等。根据任务的不同,可以由三个人分别担当不同的经理角色,项目经理(Project Manager), 人事经理(People Manager), 指导经理(Coaching Manager)。经理部直接参与项目,只提供关键的支持,为软件开发营造良好的环境,需要有更高的视觉和领导力完成相应的任务。
4. 测试团队成员:
a. 测试负责人(Test Lead):测试的主要统筹者,需要担当测试项目经理的角色,任务包括定义测试计划、统筹人员调配,监督测试项目进度等。技能:既需要掌握测试的专业技能,又要具备良好的组织能力和协调能力。
b. 测试架构师:定义测试策略,从宏观上定义测试的方向和方法。对测试目标的技术特性和业务需求有准确把握,能为测试团队提供方法论方面的全面建议。测试计划完成后,测试架构师需要审核计划是否全面覆盖应包含的验证点,根据经验给出相关的执行建议。技能:较高的技能水平,包括深入和全面的测试经验,对软件开发和测试的模型有全面的认识,对商业模式及客户的业务需求也有比较深刻的理解。
c. 测试工程师:重点关注测试的目标业务部分,根据特定业务场景制定该部分的测试计划。技能:设计和执行测试用力的专业技能,良好的业务理解能力和问题分析能力。
d. 测试经理(Test Manager):从资源调配角度给不同的测试项目分配资源。