从测试的角度来重新反思我们自己的程序以及我们的程序员之路——“通过追本溯源来进行前瞻性思考”

Python爬虫实战(基础篇)—23—爬取微信小程序<随机目的地旅行>生成随机地址(附GUI版) 爬取微信小程序<随机目的地旅行>生成随机地址 阅读详情

从测试的角度来重新反思我们自己的程序以及我们的程序员之路——“通过追本溯源来进行前瞻性思考” 


最近比较忙,而且情绪上有些浮动,但控制的非常好。这几天协会搞一个编程比赛,部分的题目是我出的,所以最后大家决定让我做测试人员,对协会的比赛进行评测。我虽然已不担任协会职务,却毅然接受了。


首先,我了解了测试相关的概念,阅读了《软件测试》、《软件测试的艺术》、《微软的软件测试之道》、《软件测试经验与教训》等,并结合自身的测试经历来做一些记录,希望抛砖引玉。


虽然协会测试用不上这些,既然让我做了,我就应当力求公正公平,准确有效。在做好这个工作的余下时间里,作了一些浅薄的思考,现在拿出来跟大家一起分享。


微软虽然有很多不足,制作的程序漏洞不少,但不可否认,在其快速开发的进程中,将测试放在比较重要的位置,也是其获得较多正面评价的原因之一:


微软的组织结构:

微软的“大公司小团队”战略,小团队布局:


以下是读书心得,摘抄:

软件测试或系统测试大约占用50%的项目时间和超过50%的总成本。

测试是为发现错误而执行程序的过程。(人类的行为总是倾向于具有高度的目标性,确立一个正确的目标有利于实现这一目标,这里我们确立我们的目的是发现错误)

软件测试的大多数问题都是心理学问题。

程序员应当避免测试自己的程序。

一个测试用例必须包括两个部分:1、对程序的输入数据的描述2、对程序在上述输入数据下的正确输出结果的精确描述。

黑盒测试主要将重点集中放在发现程序不按其规范正确运行的环境和条件。

白盒测试主要是对程序的逻辑结构进行检查,从中获取测试数据。

检查程序是否“未做其应该做的”仅仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”。

程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比。

至少编写足够的测试用例,使得每一种可能均被测试,每个入口点都至少被调用一次。

经验证明,考虑了边界条件的测试用例与其他没有考虑边界条件的测试用例相比,具有更高的测试回报率。所谓边界条件,是指输入和输出等价类中那些恰好处于边界、或超过边界或在边界以下的状态。

错误猜测,是一种通过举出测试用例,找出程序漏洞的方法。

模块(单元)测试:是对程序中的单个子程序、子程序或过程进行测试的过程。

系统测试:将系统或程序与其初始目标进行比较,包含两方面的含义1、系统测试并不局限于系统,如果产品是一个程序,那么系统测试就是一个视图说明程序作为一个整体是如何不满足其目标的额过程。2、根据定义,如果产品没有一组书面的、可度量的目标,系统测试也就无法进行。

容量测试:使程序经受大容量数据的检验,其目的是为了证明程序不能处理目标文档中规定的数据容量。

强度测试:使程序承受高负载或强度的检验,所谓高强度是指在很短的时间间隔内达到的数据或操作的数量峰值。

易用测试:发现人为因素或易用性问题。(用户智力、背景、输入输出是否简介有效、错误诊断是否直接、语法风格问题、信息是否冗余不利于安全、确认信息是否需要)

安全性测试:是否达到安全目标。

可恢复性测试:故意将程序错误的置入某个系统中,判断系统是否可以从中恢复。

测试结束准则:1、用完了安排的测试时间后,测试便结束2、当执行完所有的测试用例都没有发现错误,测试便结束。

调试:是执行一次成功的测试之后要进行的工作。

所有的测试都是基于模型。

不要将实验与测试混淆起来。

