- 博客(83)
- 收藏
- 关注
原创 ET vs Ad hoc
探索性测试(ET)在软件测试圈里其实并不是一个新概念啦,但让人略感意外的是,每当谈到ET时,很多测试人员的第一反应仍是——ET不就是Ad hoc测试么?这里必须澄清的是ET并不是free style的随机测试。ET跟Ad hoc的区别还是蛮大的,笔者尝试总结如下。ET是有很多方法可供选择的,并不是漫无目的的随意开展。有人用猜数字来比喻,个人认为就很形象。例如A心中想着一个数字让B猜
2017-02-27 16:31:03 4527
原创 Angular 2 原生国际化支持(一)
在Angular 1.x 的版本里面,没有原生的国际化支持。我们在前面的文章里面详细的分析了如何利用第三方库或者利用过滤器和指令实现国际化,而在Angular 2里面已经提供了原生的国际化支持。接下来我们一起看看如何实现Angular 2的国际化。开发环境node 6.9.2npm 3.10.9angular 2.4.8compiler-cli 2.4.8webpack 2.2.1...
2017-02-26 01:37:22 20810 1
原创 再说JSP中pageEncoding& charset
在《Java Web项目中的国际化》一文中,笔者在第二点中提到了在JSP的charset和pageEncoding。同时在进行Java web国际化开发时,务必指明pageEncoding和charset属性。 然而,这二者的区别又是什么呢?指明其中的一个属性难道还不够么?呃……不得不说的是——真不够!这是因为JSP需要进行两次编码,三个阶段。第一阶段会使用pageEn
2017-02-18 16:23:31 6066
原创 当LC_ALL等于C以后
在非英文Linux系统上进行软件安装或配置时候,相信大家或多或少的都会遇到locale name not valid或warning:setlocale: LC_CTYPE: cannot change locale的错误信息吧。我也常遇到类似的问题,最近的一个例子就是在非英文Linux环境安装AUT的agent后,无法正常启动。Error log不断提示localhost:locale::fac
2017-02-07 17:53:42 11543
原创 键盘输入 vs 复制粘贴
实际测试工作中,我相信大部分的国际化团队都在面临多种语言键盘的支持问题。同时,一定也听到过这样的原则——务必用键盘实际进行输入,而不是利用已存在的测试数据进行复制粘贴。面对这样啊要求,是否感觉相当的不可思议?为什么非得自找麻烦?真的有这个必要吗?在这里我必须调整面部表情,然后义正言辞的说——有!至于为什么,让本文来与你娓娓道来。 首先我们来做个小实验,创建一个默认的WinForm,只添加一
2017-01-18 15:53:14 9679
原创 文本溢出与国际化
无论是table控件中可调节长度的column,还是tooltip中说明文字,想必大家对text ellipsis(文本溢出)的场景都再熟悉不过。说得再直白些,就是文本显示的部分省略,通过该功能可以有效避免layoutbreak问题。话说这对国际化人开发和测试人员来说应该是个利好啊,这样不就有效避免了各种longstring带来的布局问题么?Absolutely!然而世间事物就是这么奇特,往往兴一
2017-01-14 17:21:03 16091
原创 2016 Unicode Conference拾遗(七)
上回说到作为数据收集端的client在整个cloud based GVT架构中需要完成的事务,本文我将和大家一起来继续解读server端的SSGT-API的功能。· 接收client端的请求同时加载globalized数据(包括支持的语言列表、locales、消息ID, 默认消息, 默认的buffer大小和期望的buffer大小等)。· 基于从client端收集
2017-01-08 22:32:13 6271
原创 2016 Unicode Conference拾遗(六)
上回说到了GVT Service的三个部分,分别是management GUI,client,server。我们先来看看management GUI部分都做了些什么。作者总结了如下几点。简而言之就是配置管理的工作,例如GVT任务驱动,获取G11n数据,对GVT进行结果校验等。1. 通过GUI管理GVT2. 对GVT进行配置3. 获取Client
2017-01-01 23:54:29 6358
原创 墙角下的toLowerCase()
Turkey对国际化开发和测试人员应该都不算陌生,在G11n的世界中,他一直都属于那种需要被“重点照顾”的同学。但究竟怎么个特殊法呢?我先来讲述一个亲身经历的往事。 故事就发生在不久前,首先测试人员安装AUT在TR win server上,紧接着在browser中键入需要访问的URL,点击Access试图访问AUT。然而奇迹就在此刻不期而遇了……测试人员在等待了很长时间后,页面上除了一个不
2016-12-26 17:52:52 10998
原创 2016 Unicode Conference拾遗(五)
除了之前介绍过的,在UC2016上,来自IBM的三位工程师(SuLiu,BoyiTzen,FanYang)还给我们带来了一个非常值得深入研究的话题——Conceptof Cloud Based Globalization Verification Service。 开篇作者就介绍GlobalizationVerification Test(下文简称GVT)所期望解决的问题,包括:1.
2016-12-23 15:16:18 7759
原创 由I18n静态代码测试说开去
提到机器学习,相信不少人心中都会默默的飘过三个字——树新风!眼下这样的评价倒也蛮中肯的!但就历史经验看,新技术的步伐往往比我们想象中的都大,所以我们有理由相信随着deeplearning的日渐成熟,不久的将来计算机的自我编程应该不会再只是科幻小说里的桥段。 本文的主题不是机器学习,也不是自我编程,而是bug预测程序。目的是通过使用机器学习和统计分析,来自动判断某一行代码是否存在瑕疵。其实代
2016-12-14 11:27:51 26575
原创 2016 Unicode Conference拾遗(四)
在2016 UC上,除了和Kat Momoi先生非常有共鸣外,另外一个topic跟我们正在实现的框架也出奇的神似——Real-Time Localization Updates with Web Services,speaker是来自Adobe的Tarrence Egbert先生。 首先他介绍了自己团队是如何开发并使用这个L10n专属的web service来实现动态翻译更新的,特点总结
2016-12-07 18:48:21 8148
原创 2016 Unicode Conference拾遗(三)
前两篇文章都在聊战术打法,本文开始说说具体的技术实现。Kat先生在这次大会上分享了不少i18n开源项目,包括以下内容。1. New Pseudolocalizer作为Android Studio的一部分,适用于Android SDK 23及更高版本。可以使用AAPTBuild tools: aapt --pseudo-localize,也可以通过File > Project St
2016-11-20 00:46:18 8314
原创 2016 Unicode Conference拾遗(二)
书接前文,上回书简单介绍了Kat先生和我所共同追求的国际化测试思想,即“战法打法”。本文来谈谈需要完成一个典型国际化release具体的操作步骤,或者说流程吧。一共10条开发标准可作为参考。1. 抽取所有会在UI上显示的message● 使用messagelint预防代码错误(Android)● 使用Pseudolocale(en-XA):查找包含无重音符的消息●
2016-11-12 15:14:17 8977
原创 2016 Unicode Conference拾遗(一)
在刚结束的2016Unicode Conference上,来自Google的Kat Momoi先生分享了他的topic——Releasecriteria and mobile i18n testing toolbox。其中不少战术打法与作者思路惊人暗合,看来是同道中人哦!遇到了一样信奉“控球”的战术控,感触着实良多,特发文略作点评一二。 作为StaffTest Engineer and I
2016-11-12 00:24:57 9294
原创 BiDi 算法详解及应用(二)
在上一节里面,我们讨论了什么是双向文字以及两个重要的概念:逻辑顺序(Logical order)和视觉顺序(Visual order)。本章我们详细了解下,Bidi算法。Bidi的算法在“Unicode Standard Annex #9”中具体描述了UniBidi的具体实现。UniBidi的核心的逻辑包含3个方面:按照语言信息,识别字符类型(分为强类型、弱类型和中性类型)字符
2016-11-08 00:35:28 7714
原创 非英文键盘组合键失效的一种可能
使用非英文键(101)键盘进行输入,不少字符都无法正常输出,这应该算是一个还蛮常见的国际化问题,虽然其root cause千差万别。本文即将讲述一个用意大利键盘输入组合键时发生的异常情况,并尝试分析失效现象背后的一种技术可能。 业务背景是这样的,当用户在local client端用意大利键盘输入组合键Alt Gtrl + @时,remote端的notepad中显示字符[[[[,而其他按键则
2016-10-31 18:31:34 10225
原创 FF&Chrome中的AJAX
在国际化测试过程中,不知你是否遇到过这样的情况?用FF访问某一页面时候,发现该页面已被完美的本地化;而换到了Chrome之后,问题出现了,整个页面依然充斥着英文。(语言设置没有问题!) 有人说,那就清理一下cache呗!非常好,说做咱就做,不过……清理完之后发现Chrome页面没任何变化,让大家失望了,这可如何是好? 反思这两个测试用例,除了浏览器的差异,操作步骤没有任何不同
2016-10-26 17:09:16 11026
原创 再论宽窄
上文中提到了C++中的宽字符和窄字符,本文将继续探讨其在国际化代码中的影响。老规矩,先看问题!本文援引一个安装时路径含有非英文字符,随后写入注册表键值,导致后续集成工作无法进行的真实案例。而这个path值则来源于以下的结构。typedef struct _AgentRegEntry { HANDLE hive; char *rpcCommand; char
2016-10-19 17:04:51 10889
原创 从主机名到宽字符
C++中字符有所谓宽窄之分,其中窄字符(narrowchar)就是用8bit来表示的字符,最典型的就是ASCII码。而宽字符(wide char)在Windows中用16bit表示,在Linux中则占用32bit,典型的有UNICODE。 关于宽字符,百科如是说。宽字符是双字节多语言字符代码。在当今的全球计算业内使用的大多数字符(包括技术符号和特殊的发布字符),都可以根
2016-10-11 14:01:46 10428
原创 也说toLocaleString
和Datetime一样,number format也是国际化开发和测试中需要注意的一个重要组成部分。如本例所示,测试中发现表格中的数字并未跟随浏览器的语言设置而进行相应的格式转化。 这种情况下不少人都会说,这跟DateTime还有Currency问题一样啊,不就是patternstring问题么?让translator在资源文件中预定义一下格式,应该就解决了吧?呃……也许这是一种解决方案吧
2016-09-23 16:47:39 11458
原创 Java Web项目中的国际化
如果你的主要工作就是开发或测试一个动态国际化Java Web项目,那么如下图所示的编码处理问题想必是“大宝天天见”咯。那么作为开发和测试人员,面对这样高频的事件,又需要怎样应对呢?本文将尝试从两个不同角度来分析在这样的技术背景下,我们需要注意哪些国际化知识点。首先对于开发人员来说,需要注意的是:一、HTML中的metacontent确保每一个HTML头部都包含有正确的编
2016-09-14 14:51:49 13231
原创 BiDi 算法详解及应用(一)
在开始本节内容之前,先对这个系列做一个简要的说明,在此系列里面会详细介绍以下几点内容:什么是BiDiUnicode 的 BiDi 算法详解ICU 对算法的实现和工业级应用Html4 和 Html5 对 BiDi 支持及对应的控制元素和节点BiDi 内容的排版什么是 BiDi ?在聊什么是BiDi之前,咱们先唠唠是什么是文字。IBM Terminology 中的定
2016-09-05 21:59:45 11513
原创 JavaMail中的国际化(二)
书接前文,在解决了附件名乱码问题后,本文我们将目光转移到mail body上。 首先还是请大家先看一个bug,业务背景是这样的——当满足某种条件时,软件自动发功向用户发送alert邮件。本例中的期望结果应该是向日文用户发送以下信息。而用户看到的实际结果如下图。与上次不同,这回我们需要查阅的是发送不带附件邮件的代码,示意如下。protected void se
2016-09-03 22:34:18 9196
原创 JavaMail中的国际化(一)
JavaMail是JavaEE中13种核心技术之一,其中有不少涉及国际化的知识点,例如subject, body, attachment时间日期等。本文我们来关注邮件附件乱码问题,首先看一个真实的bug,测试步骤如下。1. 创建一个mail notification,附件名为中文2. 触发notification条件,发送mail并检查结果如图所示。一探究竟,最终我
2016-08-30 22:41:44 10172
原创 浅析 AngularJS 全球化最优方案(六)
本节是最后一节关于AngularJS的国际化和本地化方案讨论,具体会和大家聊下目前有哪些第三方的库以及有缺点。首先谈谈国际化,AngularJS的国际化支持是不错的,提供了一些语言的国际化资源文件文件,具体支持哪些国家,大家可以去官网查询。下面聊聊怎么使用这些资源文件,一般来说会分静态加载和动态加载,静态加载可以使用预绑定、单独加载。预绑定是将国际化资源文件和 AngularJS 库文件进
2016-08-26 12:59:45 10271 4
原创 也说DateTime.ToString()
曾遇到过这样一个bug,测试描述说一旦设置了浏览器的语言为Portuguese/Brazil[pt-br],对机器的reconfigure request就会fail。而当浏览器语言为en-us时,request则没有问题,如我们所愿的正常pass,贴图如下:pt-bren-us起初接到这个bug时,百思不得其解!pt-br有什么特殊之处?何德何能?怎么到你这儿就敢对我
2016-08-24 16:23:17 8830 1
原创 我们还需要专职黑盒手动国际化测试人员么?
时至今日,我们还需要专职黑盒手动国际化测试人员么?这个问题其实在我脑中已经萦绕多时了,现在终于有机会把自己的想法和盘托出。不过在探讨这个问题前,请大家先起立!不要因为现在所坐的位置影响了你的思维。 首先务必澄清几个概念。1. 所谓专职即只进行国际化测试,负责执行测试+报bug的活动,不参与编码2. 黑盒是说测试人员对于国际化开发技术并不熟悉,甚至不懂3. 手动意味着测试
2016-08-21 20:59:28 28883 2
原创 Codepage vs Charset
之前在面试话题中介绍了如何言简意赅的回答各种char的使用区别,本文将谈到另外一个高频问题——codepage跟charset的区别和联系。虽然这两个概念几乎天天都会在工作中出现,但就个人过往经验看,面对该问题时能够给出清晰答案的着实凤毛麟角。 首先来看codepage(“内码表”或者“代码页”),这是wiki对他的定义——代码页是字符编码的别名,也称“内码表”,是特定语言的字符集的一张表
2016-08-18 15:28:06 11482
原创 浅析 AngularJS 全球化最优方案(五)
在前几节了我们总结了获取Locale的几种方式,各有优缺点。接下来我们聊聊如何做 Locale 的 mapping 和 fallback。从浏览器获取到用户的语言偏好,或者下拉框选择预定义语言,只是Locale的一个入口,在获取到raw Locale以后,我们需要进行映射和fallback处理。首先我们先回顾下国际化分层,分层的概念。在本系列开始的时候,我给大家讲过一个概念,国
2016-08-16 23:59:39 10600 2
原创 浅析 AngularJS 全球化最优方案(四)
在前面三节我们分析了 AngularJS 的web application里面,3种常见获取浏览器用户语言信息的方法以及优缺点:前端 JS 直接获取浏览器的用户语言信息。优点:真正意义上做到了前后端分离。缺点:现有 API的定义,在每个浏览器上面的实现不一致或者有些浏览器暂不支持。类 JSP 方案,定义locale 变量在引导
2016-08-16 13:32:27 10106
原创 浅析 AngularJS 全球化最优方案(三)
在上节我们分析了从前端,无论是AngularJS本身 $locale 还是通过现有的 JS navigator对象的相关的language属性,都无法得到准确的用户语言信息。由此可见从前端获取Browser 的用户语言,在现阶段是有缺陷的。那么要获取当前用户端接受的语言除了从浏览器直接获取外,其实通常情况下是分析Http 请求里面的报头,(Accept - Language)请
2016-08-16 13:31:32 10202
原创 浅析 AngularJS 全球化最优方案(二)
上节我们谈到在 AngularJS 里面拿当前浏览器 Locale 的3种方式,本节我们主要讨论下 AngularJS 里面自带的 $locale 服务和用原生 JS 如何获取浏览器 Locale,严谨的角度来说是获取当前用户浏览器的语言列表或者是浏览器UI语言。首先我们聊下 AngularJS 里面的$locale 服务,很棒的概览,会让人感觉眼前一亮,但当我们研读了它的源码
2016-08-16 13:30:37 10937
原创 浅析 AngularJS 全球化最优方案(一)
最近由于公司项目的原因,接触到AngularJS,在经历了一番研究和尝试后,成功为此产品提交了全球化框架。在研究过程中也调研了其他几种 AngularJS 全球化方案,总结了一些经验,在此希望跟大家分享。软件全球化支持,通常情况下分两个维度一个是国际化支持、一个是本地化支持,国际化支持包括安装、输入、输出以及对货币,日期和数字等 locale sensitive数据的格式化。本
2016-08-16 13:27:51 10216
原创 ExtJS的中法语千位分隔符
法语的千位分隔符应该是什么?相信大部分国际化从业者都很清楚,对!就是如下图所示的空格。讲到这里,就先分享一个因为这小空格曾引发的血案吧……话说五年前,那时我在某金融机构供职,负责一个监控债券价格浮动的项目。要求一旦债券价格高于或低于某个值时,立刻发出alert,警告所有交易员。平日测试都是获取英文消息源,但产品上线的那天,好巧不巧,英文消息源down机,程序转而从法文消息源获取
2016-08-15 10:44:56 16911
原创 话说Sorting和Collation
不知大家是否注意过,Sorting和Collation这两个词儿常在工作中被混用。但事实上,这二者不是一个概念,甚至不在一个层面上。先看看这二者是如何进行定义的。Sorting是按照某种规则,对数据进行的分类、整理;而Collation则是对数字,字符进行某种顺序的装配、组合。还是一头雾水,不明就里?…… 举个例子吧,假设某一本书籍是集体创作,作者名较多,那么作者列表是如何呈现给读
2016-08-15 10:41:17 10553
原创 当Culture遇上DateTimeFormat
提问——如果你遇到一个其他语言都不复现,只能在芬兰语测试环境中出现的bug,你的第一反应是什么?(冷场)好吧,还是先说说我的亲身经历,步骤如下:首先在芬兰语Windows环境安装并配置软件;其次对某一台特定测试机发出请求。返回下图结果。 经过反复验证,该问题在CCJK,FR, DE上均不复现。那么在request场景中,最大的嫌犯就只能是时间格式了吧,来看看Windows的
2016-08-15 10:08:40 10598
原创 Migration中的Collation Confliction
说到SQL中的collation(校对集),相信大家都清楚它是用来指定排序规则的。同时大部分人应该都会赞同,排序功能优先级很低,绝对不应该跟show stopper划上等号,所以一般不会安装排在前几个sprint中来进行实现。就历史经验看,即便是到了最后的几个sprint,也未必会把collation这种corner case提上日程。而本文的主人公正是这个不起眼的小配角,看看他是如何通过不懈努力
2016-08-15 10:04:02 10284
原创 一句话证明你懂那些char
“请说明char、varchar、nchar、nvarchar的区别是什么?”——这是一个在国际化测试人员面试过程中时常被提起的问题。不过可惜的是,能准确回答这个问题,同时又言简意赅的面试者却远比想象中的少。本文站在面试者角度,探索是否能找出一句话就能证明你懂那些char的所谓标准答案。 首先,需要引入两个维度来考量。 1. 定长和变长定长即长度固定,当输入的数据长度没有达到指定的
2016-08-14 20:18:36 10115
原创 XSS与国际化
提到省略符,见多识广的国际化测试人员的第一反应应该会是法语。没错,在法语中的确充斥着这样的符号(俗称“撇号”)。一旦出现这样的符号,总是会涉及到转义问题,例如如下信息。在这里,细心的本地化人员已经为省略符做了转义。 message=Supprimer cette stratégie de tous les droits d''accèsliés ? Si vous cliquez sur
2016-08-14 20:14:00 10737
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人