qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          性能測試流程剖析

          為了讓學(xué)習(xí)者對性能測試的整體思路有一個(gè)認(rèn)識,本篇文章將對性能測試的流程(如下圖)中的各個(gè)步驟進(jìn)行講解。
            
            注意:
            1)上述性能測試流程中未包含“性能測試工具的選擇”,各公司情況不同,大多數(shù)公司有固定的業(yè)務(wù)和測試工具,這樣就可省去工具選擇過程;若公司中有多款測試工具的話,可在使用工具實(shí)施測試前的任何階段靈活進(jìn)行選擇。
            2)在性能測試流程中會(huì)貫穿性能測試文檔的編寫,可編寫在同一模板中,也可各階段使用不同的模板,依據(jù)實(shí)際情況而定。
            3)要求嚴(yán)格的公司,會(huì)在性能測試流程的每個(gè)階段中設(shè)定評審,視公司及業(yè)務(wù)實(shí)際情況而定。
            1.首先明確需求,確定性能測試目標(biāo),舉例如下圖。
            
            2. 在需求確定的基礎(chǔ)上進(jìn)一步細(xì)化,進(jìn)行業(yè)務(wù)建模,設(shè)計(jì)測試用例及場景,舉例如圖所示。
            
            3.在上述步驟基礎(chǔ)上,搭建性能測試環(huán)境及創(chuàng)建所需的測試數(shù)據(jù),如模擬出實(shí)際系統(tǒng)運(yùn)行中的3層體系架構(gòu)環(huán)境,在數(shù)據(jù)庫中創(chuàng)建批量的歷史賬戶和帖子信息等。
            4.結(jié)合上述設(shè)計(jì),借助性能測試工具進(jìn)行測試實(shí)施,同時(shí)進(jìn)行資源監(jiān)控及數(shù)據(jù)收集。
            5.針對監(jiān)控和收集到的大量數(shù)據(jù)、圖表,進(jìn)行分析。通常,這一步驟由多角色人員配合完成,如:對于數(shù)據(jù)庫性能指標(biāo)的分析可由DBA協(xié)助完成。
            6.程序員及DBA等其他人員協(xié)作共同完成性能問題解決及性能調(diào)優(yōu),如:開發(fā)人員對代碼邏輯中影響效率的地方進(jìn)行代碼調(diào)整。
            7.回歸測試,將測試結(jié)果和前階段測試結(jié)果進(jìn)行對比分析。

          posted @ 2014-09-23 09:26 順其自然EVO 閱讀(511) | 評論 (0)編輯 收藏

          Linux搭建SVN server

           一. SVN 簡單介紹
            Subversion(SVN) 是一個(gè)開源的版本號控制系統(tǒng), 也就是說 Subversion 管理著隨時(shí)間改變的數(shù)據(jù)。 這些數(shù)據(jù)放置在一個(gè)中央資料檔案庫 (repository) 中。 這個(gè)檔案庫非常像一個(gè)普通的文件server, 只是它會(huì)記住每一次文件的變動(dòng)。 這樣你就能夠把檔案恢復(fù)到舊的版本號, 或是瀏覽文件的變動(dòng)歷史。
            SVN中的一些概念 :
           ?。?). repository(源碼庫)
            源碼統(tǒng)一存放的地方
            (2). Checkout (提?。?/div>
            當(dāng)你手上沒有源碼的時(shí)候,你須要從repository checkout一份
            (3). Commit (提交)
            當(dāng)你已經(jīng)改動(dòng)了代碼,你就須要Commit到repository
           ?。?). Update (更新)
            當(dāng)你已經(jīng)Checkout了一份源碼, Update一下你就能夠和Repository上的源碼同步,你手上的代碼就會(huì)有最新的變更
            日常開發(fā)過程事實(shí)上就是這種(如果你已經(jīng)Checkout而且已經(jīng)工作了幾天):Update(獲得最新的代碼) -->作出自己的改動(dòng)并調(diào)試成功 --> Commit(大家就能夠看到你的改動(dòng)了) 。
            假設(shè)兩個(gè)程序猿同一時(shí)候改動(dòng)了同一個(gè)文件呢,  SVN能夠合并這兩個(gè)程序猿的改動(dòng),實(shí)際上SVN管理源碼是以行為單位的,就是說兩個(gè)程序猿僅僅要不是改動(dòng)了同一行程序,SVN都會(huì)自己主動(dòng)合并兩種改動(dòng)。假設(shè)是同一行,SVN會(huì)提示文件Confict, 沖突,須要手動(dòng)確認(rèn)。
            client軟件:
           ?。?)Windows下經(jīng)常使用的client軟件經(jīng)常使用TortoiseSVN。它是一個(gè)免費(fèi)的開源的client。 下載地址:http://tortoisesvn.net/downloads.html
           ?。?)向Myeclipse,也有一些SVN的插件。
            Subversion提供下面主要功能:
           ?。?)文件夾版本號控制
            CVS 僅僅能跟蹤單個(gè)文件的歷史, 只是 Subversion 實(shí)作了一個(gè) “虛擬” 的版本號控管文件系統(tǒng), 可以依時(shí)間跟蹤整個(gè)文件夾的變動(dòng)。 文件夾和文件都能進(jìn)行版本號控制。
            (2)真實(shí)的版本號歷史
            自從CVS限制了文件的版本號記錄,CVS并不支持那些可能發(fā)生在文件上,但會(huì)影響所在文件夾內(nèi)容的操作,如同復(fù)制和重命名。除此之外,在CVS里你不能用擁有相同名字可是沒有繼承老版本號歷史或者根本沒有關(guān)系的文件替換一個(gè)已經(jīng)納入系統(tǒng)的文件。在Subversion中,你能夠添加(add)、刪除(delete)、復(fù)制(copy)和重命名(rename),不管是文件還是文件夾。全部的新加的文件都從一個(gè)新的、干凈的版本號開始。
           ?。?)自己主動(dòng)提交
            一個(gè)提交動(dòng)作,不是所有更新到了檔案庫中,就是全然不更新。這同意開發(fā)者以邏輯區(qū)間建立并提交變動(dòng),以防止當(dāng)部分提交成功時(shí)出現(xiàn)的問題。
           ?。?)納入版本號控管的元數(shù)據(jù)
            每個(gè)文件與文件夾都附有一組屬性keyword并和屬性值相關(guān)聯(lián)。你能夠創(chuàng)建, 并儲(chǔ)存不論什么你想要的Key/Value對。 屬性是隨著時(shí)間來作版本號控管的, 就像文件內(nèi)容一樣。
           ?。?)選擇不同的網(wǎng)絡(luò)層
            Subversion 有抽象的檔案庫存取概念, 能夠讓人非常easy地實(shí)作新的網(wǎng)絡(luò)機(jī)制。 Subversion 能夠作為一個(gè)擴(kuò)展模塊嵌入到Apache HTTP server中。這個(gè)為Subversion提供了非常先進(jìn)的穩(wěn)定性和協(xié)同工作能力,除此之外還提供了很多重要功能: 舉例來說, 有身份認(rèn)證, 授權(quán), 在線壓縮, 以及文件庫瀏覽等等。另一個(gè)輕量級的獨(dú)立Subversionserver, 使用的是自己定義的通信協(xié)議, 能夠非常easy地通過 ssh 以 tunnel 方式使用。
           ?。?)一致的數(shù)據(jù)處理方式
            Subversion 使用二進(jìn)制差異算法來異表示文件的差異, 它對文字(人類可理解的)與二進(jìn)制文件(人類無法理解的) 兩類的文件都一視同仁。 這兩類的文件都相同地以壓縮形式儲(chǔ)存在檔案庫中, 并且文件差異是以兩個(gè)方向在網(wǎng)絡(luò)上傳輸?shù)摹?/div>
            (7)有效的分支(branch)與標(biāo)簽(tag)
            在分支與標(biāo)簽上的消耗并不必一定要與項(xiàng)目大小成正比。 Subversion 建立分支與標(biāo)簽的方法, 就僅僅是復(fù)制該項(xiàng)目, 使用的方法就相似于硬連接(hard-link)。 所以這些操作僅僅會(huì)花費(fèi)非常小, 并且是固定的時(shí)間。
           ?。?)Hackability
            Subversion沒有不論什么的歷史包袱; 它主要是一群共用的 C 程序庫, 具有定義完好的API。這使得 Subversion 便于維護(hù), 而且可被其他應(yīng)用程序與程序語言使用。
           二.  SVN server搭建
            2.1 使用yum 安裝SVN包
            關(guān)于YUM server的配置參考:
            Linux 搭建 YUM server
            http://blog.csdn.net/tianlesoftware/archive/2011/01/03/6113902.aspx
          [root@singledb ~]# yum install -y subversion
          Loaded plugins: rhnplugin, security
          This system is not registered with RHN.
          RHN support will be disabled.
          Setting up Install Process
          Resolving Dependencies
          --> Running transaction check
          ---> Package subversion.i386 0:1.4.2-4.el5_3.1 set to be updated
          --> Finished Dependency Resolution
          Dependencies Resolved
          ====================================================================================================
          Package                Arch             Version                        Repository             Size
          ====================================================================================================
          Installing:
          subversion             i386             1.4.2-4.el5_3.1                rhel-base             2.3 M
          Transaction Summary
          ====================================================================================================
          Install      1 Package(s)
          Update       0 Package(s)
          Remove       0 Package(s)
          Total download size: 2.3 M
          Downloading Packages:
          subversion-1.4.2-4.el5_3.1.i386.rpm                                          | 2.3 MB     00:00
          Running rpm_check_debug
          Running Transaction Test
          Finished Transaction Test
          Transaction Test Succeeded
          Running Transaction
          Installing     : subversion                                                                   1/1
          Installed:
          subversion.i386 0:1.4.2-4.el5_3.1
          Complete!
            [root@singledb ~]#
            驗(yàn)證安裝版本號:
          [root@singledb ~]# svnserve --version
          svnserve, version 1.4.2 (r22196)
          compiled Aug  5 2009, 19:03:56
          Copyright (C) 2000-2006 CollabNet.
          Subversion is open source software, see http://subversion.tigris.org/
          This product includes software developed by CollabNet
            The following repository back-end (FS) modules are available:
            * fs_base : Module for working with a Berkeley DB repository.
            * fs_fs : Module for working with a plain file (FSFS) repository.
            2.2 創(chuàng)建SVN 版本號庫
            [root@singledb ~]# mkdir /u02/svn
            [root@singledb ~]# svnadmin create /u02/svn/davesvn  --davesvn為版本號庫名稱
            2.3  SVN 配置
            創(chuàng)建版本號庫后,在這個(gè)文件夾下會(huì)生成3個(gè)配置文件:
            [root@singledb conf]# pwd
            /u02/svn/davesvn/conf
            [root@singledb conf]# ls
            authz  passwd  svnserve.conf
           ?。?)svnserve.conf:  svn服務(wù)配置文件下。
           ?。?)passwd: username口令文件。
            (3)authz: 權(quán)限配置文件。
            svnserve.conf 文件, 該文件配置項(xiàng)分為下面5項(xiàng):
            anon-access: 控制非鑒權(quán)用戶訪問版本號庫的權(quán)限。
            auth-access:  控制鑒權(quán)用戶訪問版本號庫的權(quán)限。
            password-db: 指定username口令文件名稱。
            authz-db:指定權(quán)限配置文件名稱,通過該文件能夠?qū)崿F(xiàn)以路徑為基礎(chǔ)的訪問控制。
            realm:指定版本號庫的認(rèn)證域,即在登錄時(shí)提示的認(rèn)證域名稱。若兩個(gè)版本號庫的認(rèn)證域同樣,建議使用同樣的username口令數(shù)據(jù)文件
            Passwd 文件 :
            我們在svnserve.conf文件中啟用這個(gè)文件。然后配置例如以下:
            [root@singledb conf]# cat passwd
            ### This file is an example password file for svnserve.
            ### Its format is similar to that of svnserve.conf. As shown in the
            ### example below it contains one section labelled [users].
            ### The name and password for each user follow, one account per line.
            [users]
            # harry = harryssecret
            # sally = sallyssecret
            dave = davepwd
            tianlesoftware = tianlesoftwarepwd
            authz  文件 :
            在網(wǎng)上找到一個(gè)非常好的配置樣例:
            [groups]
            admin = john, kate
            devteam1 = john, rachel, sally
            devteam2 = kate, peter, mark
            docs = bob, jane, mike
            training = zak
            --這里把不同用戶放到不同的組里面,以下在設(shè)置文件夾訪問權(quán)限的時(shí)候,用文件夾來操作就能夠了。
            # 為全部庫指定默認(rèn)訪問規(guī)則
            # 全部人能夠讀,管理員能夠?qū)?,危急分子沒有不論什么權(quán)限
            [/]  --相應(yīng)我測試?yán)锏模?u02/svn 文件夾
            * = r
            @admin = rw
            dangerman =
            # 同意開發(fā)者能夠全然訪問他們的項(xiàng)目版本號庫
            [proj1:/]
            @devteam1 = rw
            [proj2:/]
            @devteam2 = rw
            [bigproj:/]
            @devteam1 = rw
            @devteam2 = rw
            trevor = rw
            # 文檔編寫人員對全部的docs文件夾有寫權(quán)限
            [/trunk/doc]
            @docs = rw
            # 培訓(xùn)人員能夠全然訪問培訓(xùn)版本號庫
            [TrainingRepos:/]
            @training = rw
            以下我們來配置我們的authz文件:
            [root@singledb conf]# cat authz
            [groups]
            admin = dave
            dev=tianlesoftware
            [davesvn:/]
            @admin = rw
            @dev = rw
            [root@singledb conf]#
            2.4 啟動(dòng)和停止SVN服務(wù)
           ?。?)啟動(dòng)SVN服務(wù):
            [root@singledb conf]# svnserve -d -r /u02/svn
            -d表示后臺(tái)執(zhí)行
            -r 指定根文件夾是 /u02/svn
            [root@singledb conf]# ps -ef | grep svn
            root      4592     1  0 18:04 ?        00:00:00 svnserve -d -r /u02/svn
            root      4594  3709  0 18:04 pts/1    00:00:00 grep svn
            (2)停止SVN服務(wù):
            ps -aux |grep svn
            kill -9 進(jìn)程殺掉三. client連接SVN server
            3.1 安裝TortoiseSVN client
            下載地址在第一節(jié)已說明。
            3.2 找到自己項(xiàng)目的文件夾,右擊,進(jìn)行SVN 操作
           ?。?)新建測試文件夾svn,進(jìn)入后右鍵,點(diǎn)checkout:
            SVN server的IP地址和版本號庫名稱。
            新建個(gè)文件svn.txt. 把這個(gè)文件上傳到SVNserver(add):

          posted @ 2014-09-22 09:27 順其自然EVO 閱讀(238) | 評論 (0)編輯 收藏

          數(shù)據(jù)庫的存儲(chǔ)引擎和SQL語言

           數(shù)據(jù)庫的存儲(chǔ)引擎就是管理數(shù)據(jù)存儲(chǔ)的東西,它完成下面的工作
            1)存儲(chǔ)機(jī)制
            2)索引方式
            3)鎖
            4)等等
            SQL語言:-----關(guān)系型數(shù)據(jù)庫所使用的數(shù)據(jù)管理語言
            1)數(shù)據(jù)定義語言(DDL):DROP、CREATE、ALTER等對數(shù)據(jù)對象發(fā)生操作的語言。
            2)數(shù)據(jù)操作語言(DML):INSERT 、UPDATE、 DELETE,對數(shù)據(jù)本身發(fā)生更、刪、改。
            3)數(shù)據(jù)查詢語言(DQL):SELECT,專門用于查找數(shù)據(jù)。
            4)數(shù)據(jù)控制語言(DCL):GRANT/授權(quán)、REVOKE/收回授權(quán)、COMMIT/提交操作等等。
            而非關(guān)系型數(shù)據(jù)庫其操作語言就多種多樣了。
            數(shù)據(jù)庫管理系統(tǒng)(DBMS):管理和維護(hù)數(shù)據(jù)庫所使用的軟件,為管理數(shù)據(jù)的方式和方法提供載體和支持。包含:
            1)用戶管理
            2)處理數(shù)據(jù)庫連接
            3)緩存
            4)查詢
            5)日志
            6)等等
            用于不同程序設(shè)計(jì)語言連接盒管理數(shù)據(jù)庫的接口:
            1)ODBC
            2)JDBC
            3)PDO
            4)ADO.NET等等類型的接口

          posted @ 2014-09-22 09:25 順其自然EVO 閱讀(231) | 評論 (0)編輯 收藏

          Java和c#使用hessian通信

          一個(gè)簡單的例子學(xué)習(xí)hessian服務(wù):服務(wù)端為Java,客戶端為C#。
            先要準(zhǔn)備好C#和Java的第三方類庫:http://hessian.caucho.com/
            Hssiancharp.dll
            hessian-4.0.37.jar
            Hessian服務(wù)端(java)
            打開eclipse創(chuàng)建一個(gè)Dynamic Web Project,將hessian-4.0.37.jar放到lib下,大概如圖所示:
            創(chuàng)建一個(gè)通信接口IHello:
          package hessian.test.server;
          import java.util.ArrayList;
          public interface IHello {
          String sayHello(String msg);
          void sayHello2(int bean);
          void print(String msg);
          HelloBean getData(HelloBean bean);
          ArrayList<HelloBean> getBeanList();
          ComplexData getComplexData();
          }
              IHello接口的一個(gè)實(shí)現(xiàn):HelloImpl.java
          package hessian.test.server;
          import java.util.ArrayList;
          public class HelloImpl implements IHello{
          public String sayHello(String msg){
          return "Hello " + msg;
          }
          public void sayHello2(int bean){
          System.out.println("Hello " + bean);
          }
          public void print(String msg){
          System.out.println(msg);
          }
          public HelloBean getData(HelloBean bean){
          HelloBean result = new HelloBean();
          result.setName("lu xiaoxun a new name");
          result.setAge(26);
          System.out.print(bean.getName());
          return result;
          }
          public ArrayList<HelloBean> getBeanList(){
          ArrayList<HelloBean> beans = new ArrayList<HelloBean>();
          HelloBean b1 = new HelloBean();
          b1.setName("lu1");
          b1.setAge(26);
          beans.add(b1);
          HelloBean b2 = new HelloBean();
          b2.setName("lu2");
          b2.setAge(27);
          beans.add(b2);
          return beans;
          }
          public ComplexData getComplexData(){
          ComplexData data = new ComplexData();
          ArrayList<HelloBean> beans = getBeanList();
          data.setData(beans, beans.size());
          return data;
          }
          }
           定義用來進(jìn)行數(shù)據(jù)傳輸?shù)念?,兩個(gè)類都必須實(shí)現(xiàn)Serializable接口:
          HelloBean.java
          package hessian.test.server;
          import java.io.Serializable;
          public class HelloBean implements Serializable {
          private static final long serialVersionUID = 570423789882653763L;
          private String name;
          private int age;
          public String getName() {
          return name;
          }
          public void setName(String name) {
          this.name = name;
          }
          public int getAge(){
          return age;
          }
          public void setAge(int age){
          this.age = age;
          }
          }
          ComplexData.java
          package hessian.test.server;
          import java.io.Serializable;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.Map;
          public class ComplexData implements Serializable{
          private static final long serialVersionUID = 1L;
          private ArrayList<HelloBean> helloBeans;
          //private Map<String, HelloBean> helloBeanMap;
          private int number;
          public int getNumber(){
          return number;
          }
          public ArrayList<HelloBean> getHelloBeans(){
          return helloBeans;
          }
          public void setData(ArrayList<HelloBean> beans, int num){
          this.number = num;
          this.helloBeans = beans;
          //        helloBeanMap = new HashMap<String, HelloBean>();
          //        for (HelloBean helloBean : beans) {
          //            if(!helloBeanMap.containsKey(helloBean.getName()))
          //            {
          //                helloBeanMap.put(helloBean.getName(), helloBean);
          //            }
          //        }
          }
          }
            web.xml內(nèi)容:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          id="WebApp_ID" version="3.0">
          <display-name>hessian server</display-name>
          <servlet>
          <servlet-name>hessian</servlet-name>
          <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
          <init-param>
          <param-name>service-class</param-name>
          <param-value>hessian.test.server.HelloImpl</param-value>
          </init-param>
          </servlet>
          <servlet-mapping>
          <servlet-name>hessian</servlet-name>
          <url-pattern>/hessian</url-pattern>
          </servlet-mapping>
          </web-app>
            Hessian客戶端(c#)
            定義一個(gè)與服務(wù)端對應(yīng)的IHello接口:IHello.cs
            public interface IHello
            {
            String sayHello(String msg);
            void sayHello2(int bean);
            void print(String msg);
            HelloBean getData(HelloBean bean);
            HelloBean[] getBeanList();
            ComplexData getComplexData();
            }
            定義與服務(wù)器端一致的的通信數(shù)據(jù)類:
          HelloBean.cs
          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          namespace hessian.test.server
          {
          public class HelloBean
          {
          public String Name
          {
          set { name = value; }
          get { return name; }
          }
          private String name; //類型和名稱需要和服務(wù)器端一致
          public int Age
          {
          set { age = value; }
          get { return age; }
          }
          private int age; //類型和名稱需要和服務(wù)器端一致
          public override String ToString()
          {
          return "Name: "+ name + " Age: " + age;
          }
          }
          }
          ComplexData.cs:
          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          namespace hessian.test.server
          {
          public class ComplexData
          {
          private HelloBean[] helloBeans;
          //private Dictionary<String, HelloBean> helloBeanMap;
          private int number;
          public int GetNumber()
          {
          return number;
          }
          public HelloBean[] GetBeans()
          {
          return helloBeans;
          }
          //public Dictionary<String, HelloBean> GetBeansDic()
          //{
          //    return helloBeanMap;
          //}
          }
          }
           在主項(xiàng)目中添加Hessiancsharp.dll引用。
            測試代碼:
          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          using hessiancsharp.client;
          using hessian.test.server;
          namespace HessianClientTest
          {
          class Program
          {
          static void Main(string[] args)
          {
          string url = @"http://localhost:8080/HessianServerTest/hessian";
          CHessianProxyFactory factory = new CHessianProxyFactory();
          IHello test = (IHello)factory.Create(typeof(IHello), url);
          //Test function
          Console.WriteLine(test.sayHello("lu"));   //打印從服務(wù)器端獲取的字符串
          test.sayHello2(12);                       //在服務(wù)器端控制臺(tái)打印 "Hello 12"
          test.print("hessian");                    //在服務(wù)器端控制臺(tái)打印 "hessian"
          //Test Object
          HelloBean bean = new HelloBean();
          //bean.setName("lu xiaoxun");
          bean.Name = "luxiaoxun";
          HelloBean result = test.getData(bean);
          Console.WriteLine(result.Name);
          Console.WriteLine(result.Age);
          Console.WriteLine(result);
          //Test Object Array
          HelloBean[] beans = test.getBeanList();
          if (beans != null)
          {
          foreach (HelloBean data in beans)
          {
          Console.WriteLine(data.ToString());
          }
          }
          //Test complex data
          ComplexData complexData = test.getComplexData();
          if (complexData != null)
          {
          Console.WriteLine("Array number: " + complexData.GetNumber());
          HelloBean[] comArray = complexData.GetBeans();
          if (comArray != null)
          {
          foreach (HelloBean data in comArray)
          {
          Console.WriteLine(data.ToString());
          }
          }
          //Dictionary<String, HelloBean> helloBeanMap = complexData.GetBeansDic();
          //if (helloBeanMap != null)
          //{
          //    foreach (String key in helloBeanMap.Keys)
          //    {
          //        Console.WriteLine(helloBeanMap[key].GetHelloBeanInfo());
          //    }
          //}
          }
          Console.ReadKey();
          }
          }
          }
            測試結(jié)果:
            注意事項(xiàng):
            1、服務(wù)端和客戶端用于數(shù)據(jù)傳遞的對象的命名空間要一致
            IHello接口所在命名空間服務(wù)端和客戶端可以不一致,但是IHello中用到的HelloBean和ComplexData在Java服務(wù)端和C#客戶端中兩個(gè)HelloBean類所在的命名空間要一致。
            2、類的字段要一致
            用于數(shù)據(jù)傳輸?shù)念惖淖侄蚊妥侄晤愋鸵恢拢ㄐ揎楊愋涂梢圆灰恢拢?/div>
            3、服務(wù)端的類要序列化
            4、盡量使用基本的數(shù)據(jù)類型
            從上面的測試可以看出,傳遞基本的類型沒有問題,傳遞普通的類對象沒有問題,傳遞ArrayList的時(shí)候也沒有問題(C#客戶端使用Array數(shù)組),但是傳遞HashMap字典的時(shí)候會(huì)有問題,C#這邊使用Dictionary沒法對應(yīng)一致,可能是由于hash函數(shù)內(nèi)部實(shí)現(xiàn)不一致導(dǎo)致的,具體原因不明。

          posted @ 2014-09-22 09:24 順其自然EVO 閱讀(238) | 評論 (0)編輯 收藏

          小A老空調(diào)需求管理小記

           1. 關(guān)注一個(gè)動(dòng)作的流程和內(nèi)容
            比如登錄,我需要提供的是登錄接口,但是登錄是否只是一個(gè)動(dòng)作?一個(gè)動(dòng)作一定不完整,還應(yīng)該包括動(dòng)作的內(nèi)容和步驟(流程),這里有兩個(gè)問題:就是落地和把問題想復(fù)雜了;其實(shí)登錄還包括有角色的用戶名和密碼,我在給手機(jī)團(tuán)隊(duì)提供這個(gè)動(dòng)作的時(shí)候還需要提供一下登錄的各個(gè)用戶名以及密碼,這樣才比較周全;
            再比如下載紅外庫,當(dāng)時(shí)和廣科就沒有溝通明白,因?yàn)橄螺d其實(shí)是有一個(gè)生命周期,首先是紅外碼的來源,紅外碼的轉(zhuǎn)化txt文檔以及紅外碼的打zip包和編碼轉(zhuǎn)換,這些都是需要和李閱苗溝通的;所以對于一個(gè)動(dòng)作一定溝通明白他懂得生命周期是怎樣的,每個(gè)階段(步驟)的IHO是怎樣的,這樣才算落地;
            2.做為一個(gè)項(xiàng)目經(jīng)理想明白事情
            你不需要編碼,大部分文檔也不需要你寫,你需要做的就是想明白事情,并且告訴成員你想明白的事情;然后通過手段確保他們按照你預(yù)期的來做事情;
            3.構(gòu)建>>完成任務(wù)
            一個(gè)團(tuán)隊(duì)的工作模式遠(yuǎn)大于完成任務(wù),完成任務(wù)是近期目標(biāo);但是一個(gè)團(tuán)隊(duì)模式機(jī)制的形成則是一個(gè)團(tuán)隊(duì)健壯的必要內(nèi)涵;始終應(yīng)該放在首位,這兩其實(shí)是兩件事:1.你的團(tuán)隊(duì)內(nèi)涵是什么,PM一定要想明白;一定要堅(jiān)持執(zhí)行,但是不是執(zhí)著執(zhí)行,堅(jiān)持執(zhí)行的內(nèi)涵,形式和方法可以根據(jù)團(tuán)隊(duì)的性質(zhì)進(jìn)行設(shè)計(jì)和應(yīng)用;及時(shí)有各種的外在因素,構(gòu)建團(tuán)隊(duì)永遠(yuǎn)是首位;
            4.團(tuán)隊(duì)做事情套路
            構(gòu)建講求的的內(nèi)容套路,還有對外的討論,比如發(fā)布,一定要遵循什么流程,沒有客戶的指令,千萬不能發(fā)布;不能為了照顧某些成員的情緒就改變團(tuán)隊(duì)風(fēng)格;
            5.事情立即處理
            對于郵件以及事情能處理馬上處理,不要擱置和延后,水桶到你這里終止。比如機(jī)票報(bào)銷,回到大連馬上來做這件事情,否則可能就成為了遺失事情了;
            6.準(zhǔn)備驅(qū)動(dòng)
            在項(xiàng)目的各個(gè)環(huán)節(jié),PM需要做的是更多的準(zhǔn)備,架構(gòu)準(zhǔn)備,人才準(zhǔn)備,培訓(xùn)準(zhǔn)備等等;然后笑看風(fēng)雨,看著各個(gè)事情到了環(huán)節(jié),因?yàn)槟愕臏?zhǔn)備而有足夠的燃料啟動(dòng),看到他們自己可以自動(dòng)的基于你的準(zhǔn)備來驅(qū)動(dòng)前行,這是做管理的有一個(gè)境界。

          posted @ 2014-09-22 09:23 順其自然EVO 閱讀(167) | 評論 (0)編輯 收藏

          常用測試管理系統(tǒng)對比(測試用例、缺陷管理)

          本文簡介:
            對于中小企業(yè)來說,選擇一款適合的測試管理工具或者工具集合石走向規(guī)劃管理的必經(jīng)之路,本文從以下幾個(gè)方面對目前流行的幾款工具:
            1、QC(QC是TC的升級版,QC的升級版QC 11就是ALM11)
            2、禪道(bugfree升級版)
            3、mantis
            4、JIRA
            5、TestLink
            6、Bugzilla
            從以下幾個(gè)方面進(jìn)行一個(gè)簡單的對比,供大家參考。其中一些數(shù)據(jù)來之網(wǎng)上,不全和不對的地方歡迎大家回帖補(bǔ)充。
            功能
           ?。?.原始需求管理
            2.測試需求管理
            3.測試用例管理
            4.測試過程管理(測試任務(wù)分配)
            5.BUG管理
            6.結(jié)果統(tǒng)計(jì)(進(jìn)度、缺陷指標(biāo)等)
            7.靈活性(可否流程自定義等)
            8.權(quán)限管理
            成本
           ?。?.購買成本
            2.部署成本
            3.使用成本易用性
            4.維護(hù)成本 穩(wěn)定性)
            擴(kuò)展性
            (1.與自動(dòng)化測試工具的接口
            2.與性能測試工具的接口
            3.與其他項(xiàng)目管理軟件的接口
            4.與office的接口)
            性能
            (1.支持的用戶數(shù)
            2.用例數(shù)等KPI指標(biāo))
            技術(shù)支持
            (1.官方支持
            2.使用人氣)
            工具簡單描述
          對比結(jié)果如下:
            通過以上對比,考慮成本、功能、質(zhì)量等方面因素,推薦一下兩種方案:
            1、        可以接受引入成本:QC,禪道
            2、        希望使用免費(fèi)方案: Mantis + TestLink

          posted @ 2014-09-22 09:22 順其自然EVO 閱讀(460) | 評論 (0)編輯 收藏

          JIRA6.0更換數(shù)據(jù)庫到MYSQL

            說明:jira自帶數(shù)據(jù)庫是HSQL,為內(nèi)存數(shù)據(jù)庫,當(dāng)數(shù)據(jù)量比較大時(shí),其性能會(huì)有問題,所有將其改為mysql
            1、準(zhǔn)備環(huán)境
            mysql安裝程序:mysql-essential-5.0.87-win32.msi
            mysql驅(qū)動(dòng)程序:mysql-connector-java-5.1.7-bin.jar
            安裝mysql,然后創(chuàng)建jira數(shù)據(jù)庫,語句如下:
            create database jira character set 'UTF8'
            將jira的license備份出來,以備后面使用
            2、備份jira
            用管理員賬戶登錄jira,將其備份,具體如下:
            系統(tǒng)管理--導(dǎo)入導(dǎo)出--備份數(shù)據(jù)
            3、修改配置
            停止jira
            將mysql-connector-java-5.1.7-bin.jar驅(qū)動(dòng)程序拷貝到 JIRA\lib 目錄下
            啟動(dòng)JIRA\bin\config.bat程序,配置Database,配置完成后,測試連接
            4、恢復(fù)數(shù)據(jù)
            啟動(dòng)jira
            由于修改了配置,且mysql數(shù)據(jù)庫里的內(nèi)容為空,所以剛啟動(dòng)jira的時(shí)候會(huì)提示輸入license,創(chuàng)建管理員賬戶什么的,隨便填,只要能過去就行。
            配置完成后,進(jìn)入系統(tǒng)管理,進(jìn)行恢復(fù)數(shù)據(jù)(要求將其備份的zip文件拷貝到其要求的目錄下即可)
            5、驗(yàn)證
            用之前的管理員賬戶登錄jira,查看issue內(nèi)容,或者用戶信息等等,驗(yàn)證成功。

          posted @ 2014-09-22 09:21 順其自然EVO 閱讀(3036) | 評論 (0)編輯 收藏

          測試用例設(shè)計(jì)還要注意著重點(diǎn)

          一、功能
            關(guān)注頁面單個(gè)功能點(diǎn)驗(yàn)證,充分考慮開發(fā)改動(dòng)的每個(gè)點(diǎn)。這個(gè)是保證開發(fā)每個(gè)已知的修改點(diǎn)都能改對。
            二、關(guān)聯(lián)
            重點(diǎn)考慮修改點(diǎn)對其他模塊的影響,包括代碼的影響和操作數(shù)據(jù)引起的影響。
            比如新增加的功能增加了數(shù)據(jù)庫表的字段,必須關(guān)聯(lián)的驗(yàn)證每個(gè)使用該表的該字段的模塊是否正常工作。難點(diǎn)在于需要分析出已知和未知的影響模塊,考慮的越多,往往遺漏的問題就越少。
            三、流程
            很多系統(tǒng)是有流程的,比如工作流系統(tǒng)。當(dāng)修改了一個(gè)點(diǎn)的時(shí)候,我們必須考慮整個(gè)流程是否能夠正常運(yùn)轉(zhuǎn)起來。
            四、升級
            我們大部分系統(tǒng)都是對已有的系統(tǒng)進(jìn)行升級。對于升級前的數(shù)據(jù),我們必須保證能夠正常工作。升級之前,需要模擬好各種情況。也需要對升級的數(shù)據(jù)庫腳本進(jìn)行充分的檢查。
            五、安全
            比如菜單功能權(quán)限等。
            六、性能
            最近測試組評審測試用例時(shí)發(fā)現(xiàn)組內(nèi)測試人員不是很理解期望結(jié)果會(huì)對測試用例的影響,只是把在前置條件(環(huán)境)下執(zhí)行操作步驟,在當(dāng)前頁面下出現(xiàn)的結(jié)果,不會(huì)寫執(zhí)行操作步驟所帶來的所有結(jié)果(不限于當(dāng)個(gè)頁面或者角色),這其實(shí)沒有看到設(shè)計(jì)測試用例時(shí)沒有想到關(guān)聯(lián),關(guān)聯(lián)和流程的重要性很多人都忽略掉,只關(guān)注一個(gè)點(diǎn),沒有想到所有功能點(diǎn)由此操作帶來的影響。測試用例設(shè)計(jì)還要注意著重點(diǎn)

          posted @ 2014-09-22 09:19 順其自然EVO 閱讀(172) | 評論 (0)編輯 收藏

          Jsp web.xml 標(biāo)準(zhǔn)配置測試版

          ?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
          <display-name>Javaweb</display-name>
          <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
          </welcome-file-list>
          <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
          <init-param>
          <param-name>struts</param-name>
          <param-value>
          classpath*:struts2.xml
          </param-value>
          </init-param>
          </filter>
          <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
          <dispatcher>FORWARD</dispatcher>
          <dispatcher>REQUEST</dispatcher>
          </filter-mapping>
          <!-- spring的監(jiān)聽器,以便在啟動(dòng)時(shí)就自動(dòng)加載spring的配置 -->
          <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>
          <!-- 注:120則設(shè)置過期時(shí)間為120分鐘 -->
          <session-config>
          <session-timeout>30</session-timeout>
          </session-config>
          <!-- spring的應(yīng)用上下文 -->
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath*/applicationContext.xml</param-value>
          </context-param>
          </web-app>

          posted @ 2014-09-22 09:19 順其自然EVO 閱讀(179) | 評論 (0)編輯 收藏

          Linux程序員喜歡的cmd增強(qiáng)版

           Linux程序員有時(shí)偶爾使用Windows下的cmd工具,會(huì)被逼瘋的,有些命令ls, cat, ps等已經(jīng)條件反射一樣使用。
            但在cmd下,根本不知道該用什么命令,好在蓋茲大叔照顧了此部分需求。從Vista開始,推出了PowerShell工具。
            PowerShell工具不僅完全包含cmd所有功能,特別對于Linux程序員有兩大利好:
            增強(qiáng)的tab補(bǔ)全命令
            Unix常用命令ls, cat, ps等的支持,但是參數(shù)格式完全不同,所以不要期望太高。
            請注意:
            從C:進(jìn)入D:的某個(gè)目錄,不需要分兩步,直接 cd D:\xx即可
            別使用仿Unix命令的任何參數(shù),這里的ls等只是一個(gè)PowerShell內(nèi)部命令的別名。
            Windows PowerShell ISE > 幫助 > Windows PowerShell 幫助:
            其余不再羅嗦,有興趣自己試試吧。

          posted @ 2014-09-19 13:24 順其自然EVO 閱讀(166) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共394頁: First 上一頁 43 44 45 46 47 48 49 50 51 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          • 隨筆 - 3936
          • 文章 - 404
          • 評論 - 179
          • 引用 - 0

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 尉犁县| 安康市| 贞丰县| 嘉祥县| 松滋市| 大同县| 永昌县| 雷州市| 蒙城县| 隆回县| SHOW| 郯城县| 古浪县| 瑞安市| 鹿邑县| 康马县| 香港 | 漳浦县| 且末县| 安徽省| 松滋市| 广德县| 康乐县| 修文县| 静宁县| 浙江省| 盘山县| 康平县| 盐池县| 隆子县| 茶陵县| 佛学| 莲花县| 合山市| 宁武县| 来凤县| 阳泉市| 新沂市| 钦州市| 隆德县| 德令哈市|