qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          深入淺出Rhino:Java與JS互操作

               摘要: 2011年10月6日,一年一度的JavaOne大會隆重舉行。JavaOne2011大會的主題之一介紹針對不同Java平臺的產品路線圖,這其中包括移動版(ME,Micro Edition)、標準版(SE,Standard Edition)以及企業版(EE,Enterprise Edition)。  Java SE的亮點之一就是Oracle詳細闡述Java SE 8路線圖。我們先來看看Java SE ...  閱讀全文

          posted @ 2011-11-17 16:06 順其自然EVO 閱讀(753) | 評論 (0)編輯 收藏

          Winform框架之字典數據管理

           好久沒寫博客了,除了是工作較忙的原因外,其實是也一直在想如何整合我所有的開發經驗及技術積累,開發過很多Winform共享軟件、ASP.NET的WebForm項目,發現很多東西是相互關聯很緊密的,但往往我們太忙太懶,要好好整理,并整理出棒棒的一般比較難,但我們沒有停步,夢想總會慢慢接近并實現。在做了很多項目之后,發現人的惰性或者慣性很大,因此有機會得好好整理下開發的成功,優化再優化,用的時候就越來越順手了。

            在所有開發過的項目過程,很多如權限管理、字典數據管理模塊,都是非常常用的模塊,本文主要想介紹下提煉出來,各個項目均可通用的字典數據管理系統(或者叫做模塊更為適合),在介紹之前,我想介紹下我的整合路線及一些想法,如下所示:

            其中框架中所有介紹的內容均為現有開發框架中有的東西及特性,如果要了解Winform框架的多維特點,可以現在最新的共享軟件《倉庫管理系統》,具體可以參考文章《從開發的軟件《備件倉庫管理系統》總結的一些經驗》進行了解,該共享軟件除了整合眾多優秀的功能外,一個特點就是數據管理模塊也得到了升華。

            在Winform框架中,其中權限管理系統、字典管理系統,都是可以做成獨立的程序來使用,而且應該可以在程序中引用來查詢或者獲取相關的字典數據,如找某個鍵值的字典列表作為下拉列表,而且由于實際項目總,有點是SqlServer、有的是Access數據庫的,所以支持多數據庫是最好的選擇。

            在字典數據數據管理工程項目中,我們看到有兩個不同的數據訪問層,工廠模式通過不同的配置,調用不同的數據訪問層,從而實現SqlServer、Access等數據庫的支持,當然可以擴展更多的數據庫支持,我們先來看看工程項目的視圖如下所示:

          配置文件如下所示


          字體:        | 上一篇 下一篇 | 打印  | 我要投稿 

        1. <?xml version="1.0" encoding="utf-8" ?> 
        2. <configuration> 
        3. <configSections> 
        4. <section name="dataConfiguration" 
        5. type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/>type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/>type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/> 
        6. </configSections> 
        7. <connectionStrings> 
        8. <add name="DataAccess" providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:我的應用程序數據字典SqlDictionaryWHC.Dictionary.UIinDebugOrderWater.mdb;User ID=Admin;Jet OLEDB:Database Password=;" /> 
        9. <add name="DataAccess2" providerName="System.Data.SqlClient" 
        10. connectionString="Persist Security Info=False;Data Source=(local);Initial Catalog=Warehouse;User ID=sa;Password=123456"/>connectionString="Persist Security Info=False;Data Source=(local);Initial Catalog=Warehouse;User ID=sa;Password=123456"/>connectionString="Persist Security Info=False;Data Source=(local);Initial Catalog=Warehouse;User ID=sa;Password=123456"/> 
        11. </connectionStrings> 
        12. <dataConfiguration defaultDatabase="DataAccess"/> 
        13. <appSettings> 
        14. <!--軟件名稱--> 
        15. <add key="ApplicationName" value="深田之星倉庫管理系統"/> 
        16. <!--開發商名稱--> 
        17. <add key="Manufacturer" value="廣州愛啟迪技術有限公司"/> 
        18. <!--數據字典的數據庫類型:access、sqlserver等--> 
        19. <add key="ComponentDbType" value="access"/> 
        20.  </appSettings> 
        21. </configuration>
        22.   我們通過DictionaryDbType來切換不同的數據庫,不用修改代碼實現多數據庫支持,當然,不同的數據庫,需要創建不同的數據庫文件,不過數據庫結構基本上是一致的。

            我們看看該字典管理模塊的最終效果,如下所示:

            字典數據模塊做成獨立的程序后,一個可以獨立運行,也可以在宿主程序中通過DLL方式調用類庫來獲取字典數據,如下所示:

        23. private void InitDictItem()  
        24. {  
        25. this.txtManufacture.Items.Clear();  
        26. this.txtManufacture.Items.AddRange(DictItemUtil.GetDictByDictType("供貨商"));  
        27. this.txtBigType.Items.Clear();  
        28. this.txtBigType.Items.AddRange(DictItemUtil.GetDictByDictType("備件屬類"));  
        29. this.txtItemType.Items.Clear();  
        30. this.txtItemType.Items.AddRange(DictItemUtil.GetDictByDictType("備件類別"));  
        31. this.txtSource.Items.Clear();  
        32. this.txtSource.Items.AddRange(DictItemUtil.GetDictByDictType("來源"));  
        33. this.txtWareHouse.Items.Clear();  
        34. this.txtWareHouse.Items.AddRange(DictItemUtil.GetAllWareHouse().ToArray());  
        35. this.txtDept.Items.Clear();  
        36. this.txtDept.Items.AddRange(DictItemUtil.GetDictByDictType("部門"));  
        37. }
        38.   字典組件模塊調用例子Demo程序下載地址也一并提供下載,下載地址如下:

            http://files.cnblogs.com/wuhuacong/DictionaryDemo.rar



          posted @ 2011-11-17 16:03 順其自然EVO 閱讀(234) | 評論 (0)編輯 收藏

          Oracle 丟失更新問題的解決方案

           丟失更新是數據中一個比較常見的經典問題,在做項目時我們有時可能會沒有注意到這個問題,但這個問題相當重要,有時會帶來比較嚴重的結果。下面我們就來討論下這個丟失更新。

            一、什么是丟失更新:

            用一個操作過程來說明:

            (1)會話Session1 中的一個事務獲取(查詢)一行數據,并顯示給一個用戶User1。

            (2)會話Session2 中的另一個事務也獲取這一行,但是將數據顯示給另一個用戶User2。

            (3)User1 使用應用修改了這一行,讓應用更新數據庫并提交。會話Session1 的事務執行完畢。

            (4)User2 也修改這一行,讓應用更新數據庫并提交。會話Session2 的事務執行完畢。

            這個過程就叫做“丟失更新”,因為第(3)步做的操作會全部丟失(被第4步操作覆蓋),最終數據庫只會保存第(4)步的更新結果。這個情況在有些系統中可能不會有影響,但在有些系統中可能就影響很大了,舉個簡單的例子:

            財務系統加工資,若公司本次調薪決定給員工張三加1k人民幣,財務部兩名操作人員A和B,過程情況若是這樣的:

            1)A操作員在應用系統的頁面上查詢出張三的薪水信息,然后選擇薪水記錄進行修改,打開修改頁面但A突然有事離開了,頁面放在那沒有做任何的提交。

            2)這時候B操作員同樣在應用中查詢出張三的薪水信息,然后選擇薪水記錄進行修改,錄入增加薪水額1000,然后提交了。

            3)這時候A操作員回來了,在自己之前打開的薪水修改頁面上也錄入了增加薪水額1000,然后提交了。

            其實上面例子操作員A和B只要一前一后做提交,悲劇就出來了。后臺修改薪水的sql:update 工資表 set salary = salary + 增加薪水額 where staff_id = ‘員工ID’。這個過程走下來后結果是:張三開心了這次漲了2k,操作員A和B都郁悶了。

            二、解決思路:

            基本兩種思路,一種是悲觀鎖,另外一種是樂觀鎖; 簡單的說就是一種假定這樣的問題是高概率的,最好一開始就鎖住,免得更新老是失敗;另外一種假定這樣的問題是小概率的,最后一步做更新的時候再鎖住,免得鎖住時間太長影響其他人做有關操作。

            三、解決方案1(悲觀鎖)

            a)傳統的悲觀鎖法(不推薦):

            以上面的例子來說明,在彈出修改工資的頁面初始化時(這種情況下一般會去從數據庫查詢出來),在這個初始化查詢中使用select ...for update nowait, 通過添加for update nowait語句,將這條記錄鎖住,避免其他用戶更新,從而保證后續的更新是在正確的狀態下更新的。然后在保持這個鏈接的狀態下,在做更新提交。當然這個有個前提就是要保持鏈接,就是要對鏈接要占用較長時間,這個在現在web系統高并發高頻率下顯然是不現實的。

            b)現在的悲觀鎖法(推薦優先使用):

            在修改工資這個頁面做提交時先查詢下,當然這個查詢必須也要加鎖(select ...for update nowait),有人會說,在這里做個查詢確認記錄是否有改變不就行了嗎,是的,是要做個確認,只是你不加for update就不能保證你在查詢到更新提交這段時間里這條記錄沒有被其他會話更新過,所以這種方式也需要在查詢時鎖定記錄,保證在這條記錄沒有變化的基礎上再做更新,若有變化則提示告知用戶。

            四、解決方案2(樂觀鎖)

            a)舊值條件(前鏡像)法:

            就是在sql更新時使用舊的狀態值做條件,SQL大致如下 Update table set col1 = newcol1value, col2 = newcol2value…. where col1 = oldcol1value and col2 = oldcol2value….,在上面的例子中我們就可以把當前工資作為條件進行更新,如果這條記錄已經被其他會話更新過,則本次更新了0行,這里我們應用系統一般會做個提示告知用戶重新查詢更新。這個取哪些舊值作為條件更新視具體系統實際情況而定。(這種方式有可能發生阻塞,如果應用其他地方使用悲觀鎖法長時間鎖定了這條記錄,則本次會話就需要等待,所以使用這種方式時最好統一使用樂觀鎖法。)

            b)使用版本列法(推薦優先使用):

            其實這種方式是一個特殊化的前鏡像法,就是不需要使用多個舊值做條件,只需要在表上加一個版本列,這一列可以是NUMBER或 DATE/TIMESTAMP列,加這列的作用就是用來記錄這條數據的版本(在表設計時一般我們都會給每個表增加一些NUMBER型和DATE型的冗余字段,以便擴展使用,這些冗余字段完全可以作為版本列用),在應用程序中我們每次操作對版本列做維護即可。在更新時我們把上次版本作為條件進行更新。

            c)使用校驗和法(不推薦)

            d)使用ORA_ROWSCN法(不推薦)

            五、結論:

            綜上所述,我們對丟失更新問題建議采取上面的悲觀鎖b方法或樂觀鎖b方法(藍色字體已標注),其實這兩種方式的本質都一樣,都是在更新提交時做一次查詢確認在更新提交,我個人覺得都是樂觀的做法,區別在于悲觀鎖b方法是通過select..for update方式,這個可能會導致其他會話的阻塞,而樂觀鎖b方法需要多一個版本列的維護。

            個人建議:在用戶并發數比較少且沖突比較嚴重的應用系統中選擇悲觀鎖b方法,其他情況首先樂觀鎖版本列法。


          posted @ 2011-11-17 16:02 順其自然EVO 閱讀(216) | 評論 (0)編輯 收藏

          Linux下的日志維護技巧

          1、系統日志

            /var/log/messages不僅是服務器的系統日志,很多時候它也包括許多服務的日志,所以它被稱為“雜貨鋪”,建議重點關注。大家一般都喜歡用以下命令來看最后10條日志:tail -n10/var/log/messages。

            其實還可以將一段日志保存成文件(Xmanager3.0企業版的shell也有日志錄像截取功能),或者直接用vim來處理。我以前配置主從復制的bind服務器時,有時會因為權限的原因報錯,這時就可以在一臺報錯的服務器上用命令tail -f/var/log/messages實時查看服務器的日志變化情況,從而查找錯誤的蛛絲馬跡。事實證明,效果很好,而且將此命令用于lvs+keepalived的排錯效果也不錯。其他服務器配置排錯以此類推,這個做法也推薦讀者掌握。

            2、系統安全日志

            /var/log/secure記錄登錄系統存取數據的文件,例如POP3、SSH、Telnet、FTP等都會被記錄,我們可以利用此文件找出不安全的登錄IP。目前比較流行的SSH防暴力破解工具DenyHosts主要也是讀此文件。另外,我寫了一個原理類似的shell安全腳本,用于線上服務器,在后面的章節跟大家分享。

            3、記錄登錄者的數據

            /var/log/wtmp記錄登錄者的信息數據,由于此文件已經被編碼過(為二進制文件),想用cat等命令直接查看是不行的,必須使用last指令來取出文件的內容,如下所示:

          1. [root@localhost ~]# last  
          2. root pts/2220.249.72.138Wed Mar 30 08:33still logged in  
          3. root pts/2220.249.72.138Tue Mar 29 09:02 - 15:42(06:39)  
          4. root pts/2220.249.72.138Tue Mar 29 07:31 - 09:01(01:30)  
          5. root pts/2219.139.223.49Tue Mar 29 00:14 - 00:29(00:15)  
          6. root pts/2183.94.4.206Mon Mar 28 20:46 - 21:21(00:34)  
          7. root pts/2113.57.224.3Mon Mar 28 11:30 - 12:17(00:46)  
          8. root pts/4219.139.223.142Sun Mar 27 15:58 - 18:10(02:11)  
          9. root pts/3113.57.224.3Sun Mar 27 14:28 - 18:25(03:57)  
          10. root pts/3113.57.224.3Sun Mar 27 09:20 - 11:56(02:35)  
          11. root pts/3219.140.210.152Sun Mar 27 01:16 - 01:29(00:12)  
          12. root pts/2220.249.72.138Sat Mar 26 08:42 - 18:38(1+09:55)  
          13. root pts/2220.249.72.138Thu Mar 24 11:19 - 14:44(1+03:25)  
          14. root pts/2220.249.72.138Wed Mar 23 10:26 - 09:13(22:47)  
          15. root pts/2220.249.72.138Tue Mar 22 07:22 - 13:38(06:16)  
          16. root pts/2119.103.112.43Mon Mar 21 18:08 - 18:38(00:29)  
          17. root pts/2119.103.112.43Mon Mar 21 16:26 - 18:07(01:41)  
          18. root pts/3119.103.82.129Mon Mar 21 12:22 - 12:25(00:02)  
          19. root pts/2119.103.121.252Mon Mar 21 11:59 - 14:11(02:12)  
          20. root pts/2119.103.121.252Mon Mar 21 11:50 - 11:53(00:02)  
          21. root pts/2119.103.30.213Sun Mar 20 10:03 - 12:42(02:39)  
          22. root pts/358.19.17.3Sat Mar 19 12:22 - 12:22(00:00)  
          23. root pts/2220.249.72.138Sat Mar 19 07:07 - 16:05(08:58)  
          24. root pts/2219.140.213.209Sat Mar 19 01:39 - 01:55(00:16)

            4、記錄登錄時間

            /var/log/lastlog記錄每個使用者最近登錄系統的時間。因此當使用者登錄時,就會顯示其上次登錄的時間,你應該注意一下這個時間,若此時間不是你上次登錄的時間,表示賬號可能被人盜用了。此可執行文件可用/usr/bin/lastlog指令讀取(在FreeBSD8&FreeBSD8.1下為/usr/sbin/lastlogin)。使用此命令后的記錄如下所示:

          1. [root@localhost ~]# lastlog  
          2. 用戶名  端口 來自 最后登錄時間  
          3. root  pts/2220.249.72.138三 3月 30 08:33:33 +0800 2011  
          4. bin**從未登錄過**  
          5. daemon**從未登錄過**  
          6. adm**從未登錄過**  
          7. lp**從未登錄過**  
          8. sync**從未登錄過**  
          9. shutdown**從未登錄過**  
          10. halt**從未登錄過**  
          11. mail**從未登錄過**  
          12. news**從未登錄過**  
          13. uucp**從未登錄過**  
          14. operator**從未登錄過**  
          15. games**從未登錄過**  
          16. gopher**從未登錄過**  
          17. ftp**從未登錄過**  
          18. nobody**從未登錄過**  
          19. nscd**從未登錄過**  
          20. vcsa**從未登錄過**  
          21. pcap**從未登錄過**  
          22. rpc**從未登錄過**  
          23. apache**從未登錄過**  
          24. mailnull**從未登錄過**  
          25. smmsp**從未登錄過**  
          26. ntp**從未登錄過**  
          27. hsqldb**從未登錄過**  
          28. xfs**從未登錄過**  
          29. rpcuser**從未登錄過**  
          30. sshd**從未登錄過**  
          31. dbus**從未登錄過**  
          32. avahi**從未登錄過**  
          33. haldaemon**從未登錄過**  
          34. avahi-autoipd**從未登錄過**  
          35. gdm**從未登錄過**  
          36. longfei**從未登錄過**  
          37. ldap**從未登錄過**  
          38. www**從未登錄過**  
          39. mysql**從未登錄過**



           5、服務器的郵件日志

            服務器的郵件為/var/log/messages,如果要用專業的日志分析工具來分析的話,我推薦使用Awstats。如果公司的開發系統對郵件的要求比較低,可以配置最簡單的Sendmail或Postfix,通過看郵件日志里的status狀態來判斷郵件到底有沒有正確發送。在配置Nagios服務器時,我也習慣用此日志來判斷報警郵件到底有沒有發送。如果對自己的shell水平足夠有自信,也可以寫腳本來收集郵件服務器的返回狀態等。但專業的事情,建議還是由專業的Awstats工具來做,特別是郵件負載比較大時(比如,每天幾百萬條日志或上千萬條日志),依靠人力完全不可取。

            6、輸出iptables日志到一個指定的文件中

            iptables的man參考頁中提到:我們可以使用iptables在Linux內核中建立、維護和檢查IP包過濾規則表,iptables自身的3個表可能已經創建,每一個表包含了很多內嵌的鏈,也可能包含用戶自定義的鏈。iptables默認把日志信息輸出到/var/log/messages文件中。不過在有些情況下(比如你的Linux服務器是用來作為防火墻或NAT路由器的),你可能需要修改日志輸出的位置,通過修改或使用新的日志文件,可以幫你創建更好的統計信息,或者幫你分析網絡攻擊信息。下面向大家介紹如何建立一個新的日志文件/var/log/iptables.log。輸出iptables日志信息到一個指定文件的方法如下所示:

            1)打開/etc/syslog.conf文件。

          # vim /etc/syslog.conf

            2)在文件末尾加入下面這行信息:

          kern.warning /var/log/iptables.log

            3)保存和關閉文件,使用下面的命令重新啟動syslogd。

          /etc/init.d/syslog restart

            7、日志文件的專業工具

            系統的一些服務,比如Apache、Nginx、Squid,還有MySQL數據服務器,都有自己特定的日志文件,不過由于其格式比較復雜,還是推薦使用專業工具(如Awstats、Cacti)來分析。MySQL的binlog日志可以用mysqlbinlog來分析,Cacti用得比較多的情況是用來分析Nginx負載均衡器一段時間內的并發情況及服務器的流量異常情況。

            8、用dmesg查看啟動消息

            dmesg提供了一個簡單的方法查看系統啟動信息。當Linux啟動的時候,內核的信息被存入內核ring緩存當中,dmesg可以顯示緩存中的內容。默認情況下,dmesg打印內容到屏幕上,當然你可以將其重定向輸出到一個文件中。如果硬件損壞的話,在dmesg日志里是有顯示的,可用以下命令來查看dmesggrep error,其實看到的也就是/var/log/dmesg中的內容。

            9、關于cron的日志

            默認情況下,Crontab中執行的日志寫在/var/log下,我們可以先看看/etc/syslog.conf里的配置,通過命令grep cron/etc/syslog.conf來查看,如下所示:

          1. [root@localhost log]# grep cron /etc/syslog.conf  
          2. *.info;mail.none;authpriv.none;cron.none /var/log/messages  
          3. # Log cron stuff  
          4. cron.*/var/log/cron

            接著看/var/log/下的cron日志,如下所示:

          1. [root@localhost log]# ls -lsart /var/log/cron*  
          2. 80 -rw------- 1 root root 72378 03-20 04:02 /var/log/cron.2  
          3. 812 -rw------- 1 root root 819861 03-27 04:02 /var/log/cron.1  
          4. 524 -rw------- 1 root root 525442 03-31 13:59 /var/log/cron

            當crond執行任務失敗時,Crontab的日志會給用戶發一封郵件。如果在服務器上發現一個任務沒有正常執行,而crond的郵件發送也失敗,那么就檢查一下mail的日志,看看是否是因磁盤空間不夠而造成的。

            為了方便收集crond的日志信息,也可以將cornd錯誤輸出和標準輸出日志都指向自定義的日志文件:0 6 * * * root /root/test_file.sh >>/data/log/mylog.log 2 >&110.用shell或perl來分析日志

            我們在維護線上服務器時,并不是每臺服務器的日志都需要查看,可以偏重于我們有需求的服務器。如果不太喜歡用Awstats來分析Nginx負載均衡器的日志,可以編寫一段分析日志的腳本,下一節我將跟大家分享用shell編寫的分析Nginx日志的腳本。

          posted @ 2011-11-17 16:00 順其自然EVO 閱讀(652) | 評論 (0)編輯 收藏

          第三方測試保證什么?

            直至目前,我國還沒有適應國情的、系列化協調配套的、工程化的軟件生產過程管理、軟件質量評測、控制技術規范和法律規程指導,為此,我國急需以大力發展軟件第三方測試工程為基礎,建立、健全我國軟件工程監理體制。

            第三方測試有別于開發人員或用戶進行的測試,其目的是為了保證測試工作的客觀性。從國外的經驗來看,測試逐漸由專業的第三方承擔。同時第三方測試還可適當兼顧初級監理的功能,其自身具有明顯的工程特性,為發展軟件工程監理制奠定堅實的基礎。

            第三方測試工程主要包括需求分析審查、設計審查、代碼審查、單元測試功能測試性能測試、可恢復性測試、資源消耗測試、并發測試、健壯性測試、安全測試、安裝配置測試、可移植性測試、文檔測試以及最終的驗收測試等十余項。

            測試并不僅僅是為了要找出錯誤。測試方還需要對錯誤進行歸類和總結,通過分析錯誤產生的原因和錯誤的分布特征,可以幫助項目管理者發現當前所采用的軟件過程的缺陷,以便改進,更好地幫助用戶。根據軟件工程的要求,測試工作應貫穿開發的全過程,如右圖所示。

            從測試流程中可以看出,編碼和單元測試基本上屬于程序的調試,一般由開發方自己進行。作為第三方測試,定位在系統測試和集成測試最為有效。但是,為了得到高質量的軟件,第三方也要適當介入編碼與單元測試,能夠更好地保證測試的有效性、準確性和可信性。

            認清“第三方”的責任

            第三方測試以合同的形式制約了測試方,使得它與開發方存在某種‘對立’的關系,所以它不會刻意維護開發方的利益,保證了測試工作在一開始就具有客觀性。第三方一般都不直接參加開發方系統的設計和編程,為了能夠深入理解系統,發現系統中存在得問題,第三方測試必須按軟件工程的要求辦事,以軟件工程的標準要求開發方和用戶進行配合,從而較好地體現軟件工程的理念。引入第三方測試后,由于測試方相對的客觀位置,由用戶、開發方、測試方三方組成的三角關系也便于處理以往用戶、開發方雙方糾纏不清的矛盾,使得許多問題能得到比較客觀的處理。

            第三方測試不同于開發方的自測試。由開發人員承擔的測試存在很多弊病,除去自身利益驅使帶來的問題外,還有許多不客觀的毛病,主要表現在思維的定勢上。由于他熟悉設計和編程等,往往習慣于按一定的“程式”考慮問題,以至思路比較局限,難于發現“程式”外存在的問題。因為第三方測試的目的就是為盡量多地發現程序中的錯誤而運行程序的過程,可以更多的發現問題。此外,隨著系統越做越大,客觀上講開發人員也無精力參與測試,同時也不符合大生產專業分工的原則。

            第三方測試不同于用戶的自測試。用戶是應用軟件需求的提出者,對于軟件應該完成的功能是非常清楚的,是進行功能驗證的最佳人選。客觀情況是,大部分的用戶都不是計算機的專業人士,很難對系統的內部實現過程進行深入的分析。對系統的全面測試,功能測試僅僅是一個方面,還要包括并發能力、性能等多種技術測試。這些測試對技術有很高的要求,必須由計算機的專業人員才能完成。

            第三方測試一般還兼顧初級監理的職能,不但要對應用進行各種測試,還進行需求分析的評審、設計評審、用戶類文檔的評審等,這些工作對用戶進行系統的驗收以及推廣應用都非常有意義。

            如何組織管理

            在測試的過程中,用戶、開發方與測試方形成了一個三角關系,從最終目標來講,三方是完全一致的,都是希望保證系統穩定運行。但在測試過程中,三方的關系卻是既對立又合作。對立是指各自堅持自己的職責,合作是指每一方的工作都需要其它兩方的支持和幫助。

          軟件測試的過程

            為了保證測試的順利進行,測試方必須強化內部的組織管理。根據我們的經驗,完整的測試機構必須包括業務分析部門、技術支持部門、規劃設計部門和綜合后勤部門。例如在中國現代化支付系統第三方測試項目當中,信息化工程總體研究中心的人員分工大致是:部分人員專攻支付業務,部分人員專攻技術支持,部分人員負責測試規劃與綜合案例的設計,部分人員負責現場情景調度,部分人員從事案例的細化與運行。測試結果表明,總體上達到了各司其職、忙而有序。


           “第三方”測試什么

            根據軟件的特性,第三方軟件測試工程可劃分為三種類型四個層次。

            (1) 第一類是系統軟件、環境軟件和各類工具軟件等的測評。這類軟件多作為計算機的環境或作 “公用” 支撐軟件,產品類型多、市場銷量大、生產廠商多,產品的特點大都有企業、甚至國際的產品質量標準,用戶選擇使用時大都希望進行產品功能、性能的對比測試;對于這類軟件的評測重點是軟件產品的功能、性能和特點評測。

            (2)第二類是面向應用軟件系統的測評。這類軟件,具有很強的行業應用特性,往往是要由用戶與開發商簽定項目合同,開發商負責開發,用戶負責驗收。對這類軟件的評測,根據用戶對第三方的依賴程度,又可分為兩個層次。

            ① 第一個層次只對應用軟件系統進行綜合性功能、性能測試。大體是在軟件系統級進行“黑盒”測試,并不對軟件過程進行控制、監督。

            ② 第二個層次是對應用軟件系統進行質量監理與評測。不僅承擔第一個層次的任務還要對軟件過程進行監控,具備初級軟件工程監理的職責。

            承擔該類軟件質量監理評測的第三方,承擔軟件過程質量監理的責任,在軟件生命周期過程中,從軟件定義開始,要對軟件過程從質量保證角度進行規范化的監督、管理和控制。評測工作不僅包括軟件生命周期各階段的評審,而且還要對程序系統,進行包括模塊白盒測試在內的系統集成、系統驗收等測試。第三方實際上是軟件業主授權的初級的軟件工程監理。

            (3)第三類是對軟件企業的CMM評估認證,也是最高層次的軟件評測。

            了解測試評估

            測試評估是軟件測試的一個階段性的結論,用所生成的測試評估報告,來確定測試是否達到完全和成功的標準。在測度評估階段向用戶提供強有力的支持,包括通過測試報告,驗證測試結果是否符合測試計劃中制定的測試標準;根據缺陷報告提供的測試結果數據,給出軟件質量和測試完整性的評估報告;特別在以下幾方面對測試的過程進行評測:

            (1)評估測試用例覆蓋:測試的目標是確保100%的測試用例全部成功地執行。如果這個目標可行或不可能達到,則要根據不同的情況制定不同的測試覆蓋標準。主要考慮風險和嚴重性、可接受的覆蓋百分比。

            (2)評估代碼覆蓋:需要斷定測試目標期望的總的測試代碼行數,在測試中真正執行的代碼行數及其百分比,將此結果記錄在測試評估報告中。

            (3)分析缺陷:對缺陷進行分析,應遵照缺陷分析策略中制定的分析標準。

            最常用的缺陷分析標準有三種:缺陷分布——缺陷數量作為隨缺陷屬性變化的函數(如狀態和級別);缺陷趨勢——缺陷數量作為以時間為條件的函數;缺陷滯留——特殊的缺陷密度報告,缺陷數量與缺陷在某一狀態保留的時間長短有關。

            (4)確定測試是否達到完全和成功的標準在此階段將判定測試是否已達到完全并可接受,生成測試結果報告。

          posted @ 2011-11-17 15:58 順其自然EVO 閱讀(153) | 評論 (0)編輯 收藏

          敏捷測試理論以及實踐(4)

          上面已經談到了準敏捷測試模式了,離咱們所說的敏捷測試已經無限接近了,但是要了解真正的敏捷測試,還是需要回到敏捷開發上來講,前面一開始已經說過,敏捷測試嚴格上來說其實是屬于敏捷開發的一部分,所以敏捷開發的價值觀也會同樣適用于敏捷測試,那么敏捷有哪些價值觀呢?總共是五個,分別是簡單、溝通、反饋、勇氣、謙遜。

            光看這五個詞,我想大部分人可能會暈乎了,不知所云的,難道敏捷就五個詞能概括了?就像電影里出現的武功秘籍一樣,一招就一個圖,我們看了根本就不知道是啥,人家一看就能煉成神功了。

            其實呢,這幾個價值觀并不是教你怎么去實現敏捷,而是教你用一種什么樣的態度去對待開發:要時刻想著最簡單的方法去處理需要解決的問題,要經常與和開發/客戶溝通,對于積極對待反饋,要有勇氣去做決策,對團隊各個成員都要尊重。這么幾個價值觀,對于你去初次理解敏捷而言,我相信幾乎沒有用處,甚至會讓你覺得很迷茫,到底敏捷是啥,但是一旦當你已經真正理解了敏捷的時候,你就會發現,誒,的確是這樣子的,說得很好!(哲學上說,事物的發展總是需要經歷否定之否定階段,對知識的理解也是一樣,一開始看一下概念覺得很簡單,覺得自己已經理解了(肯定);深入下去,發現問題越來越多,覺得自己沒辦法去理解(否定);到最后經過不斷地思索與實踐,終于徹底理解后,你就會覺得一開始那些簡單的概念很精辟,就應該那么簡單!(否定之否定=肯定))

            不過相對于當初的先行者而言,我們又是幸運的,因為很多前輩已經幫我們理解了這些價值觀,并且研究出了很多實現的方式, 但是我們也不能去奉行拿來主義,畢竟是人家想出來的,是基于人家的實際情況,對于我們的情況不一定會適合,最好的辦法就是取其精華,去其糟粕,結合實際,加以改進。

            接下來我就開始講什么是真正的敏捷測試模式和我們公司怎么結合它來取其精華,去其糟粕,結合實際,加以改進。

            當然這個所謂的真正的敏捷測試模式也是業內主流的模式,我們公司的實際運用中還是有所區別的,下面都會提到。

            跟前面講到的準敏捷測試相比,真正的敏捷測試其實也只是加以改進和豐富,所以與客戶的溝通、積極響應需求的變更、以及開發與測試的同步,這些都還是存在的,當然敏捷測試改進和增加了許多地方,主要有:

            1、過程需要實現迭代:每個迭代周期需要完成一定量的功能,沒有完成的功能不能Check In代碼,這些功能需要經過嚴格測試,并且開發需要修復主要的嚴重Bug,這樣子在最后就得到一個可以工作的并且相對穩定的Build,這個迭代周期就算完了,然后開始下一個迭代周期。這樣就類似與我們修路一樣,修路的話需要打好幾層地基,每層地基打嚴實后,再鋪上面一層,這樣子即使最上層破了,只要修一下最上層就好了,不會影響到下面層的質量,如果是最下面那層沒打嚴的話,一出問題每層都會損壞,要修的話,要全部扒掉這么多層地基才能修好。所以迭代對于測試的要求就特別高了,因為只有把這個迭代的主要Bug找到并修好,下面的迭代周期才能不受影響,才能確保以后出現的問題不用“打到最底層”才能被修好,“打到最底層”意味著就是人力,物力,時間以及最重要的產品的質量!

            下面是一個迭代的簡單示意圖,應該可以理解的,就不多講了。

            2、測試不單單要和客戶溝通,也要跟公司里的人經常進行溝通,因為一個公司的所有人其實都只有一個共同目標,就是把公司發展好,這樣子其他的比如自己的發展,待遇等等才有可能實現。那么體現在實際的工作中就是:

            a)測試需要完全理解需求講的知識點,不懂或者有疑慮要及時跟設計溝通,這樣子可以讓你更好地理解需求,甚至幫助設計人員發現錯誤;

            b)測試人員需要經常跟開發人員溝通,看看做的功能,修的Bug主要會影響哪些其他模塊,主要出現問題的原因是什么,怎么弄可以最快速度重復出Bug來,這樣子就幫助自己掌握測試的方向以及幫助開發快速修復Bug以及避免以后出現類似Bug。

           c)測試也需要跟測試人員之間進行溝通,來探索怎么能發現有質量的Bug,怎么能覆蓋到很多的測試點,怎么解決自己沒辦法解決的問題,幫助他人也幫助自己。(每日立會是其中一個好辦法)

            d)測試還需要跟自己溝通,不斷地經常反思自己的優點和缺點,反思團隊的優點和缺點,反思公司的優點和缺點,大膽提出和實施改進意見,為以后更好地開展工作做準備。(反思會是一種辦法)

            溝通,只有溝通才能了解雙方的想法,才能及時消除前進中的阻力和困難,讓大家在同一方向上用同一個信念前進。

            3、建立有效的監測機制:這里所謂的檢測機制主要有兩點,一個是對測試的監測,另外一個就是對產品的監測。對于測試的監測主要在于檢查測試的覆蓋面是否全面,發現的Bug與測試覆蓋面的一些對比數據,這些有助于提高測試的覆蓋面從而提高Bug發現率;而對于產品的監測就是主要有兩點,一點就是做功能和修Bug的進度是否是可控的,可預判的;另一點就是發現Bug的情況,也就是產品的質量是怎樣的,質量發展的趨勢是怎樣的。

            我主要想補充的是這么三點,當然要是我想到其它的,我還是會修改這篇文章的。看過網上也有很多人來寫關于敏捷測試的一些文章,很多都是國外英文解釋的標準中文翻譯,當然也有很多是自己的一些想法,所以遠近高低各不同,不過既然敏捷只是一種思想,也就不會拘泥于何種實現方式,所以各人有不同想法都Ok的。其實說的再過一點,只要你自己認為你的方法是敏捷的,那你就可以認為是敏捷的,不用關心人家怎么想,人家的方法不一定適合你的,你只要有辦法能在正確的時間交付正確的產品,那就Ok了。

            所以我接下來就會按照我們公司的流程來實際介紹一下敏捷測試在我們公司的實現,中間可能會有一些地方為主流敏捷測試所不容的,但是我覺得他們比較符合我們公司的實際,如果大家有不同的意見或者更好的方法,我也會悉心接受。

            (未完待續)

          posted @ 2011-11-17 15:57 順其自然EVO 閱讀(184) | 評論 (0)編輯 收藏

          測試培訓引發的感想

           病初愈,最近做了幾次培訓,性能測試和測試工具。現在自己弄了一個論壇也把很多的心思放到性能測試上,個人喜好所在。

            在這幾培訓和最近別人問的問題中,感覺到有這么幾件事情:

            1、有些人很想接觸性能測試,但是一到具體的細節,興趣索然。不管是工具的操作,還是理論的理解。要說我講課能力有限,可以把人講的沒有興趣,這是我個人問題。這個因素在實際的操作中,總不會有吧。實際的操作還是有些人覺得沒什么意義。有的人就像是見了刺猬,不知道從哪下口。要說工具有多麻煩,我覺得也不至于。至少LoadRunner比word簡單多了。我曾經說:一周時間完全可以掌握LoadRunner的操作,其他的就要看練習和經驗了。這么說,是不是有經驗的過來人,感覺對?當然人不可能都一樣的。我想強調的就是工具并不復雜。復雜的是應用。

            2、理論對性能測試的指導作用容易被忽視。很多時候,技術人在考慮問題的時候,都是技術細節,覺得只要是理論都挺無聊的。大而泛,忽悠人用的。從我自己的感受來說,我覺得完全不是這樣。當然對某個詞的定義這樣的理論問題,我們用不著太細究。但是性能測試理論,真的對我們的實際工作沒有指導意義嗎?或者說意義不大?比如,在討論基準測試的時候,很多人都知道基準測試是什么意思?但是很少有人能把基準測試的范圍和程度說清楚。應該測試什么?做到什么程度?這些僅是技術問題嗎?在相應的位置上的測試人員,有沒有考慮過你的職位能做或不能做什么事?能做到或做不到什么事情?應該做或不應該做什么事情?這些都會對項目的質量產生影響的。

            3、面對性能測試過程、結果、數據,真的理解清楚了嗎?針對同一個數據和過程不同的人感覺到的層面是不一樣的。這就是經驗和能力的區別,就算是兩個人做的結果完全一樣,我想由于能力不同,也會這一結果的理解不同。在多次培訓的過程中,我解釋最大、最小、平均、標準方差等值的時候,都會有人有醒悟的樣子。我們說為什么這幾個值,重要到放在summary里面,為什么不是中位數?為什么不取個微分放那兒?其實,這都是有設計上的原因的。所以說,我們面對這些東西的時候,要知道它具體的含義,從而把握的更清楚。也對我們做的事情更確定。不會經常出現別人問幾句就問倒了的現象。

            寫這個文章就是想告訴大家:

            1、技術是一步步積累的;

            2、理解自己做的事情。

          posted @ 2011-11-17 15:56 順其自然EVO 閱讀(128) | 評論 (0)編輯 收藏

          120度視角看PD

           跟著師傅做了幾個日常,參加了幾次需求的討論,漸漸感覺到做需求還是需要花費不少精力的。如果說對原來的業務非常熟悉,相對來說做起來就輕松一些,而要是從來都沒接觸過這塊內容,就會感覺有點像丈二和尚摸不著頭腦:知道用戶想要什么,但是卻不知道如何跟現有的系統更好的結合起來,我們到底能夠提供什么?用戶的需求是否合理?做需求分析,不能跟著用戶的感覺走,因為這樣的話,只能是用戶說一你做一,而如果用戶不能很好的提煉需求的時候,我們就會進入一個死循環了。在和用戶討論的時候,我們首先要知道用戶為什么會提出這個需求?能夠幫助他解決什么樣的問題?希望達到什么樣的效果?并不是所有的用戶都能正確的表達自己所想要的東東的。

            一個比較典型的例子:最近跟一個營銷平臺的PD在聊用戶一般會怎么樣來提需求的時候,談到曾經做過的一個營銷活動的推廣需求,運營人員為了推廣某一項活動,往往會比較糾結在頁面上這個按鈕應該如何放置,需要新增加幾個顯示字段才能達到這次活動的效果,那這是用戶最根本的需求嗎?不是,實際上他真正需要的是應該給他提供幾個維護活動的界面:類似什么樣的活動時應該出現下拉的選擇框進行維護,什么樣的活動應該給他提供幾個選項項。他們習慣上只會關注到現在他需要什么樣的功能,在下次需要新的功能的時候,又會來提新的需求,所以對于類似這樣的問題,PD的作用就顯現出來了:透過現象看本質,要善于抓住用戶描述問題的過程,引導他拋出隱含在這個需求背后的衍生內容,復述一下用戶所說的目前存在的問題,了解一下用戶可能會用的方式有哪些?并說明對流程的理解,再結合流程中的不明確點設計要詢問的問題,并將客戶的反饋記錄下來,然后與客戶確認一下是否有遺漏的內容,增加這些屬性是否就都已經覆蓋了他所想要的所有功能了?

            我想這其實也就是需求分析的價值所在吧。這步工作如果沒有做好,往往就會導致考慮得不夠充分而引起新的需求變更,甚至關系到開發出來的軟件產品能否得到用戶的認可,客戶能否真正運用我們的產品幫助他們解決業務或管理上的問題。當然要做到這一點,也不是一兩天就能搞定的,需要一個逐漸積累的過程,學會如何巧妙的向客戶提問也是一門非常值得我們去思考的學問。業務方在需求的提出方面起著主導作用,但PD必須要能夠對客戶的需求進行過濾,要在非常了解原有系統功能,架構設計的基礎上來給出建議,這樣才有可能在需求階段規避掉一些具有比較大業務風險、技術風險的需求。

            我們與運營方討論的過程中會收集到一些新的需求,回來后一般需要對用戶繁雜的業務進行流程的提取,把那些分布在各個部門的同一種業務提取出來進行初步的整理和分析, 把大致的功能點整理一下,遇到不明確的、有疑問的再咨詢師傅,必要的時候還要跟開發進行討論實現上是否可行。整體的思路是這樣的:業務的目標是什么?用戶需要怎么做才能完成業務目標?系統要能為用戶提供哪些支持?系統必須符合哪些規則?展現的形式可以包括:用例的分析,業務流程和活動輸入輸出的分析,業務操作規則的整理,通過確定用戶的任務,每項用戶任務的步驟,定義對業務具有重要意義的數據并確定已有的邏輯關系。在確保業務描述基本沒什么問題的前提下,邀請開發和業務方進行評審,并對業務流程上不對的地方進行修改。經過幾次來回的交流,最終才能取得較全面的需求。需求分析關注的目標應該是“做什么”,而不是“怎么做”,所以在描述需求的時候,表述的方式應該是“實現什么”,而不是“如何實現”。

            做需求分析的過程,其實跟我們的測試分析工作有非常相似之處:我們在測試活動中,也都是從理解業務的需求開始的,首先需要明確測試需求(What),才能決定怎么測(How),通過了解這個項目具體是做什么的,完成一個什么樣的業務,哪些功能是最常用的?哪些功能是重點?還有就是用戶在處理實際業務時都要作些什么,多個業務之間的先后順序是怎樣的,用戶在處理業務時對于哪些地方有特別的要求,等等。這部分規則,就是我們的測試需求中最基本的一部分。測試需求不明確,只會造成獲取的信息不正確,無法對所測項目有一個清晰全面的認識,活在自己世界里的人是可悲的。

            測試需求并不等同于軟件需求,它是以測試的觀點根據項目需求整理出一個checklist,作為測試該項目的主要工作內容。根據所測的功能點進行分析、分解,從而得出著重于某一方面的測試,如界面、業務流、接口、數據等等。理解項目需求,需要從整體到局部,從局部到細節。測試人員不要總只了解自己模塊的內容,要先從整個項目的業務流程入手,然后再到自己的功能模塊,這樣的好處是,測試人員了解上下游的交易功能,更加的能夠了解業務的實現方法。經過一番狂轟亂炸式的深入理解之后,再將自己負責的模塊有條有理的整理出來,然后講解給項目組成員,這樣也有利于模塊之間的整合理解,再由他們提出各種各樣的問題,若能很輕松的回答出各種各樣的問題,說明你對項目的理解已經很到位了,而如果在提問的過程中有很多的問題,都是你之前沒有考慮到的,那說明測試的需求分析做的還不夠到位,這時你就需要好好總結一下,是因為自己經驗方面的問題,還是由于其他方面的原因。總結起來測試需求的內容大致如下:

            1、理解系統的流程:整理出業務的常規邏輯,一項一項列出各種可能的測試場景,同時借助于需求文檔資料,來確定該場景應該導致的結果

            2、進行功能的分解:系統包含哪些主要的功能,每個功能的期望值是什么;各個模塊處理哪些業務,各子系統模塊之間的數據接口關系,基礎數據從哪里進入,通過哪些處理生成哪些結果等等。在做完以上步驟之后,將業務流中涉及的各種結果以及中間流程分支回顧一遍,確定是否還有其他場景可能導致這些結果,以及各中間流程之間的交互可能產生的新的流程,從而進一步補充與完善測試需求。

            以上只是個人對如何進行需求的捕獲以及怎么樣做好需求理解的一些看法,同時也是對我自己前段時間的工作做的一點梳理,希望大家能多多交流,共同進步,把我們的測試工作做的更好。

          posted @ 2011-11-17 15:55 順其自然EVO 閱讀(134) | 評論 (0)編輯 收藏

          巔峰訪談:應用質量管理與軟件測試

           主持人:首先,我給大家介紹一下我們推出的巔峰訪談系統活動,我們是邀請來自廠商的領導和專家,來解讀一下技術趨勢和應用方案。今天我們請到的是惠普公司的Mark Sarbiewski先生和王瀅女士。

            Mark Sarbiewski先生是資深的產品市場主管,他全面參與惠普軟件的市場工作,在測試軟件領域有非常長的工作經歷。那么,王瀅女士是中國惠普軟件部技術顧問,她也有多年從事測試軟件的售前咨詢和技術支持的經歷。

            我們第一個環節是請Mark Sarbiewski先生為大家講解一下惠普提出應用質量管理包括哪些具體的內容。

            Mark Sarbiewski:非常感謝大家能夠發出這樣的邀請,抽出時間和我們一起做這樣的訪談。首先,我簡單地和大家做一個介紹,和大家談一談惠普在軟件應用質量管理方面的一些觀點。

            在我介紹的開場白,我想引用一個非常著名的資深公司說過的一番話,這個話的中心思想軟件的最終目的在何處呢?當最終用戶使用這樣的軟件的時候,軟件的性能是有效的,而且是安全的。所以,我們是最開始在這個價值上面,把它最終傳送到用戶手上,讓他覺得物有所值。

            接下來,我們再看另一則引言,這其實告訴我們一個思想,就是軟件是不斷變化的,它現在已經變得越來越復雜,而且與很多事物都是相關聯的。這提醒我們如果我們依然用10年前的老辦法來做軟件,我們很難在日新月異的軟件市場當中獲得成功。

            那么,我們來用這頁簡單地看一下應用軟件方面的一個變化。最一開始的時候,我們只是看到一個孤立形式的軟件的應用,我們更多地是用于金融行業。

            當時的問題是當它用于金融行業的時候,它最一開始的效果是不錯的,但是隨后我們要對它進行一些調整的時候,卻發現很難做出這樣的調整。

            現在,我們在全球很多公司看到一個跟以往不同的情況,就是現在都采取一個不同的架構,我們是根據服務來選擇軟件,而且這個軟件因為取決于服務,所以可以應用到整個的業務流程當中。

            現在我們也很高興見到了很多新進的科技產生,比如說Web2.0的技術,這使得應用可用性更強,而且具有更高的挑戰性,同時帶來的可用性和安全方面、性能方面的挑戰。惠普希望能夠在這個基礎上,更加了解我們客戶的需求,能夠更好地幫助他們。

            在惠普,我們采取的解決方案第一步就是把質量是三個支柱支撐的,首先是功能性,就是它是否能夠很好地運行。第二個支柱就是性能,當有上千萬的用戶來使用這個應用的時候,它是否能夠正常運行。第三個支柱就是是否安全。

            那么,這個解決方案的第二步,就是在整個應用的生命周期當中,我們支持的是哪一個環節。很多人在談軟件的開發周期、生命周期,這意味著什么呢?這是開發之初一直到最后的交付使用。

            如果說僅僅關注于開發這個環節的話,那么實際上會忽略很多真正應該值得我們去注意的問題,如果我們來看一個完整地應用生命周期的話,它應該是更加寬泛的,應該延續到最終用戶使用運行起來這個階段。

            因為在這個時候,就是在真正運行這些軟件的時候,或者是使用這些應用的時候,我們這個時候發現的問題所需要來解決的資源、人力,甚至這個問題產生對于公司造成的一些風險、影響,都值得我們去關注。

            在我們解決方案中,最后的一步就是要統觀全局,縱觀整個的生命周期,找出幾個最重要的點,能夠使得我們的軟件應用在交付客戶使用的最后可以發揮它的效用,就是最后是我們需要關鍵控制的關鍵控制點。

            我來談一談為什么我們要談論著幾個關鍵控制點,或者說戰略控制點。因為很多的公司他們在考慮是應用什么樣的科技、技術來做研發,來選擇它們的應用,是用JAVA還是用.net來做,是買這樣的應用還是自己研發這樣的應用,但是真正的問題在于他們是否理解了需要這個軟件、需要這些應用背后的需求,如果最一開始沒有把這個需求搞明白,沒有和他們的客戶溝通,那么應該說最后的效果也是不好的。

            所以,我們提倡的是應該正確地去理解這些需求,同時也要分析所有這些需求所意味的風險,這樣才能夠做出適當地選擇來完成測試,最后把這個應用推上線。

            我們的解決方案就是有各種各樣不同的中心,這就是我們的產品組合,使各個部門所相關到的人員都能夠彼此聯系,做出一個協同的決定。

            最后,我想用另外一句引言來做結,這個引言告訴我們在很多的IT公司、IT部門每個人都應該很忙碌,但是我們不應該以這種表相認為這個項目就做成功了,我們應該這個結果或者是效果來衡量、評價所做的應用是否成功。

            以上就是我簡單地介紹,我們來進行問答環節。

            主持人:我們這次問題的來源,首先是為這次訪談我們準備了一些具體的問題,同時我們在網上發出了一個征集問題的帖子,我們大概有近40位的網友在上面留言,他們提出了實際工作中包括軟件測試人員職業發展的問題。

            首先,我想請問一下Mark Sarbiewski先生,在剛才您提到的介紹中講到,現在是越來越復雜的IT系統給企業帶來了業務的風險,那么在這個很長的應用生命周期的過程中,誰需要來為規避這些風險負責呢?

            Mark Sarbiewski:這個問題提得相當地好,我總體的一個答案是說,并沒有說某一方要為所有的風險買單,并不是這樣一個情況的。說起來,現在軟件應用對于每個公司來說是至關重要的,所以我們應該設立一個中心風險管理的團隊,來對待這些風險,每個團隊有一個負責人,但是并不是說這個負責人就應該對于風險負責,而是團隊當中的每一個人都應該負責,一直到設計人員、開發人員、運行團隊、質量團隊每一個人都應該負擔這樣的責任。

           主持人:剛才您也介紹了我們為企業提供了很多包括質量中心等提供服務的解決方案,那么目前在國外,企業應用自動化測試的

            Mark Sarbiewski:應該說這樣的一個趨勢是非常強勁的,有幾個驅動的因素。首先,我們現在看到軟件已經是驅動整個企業業務完整地一個重要的因素,我們在企業的每一個角落都能看到軟件的身影。但是,企業發展業務需要增加,那么應用也要增加,可是企業并不能說增加多少業務就增加多少人做軟件開發和測試,這也是為什么我們看到自動化測試給大家帶來的便利,以及它的趨勢走強的原因。

            主持人:同樣的問題我想問一下王瀅女士,我們國內的企業他們是否同樣表現出對于自動化測試表現出顯著的、越來越強的需求呢?

            王瀅:沒錯,市場上包括我們很多用戶也在不斷地向我們咨詢一些如何采購和實施自動化測試工具的愿望和想法。基本上,我們的用戶他們會去考慮自動化測試這樣的一個目的基本上有兩個驅動力。第一個驅動力是對于在測試這個領域,因為我們知道它是非常繁瑣,需要花費很多的時間、人力的事情,對于這樣的一種活動來講,一方面我們的用戶會發現有些測試的工作是沒有辦法通過手工來進行完成的。比如說我們大家都比較熟知的性能測試,那么我們以前的應用可能它的模式用戶量非常少,但是現在隨著BS應用逐漸地普及,越來越多的應用會使用一些關鍵的應用來進行一些在線的交易或者是活動。因為這樣的應用是直接面向客戶的,所以它的性能是不是足夠好,用戶體驗是不是足夠愉快,對于我們的用戶來講是非常重要的。但是,如果我們的用戶應用的用戶量是到了一定的規模,用手工測試可以說是不可能完成的任務,所以這個時候我們會碰到越來越多的用戶考慮用自動化的方式來進行測試。

            主持人:剛才二位介紹得比較多是我們的測試解決方案和需求方面的情況,但是我們知道軟件測試不但是工具和方法的問題,它和測試的工作人員也是有非常緊密的聯系。那么,我首先想請問一下Mark Sarbiewski先生,目前國外專門從事軟件測試工作的這些人的培訓、分工和就業的情況是怎樣的?因為現在在國內,普遍有一個很迫切的需求,就是認為軟件測試人員是中國軟件業發展最缺失的一塊人才。

            Mark Sarbiewski:以我們的應驗來看,我們和客戶合作或者是和第三方合作伙伴合作的時候,我們感覺到現在的質量保證團隊和開發團隊、運行團隊的地位幾乎是平起平坐了,我們感覺到了這樣的趨勢變化。因為很多的公司越來越認識到,最后做出的應用質量的可靠,對于整個的公司來說是非常重要的,而且也非常需要十分專業的人員來做這樣的工作。因此,我們在測試人員這個行業的培訓和職業發展上面,都看到一些可喜的變化,比方說他們的薪酬會有提高。

            現在,我們的測試團隊的人員在這樣的發展下面都有很多好的機會,那么有沒有好的機會他們首先要做到兩點,首先他們要十分了解他們所要運用的工具和這些技術,就是我們今天談到的比如說性能測試和自動化測試,所以我們的測試人員不僅僅要知道如何成為一個好的測試人員,同時要知道他們所運用的技術和工具如何更好地幫他們完成工作。

            主持人:接下來我想問一下Mark Sarbiewski先生,在中國現在IT外包服務也是發展得非常好的一個新的行業,同時,我們國內也有非常多的獨立軟件開發商,就是ISV,那么自動化測試對于他們來說又能夠起到哪些幫助呢?

            Mark Sarbiewski:這是一個非常好的問題,今年年初的時候我在印度也和很多的軟件外包商談過,有過很多的溝通,他們都是惠普的合作伙伴,他們的業務模式也在悄然地發生變化。在一開始的時候,他們有很多非常非常出色的軟件測試人員,他們的成本非常低,大家多靠手工來完成工作。但是,現在對于這些軟件人員來說,他們的工資都提高了,他們有更多的機會能夠跳槽,所以這些外包公司的管理層跟我說,他們希望能夠有更多地自動化的測試和自動化方面的應用。也就是說,能夠用更少的人,但是這些留下來的更少的人,應該具有更高的專業水平。

            主持人:Mark Sarbiewski先生剛才介紹的是印度的一些情況,我想問一下王女士,在中國是否也有大型的ISV和知名的IT外包企業也在使用咱們的這個解決方案?

            王瀅:沒錯,在我國內實際上我們有很多的合作伙伴他們是非常大型的集成商,或者是ISV或者是IT外包企業。

            主持人:您剛才說的是現在也有這種軟件外包企業把測試服務作為一個可以對外提供的服務項目?

            王瀅:沒錯。

            主持人:那么方便介紹一下他們這種測試團隊可以達到什么樣的規模嗎?

            這個測試團隊可能每個用戶的規模不是非常類似,基本上我們看到從幾十人到上百人都會有。

            剛才我們提到了外包的情況,現在對于企業用戶來說,他很多的IT項目也是交給外包的合作伙伴去做。過去我們看到企業在選擇合作伙伴的時候,往往有一些資質的要求,比如說看服務商的CMM或者是CMMI的級別的方式。那么,我想問一下二位專家,現在光看這種服務商的資質,是否足以保證我們的應用質量是可靠的?有沒有一些建議可以給這些企業,讓他們在選擇外包服務商的時候,知道怎么考量我們把服務外包出去之后他得到的效果?

            Mark Sarbiewski:應該說CMM本身也是不錯的選擇,但是并不是有很多的公司都達到很高的級別,所以光看CMMI或者是CMM還是不夠的。那么,我有三個建議,第一個是可以咨詢一下同行,比如說別的公司也同樣地跟你一樣有外包服務的需求,你可以咨詢一下他們的結果是什么樣的,咨詢一下他們的感受和意見。

            主持人:那么,比如說我們企業常見的像ERP或者是CRM這種大型系統實施之后,企業是否可以要求實施企業他的咨詢公司和實施方為他提供一個第三方的性能測試的評估報告,以此來作為系統上線的前提的條件呢?

            Mark Sarbiewski:對于企業來說,要求有一個這樣的測試報告是非常明智的一個想法、決定,因為這個企業需要理解這樣的測試是怎么進行的,最后的結果是什么。那么,我的意見是無論這個測試報告來自第三方或者是外包商自己都是沒有問題的,如果說外包商自己就能夠做出這樣的測試,并且可以十分良好地保證這個質量也是不錯的,當然第三方也可以。

            主持人:我們也收集到非常多來自網友的問題,我們剛才很多的問題可能比較嚴肅,接下來問一個網友比較輕松的問題。

            急性子的人是不是適合做軟件測試工作,軟件測試工作對于測試人員的性格會不會有要求?

            Mark Sarbiewski:這個問題的確很有意思。我覺得作為一個好的測試工作人員,他應該具有非常豐富的想象力,而且他們必須考慮到我客戶在使用這些應用的時候會有一些什么樣天真的想法。因為對于天真的客戶來說,他們并不考慮軟件是怎么開發出來、怎么測試完的,客戶只考慮我怎么用。所以,作為一個好的測試人員,他應該想象客戶怎么用,會出現什么問題,然后來保證軟件的質量。說起來,急性子的人確實不太適合做測試,因為這個工作還是需要一些耐心的。

            王瀅:除了剛才Mark Sarbiewski提到的需要一些想象力和耐心,我覺得還有一個我個人認為比較重要的特征,就是他的好奇心。可能他發現了一個問題之后,他非常期望去了解這個問題為什么會產生,我們如何才能找到它的原因,怎么去很快地、很有效率地解決這個問題。這樣的話,通常會給這樣的人帶來很大的成就感,我想這個也是他能夠從中得到一些成就感和樂趣的來源。

            Mark Sarbiewski:我還要再加兩條,第一條,測試人員應該是一個非常非常細心的人,并且在遇到問題的時候不會追求走捷徑,應該是一個腳踏實地的人。還有一點,他應該是一個非常堅強或者是非常強悍的人,因為他的背后是他的客戶或者是開發團隊、項目經理,他們都要求在最后測試這一步的時候,把這個應用做好,最后把它推出去、交付給客戶,所以我們的測試人員應該是非常有技術和實力非常強悍的一個人,能夠做到這一點。

            主持人:測試人員要精通一門語言和了解多門語言,那么是精通C++更好還是掌握JAVA更好?

            Mark Sarbiewski:我先說說我的想法,再讓我的同事談一下她的看法。

            王瀅:我的看法和Mark Sarbiewski是一致的,對于我個人來說,我認為不管是精通JAVA或者是C++,對于語言都是舉一反三的,我們要掌握哪個和不要掌握哪個,要看你的應用環境和應用中使用到的技術。如果你沒有一點點JAVA墊底的話,可能做JAVA的測試是比較困難一點。所以,我建議看一下你的應用環境和應用中使用到的技術。主持人

            Mark Sarbiewski:對于很多很多在公司里工作,但是感覺到缺乏這方面支持的人,我覺得很重要的一點,他們所做的工作并沒有被管理層看到,或者是他們所做的工作他們沒有把它顯示出來,這也是很多的測試人員或者是測試團隊做得不好的方面。就是他們所做的工作沒有讓管理層看到,或者是他們的貢獻沒有把它量化出來。比方說測試團隊可以這樣做,因為我們每次做項目都要考慮到成本節約,所以如果測試團隊可以讓管理層看到,因為測試團隊的工作讓成本節約了多少,把這樣的貢獻量化出來,而且時時地提醒管理層,那么漸漸地管理層會支持測試的。

            主持人:第二個問題是項目組把測試工作當成對立面,或者是把測試組當成給他們挑毛病的情況怎么辦?

            Mark Sarbiewski:你說的這種情況也是非常多見的,那么對于開發團隊來說,他們很希望開發出新的應用,但是他們同時也希望開發出可用應性很高的應用或者是軟件。那么,對于測試團隊和開發團隊這種僵局,應該說測試團隊應該要注意提醒開發團隊,我們之間是一種合作的關系。那么,測試團隊所做的工作,并不會阻礙開發的腳步或者是創作的腳步,而是與開發團隊一起把這個事情做好、做對,最后開發出來的產品優越性是高的。所以,測試團隊應該更緊密地和開發團隊有溝通,了解他們的一些慣性的思維,他們是怎么想的,也能夠幫他們盡快地解決這些問題,這樣就能夠和開發團隊成為朋友,可以解決你說的這種互相掣肘的情況。

            王瀅:實際上,我們也從我們用戶那邊看到一個非常好的現象存在,就是之前我們的開發團隊和測試團隊的確是比較對立的。像我們在銀行的一個用戶,他們有自己的數據中心,也有開發中心。之前,他們之間的關系確實是比較緊張的,就像您剛才提到的,測試團隊是來挑錯的,是來找問題的,是來給我們挑出意見來的。但是,實際上我們測試團隊當然也做了很多的工作,包括一個非常重要的方面,在一個項目里面他們提供了非常好的性能測試,大大提升了應用的可用性。現在來看,開發團隊和測試團隊會主動要求把這個項目拿來做測試。

            主持人:這是在我們的自動化測試解決方案之后才得到這樣的情況?

            王瀅:對,因為大量的手工是無法完成的,在采用了這樣的自動化測試之后,開發團隊確實看到了性能的提升,而且是很大的提升。

            主持人:那么在這個過程當中,測試團隊是不是對于他們的之間關系找到共同的目標,起到了一些從理念、工具、方法上的幫助?

            王瀅:對,因為這并不是測試團隊一個部門或者是開發團隊一個部門可以做的事情,他們必須進行溝通,比如說測試團隊會給一些團隊,開發團隊可以從這些信息里面更快地修復問題,這是一種朋友或者是協作的關系。

          主持人:我們看自動化測試,實際上這個概念提出已經有相當長的一段時間了,過去都是講從表格驅動的框架。但是,現在惠普提倡的是業務流程驅動的測試,這二者之間有怎樣的區別,您怎么看這樣變革的過程?

            Mark Sarbiewski:說起來,其實在幾年前用戶在我們的基礎之上,他們自己做了這樣的工作,就是他們用這些工具或者是Excle的電子表格來理解這些測試,來確認這個軟件應用是沒有問題的,這是讓客戶他們自己本身更好地理解。因為我們現在看到了這一點,所以我們說我們可以幫助客戶分擔這部分的工作。因為我們把這些工作都做好了,并且統一交給客戶,使得他們使用起來更方便。

            王瀅:我解釋一下,表格驅動或者是業務流程測試是一個比較專業的詞匯。那么,表格驅動的測試它的初衷是為了讓我們的測試腳本更加易讀、易懂,它主要還是關注測試腳本的本身。剛才Mark Sarbiewski提到了,我們越來越多地注意到了我們的用戶有一些應用性的要求,他們希望編程經驗不是那么好的、不是那么多的人也可以參與到測試工作當中來,特別是我們的業務人員,因為他們在測試當中所起到的作用是非常重要的。因為只有業務人員他們才懂得如何去進行一個交易,如何去運行一個業務流程。所以,如果我們拿自動化測試的腳本去給他們看,即使是這種表格驅動的腳本給他們看,可能對于他們來講都是比較困難的。所以,因為我們注意到了這樣的需求,我們惠普在幾年之前提出了一個業務流程測試。業務流程測試一個最重要的貢獻,在于它可以讓業務人員更早、更多地參與到測試的構建和執行過程當中來。

            所以,我覺得它們兩個所達到的目的是不一樣的。

            主持人:那么,企業應該如何去選擇這種自動化的測試方案,他們在選型和實施的時候,有怎樣的一些可以遵循的原則和注意的事項?

            Mark Sarbiewski:我所見過的在這方面做得最成功的公司,其實他們很關鍵的因素就是他們是很關注測試流程本身的。比方說在整個開發生命周期當中,哪一個環節、哪一點特別需要我們做驗證,我們在設計的時候就需要重新審核一下,或者是編碼的時候需要重新審核一下,或者是什么時候做單元測試,或者說哪個環節需要再做測試。所以,整個的生命周期他們都是需要實時地去做驗證,這是很關鍵的。

            主持人:那么在選擇的時候,有怎樣的關注點?比如說從哪些重要的指標去考量軟件測試的自動化解決方案是適合的?

            Mark Sarbiewski:確實是這樣的,有幾個原則,我想說三條。

            首先,第一個是你所選的這個型,是否能夠在不同的環境下工作。我們不希望看到一個應用就對應一個測試,可以說一個測試可以在很多的應用當中用到。

            第二個是擴展性,必須具有很強的擴展性。如果我們有500個人員來做測試,你可以擴展到這樣的等級。

            第三個是你所使用的測試是否支持你所使用的流程,比如說在某一個決策點或者是某一個階段你需要做測試,或者是整個的流程是什么樣子的,你所選的測試方案應該適用于你這個流程。

            我再補充一點,這個應該是易于操作的,如果你這個測試在理論上是可以運行的,但是沒有人能夠懂,不知道到底應該怎么操作,這也是不成功的。所以,一定要是簡單、易于操作的,實用性很強,也易懂,這樣你的測試人員可以很快地上手。

            主持人:您講的易用性在很多的軟件當中是非常重要的一點,那么我想請問一下王瀅,您看到的我們國內企業的案例當中,他們在這方面大概是用多長的時間可以掌握我們的AQM,或者是我們解決方案當中的工具使用的情況?

            王瀅:是這樣的,我覺得要從兩個方面來說。一個是工具本身,另外一個是工具背后的方法。

            如果就工具本身來講,如果具有幾年經驗的測試人員,因為他有相應的應用的背景,我們用開發性能測試工具來舉一個例子。這樣的人員經過了4天左右的培訓,工具本身的使用已經沒有問題了。但是,我想說另外一個方面,工具只是工具,它實際上是要支持我們的測試方法,至于我們如何把這個工具更好地運用到我們的測試中來,在于我們如何把這個測試規劃,有一個想法通過這些工具實現,讓它更好地支持包括前期的規劃,到后期的分析。實際上,工具本身它只能給你提供一定的幫助,更多地還是需要你本身的經驗。

            主持人:接下來的一些問題還是來自我們51CTO的網友,他們留在論壇里的問題。硬件的驅動測試,它應該是屬于軟件測試的范疇嗎?

            Mark Sarbiewski:我們說到首先是硬件,然后是固件到軟件、應用,這是一個范圍。應該說很多商業用戶,他們關注的是應用的層面,所以我們很多時候還算是軟件測試的,就是您所說的情況是屬于軟件測試的。

            說到開源代碼這個方面,對于開發團隊來說,他們可以選擇的工具其實是非常少的,JUnit是經常用到的。對于他們來說可能他們是借用微軟的工具來做開發,而且他們所用測試自己那一塊東西的工具,也都是比較少的開源代碼的東西。對于惠普來說,我們是提供商用測試手段和方案。


           主持人:性能測試方案和測試結果分析哪個更重要?

            Mark Sarbiewski:我認為這兩者應該是同等重要的,說到測試結果的分析,是專注于應用功能方面,這個顯然很重要。但是,性能測試也是一樣很重要的,因為它應該要支持盡量多的用戶。如果說一個用戶使用了這個軟件,但是他需要花好幾分鐘的時間才能得到一個結果,其實這樣的效果要比他返回一個錯誤的結果還要糟糕。

            我再補充一點,講到我們做測試時候的順序,應該說功能方面的測試或者是驗證,我們在周期當中比較早的時候就做了。因為一項不能完成功能的軟件應用應該是沒有用的,所以我們在早期就做了。隨后,我們要對性能方面做更多的測試,要解決這些在性能方面出現的一些缺陷等等。

            主持人:也就是說,先去考慮功能測試再做性能測試,而不是說哪一個更重要?

            Mark Sarbiewski:其實很難說測試中某一方面要比另外一方面更重要,對于測試人員來說性能測試和非性能測試都是非常重要的,因為每一個測試都是一個漸進的過程。所以,要保證我們在測試當中要把這些問題一一解決,使得端對端的應用是很出色的。

            王瀅:制定一個非常好的功能測試方案和我們對于測試結果進行分析這兩個那個更重要,我認為我可以用兩句話來解釋。第一個是對于性能測試方案它的好與不好,我們可以說“好的開始是成功的一半”。因為一個好的性能測試方案可以幫助我們非常有效率地完成一個測試。那么,對于結果分析來講,“行百里者半九十”,我們在測試當中要找出性能是否具有我們所期望的標準或者是具有我們所期望的特性。究竟是不是這樣,我們要靠結果分析來告訴我們,所以這個結果分析也是非常考驗我們測試人員的功力的。他需要從紛繁復雜的數據里面找到最重要的數據和最能說明問題的數據。

            主持人:最后這個問題是更本地化一些。目前國內的軟件測試沒有一個很權威的認證,在外界看到一個初級的培訓,情況真的是這樣嗎?

            Mark Sarbiewski:像惠普這樣的供應商,我們會針對我們所提供的產品,提供相應地認證。我們的客戶會了解我們所提供的產品,并且對于他們了解我們的產品是什么樣的等級,我們都有一個認證。

            我覺得,作為一個好的測試人員,他不應該僅僅知道測試要怎么做,同時他要非常了解所使用的技術,對于技術本身也要吃得很透。所以,我建議如果有這樣的初級培訓班當然可以去上,同時要和惠普合作了解我們所提供的技術,再一點是買幾本好的教材。最重要的一點是找到一個好的雇主,他能夠真正明白這個測試是什么,并且知道重要性,隨著他們的成長就可以有很多的實踐,因為實踐出真知,我認為是這樣的。

            王瀅:提這個問題的網友可能是比較關注他的職業發展,我想可能很多很多的用戶也是這樣認為的,我有了認證就代表我有了技能水平,我可以嘗試更多的工作,可以給我的雇主帶來更多的價值。

            我覺得從這個方面來講,我們主要考慮的問題是我們選擇什么樣的測試認證。首先,他提到有很多初級的培訓班,那么初級的培訓班,據我了解他們主要是教授一些測試的理論,比如說非常基礎的你如何選擇規則測試和如何篩選數據理論等等,這是非常基礎的,這是我們測試的基礎。

            再一個是像一些工具的廠商,他也提供了一些相應地工具或者是產品的認證,比如說惠普目前對于我們的測試相關的一些產品提供這樣初級或者是高級的認證,我們是有不同的級別的,我們可以按照我們的需要選擇。

            更重要的是,我們拿到了這個驗證,不僅僅表明我們可以更好地使用這個工具,更重要的一點,在背后是有方法論和實踐來支持的。所以,我們拿到這個認證不僅僅是掌握了這個工具,同時對于我們的方法和考慮問題的思想有一些提升。除了這一類之外,對于我們的測試人員有更好的發展的方面是他應該關注一些測試之外的認證,比如說他應該考慮是不是進行ITIL或者是項目管理的認證,所以我們的目光不應該僅僅局限于這一點。

            主持人:就是他們可以掌握更高更廣的技能?

            王瀅:對,主要是在這個認證當中他獲得的經驗

            主持人:由于時間的關系,我們今天的訪談就要結束了,非常感謝王瀅女士和Mark Sarbiewski先生來參加我們的技術訪談。我們希望今后有更多的機會將惠普應用管理的理念和測試軟件的工具通過我們的平臺傳播給我們中國廣大的人群。謝謝兩位。

            Mark Sarbiewski:也非常感謝你們邀請我們來這里做這樣一個專訪,我們肯定還要再回來的。



          posted @ 2011-11-17 15:53 順其自然EVO 閱讀(169) | 評論 (0)編輯 收藏

          性能測試團隊如何組建?

          本人一直在做產品和項目的公司測試部門從事測試工作,從未在第三方測試團隊中工作過,因此,本人的觀點僅限于非第三方測試團隊。

            在本人的從業經歷中,先后涉及過醫療、水利、政府、軍隊等行業,以個人的經歷來看,在非第三方測試團隊中,是不存在專職的性能測試團隊的。這是由于所在公司的性質以及測試工作任務所決定的。由于處在非第三方的測試團隊中,其工作任務就是負責公司的產品或項目的質量保證。在日常的工作中,80%以上的工作屬于需求分析和功能測試,當然,對于做產品的公司來說,功能測試中還包含自動化測試;而性能測試工作僅在功能穩定后,才會正式開展,因此,性能測試的工作量僅占日常工作的20%左右。正是由于性能測試工作所占日常工作量的比重不大,所以,公司不可能組建專職的性能測試團隊,因為公司不可能讓這些性能測試工程師在一年的大部分時間內都閑著。。。

            (當然,性能測試應該從單元測試就開始,這樣才能盡早的發現問題,這也是國外軟件測試所推崇的。但是,這不符合我國當前的軟件測試發展形勢。畢竟軟件測試行業在國內尚屬發展初期,現在能組織性能測試工作的公司就已經很不錯了,有相當一部分公司都是只要軟件不宕機,壓根就不會想起性能測試的。 )

            抱怨完當前的形勢之后,咱們言歸正傳。雖說公司不會組建專職的性能測試團隊,但是公司卻提倡軟件測試人員具備性能測試的技能,平時從事功能測試,一旦有性能測試需求,也可以立即投入。(給的是功能測試工程師的待遇,干的卻有性能測試工程師的活。公司還真會算賬。。。 )

            接下來談一下測試團隊應具備的性能測試技能吧。

            首先,性能測試的重點是場景設計。那么,測試團隊就必須具備需求調研和分析的能力。有人會說,性能測試指標都是用戶給定的,還需要需求調研和分析能力么?答案是肯定的。因為相當一部分用戶所提出的性能測試指標是不可靠的。他們提出的性能測試指標,往往是拍腦袋拍出來的。如:一個業務發生頻率不高的系統,但用戶數卻在4萬人,這時候用戶很可能就會要求并發數在4000左右,但實際上沒有那么大的業務量,系統是不需要那么高的并發數的。反之,有的系統雖說用戶數不是太多,但是業務發生頻率很高,這種系統要求的并發數也不會很低。因此,測試人員必須具備需求調研和分析的能力,能夠引導客戶,得到真實的業務發生頻率、發生類型、業務量以及數據量。從而,分析出系統可能出現性能瓶頸的業務,并進行場景設計;

            其次,應具備一定的系統分析能力。被測軟件所用框架、中間件、業務組件、硬件、網絡、部署結構等所有因素,哪些地方有可能出現性能瓶頸。那么,它一定在你的測試場景覆蓋范圍之內。如:一個使用頻率不高的業務組件,但由于業務復雜度較高或資源沖突等因素,很有可能會成為性能瓶頸的。

            最后,就是應具備負載生成工具及監控工具的應用能力。畢竟,設計的性能測試場景是需要被執行,性能測試執行結果是需要被采集的。

            如果已經掌握上述的各項能力,那么說明這支團隊已經具備初級的性能測試執行能力。接下來,再談一下更高的要求。

            第一,掌握硬件的配置及原理。如:F5負載均衡服務器,采用的是哪種均衡策略,這將直接影響到你的性能測試場景的設計及執行的效果;

            第二,掌握被測軟件所用操作系統的常用命令,它可以幫助你啟動/關閉操作系統的服務,以及系統資源使用情況;

            第三,掌握被測軟件所用中間件的配置參數及監控方法;

            第四,掌握必要的開發能力。商業化的測試工具畢竟有一定的局限性,很難完全支撐各類性能測試的執行。因此,需要開發必要的負載生成工具、預埋數據腳本、監控工具等;

            第五,掌握測試結果分析和調優的能力。測試結果僅僅是采集到還是不夠的,還需要分析系統運行時的資源使用情況,分析系統性能瓶頸以及是否存在由于性能原因導致功能性錯誤等問題。當然,如果能夠根據測試結果,給出性能瓶頸的解決方法,那么,這支測試團隊就是支高素質的性能測試團隊。

            以上僅僅是個人的一些觀點,不足之處,還望大家指正。

          posted @ 2011-11-17 15:47 順其自然EVO 閱讀(223) | 評論 (0)編輯 收藏

          僅列出標題
          共394頁: First 上一頁 363 364 365 366 367 368 369 370 371 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 芒康县| 中宁县| 商水县| 曲靖市| 曲阜市| 富蕴县| 德惠市| 天柱县| 叙永县| 通河县| 石棉县| 广南县| 高尔夫| 集贤县| 神木县| 酒泉市| 临夏县| 石嘴山市| 长阳| 精河县| 留坝县| 桂阳县| 泰和县| 巴林右旗| 禄劝| 濮阳县| 金门县| 寿阳县| 墨竹工卡县| 五寨县| 南城县| 通辽市| 遵义县| 兴隆县| 新乡市| 新竹市| 婺源县| 太康县| 武隆县| 阿勒泰市| 大安市|