软件测试方向探索


前言

在20世纪50年代,英国计算机科学家图灵就已经提出了程序测试的定义,测试是验证程序正确性的一种实验形式。可人们一直到60-70年代软件危机出现后才意识到测试的意义。这使我想起了改编自安德鲁·霍奇斯编著的传记《艾伦·图灵传》的电影–《模仿游戏》。毫无疑问,图灵是一个伟大的科学家!

​ 有时候,正是那些人们认为的无用之人成就了无人所成之事! –《艾伦·图灵传》

说到软件测试就不得不提到BUG,世界上第一个软件bug由Grace Murray Hopper定义,她是历史上最早一批程序员,而且还是个女程序员,服役于美国海军,官至准将。

自我接触计算机专业以来,到现在为止已经将近一年多了还没有找到属于自己的方向,今天就来了解一下软件测试工程师,看看是否是我感兴趣的发展方向。

什么是软件测试?

软件测试是什么?就是一场本该在客户面前发生的灾难,提前被你的专业技术拦截拯救,避免了被客户卸载的命运,为企业创造商业价值。

测试让一场本该在用户面前发生的软件bug灾难,提前在自己眼前发生

仿佛有了预知未来的能力,如同一个救世主

拯救了一个软件bug,也拯救了这个软件,避免了被卸载的命运。

测试拯救了程序员兄弟被喷的命运

测试改变了用户卸载bug产品的命运

测试挽救了老板的金钱道路

做好幕后英雄,这是就是测试的魅力!

软件中的Bug非常令人讨厌。但同时有缺陷的软件还有可能造成重大甚至致命的事故。下面是一些非常有名的软件事故:

1、1962年,水手号火箭的致命BUG。
经济损失:1850万美元
1962年,携带空间探测器的水手1号火箭前往金星,在起飞后不久就偏离了预定航线。任务控制在起飞293秒后摧毁了火箭。事故的起因就在于一名程序员把一条手写的公式抄写为错误的计算机代码。从而将火箭引导偏离了航向。

2、1979年,新西兰航空公司的一架客机因计算机控制的自动飞行系统发生错乱,撞在了阿尔卑斯山,导致257名乘客遇难。

3、几乎引发的第三次世界大战. 1983年, 苏联导弹预警系统错误地报告遭到美国发射的5枚导弹攻击. 但幸运的是,当时的负责人认为如果美国真的要攻击的话, 发射的决不只是5枚导弹. 最终没有酿成大灾难。

4、2012年,苹果ios 6系统首次使用地图服务,由于诸多定位出现错误,引发大批量用户投诉,48小时内有1000万个用户投诉Google地图。

5、拼多多近期出现一个重大bug,程序员误改了代码,原本100元的中国移动充值卡,一分钱就可以购买,很短的时间内就损失了大量金额财产,这已经触犯了刑事责任。

软件测试的修炼之路

基础软件测试工程师(6-10k)

  1. 负责生命周期各阶段对应测试;
  2. 独立设计和执行测试方案和测试用例;
  3. 进行设备搭建和维护测试环境;
  4. 协助开发人员快速重现和解决产品BUG;
  5. 负责测试文档的撰写;

自动化测试工程师(10-15k)
1、对持续集成、持续交付、自动化测试等技术进行研究、测试实践、手册撰写;
2、对核心技术产品进行自动化测试;
3、负责与直属领导及其他技术研究员及时交流持续集成、持续交付、自动化测试研究、实践过程中的问题及成果;
4、负责根据需求说明、设计文档来分析测试内容、确定测试方法、设计测试用例、编写测试脚本、执行测试,并编写测试报告;
5、负责搭建、维护技术研究、测试所需的环境;

测试开发工程师(15-30k)
具备3年以上无线端开发/测试 或者 web产品开发/测试
精通自动化测试常用工具(如monkeyrunner,appium,selenium等)
掌握PHP/JAVA/C/C++或几种脚本语言如python/shell 等,能熟练编写代码
精通软件测试理论和方法,熟悉互联网行业测试环境及相关技术
熟悉Linux/Unix操作系统
善于学习和运用新知识,具有良好的分析和解决问题能力
在web、android、ios,接口等自动化领领域有较深的造诣和见解
能够独立使用php/java/python独立进行web开发
有相关自动化工具/平台(web/app/api接口/测试相关平台工具)开发经验或者二次开发经验者优先。