威胁建模:威胁模型就象功能计划或设计文档一样,是一种规格说明。而最大的不同在于威胁模型的意图是找出一个应用程序能被攻击的所有可能的方法,然后根据概率和可能的危害来排优先级。好的威胁建模需要分析和调研技能—这两种技能使得测试在这过程中很适用。

测试用例的设计:



在实际测试过程中的心得:

1、许多同学对于题目没有读的很严谨,在输出上没有严格按照规范,输出错误是严格判错的。

2、有一个非常重要的问题是,对于边界条件没有把握好,我设计的每一种情况的边界情况考察2次,较多同学没有做好这一项,可能是时间比较紧,另外就是没有养成良好的测试和思考习惯,有的溢出、有的呈现出错误的结果等等。

3、对于程序输入值,有同学没有考虑输入完全错误和输入越界的情况。

4、还有同学图省事,简单的使用某些看似等价的语句,一测试,立刻原形毕露。


测试完毕后的对自己程序设计的反思:

1、要严格考察输出是否满足程序功能需求。

2、对于边界条件一定要小心,要经过严密的思考,在编程中也要注意思考的逻辑与程序逻辑的等价性。

3、对于程序的输入,严防各种类型的输入。

4、每一个语句的有效性非常重要,它们的流程在某些情况下是正常的,在另一种情况下可能出现错误,不能简单的等效之(有不同的触发因素:环境变量、特殊的值)。

5、软件测试是非常重要的一个环节,测试别人的程序,能够提高自己的编程意识。软件测试是非常严谨的,不容出错的。

程序员有时候犯的最大错误,不是说写错了某个程序,而是当程序出错后,简单的调试成功,或者在外力下被迫调试成功,就再没有对出错的原因进行深入的分析,这样做没有从思想和方法上防止类似的情况发生。如果我们换一个思考的角度,通过不断调试自己或别人的程序,从反面来思考,是否对我们的编程具有一定的“前瞻性思考”呢?

我们有时候总是说,自己工资不够高,现在还是码农,是否是因为我们缺乏优秀的思维角度,不具有这样的一种“前瞻性思考”呢?是否也应该从此处来反省我们的程序员之路?



最后附上微软的聘人标准:

   问题的分析和解决能力:这个能力对测试人员非常重要,因为对问题进行解剖和找出问题的症结是提高产品质量的关键。 

    面向客户的创新:应聘者是否以客户为本,是否能够充分理解软件如何才能帮助客户解决问题,并对此充满兴趣和热情。 

    精湛的技术:我们注重的是应聘者是否通晓网络和操作系统,不仅能写代码,而且能够优化代码。 

    项目管理:对测试人员来说,这个能力是指如何有效支配个人的时间,以及如何策划和确保一个有许多互相牵制成分的计划得以按时完成。 

    对质量的执着追求:如果不具备这个素质,应聘者就无法胜任任何工程技术工作,更不必说测试工作了。 

    战略远见:新员工刚开始这方面比较弱,但是如果我们旨在聘用能够帮助我们找到突破 

     自信:在微软,测试人员找出的软件错误并不一定都能得到修正,在必要时,测试人员需要有自信而去据理力争。 

    冲击力和影响力:影响力来自于自信和经验,冲击力来自于敢于革新。多数应聘者在谈到如何给自己的公司带来变革,或者如何在学校带领团队出色地完成项目时,都会体现这个特征。 

    跨界合作:创新往往来之于各部门之间的合作,只顾埋头自己的项目,甘做井底之蛙的员工是不会成功的。 

人际意识:主要指自我意识,许多优秀的应聘候选人能够认识到自己的不足之处,并且知道如何不断地提高自己,也就是有一个不断提升自身素质的计划。 

很多人对职业发展有困惑,现在附上微软的职业发展轨道>


结合现在学长学姐这几年的职业发展,我想指出的是,其实自己的职业发展,依赖于你所选择的公司。你自己的能动性,并没有你想象的那么大,除非你想一直跳槽下去。

 

                      

