button input, type="button" Which to use?

‘button input, type=“button” Which to use?’ http://web.archive.org/web/20110721191046/http://particletree.com/features/rediscovering-the-button-element/ http://www.peterbe.com/plog/button-tag-in-IE Here’s a page describing the differences (basically you can put html into a <button></button>) And an other page describing why people avoid <button></button> (Hint: IE6) Another IE problem when using <button />: And while we’re talking about IE, it’s got a couple of bugs related to the width of buttons. It’ll mysteriously add extra padding when you’re trying to add styles, meaning you have to add a tiny hack to get things under control. ...

2013-09-08 · 1 min · 83 words · -

OutOfMemoryException Fix

OutOfMemoryException Fix OutOfMemory exceptions are often caused by address space fragmentation in Visual Studio process. For users experiencing excessive OutOfMemory exceptions we provide a tool which overrides Visual Studio’s memory allocation policy to ensure more continuous address space for Common Language Runtime. To use the tool download wrappers.zip file, unpack it and run devenv2005_wrap, devenv2008_wrap and devenv2010_wrap instead of devenv.exe for Visual Studio 2005, 2008 and 2010 correspondingly. In some cases Visual Studio fails to start under wrappers. Check AppInit_DLLs. Rogue DLLs activated from there can interfere with wrappers. Example: wxvault.dll preinstalled with Dell laptops. ...

2013-09-04 · 1 min · 112 words · -

sql 的四舍五入取整问题

sql 的四舍五入取整问题 转自: http://hi.baidu.com/yahuudang/blog/item/4c65ab77f758b01fb151b953.html 经在sql server 2005测试,可以通过 SELECT CAST(‘123.456’ as decimal) 将会得到 123 (小数点后面的将会被省略掉) 。 如果希望得到小数点后面的两位。 则需要把上面的改为 SELECT CAST(‘123.456’ as decimal(38, 2)) ===>123.46 自动四舍五入了! 自己的例子: select CAST(AmountRmb as decimal(38)) as heji,CAST(NotFinFee as decimal(38)) as whx,* from Bill_Tab

2013-08-20 · 1 min · 37 words · -

解决JQuery.trim()函数ie下报错的问题

