下面是來自 Taobao QA Team中的安全測試方面的文章,對初學者很有指導意義
安全測試學習筆記系列:
1. http://qa.taobao.com/?p=11352
2.http://qa.taobao.com/?p=11363
3.http://qa.taobao.com/?p=11472
4.http://qa.taobao.com/?p=11479
5.http://qa.taobao.com/?p=11484
------
WEB漏洞攻擊之SQL注入:http://qa.taobao.com/?p=11403
摘要: onabort 當用戶中斷下載圖像時觸發。
onactivate 當對象設置為活動元素時觸發。
onafterprint 對象所關聯的文檔打印或打印預覽后立即在對象上觸發。
onafterupdate 當成功更新數據源對象中的關聯對象后在數據綁定對象上觸發。
onbeforeactivate new 對象要被設置為當前元素前立即觸發。
onbeforecopy 當選中區復制到系統剪貼板之前在源對象觸發。
onbeforecut 當選中區從文檔中刪除之前在源對象觸發。
onbeforedeactivate 在 activeElement 從當前對象變為父文檔其它對象之前立即觸發。
onbeforeeditfocus 在包含于可編輯元素內的對象進入用戶界面激活狀態前或可編輯容器變成控件選中區前觸發。
onbeforepaste 在選中區從系統剪貼板粘貼到文檔前在目標對象上觸發。
閱讀全文
數組類Array是Java中最基本的一個存儲結構。它用于存儲一組連續的對象或基本類型的數據。其中的元素的類型必須相同。
Array是最有效率的一 種:
1、效率高,但容量固定且無法動態改變。 Array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們Array的容量。
2、Java中有一個Arrays類,專門用來操作Array,提供搜索、排序、復制等靜態方法。 equals():比較兩個Array是否相等,Array擁有相同元素個數,且所有對應元素兩兩相等。 fill():將值填入Array中。 sort():用來對Array進行排序。 binarySearch():在排好序的Array中尋找元素。 System.arraycopy():Array的復制。
Java Collections Framework成員主要包括兩種類型,即:Collection和Map類型。 在Java中提供了Collection和Map接口。其中List和Set繼承了Collection接口;Vector、ArrayList、 LinkedList三個類實現List接口,HashSet、TreeSet實現Set接口,HashTable、HashMap、 TreeMap實現Map接口。由此可見,Java中用8種類型的基本數據結構來實現其Collections Framework;下面分別進行介紹。
Vector:基于Array的List,性能也就不可能超越Array,并且Vector是"sychronized"的,這個也是Vector和ArrayList的唯一的區別。
ArrayList:同Vector一樣是一個基于Array的,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但 是當運行到多線程環境中時,可需要自己在管理線程的同步問題。從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快。
LinkedList:LinkedList不同于前面兩種List,它不是基于Array的,所以不受Array性能的限制。它每一個節點(Node) 都包含兩方面的內容:
1、節點本身的數據(data);
2、下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候 就不用像基于Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了所以它適合于進行頻繁進行插入和刪除操 作。這就是LinkedList的優勢。Iterator只能對容器進行向前遍歷,而 ListIterator則繼承了Iterator的思想,并提供了對List進行雙向遍歷的方法。
List總結:
1、所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2、所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3、所有的List中可以有null元素,例如[ tom,null,1 ];
4、基于Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
HashSet:雖然Set同List都實現了Collection接口,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是 Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的 對應存儲項,這也是為什么在Set中不能像在List中一樣有重復的項的根本原因,因為HashMap的key是不能有重復的。HashSet能快速定位 一個元素,但是放到HashSet中的對象需要實現hashCode()方法0。
TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和 Comparator。一個類是可排序的,它就應該實現Comparable接口。有時多個類具有相同的排序算法,那就不需要重復定義相同的排序算法,只要實現Comparator接口即可。TreeSet是SortedSet的子類,它不同于HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。
Set總結:
1、Set實現的基礎是Map(HashMap);
2、Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象; Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別? Set里的元素是不能重復的,即不能包含兩個元素e1、e2(e1.equals(e2))。那么用iterator()方法來區分重復與否。 equals()是判讀兩個Set是否相等。==方法決定引用值(句柄)是否指向同一對象。
HashMap、TreeMap、Hashtable:
1、HashMap也用到了哈希碼的算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它有一些擴展的方法,比如 firstKey(),lastKey()等。
2、Hashtable:不允許空(null)鍵(key)或值(value),Hashtable的方法是Synchronize的,在多個線程訪問 Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
3、HashMap和Hashtable的區別:HashMap是Hashtable(線程案例的)的輕量級實現(非線程安全的實現),他們都完成了Map接口。主要區別在于HashMap允許空(null)鍵(key)或值(value),非同步,由于非線程安全,效率上可能高于Hashtable。
Map總結:
是一種把鍵對象和值對象進行關聯的容器,Map有兩種比較常用的實現: HashTable、HashMap和TreeMap。
摘要: 1005:創建表失敗
1006:創建數據庫失敗
1007:數據庫已存在,創建數據庫失敗
1008:數據庫不存在,刪除數據庫失敗
1009:不能刪除數據庫文件導致刪除數據庫失敗
1010:不能刪除數據目錄導致刪除數據庫失敗
1011:刪除數據庫文件失敗
1012:不能讀取系統表中的記錄
1020:記錄已被其他用戶修改
1021:硬盤剩余空間不足,請加大硬盤可用空間...
閱讀全文
摘要: 序言
在擔任公司高管的幾年間,我面試過數以百計的各個層面的員工,其中最讓我感到遺憾的一個現象就是很多人有著非常好的素質,甚至有的還是名校的畢業生,因為不懂得去規劃自己的職業,在工作多年后,依然拿著微薄的薪水,為了一份好一點的工作而奔波。很多這樣的人,他們只要稍微修正一下自己的職業方向,就能夠在職業發展上走得更從容。
有一次一個大連理工大學的研究生,好像是學電子的...
閱讀全文
國外:
BJ Rolison (I.M.Testy) http://blogs.msdn.com/imtesty
BJ是微軟負責EE工作的Test Architecture,也是HWTSaM的作者。他的文章非常有條理,看起來也比較容易,其中的數據也非常豐富,是我喜歡的風格。
Alan Page http://blogs.msdn.com/alanpa/
Alan是微軟負責EE工作的Director,是HWTSaM的主要作者,他的博客是了解微軟測試非常好的一個窗口。最近幾年,他不限于測試技術的推廣,他更多的考慮是測試管理,以及測試氛圍/文化的形成,以及對于測試的影響。我很同意他的一句話“95%的UI自動化測試都是浪費時間”詳情。他的博客文章比較隨意,有時也不知道他在嘮叨些什么,但不時卻有很多精彩的觀點。
Google Test Blog http://googletesting.blogspot.com
這是Google官方的測試博客,信息量很少,除了每年一次的Google Automation Test Conference之外,文章較少。今年6月,James Whittaker離開微軟,加入Google后,才到這里增加不少好文章。
James Bach的博客 http://www.satisfice.com/blog/
James是一個軟件測試的資深人士,90年代曾在Apple和Boland公司???過測試管理工作,后來在其他一些公司負責測試流程和質量管理,2000年自己創辦了satisfice測試咨詢公司,提供軟件質量保證相關的咨詢和培訓. 他和Cem Kaner撰寫了很多Explorary Testing相關的文章和書籍,并且提出了Context-Driven-Testing,這些方法論很適合現在的Agile Testing的特點。
Adam Goucher的博客 http://adam.goucher.ca/
一個多產高質的測試寫作專家,基本上每個月都有10多篇關于測試的文章,有時候一天寫了多篇,真是非常佩服他的寫作能力。他的思想很有深度,對軟件測試各個方面都有全面的理解,他閱讀了幾乎所有新出的測試書籍,并且些了與其相關的評論。這些評論通常非常尖銳。比如說,HWTSaM的評論,他的評論就比較中肯。對James Whittalkes的 Exploratory Testing評論 卻是嗤之以鼻。
軟件測試雜文集:http://blogs.msdn.com/b/cheno/
文章轉自:http://www.cesoo.com/
一、寫在前面
剛開學,趁著有時間把設計模式重新整理一次。學好設計模式是走向架構的第一步,系統架構應該朝著可維護,可擴展,強壯性好的方向去發展。大學的最后一個學期了,時間不多了,3月初就要去騰訊實習了,還有畢設。加油 :)
二、常見的模式分類
創建模式
|
結構模式
|
行為模式
|
簡單工廠模式
|
適配器模式
|
不變模式
|
工廠方法模式
|
缺省適配模式
|
策略模式
|
抽象工廠模式
|
合成模式
|
模版方法模式
|
單例模式
|
裝飾模式
|
觀察者模式
|
多例模式
|
代理模式
|
迭代子模式
|
建造模式
|
享元模式
|
責任鏈模式
|
原始模型模式
|
門面模式
|
命令模式
|
|
橋梁模式
|
備忘錄模式
|
|
|
狀態模式
|
|
|
訪問者模式
|
|
|
解釋器模式
|
|
|
調停者模式
|
三、主要模式的定義和描述
以下內容來自《head first 設計模式》一書
模式
|
定義
|
描述
|
裝飾者
|
動態地將責任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案
|
包裝一個對象,以提供新的行為
|
狀態
|
允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類
|
封裝了基本狀態的行為,并使用委托在行為之間切換
|
迭代器
|
提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示
|
在對象的集合之中游走,而不暴露集合的實現
|
外觀(門面)
|
提供一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更多容易使用
|
簡化一群類的接口
|
策略
|
定義算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶
|
封裝可以互換的行為,并使用委托來決定使用那一種
|
代理
|
為另一個對象提供一個替身或點位符以訪問這個對象
|
包裝對象,以控制對此對象的訪問
|
工廠方法
|
定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類
|
由子類決定要創建是具體類是哪一個
|
抽象工廠
|
提供一個接口,用于創建相關或依賴對象的家族,而不需要明確指定具體類
|
允許客戶創建對象的家族,而無需指定他們的具體類
|
適配器
|
將一個類的接口,轉換成客戶期望另一個接口。適配器讓原來不兼容的類可以合作無間
|
封裝對象,并提供不同的接口
|
觀察者
|
在對象之間定義一對多的依賴,這樣一來,當一個對象改變時,依賴它的對象都會收到通知并自動更新
|
讓對象能夠在狀態改變時被通知
|
模板方法
|
在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟
|
由子類決定如何實現一個算法中的步驟
|
組合
|
允許你將對象組成樹結構來表現“整體/部分”的層次結構。組合能讓客戶以一致的方式處理個別對象和對象組合
|
客戶用一致的方式處理對象集合和單個對象
|
單件(單體)
|
確保一個類只有一個實例,并提供全局訪問點
|
確保只有一個對象被創建
|
命令
|
將請求封裝成對象,這可以讓你使用不同的請求、隊列,或者日志請求來參數化其它對象。命令模式也可以支持撤銷操作
|
封裝請求為對象
|
四、參考資料
IBM社區設計模式方面資料: http://www.ibm.com/developerworks/cn/java/design/
常見OO原則:http://m.tkk7.com/jicheng687/archive/2011/02/13/344174.html
--END--
一、在單元測試領域里,JUnit可以說是王者,它不但精致,而且使用方便。最后有些時間,把JUnit源碼讀讀,順便復習下設計模式 :)
二、參考文章
在深入看代碼之前,先看下面的文章,對JUnit有一個基本的了解后,看代碼會更有目的性。
JUnit官方網站:http://www.junit.org/
分析 JUnit 框架源代碼: http://www.ibm.com/developerworks/cn/java/j-lo-junit-src/
JUnit A cook's tour: http://junit.sourceforge.net/doc/cookstour/cookstour.htm
三、核心架構
我分析的源碼的版本是JUnit 3.8.2,這個版本相對簡略,把核心思想表現出來了,沒有4.X版本那么多附加的功能
JUnit是一個模式密集型的框架,主要用組合模式、模樣方法、觀察者模式、參數收集方法、命令模式、裝飾者模式和適配器模式。其中核心是 前三種
核心類之間的關系

Test、TestCase和TestSuit構成了測試框架的基礎,它們用composite模式組合在一起,使得客戶端可以將對象的集合以及個別的對象(TestCase)一視同仁.TestRusult用來保存測試結果,和TestListner組成observer模式,支持文本界面、圖形界面和 Eclipse 集成組件三種監聽器
和JUnit A cook's tour中提到的模式圖很相似

類與類之間的關系在此就不作解釋了,可以看看參考文章。有興趣的朋友,歡迎一起討論 :)