深入解析CRC-16校验算法及其Verilog硬件实现 本文深入解析了CRC-16校验算法的原理及其在Verilog中的硬件实现方法。从基础的模2除法到串行和并行实现方案,详细介绍了LFSR结构、状态转移分析以及工业应用中的优化技巧。通过实际案例和性能对比,帮助开发者理解如何选择适合的CRC实现方案,确保数据传输的可靠性。 阅读详情

相关推荐

告别Keil,在Windows上用VSCode + arm-none-eabi-gcc + Makefile搭建国产MCU开发环境(附JLink配置避坑)

本文详细介绍了如何在Windows上使用VSCode、arm-none-eabi-gcc和Makefile搭建国产MCU开发环境,替代传统的Keil和IAR。内容涵盖工具链配置、工程结构设计、Makefile编写、VSCode集成调试以及高效开发工作流,特别针对国产MCU如复旦微FM33系列提供了优化方案和避坑指南。

weixin_28729205的博客 435

从测试的角度来重新反思我们自己的程序以及我们的程序员之路——“通过追本溯源来进行前瞻性思考”...

从测试的角度来重新反思我们自己的程序以及我们的程序员之路——“通过追本溯源来进行前瞻性思考” 最近比较忙,而且情绪上有些浮动,但控制的非常好。这几天协会搞一个编程比赛,部分的题目是我出的,所以最后大家决定让我做测试人员,对协会的比赛进行评测。我虽然已不担任协会职务,却毅然接受了。 首先,我了解了测试相关的概念,阅读了《软件测试》、《软件测试的艺术》、《微软的软件测试之道》、《软件测...

weixin_34357436的博客 195

用Frida-RPC搞定大麦App最新版签名:一个脚本解决x-sign和x-mini-wua

本文深入解析大麦App最新版签名机制(x-sign和x-mini-wua),详细介绍如何利用Frida-RPC技术开发稳定脚本获取签名参数。通过实战案例展示Java上下文切换、参数序列化等关键技术解决方案,为安全研究和技术验证提供可靠方案。

weixin_42525738的博客 644

从哪些角度进行手机软件测试

测试用户界面测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等,UI测试用于核实用户与软件之间的交互。另外,UI测试还可确保UI中的对象按照预期的方式运行,并符合公司或行业的标准。对于当前背景下的手机软件测试来说,要做好手机软件测试,主要从以下几个角度进行测试:UI测试,功能模块测试,交叉事件测试,容量性测试,用户手册测试等。容量性测试容量性测试主要测试软件测试的性能,包括负载测试,强度测试,基准测试以及基准测试。

jiba2756的专栏 509

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月13日-安全配置-准备工作

请遵循本规程将SABRE 3D/3DxT/3D Scimitar系统设置为安全配置,以便能够在电镀单元、APT模块、XMM(或SRD)模块、工厂接口(FI)外壳或中央通道内部及周边区域执行作业p104-p117。在生产过程中暂停调度程序存在一定风险:若待维护模块未离线且在其他模块完成处理前重启调度程序,可能对生产晶圆造成影响。维护人员需特别注意电镀模块内的晶圆状态,并尽可能快速地恢复调度程序。确认待维护模块内无晶圆滞留暂停调度程序并将相应模块设置为离线状态打开模块检修门并关闭安全盖板(槽位)

weixin_46735260的博客 1368

告别懵圈!用CANoe手把手解析ISO15765多帧传输(附实战报文分析)

本文详细解析了ISO15765多帧传输协议在汽车电子诊断中的应用,通过CANoe实战演示了从首帧发送到流控协商再到连续帧传输的完整流程。文章包含嵌入式系统诊断协议的深度分析,特别适合UDS和CAN总线开发人员学习多帧传输机制及常见问题解决方案。

weixin_30813225的博客 282

从开发人员角度看待性能基准测试