解决JQuery.trim()函数ie下报错的问题 经常碰到JQuery里的trim()函数在firefox支持,但是在IE里不支持 其主要原因是写法不对,下面是错误的写法 Java代码 <img alt="收藏代码" src="http://vsp.iteye.com/images/icon_star.png" /> var content = $('#content').val(); if(content.trim() == ") alert('空'); 上面的写法在firefox下不会报错,但在ie下确会报错 正确的写法应该为 Java代码 <img alt="收藏代码" src="http://vsp.iteye.com/images/icon_star.png" /> var content = $('#content').val(); if($.trim(content) == ") alert('空'); 或者为: Java代码 <img alt="收藏代码" src="http://vsp.iteye.com/images/icon_star.png" /> var content = $('#content').val(); if(jQuery.trim(content) == ") alert('空'); http://vsp.iteye.com/blog/1262441

2013-08-10 · 1 min · 46 words · -

正常体温

正常体温 正常体温不是一个具体的温度点,而是一个温度范围。机体深部的体温较为恒定和均匀,称深部体温;而体表的温度受多种因素影响,变化和差异较大,称表层温度。临床上所指的体温是指平均深部温度。一般以口腔、直肠和腋窝的体温为代表,其中直肠体温最接近深部体温。正常值: 口腔舌下温度为37℃ (范围36.2-37.2℃) ,直肠温度37.5℃ (比口腔温度高 (0.3-0.5℃) 。 人体内部的温度称体温。保持恒定的体温,是保证新陈代谢和生命活动正常进行的必要条件。体温是物质代谢的产物。三大营养物质在氧 人体正常体温范围 示意图 化过程中释放的能量,其中50%左右的能量变为体热以维持体温,并以热能的形式不断散发于体外;另有45%的能量转移到三磷酸腺苷 (ATP) 的高能磷酸键中,供机体利用。机体利用的最终结果仍转化为热能散出体外。这就是产生体温的由来。 正常人的体温相对恒定的,它通过大脑和丘脑下部的体温调节中枢调节和神经体液的作用,使产热和散热保持动态平衡。在正常生理状态下,体温升高时,机体通过减少产热和增加散热来维持体温相对恒定;反之,当体温下降时,则产热增加而散热减少,使体温仍维持在正常水平。 每日早晚、人体各个部位及男女之间的体温均存在着差异。人体正常体温有一个较稳定的范围,但并不是恒定不变的。正常人口腔温度(又称口温)为36.2℃~37.2℃,腋窝温度较口腔温度低0.2℃~0.5℃,直肠温度(也称肛温)较口腔温度高0.2℃~0.6℃。一天之中,清晨2~5时体温最低,下午5~7时最高,但一天之内温差应小于0.8℃。另外,女子体温一般较男子高0.35℃左右。女子体温在经期亦有些许变化。 在健康状态时,如饮食正常,衣着适宜,人体的体温一般是比较恒定的,即保持在37℃上下(大致介于36.2℃~37.2℃),而不因外界环境温度的改变而变化。人体正常体温平均在36~37℃之间 (腋窝) ,超出这个范围就是发热,38℃以下是低热,39℃以上是高热。[1] 测量体温一般常用3个部位,即口腔、腋窝及肛门: 儿童正常体温在肛门处为36.5℃~37.5℃之间; 儿童在口腔处为36.2℃~37.3℃之间; 儿童在腋窝处为35.9℃~37.2℃之间。 通过测量后,儿童凡超过正常范围0.5℃以上时,称为发热。不超过38℃称为低热,超过39℃者为高热。

2013-08-09 · 1 min · 24 words · -

Somebody and I

Somebody and I “I and someone are interested” is grammatically correct. It is the convention in English that when you list several people including yourself, you put yourself last, so you really should say “Someone and I are interested.” “Someone and I” is the subject of the sentence, so you should use the subjective case “I” rather than the objective “me”. “Someone and I” clearly means two people, so you should use “are” and not “is”. If it was “Someone or I …” then you would use “is”, because only one person is interested, either “someone” or “I”. ...

2013-08-09 · 2 min · 335 words · -

How to,List Current Keyboard Shortcuts

‘How to,List Current Keyboard Shortcuts’ Use this procedure to create a macro that generates a list of all the commands in the integrated development environment (IDE) and any shortcut keys mapped to those commands according to the current keyboard mapping scheme. Several keyboard mapping schemes are available in the IDE. You can change keyboard mapping schemes on the Keyboard page, under the Environment folder of theOptions dialog box. For more information, see How to: Work with Keyboard Shortcuts. <th> <img id="alert_note" title="Note" alt="Note" src="http://i.msdn.microsoft.com/areas/global/content/clear.gif" />Note </th> The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. To change your settings, clickImport and Export Settings on the Tools menu. For more information, see Working with Settings. To list current keyboard shortcut mappings On the Tools menu, point to Macros, and then click Macros IDE. In Project Explorer, double-click MyMacros. Right-click Module1 and then click Rename. Type KeyboardShortcuts as the new name for the module. Double-click KeyboardShortcuts to open the file in the editor. Paste the following code in the file after Public Module KeyboardShortcuts: Sub GetAllCommands() Dim cmd As Command Dim ow As OutputWindow = DTE.Windows.Item(Constants.vsWindowKindOutput).Object Dim owp As OutputWindowPane Dim exists As Boolean Dim i As Integer Dim sArray() As String sArray = New String() {} i = 1 exists = False For Each owp In ow.OutputWindowPanes If owp.Name = "Macro Output" Then exists = True Exit For End If i = i + 1 Next If exists Then owp = ow.OutputWindowPanes.Item(i) Else owp = ow.OutputWindowPanes.Add("Macro Output") End If owp.Clear() ' Output 1 line per command For Each cmd In DTE.Commands Dim binding As Object Dim shortcuts As String shortcuts = "" For Each binding In cmd.Bindings Dim b As String b = binding If Not shortcuts = "" Then shortcuts += "--OR-- " End If shortcuts = shortcuts + b + " " Next shortcuts = shortcuts.Trim() If Not cmd.Name.Trim().Equals("") And Not shortcuts.Equals("") Then sArray.Resize(sArray, sArray.Length + 1) sArray(sArray.Length - 1) = cmd.Name + vbTab + shortcuts End If Next Array.Sort(sArray) owp.OutputString(String.Join(vbCrLf, sArray)) End Sub ...

2013-08-08 · 3 min · 450 words · -

MT4外汇平台挂单交易四种类型buy limit,sell limit,buy stop,sell stop

MT4外汇平台挂单交易四种类型buy limit,sell limit,buy stop,sell stop 在外汇交易中,使用mt4平台进行挂单交易会根据不同的目的选择交易的四种类型,它们分别是: buy limit,sell limit,buy stop,sell stop,做金融交易必须了解和掌握它们不同的含义和用法。 Buy stop: 止损买进,即是指在相对与目前现价而言高于现价的价格挂单的买进操作指令 例子: Buy stop是一个追涨的行为,比如现在EURUSD是1.4321,你觉得只有向上突破了1.4400,才能确定升势,并进一步上扬,那么你可以使用Buy stop: 1.4410,那么当EURUSD上升到1.4410,你的买单才会成交,如果继续上扬,你将会盈利。 buy limit: 限价买进,即是指相对现价而言,低于现价的价格挂单的买进的操作指令 例子: buy limit是设定为以更低的价格买入 (做多) ,和股票的挂单方式是一样的;比如现在EURUSD是1.4321,你觉得趋势仍然是向上的,但是价格会回调到1.4300,然后还会继续上涨,则你需要使用buy limit: 1.4300,当价格回落到1.4300,你的买单将会成交,如果价格上扬,你将会盈利。 sell stop: 止损卖出,即是指相对现价而言,低于现价的价格挂单的卖出操作指令 例子: sell stop是一个杀跌的行为,比如现在EURUSD是1.4321,你觉得只有向下突破了1.4300,才能确定跌势,并进一步下跌,那么你可以使用sell stop: 1.4290,那么当EURUSD下跌到1.4290,你的卖单才会成交,如果继续下跌,你将会盈利。 sell limit: 限价卖出,即是指相对现价而言,高于现价的价格挂单的卖出操作指令 例子: sell limit是设定为以更高的价格卖出 (做空) ;比如现在EURUSD是1.4321,你觉得趋势仍然是向下的,但是价格会反弹到1.4350,然后还会继续下跌,则你需要使用sell limit: 1.4350,当价格上涨到1.4350,你的卖单将会成交,如果价格下跌,你将会盈利。 限价订单也就是挂单是你强大的交易工具,在实践中,多用就会体会到其强大的功能。

2013-08-07 · 1 min · 48 words · -

Rss

Rss https://rss.mk/ https://rssx.wiloon.com

2013-08-06 · 1 min · 3 words · -

FOR XML PATH

FOR XML PATH http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主. 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表 (hobby) 用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FOR XML PATH 结果: 复制代码 1 爬山 2 ...

2013-07-29 · 2 min · 246 words · -

go epoll

go epoll https://colobu.com/2019/02/23/1m-go-tcp-connection/ https://speakerdeck.com/eranyanay/going-infinite-handling-1m-websockets-connections-in-go https://github.com/smallnest/1m-go-tcp-server https://www.freecodecamp.org/news/million-websockets-and-go-cc58418460bb https://github.com/mailru/easygo https://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/ https://colobu.com/2015/07/14/performance-comparison-of-7-websocket-frameworks/

2013-07-29 · 1 min · 9 words · -

dns PTR记录

dns PTR记录 PTR记录,是电子邮件系统中的邮件交换记录的一种;另一种邮件交换记录是A记录 (在IPv4协议中) 或AAAA记录 (在IP PTR (Pointer Recore),指针记录,是电子邮件系统中的一种数据类型,被互联网标准文件RFC1035所定义。与其相对应的是A记录、地址记录。二者组成邮件交换记录。[1] A记录解析名字到地址,而PTR记录解析地址到名字。 地址是指一个客户端的IP地址,名字是指一个客户的完全合格域名。 PTR记录被用于电子邮件发送过程中的反向地址解析。[2] 当正向域名解析完成后,还应当向您的线路接入商 (ISP) 申请做反向地址解析,以减少被国外机构退信的可能性。 v6协议中) 。PTR记录常被用于反向地址解析。

2013-07-28 · 1 min · 17 words · -

alias command, 别名

alias command, 别名 查看所有的alias alias alias -p 显示已定义的别名 (假设当前环境存在以下别名) alias ls alias ls grep 在命令行直接输入后缀为 html 的文件名, 会在 vim 中打开 (zsh) alias -s html=vim alias -s gz='tar -xzvf' alias ll='ls -l --color=auto' alias la='ls -la --color=auto' #查看命令别名 type ll #取消别名 unalias ll 我们在使用linux过程中,每个命令后都要跟一些参数,可是对于常用的参数假如每次都是手动的添加就是显得麻烦些了。linux 可能通过命令别名的功能来减少您的输入,请下面操作就明白了。 ls -l 列出文档目录周详信息 ls -hl 列出文档大小,以K为单位显示 ls -hlt 列出文档按时间排序 对于上面三个显示需要我们只要配置alias ll=‘ls -lht’ 这样以后,只要输入ll 就能够了。 对于此alias ll=‘ls -lht’ 配置在哪个配置文档下呢?这个就要根据自己的需要而定了。 比如: 您只希望jack这个用户名具备上面功能,因为您只经常使用这个用户。修改此用户家目录下.barsh_profile 将alias ll=‘ls -lht’ 添加进去就能够了。 ...

2013-07-27 · 1 min · 82 words · -

从JVM角度理解线程

从JVM角度理解线程 http://blog.csdn.net/iter_zc/article/details/41843595 这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。 我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下: Class hierarchy Thread NamedThread VMThread ConcurrentGCThread WorkerThread GangWorker GCTaskThread JavaThread WatcherThread 另外还有一个重要的类OSThread不在这个继承关系里,它以组合的方式被Thread类所使用 这些类构成了JVM的线程模型,其中最主要的是下面几个类: java.lang.Thread: 这个是Java语言里的线程类,由这个Java类创建的instance都会 1:1 映射到一个操作系统的 osthread JavaThread: JVM中C++定义的类,一个JavaThread的instance代表了在JVM中的java.lang.Thread的instance, 它维护了线程的状态,并且维护一个指针指向java.lang.Thread创建的对象(oop)。它同时还维护了一个指针指向对应的OSThread,来获取底层操作系统创建的osthread的状态 OSThread: JVM中C++定义的类,代表了JVM中对底层操作系统的osthread的抽象,它维护着实际操作系统创建的线程句柄handle,可以获取底层osthread的状态 VMThread: JVM中C++定义的类,这个类和用户创建的线程无关,是JVM本身用来进行虚拟机操作的线程,比如GC。 有两种方式可以让用户在JVM中创建线程 new java.lang.Thread().start() 使用JNI将一个native thread attach到JVM中 针对 new java.lang.Thread().start()这种方式,只有调用start()方法的时候,才会真正的在JVM中去创建线程,主要的生命周期步骤有: 创建对应的JavaThread的instance 创建对应的OSThread的instance 创建实际的底层操作系统的native thread 准备相应的JVM状态,比如ThreadLocal存储空间分配等 底层的native thread开始运行,调用java.lang.Thread生成的Object的run()方法 当java.lang.Thread生成的Object的run()方法执行完毕返回后,或者抛出异常终止后,终止native thread 释放JVM相关的thread的资源,清除对应的JavaThread和OSThread 针对JNI将一个native thread attach到JVM中,主要的步骤有: 通过JNI call AttachCurrentThread申请连接到执行的JVM实例 JVM创建相应的JavaThread和OSThread对象 创建相应的java.lang.Thread的对象 一旦java.lang.Thread的Object创建之后,JNI就可以调用Java代码了 当通过JNI call DetachCurrentThread之后,JNI就从JVM实例中断开连接 JVM清除相应的JavaThread, OSThread, java.lang.Thread对象 从JVM的角度来看待线程状态的状态有以下几种: 其中主要的状态是这5种: _thread_new: 新创建的线程 _thread_in_Java: 在运行Java代码 _thread_in_vm: 在运行JVM本身的代码 ...

2013-07-27 · 1 min · 111 words · -

The precompilation target directory cann ot be in the same tree as the source application directory

‘The precompilation target directory cann ot be in the same tree as the source application directory’ ASPNETCOMPILER : error ASPRUNTIME: The precompilation target directory (D:appsjenkinsHomejobsxxxworkspacexxxPrecompiledWebxxx) cann ot be in the same tree as the source application directory (D:appsjenkinsHomejobsxxxworkspacexxx). [D:appsjenkinsHomejobsxxx workspacexxxxxx.metaproj] modify the slution file xxx.sln modity from Debug.AspNetCompiler.TargetPath=“PrecompiledWebxxx” Release.AspNetCompiler.TargetPath=“PrecompiledWebxxx” to Debug.AspNetCompiler.TargetPath="..PrecompiledWebxxx" Release.AspNetCompiler.TargetPath="..PrecompiledWebxxx"

2013-07-24 · 1 min · 52 words · -

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句 Insert是T-sql中常用语句,Insert INTO table(field1,field2,…) values(value1,value2,…)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。 1.INSERT INTO SELECT语句 语句形式为: Insert into Table2(field1,field2,…) select value1,value2,… from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下: -1.创建测试表 create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10), CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] create TABLE Table2 ( a varchar(10), c varchar(10), d int, CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO -2.创建测试数据 ...

2013-07-22 · 1 min · 200 words · -

Java Exchanger

Java Exchanger http://mouselearnjava.iteye.com/blog/1921947 本文介绍Exchanger工具类, 然后采用Exchanger给出一个两个线程交换数值的简单实例。 Exchanger介绍 Java代码 收藏代码 /** * A synchronization point at which two threads can exchange objects. * Each thread presents some object on entry to the {@link #exchange * exchange} method, and receives the object presented by the other * thread on return. */ 从上面的注释中可以看出: Exchanger提供了一个同步点,在这个同步点,两个线程可以交换数据。每个线程通过exchange()方法的入口提供数据给另外的线程,并接收其它线程提供的数据,并返回。 Exchanger通过Lock和Condition来完成功能,Exchanger的一个重要的public方法是exchange方法,用于线程的数据交换, Exchanger工具类的使用案例 本文给出一个简单的例子,实现两个线程之间交换数据,用Exchanger来做非常简单。 Java代码 收藏代码 package my.concurrent.exchanger; import java.util.concurrent.Exchanger; import java.util.concurrent.atomic.AtomicReference; public class ThreadA implements Runnable { private final Exchanger<Integer> exchanger; private final AtomicReference<Integer> last = new AtomicReference<Integer>( 5); public ThreadA(Exchanger<Integer> exchanger) { this.exchanger = exchanger; } public void run() { try { while (true) { last.set(exchanger.exchange(last.get())); System.out.println(" After calling exchange. Thread A has value: " + last.get()); Thread.sleep(2000); } } catch (InterruptedException e) { e.printStackTrace(); } } } ...

2013-07-22 · 1 min · 213 words · -

update join, delete join

update join, delete join UPDATE t1 SET t1.CalculatedColumn = t2.[Calculated Column] FROM dbo.Table1 AS t1 INNER JOIN dbo.Table2 AS t2 ON t1.CommonField = t2.[Common Field] WHERE t1.BatchNo = '110'; DELETE a from t0 a JOIN t1 b ON a.c0=b.c0 WHERE b.c1='xxx' http://stackoverflow.com/questions/1980738/sql-delete-with-join-another-table-for-where-condition http://stackoverflow.com/questions/652770/delete-with-join-in-MySQL/29204958#29204958

2013-07-22 · 1 min · 43 words · -

角色互换, Swapping Roles

角色互换, Swapping Roles Swapping Developer Roles,A Lesson in Empathy and Cross Disciplinary Work If you’ve ever found yourself in a code oriented meeting in which people are going over issues and you find yourself dozed off in the corner – you’ve got an empathy problem. It isn’t explicitly because you’re a jackass (which, you very well may be), but because you cannot relate to the issues. Maybe you’ve never coded a REST interface before, handled the scaling issues of a database, or written the markup for a responsive website. You don’t know what pitfalls exist, what complexities often arise, or what technical challenges are present — it’s all unfamiliar and unknown. To remedy this, a colleague — Willie Miller — and I engaged in what we call “dev swap.” ...

2013-07-20 · 3 min · 577 words · -

敏捷方法中测试人员的价值

敏捷方法中测试人员的价值 http://blog.csdn.net/KerryZhu/article/details/5366574 ** 敏捷**方法在软件开发中受到青睐,特别是在互联网应用服务系统的开发中,越来越多的公司采用敏捷方法,包括XP、Scrum、Lean、Crystal、FDD等。具体的敏捷方法在操作时有一些区别,但基本思想是一致的,如客户至上、拥抱变化、缩短迭代周期、自我组织等。在敏捷方法中,流程相对灵活,强调沟通,通过充分的沟通来及时解决问题,由于沟通充分,文档不是很重要,而且有可能不采用Word等独立的文件格式,而是采用Wiki、空间等web内容方式。在敏捷方法中,需求变化比较快、产品开发周期很短 (一、两周) ,给软件测试带来很大的挑战!例如,功能测试的自动化实现就比较困难,没有足够时间开发自动化测试脚本,要花大量时间讨论产品特性,及时进行产品的验收测试。自动化测试,更多的是在单元测试这个层次上实现。而单元测试自动化、持续集成等一些关键实践,开发人员能发挥更大的作用,而测试人员难以很好地发挥作用。在敏捷方法中,开发人员的主导作用更明显,讨论需求、实现需求,再修改需求、再实现、再重构,不断完善产品,测试人员容易边缘化。甚至在Crystal方法中,可以不需要测试人员,开发人员能承担所有技术性的工作。 在敏捷方法中,测试人员的价值又如何体现? 首先在需求讨论上,测试人员可以站在客户角度上来阐述自己的观点,和产品人员、开发人员等进行充分的交流和讨论,使自己在用户体验、业务逻辑等等方面的经验充分体现出来。 在开发过程中,测试人员不仅扮演"用户代表"角色,而且可以及时提供更全面的质量反馈,包括代码质量、接口一致性等。测试人员不写代码,可以参与代码复审 (code review) ,将质量问题及时提交给项目组,保证在产品构造的整个过程中质量受到足够的关注,提高质量改进的持续性和可视性。 测试人员还是可以参与单元测试。即使单元测试由开发人员做,测试人员可以推进开发人员进行单元测,检查单元测试状态,如确保单元测试达到80%以上覆盖率,以及帮助开发人员开发出具有良好可测试性的代码。 即使在敏捷方法中,集成测试、端到端 (end-to-end) 测试、性能测试等是不可少的。因为在敏捷方法中,往往将一个大的系统开发分解成多个小的子系统 (模块/组件) ,集成测试和端到端 (end-to-end) 测试显得更重要。测试人员在功能测试上工作量会降低,但在这些测试上发挥更大的作用。 随着迭代的不断深入,回归测试的工作量很大,这也是测试人员的用武之地。 测试人员可以针对稳定的产品特性开发自动化测试脚本,这也是一种持续的努力,使回归测试自动化。 测试人员对缺陷进行分析,总结出一些规律,帮助开发人员建立良好的习惯,改进代码的质量。 而且: 在敏捷方法中,我们也要采用敏捷测试,不要再写几十页的测试计划书,而是在每个迭代周期,写出一页纸的测试计划,将测试要点列出来。 在敏捷测试中,可能不需要测试用例,而是针对use case 或user story直接进行验证,并进行探索性测试。而节约出来的时间,用于开发原有功能的自动化测试脚本,为回归测试服务。自动化测试脚本将代替测试用例,成为软件组织的财富。 所以: 敏捷功能测试 = 新特性的手工测试 (use case验证和探索性测试) + 原有功能的自动化测试 (回归测试) 理想情况下,测试人员具有很好的编程能力,可以和开发人员进行角色互换。在当前版本开发 (/迭代周期) 中担任测试人员角色,在下一个版本开发 (/迭代周期) 中担任开发人员角色,而开发人员则担任测试人员角色,让开发人员深刻地理解用户的需求角度来考虑系统功能的设计,这样会更好地保证产品的质量,沟通的障碍也会消除,开发的效率会有很大的提高。这也是对测试人员的一个挑战。 敏捷测试也是一个持续测试的过程,而这持续测试的基础是具备一个灵活的、开放的自动化测试框架。测试人员在自动化测试框架构建上、测试工具开发或第3方测试工具前期研究、试用等方面可以发挥主导作用。 项目采用敏捷方法,要获得成功,项目组中每个人都有很强的质量意识,具有质量的主人翁精神,特别是开发人员,每时每刻提醒自己——“质量是构建出来的”,与客户或产品设计人员进行充分沟通,遵守高度一致的质量标准。测试人员将是促进质量文化不断提升的中坚力量。 [案例补充] 来HW一段时间了,所在项目是其一个全新重点项目,由于采用敏捷模式开发,包括PM在内大家都是在摸索中进行的。撇开CMM改用敏捷,文档不再全面了,连缺陷库都改用轻量级的了,领导们说敏捷中测试做的好不好不是看找到多少BUG,而是看转测试时有没有BUG,要在开发交流中解决全部问题。三轮迭代下来,交流占据了大多数时间,感觉工作做好很多,但却不知道如何体现,这个真是问题,希望大家给点建议。

2013-07-20 · 1 min · 47 words · -