字节跳动测试工程师岗位要求(20-25k)

岗位要求(来源:2021.11.22牛客网)

  1. 2022届获得本科及以上学历,计算机相关专业;
  2. 热爱计算机科学和互联网技术,对软件质量保障工作有浓厚兴趣;
  3. 扎实的数据结构和算法基础,熟悉至少一门编程语言,包括但不仅限于:Java、C、C++、Python、Go等;
  4. 优秀的产品意识,对市场上典型App有自己的想法和改进方案;
  5. 快速适应和学习能力,善于发现和定位问题;
  6. 了解常用客户端、服务端开发或测试工具, 如自动化框架、压测工具、大数据处理工具者优先。

为什么开发人员不做测试?

开发人员自己做测试的问题所在:
人性角度、思维惯性、测试环境复杂度等方面。

开发人员是创造性思维,面对自己的代码产品无论怎么看都是很完美,恩,真香!

测试人员是破坏性思维,职责就是各种奇葩角度去发现潜在的问题,并且专职的测试人员通常在以往测试经验中积累大量典型易出错的模式,能够更客观全面的进行测试。

专职测试人员面对例如Web的GUI测试,基本不是简单的本地浏览器测试,而如大型企业可能会选择Selenium Grid搭建GUI集群进行千百台机器大规模测试,再比如使用Appium+Selenium Grid搭建大规模移动设备测试集群,这些都必须专职人员去完成,开发精力应该是在构建新业务功能,而不是维护测试设施。

互联网行业的职业

1.产品经理(Product Manager)

2.UI设计

3.前端设计(css/html/js)

4.后端(python/golang/java)

5.DBA(mysql/oracle)

6.运维(linux)

8.测试(software testing)

9.算法工程师

10.大数据工程师(Hadoop)

11.Android、IOS

12.架构师

13.运营

一个项目组一般由项目经理领导且负责定制项目计划,工作分配,资源配置等。

项目组人员一般有:

  • 分析
  • 设计
  • 研发
  • 测试
  • 运维

软件开发模型

由于项目、需求的模式不同,软件在生命周期过程中选择的软件开发模型也有所不同。

早期开发中,软件是边做边改,项目,需求没法管控,软件愈发复杂,开发越难。

开发模型开始演进,瀑布、原型、螺旋、敏捷等模式出现。

例:瀑布流开发模型

瀑布模型如同工地里的建造盖房流程,使用里程碑的方式,严格定义了各开发阶段的输入和输出。如果达不到要求

的输出,下一阶段的工作就不展开。(银行体系用的最多,一个需求做一年,变化很少。以及印度开发者是瀑布模型的重度使用者)

软件生命周期

软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期。

整个生命周期包括问题定义与规划、需求分析、系统设计、软件编程、软件测试、软件运维等阶段。

软件测试

测试是检验软件是否符合用户需求,是否达到软件质量标准,由专门测试部门执行。

常见测试活动分为:

  • 单元测试,对每一个代码函数测试
  • 集成测试,对代码组成的模块进行测试
  • 系统测试,针对每一个功能需求,完整的设计测试环境,指派测试人员执行

软件运维

此阶段软件已经交付上线提供用户使用,进入维护阶段,保证软件系统正常运转,如网站的7*24小时运行,因为软件系统可能出现如下问题:

  • 由于用户增长造成的性能压力
  • 服务器出现问题造成系统不可用
  • 软件系统出现bug
  • 系统升级出现未知bug

用户在使用过程中出现问题,反馈给技术支持人员,然后再递交给测试组,由研发组修复。

软件测试常用名词解释

单元测试

也叫做模块测试,进行正确性检查的工作。

单元测试要从程序内部结构设计测试用例,每个模块可以独立进行测试。