对一个开发人员来说,除了保质保量按时完成功能需求外,非功能也不可忽视。 决定一个软件的成败往往是非功能性需求比如性能,若是用户体验不好那么必定是个失败的作品。 那么一个开发人员如何去做关于自己模块又或者整体的基准性能测试呢?以下将从测试的切入点和具体测试的指标来说明。 切入点: 通常,基准性能测试有两个切入点,一方面可以通过从整体系统的角度做一个全栈式(即打通上下各层)的性能测试用

EricGogh的专栏 1249

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。在setup模式下,读入库、golden设计、有修改的设计,并指定一些option。对于简单的设计,通过GUI来做LEC也是可以的。

weixin_44606964的博客 918

软件测试方法汇总 - 从不同角度分析软件测试方法有哪些

1、从是否关心内部结构来看 (1)白盒测试:又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。 (2)黑盒测试:又称为数据驱动测试,把测试对象当做看不见的黑盒,在完全不考虑程序内部结构和处理过程的情况下,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发...

邓小白的博客 5915

假新闻检测论文分享(30)MMDFND: Multi-modal Multi-Domain Fake News Detection

现有的假新闻检测方法通常集中在单一领域的新闻上,如健康或政治。然而,社交媒体上的新闻往往来自多个领域,这给单一领域的假新闻检测方法带来了两个主要挑战:数据稀缺性:处理较小、单一领域的新闻数据集时,由于训练数据的稀缺,模型的有效性显著下降。跨领域检测的准确性下降:单一领域的假新闻检测方法在跨领域新闻数据集上的准确性大幅降低。缓解领域间模态语义偏差:通过DPLE网络提取跨领域和领域特定的知识,缓解了不同领域间文本和图像的语义差异。

weixin_41964296的博客 671

基于Pascal VOC数据集的YOLOv8目标检测系统实现:人、鸟、猫、牛、电视、车等20类目标识别与UI界面部署全流程详解

VOC 2007、VOC 2012 两个主要版本;每个图像提供 bounding box(目标框)+ 目标类别;共计 20 类,所有图像手工标注,质量高。完整复现 Pascal VOC 20类检测任务成功训练 YOLOv8 模型实现可视化 UI + 实时检测系统支持多平台部署和演示。

YOLO 771

好的技术团队和差的技术团队的区别在于技术架构前瞻性和适应变化的能力

    资料来源:http://www.huxiu.com/article/106199/1.html?f=xianguo    这个尚德教育机构的创始人,虽然不是做技术的,不过说话还真到点:   我们发现,传统网校的业务人员不能用,他们的技术人员也不能用。很多网校的技术架构可以用垃圾来形容。在这一年里面,我们用了两个团队出了两套在线系统都让人极其不满意。我在招聘到第三个团队时才找到了...

weixin_34025151的博客 315

[UVM]UVM TLM2.0简介及应用实例分析

本文介绍了TLM2.0在UVM中的实现与应用。TLM2.0作为SystemC模型间的核心传输机制,相比TLM1.0提供了更丰富的特性,包括双向阻塞/非阻塞接口、时间标记和统一数据包。文章详细解析了TLM2.0在UVM中的接口实现方式,包括socket类型定义、数据传输机制以及时间标记处理。通过一个具体实例,展示了如何在UVM组件中使用TLM2.0的initiator和target socket进行数据传输,并说明了标准数据包格式和精确时间标记的优势。最后指出TLM2.0在UVM中的实现主要是为了与Syste

元直的博客 5398

如何突破测试/开发程序员思维?一种不一样的感觉......

如何突破测试/开发程序员思维?小张过去我曾一直认为程序员是依靠他们的技术在编程,也是因为技术使得程序员的水平有高低之分,但随着我写代码的时间越来越长,也接触到更多的程序员,我渐渐发现程序员们其实是依靠他们所特有的程序员思维在进行编程的,而他们中的佼佼者正是那些有着更高思维成熟度的优秀程序员们。什么是程序员思维那么,什么是程序员思维呢?我曾读到过一些文章,试图给它下一个明确的定义,比如,具备抽象和逻辑思维的能力,拥有面向对象编程和设计的能力等等。为什么要突破程序员思维如何突破程序员思维?...

大佬云集技术答疑交流群:743262921(进群暗号:222) 330

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

程序员学习能力提升三要素

文/尹华山 IT技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识、随时补充和丰富自己,已成为程序员职业发展的核心竞争力。本文中,作者结合多年的学习经验总结出了提高程序员学习能力的三个要点。 众所周知,现在是一个知识爆炸的时代,知识更新非常快。据测算,一个大学毕业生所学到的知识,在毕业之后2年内,有效的不过剩下5%。对于软件行业而言,这种形势更为明显,我们赖以立足的,

蚂蚁的专栏 1789

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

测试驱动开发与前瞻性思维

由于以前做的项目都是采用后发制人式的思维,碰到需要什么了再写什么代码. 比如说一个CRUD,一般都是先写出一个简单的框框,碰到需要分页了就加入分页组件,碰到需要校验了就加入校验的支持. 这样的写法虽然说看起来比较敏捷,但是如果几个项目下来还是采用这样的方法,就感觉写程序的效率上有一个瓶颈,速度上去不,速度快了bug又很多. 于是这次struts2实践为了避免或者说减少以上问题. 1.采用p...

myoldman 231

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

如果你想创业,又担心腾讯照抄你的好点子的话,可以看看下面的文章。

本文是转自三江小渡。 写在前面的话:如果你想创业,又担心腾讯照抄你的好点子的话,可以看看下面的文章。(其实我也 有类似的担心) 当然我们要审视自己手里掌握的资源和人脉而定自己的策略,下面的文章讲到了如何面对 这种被大竞争对手挤压下如何生存如何发展的一些建议。 如果你搜来看到这篇的话,建议你也看看这篇 朱继玉,独立精神,自由意志——在知乎上只鼓励不

草莓在努力!!! 2万+

创新工场有哪些失败项目?不要只看着成功

创新工场有哪些失败项目?不要只看着成功 李开复 ,创新工场CEO回答: 失败或碰到挑战的项目也不少。这里不点名,不谈细节,但是谈谈碰到什么挑战(有些已经失败,有些还在努力): 1、有一个项目由几个很牛的技术人员负责,策划一个很有技术深度的平台,但是初步搭建后,原来认为的潜在客户其实不愿意如此依靠一个第三方的技术平台。 2、有些项目出现创始人不和的问题,都是认识不久的共同创始人,创业前充

草莓在努力!!! 2465

2012.3.27《JAVA程序设计教程》

2012.3.27《JAVA程序设计教程》 这本书看了第三遍,将每一个细节重新看了一遍,着实费力。 每看一遍都有一个新的感悟,还是多看几遍,一定要把基础打得很牢固~! 没有什么可以摘抄的,全部是技术上的知识点。 这本书1025页。真的好厚好厚,搞计算机的伤不起啊~~ 希望毕业时候能看到十遍以上吧。还需要看其他的书。

草莓在努力!!! 1614

软件工程学习笔记一

软件工程学习笔记一 我很小的时候就有梦想,想要当一个极为优秀的程序设计师,因为觉得程序设计师非常的酷、非常帅,能操纵虚拟的世界,运行如此完美的逻辑,并造福他人,是一种高尚有趣的职业。现在这种向往,并没有因为外界的许多因素而改变。 最近开始学习软件工程,其实较早的时候就自学过,有许多知识都忘了,现在再正式来学,感觉还是做一些笔记比较好,软件工程学是对软件设计反思的结晶,要设计好的软件,我

草莓在努力!!! 1164

博客转移至http://www.cnblogs.com/zdcaolei/,该博客不再更新

博客转移至  http://www.cnblogs.com/zdcaolei/ 优快云该博客不再更新

草莓在努力!!! 1116

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 302

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 167

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 190

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 237

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 351
上一篇: 让游戏不再愁“钱”花--->解决“钱不够花”问题---自编游戏修改器
下一篇: 软件工程学习笔记一
clbxp
博客等级 码龄21年 35粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值