单元是什么?

比如Python中的类

图形化软件的一个窗口,一个功能菜单

集成测试

也叫组装测试,也就是将所有单元测试,进行有序的组合测试

系统测试

将整个软件系统看做一个整体进行测试,对功能,性能,硬件,软件所有环节进行测试。

单元测试目的测试功能是否满足要求。

系统测试目的测试系统是否满足性能的要求,以及不同的机器系统平台中运行,如一台机器我登陆多个qq,是否可

以运行,在windows,linux平台运行qq是否正常等方面。

验收测试

α测试

Alpha测试模拟实际操作环境下验收测试,如删档内侧,软件只是初步完成的产品,bug可能较多,不会进行上线

提供用户访问。

β测试

Beta测试系统已经通过内部测试,大部分错误已经修复,即将正式发布,在多个真实环境下发布,如不删档公

测。

对比α版本已经有了较大改进,但仍可能存在一些bug,需要大规模测试,例如DNF公司更新一个地图,提供公测

免费下载,由专业游戏玩家进行游戏结果反馈,开发者啊、再进行修复。

γ版本

y版本指的是正式版本,与上线版本几乎无区别。

  • c/s:Client客户端、Server服务端,指的是互联网中一台服务器安装服务端软件,每个用户都需要安装客户端软件,例如QQ、微信、游戏。
  • b/s:Browser浏览器,Server服务器,不需要安装客户端,只需要有浏览器即可,例如淘宝网、京东网,便于维护与升级。
  • bug:指的是软件中不符合用户需求的问题,软件存在的缺陷。
  • Testing Environment:软件运行的平台、包括硬件、软件、网络配置。
  • Test Case:测试执行之前的详细测试方案,包括测试环境、测试步骤、测试数据、预期结果。
    • 测试用例=数据输入+测试结果输出+测试环境配置
  • Smoke Testing:在软件大规模测试之前,验证基本功能,决定是否有可测性,例如路飞学城的基本登录。

测试人员的原则

  • 细心(不要放过任何一个细节)
  • 信心(对自己的测试结果有信心,防止开发人员说:我的程序不可能出错,你重新再去测!)
  • 耐心
  • 团队协作意识
  • 软件缺陷预防意识

所有测试动作必须追溯到用户需求

80%的产品缺陷都是在产品开发过程中的需求定义出现偏差引发的,如果需求得到准确的验证,可以消除80%的返工问题,节省投入成本40%。

杀虫剂怪事

软件测试越多,对测试的免疫力也越强,例如开发和测试长时间相处,开发就知道测试人员的套路,也会尽量去避免。

为了克服杀虫剂怪事,测试人员必须不断编写更新的测试方案,对程序的不同部分进行测试,以找出更多软件测试。

软件工程标准

国内通用的软件工程标准主要有ISO9000以及CMM

CMM是专为软件开发组织设计的,侧重于软件开发和改进,在产品的设计和开发的细节做了较多要求。

CMM(Capability Maturity Model)即软件能力成熟度模型,是向软件组织提供如何增加对其开发和维护软件过程的控制能力,也就是评估软件能力与成熟度的标准。

ISO9000系列标准的基本思想,主要分为两条:

  • 控制的思想,对产品形成的全过程-从采购原材料、加工制造到产品销售、售后服务进行控制。
  • 预防的思想,对产品形成的全过程进行控制以及建立并有效运行自我完善机制达到预防不合格,从根本上减少或消除不合格产品。

终末:从入门到入土

测试工程师在我浅显的了解下,看起来日常公作很轻松,工作也不错,而且越是大型的工程所需的测试越发重要,但是我觉得,往后看其实往高处走的测试最终还是要学习开发,测试帮研发检查问题,避免上线以后可能的错误,那测试本身其实还是要去了解开发。换句话来说,最终,这两者其实本就是密不可分的!但从重要性来说,开发不一定需要测试,但测试一定需要有开发!虽市场需求我不可预测,而我想要的是在某一领域能够有一技之长,并在这个领域不断前行!


文章作者: Binbin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Binbin !
  目录