JSF組件庫–質量不只是零缺陷

自從我上次研究三個主要JSF組件庫的質量以來,已經有一段時間了。 2009年12月,我開始比較RichFaces,Primefaces和ICEfaces的整體軟件質量 。 從那時起,事情發生了變化,從現在開始,我想重新評估和更新它。 我在2009年使用的工具仍然有效,但是工具套件的安裝有點棘手,我只是在浪費時間來做。 由于最近對FAMIX 2.1出口商的需求,我再次查看了inFusion 。 對于GlassFish City帖子( 第一 , 第二 ),它起到了作用 。 但是除此之外,還有更多。 它是幫助評估系統質量的工具。 它專注于體系結構和設計質量,并允許數百萬個LOC系統的質量保證。

在我向您介紹inFusion可以為您做些什么之前(隱式地通過分析候選者,我不做廣告:-D)我必須感謝Radu Marinescu博士和Adrian Trifu博士提供了完整的功能測試,以及他們的產品評估許可證給我。 沒有這個,我將無法像今天一樣向您展示偉大的軟件城市或有關開源項目質量的博客! 請查看這篇文章下面的資源,以獲取有關inFusion及其背后原理的更多鏈接。 如果您希望我完成產品發布,請在評論中告訴我!

本文重點
?
PrimeFaces , RichFaces和ICEfaces是三個最常用的JSF組件庫。 看看使用它的社區,我總是感到有一種競爭是唯一的。 這絕對是由PrimeFaces領導推動的。 您可以考慮他在做什么,是否喜歡。 在這篇文章中,我不是要責怪任何人從事政治上的正確行為,而是要通過查看交付的質量,將其帶回到不同項目的一些更客觀的觀點。

介紹
?
在獲得結果之前,我需要向您介紹一些基礎知識。 如果您覺得自己已經看過足夠多的內容,并且下面的所有內容都很簡單,請隨時處理單個結果。 InFusion以圍繞但不以指標為中心的方式評估軟件質量。 因此,它引入了一種特殊的質量模型(QM),該模型用一些可測量的特征來表達軟件系統的質量。 質量本身可能意味著幾項不同的事情(外部,過程,內部質量)。 inFusion將質量的概念定義為“內部質量”,即系統的體系結構和設計的質量。 inFusion QM定義了兩個分解層:“質量屬性”層和“設計屬性”層。 較高級別的概述包含一組五個“設計屬性”,它們是基于幾個眾所周知的“設計原理”(例如DRY原理和Demeter定律)構建的。 牢記這些原則,inFusion衡量與大多數這些原則和設計規則的偏差。 通過考慮“難聞的氣味”,可以對這些偏差進行量化。 所有這一切與正確的映射(可以在inFusion本身或下面提到的出版物中查找)一起計算出“質量赤字指數”(QDI)。 QDI是一個向上的正向上無界值,它是對分析的系統的設計質量相對于系統總體大小的“不良”度量。

除了這些高級措施之外,inFusion還提供可視化效果,例如在不同級別(包,繼承,類和模塊)上的耦合,封裝和設計缺陷。
我也喜歡指標金字塔。 它以某種方式回答“我的項目與其他項目相比如何?”的問題。它會生成一個金字塔,顯示您項目的關鍵指標,并與這些數字的行業標準范圍進行比較。它分為三個不同的類別(繼承性,大小)和溝通)。

金字塔概述

數字表示比率。 顏色表示比率符合行業標準范圍的位置(來自眾多開源項目)。 每個比例
是綠色(接近平均范圍),藍色(接近低范圍)或紅色(接近高范圍)。 生成的數字有兩個目的。 首先,它們使您可以在多個維度上將代碼庫與其他代碼庫進行比較。 其次,這些數字表示您可能要花費很多精力來改善代碼衛生和設計的地方。 但是,您必須根據上下文理解這些數字。

PrimeFaces(QDI:30,8)

PrimeFaces上的設計缺陷

成立于2009年,擁有不斷增長的用戶基礎。 發展負責人是?a?atay?ivici 。 以下分析是在最新的開發主干上進行的。

系統中的代碼行總數為44.123(包括注釋和空格)。 涂裝質量缺陷指數為30,8。
InFusion檢測到12個不同的設計缺陷。 影響最大的是24個數據類和23個拒絕父母遺贈類。 其次是三個神級。 有很多重復缺陷,但沒有圈依賴。

類層次結構往往又 (即繼承樹傾向于具有許多深度級別和基類,以及許多直接派生的子類)

傾向于包含平均數量的方法。 以相當細粒度的程序包進行組織(即每個程序包幾個類)

方法往往很邏輯平均復雜度 ; 從其他類別 (低耦合色散)中調用許多方法 (高耦合強度);

PrimeFaces的度量標準金字塔

鑒于事實是,這是一個組件庫,因此可以接受NDD(直接后代的數量)和HIT(繼承樹的高度)。 復雜的繼承使理解和預測行為更加復雜。 更深的樹構成更大的設計復雜性,因為涉及更多的方法和類,但會增強繼承方法的潛在重用。 NOM是指方法的數量。 這是一個簡單的度量標準,它根據責任而不是方法的規模來顯示類的復雜性。

RichFaces(QDI:9.1)

RichFaces上的設計缺陷

??
RichFaces于2005年底起源于Ajax4jsf。它是JBoss上廣泛使用的組件庫。
分析使用的是最新的開發路線,僅包括核心和組成部分。

系統中的代碼行總數為134.037(包括注釋和空格)。

RichFaces的質量赤字指數為9.1。

類層次結構往往較高且具有平均寬度 (即,繼承樹傾向于具有許多深度級別和基類以及幾個直接派生的子類)

傾向于包含平均數量的方法。 并且以相當細粒度的程序包進行組織(即每個程序包很少的類);

方法往往:是平均長度和平均邏輯的復雜性 ; 從其他類別 (低耦合色散)中調用許多方法 (高耦合強度);

RichFaces的度量標準金字塔

通常,RichFaces在層次結構方面做得更好。 僅繼承樹的高度接近高范圍。 通訊類的NOM也接近較高水平。 其余的都在定義的范圍內,這實際上導致了良好的QDI。

ICEfaces(QDI:16.6)

ICEfaces上的設計缺陷

自…以來就有ICEfaces,并且針對3.1.0標簽進行了分析,其中包括核心,推入和組件。
系統中的代碼行總數為153.843(包括注釋和空格)。

ICEfaces的質量赤字指數為16.6。
InFusion檢測到16種不同的設計缺陷,包括35個數據類,13個上帝類,20個SAP Breakers,其次是21個拒絕父母遺贈類和35個循環依賴項,我們在其中也有很多重復項。

類層次結構往往很高且具有平均寬度,即繼承樹傾向于具有許多深度級別和基類,以及幾個直接派生的子類)

傾向于包含平均數量的方法。 以相當細粒度的程序包進行組織(即每個程序包幾個類)。

方法往往很邏輯平均復雜度 ; 從其他幾個類別 (低耦合色散)中調用許多方法 (高耦合強度)。

ICEfaces的度量標準金字塔

不出所料,我們還發現了接近高的繼承樹高度。 除此之外,只需要擔心方法的數量。

解釋
?
這種分析與我幾年前所做的分析不同。 我跳過了所有顯而易見的內容(例如,checkstyle,findbugs),因為每個人都在這里使用不同的方法,對我而言,這通常不是系統質量的可比基礎。

在我們得出結論之前,讓我首先表達一下,該結果并不表示您應該使用或不使用任何候選人。

系統設計質量不會影響使用它們生成的代碼的質量。 同樣,它也不應該成為候選人是否穩定或沒有漏洞的任何指標。 它僅關注開發產品的開發人員可能面臨的問題。 從長遠來看,這也可能會對您作為用戶產生影響。 由于設計問題昂貴,頻繁且不可避免。 因此,在代碼庫中存在許多質量缺陷可能會影響團隊隨時間推移能夠提供的新功能的數量,或者修復錯誤的時間會大大增加。 最后,與一個小團隊一起,這可能會導致產品結束。

就繼承而言,所有三個候選人都面臨相同的問題。 這樣做的原因是,它們都是為客戶提供良好功能的框架。 結合候選對象的大小,PrimeFaces在進行分析時似乎存在最大的設計缺陷。 在質量方面,RichFaces領先于其他兩個。 這是我期望從RedHat社區驅動的項目中看到的。 另一個指標是,工作中的軟件社區至關重要,技能高超! ICEfaces是唯一具有循環依賴項和大量重復代碼的項目。 因此,他們可能最終不得不修復相同的錯誤幾次。

我在這里沒有任何要付出的代價,但是想向RichFaces團隊致以祝賀,感謝他們提供高質量的產品! 保持良好的工作!

這是您的RichFaces-City(核心和組件)。 綠色區域是舊的org.ajax4jsf。*平房:)

富人城

資源:
灌輸產品頁面
實踐中的面向對象指標 (Springer,2006年) iPlasma:面向對象設計質量評估的集成平臺 (PDF) 實用設計質量評估 (幻燈片分享演示)

參考: JSF組件庫–質量不只是零缺陷。 來自我們的JCG合作伙伴 Markus Eisele在Java的企業軟件開發博客中。


翻譯自: https://www.javacodegeeks.com/2012/08/jsf-component-libraries-quality-is-more.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[API檔案]GetDlgItem

函數功能 用于獲取指定對話框函數控件的句柄。 API函數原型 1 HWND WINAPI GetDlgItem( 2 _In_opt_ HWND hDlg, //指向包含該對話框的句柄 3 _In_ int nIDDlgItem //第二個參數是控件的名稱 4 ); 范例 可參見ComboBox_AddString宏的范例【點擊這里】轉載于:ht…

嵌入式實時系統的任務設計

嵌入式實時系統的任務設計主要為任務函數的設計、任務優先級的安排、任務的數據結構設計,任務之間的同步與通信設計。 一.任務函數的設計 任務函數按任務結構可分為單次執行任務、周期執行任務和事件觸發任務,各任務的主要差異點如下&#xf…

mssql php 5.4,PHP5.4如何連接MSSql Server2005

windows系統下,PHP5.3以上的版本已經不支持mssql擴展,所以如果你需要和sql server通信需要到http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx自行下載微軟提供的The SQL Server Driver for PHP。下載后解壓縮,將所有的.dll文件拷貝…

將原生SQL功能休眠到您的Spring Data Repository中

JPA為您提供NamedNativeQuery以便使用本機SQL。 但是,用法不是很方便,尤其是當您需要在本機SQL中映射多個實體時。 您必須定義一組容易出錯的SqlResultSetMapping映射。 對于以前使用過Hibernate本機SQL功能的用戶,您會發現它比JPA的NamedNat…

創建yii的第一個應用

原文鏈接轉載于:https://www.cnblogs.com/Baronboy/p/6354522.html

字符串匹配(KMP 算法 含代碼)

主要是針對字符串的匹配算法進行解說 有關字符串的基本知識傳統的串匹配法模式匹配的一種改進算法KMP算法網上一比較易懂的解說小樣例1計算next 2計算nextval代碼有關字符串的基本知識 串(string或字符串)是由零個或多個字符組成的有限序列,一…

php數組轉為js json,javascript-將數組php轉換為JSON時出錯

我在將多維PHP數組轉換為JSON時遇到了一些麻煩.我使用json_encode進行了轉換,但它為null.我正在嘗試開發orgChart,數據是從CSV文件中讀取的,并保存在數組中.布局和JS代碼用于接收JSON文件,因此我需要使用這種格式.這是數組的一部分,其中包含175個數組Array([2] > Array([id]…

UVa 10954 全部相加(Huffman編碼)

https://vjudge.net/problem/UVA-10954 題意:有n個數的集合S,每次可以從S中刪除兩個數,然后把它們的和放回集合,直到剩下一個數。每次操作的開銷等于刪除的兩個數之和,求最小開銷。 思路:Huffman編碼。 1 #…

serialVersionUID的作用以及如何用idea自動生成實體類的serialVersionUID

轉載:http://blog.csdn.net/liuzongl2012/article/details/45168585 serialVersionUID的作用: 通過判斷實體類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地相應實體類的serialVer…

js post方式請求另外一個php,利用JS使用POST方式提交請求的方法(結合代碼詳細解答)...

下面是我給大家整理的利用JS使用POST方式提交請求的方法,有興趣的同學可以去看看。一般都是寫上隱藏的form標簽,用來調用js函數然后submit全部用js來寫也行,以下是我在一個問答頻道看見別人寫的例子,放在這里function post(URL, P…

JBoss BRMS最佳實踐– BPM流程初始化層的提示

我過去發布過一些有關遷移策略的文章,仔細研究了流程層,并提供了一些有關jBPM的最佳實踐 ,它們都涉及到BPM策略的非常具體的部分。 我想重新討論最佳實踐的主題,然后在智能集成企業級別上,我們討論使用JBoss BRMS對您的…

寒假作業二:匯總隨筆

隨筆一:解題思路隨筆二:自學計劃 轉載于:https://www.cnblogs.com/mercuialC/p/6359997.html

跨站點腳本(XSS)和預防

如OWASP網站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站點腳本(XSS)攻擊的變種幾乎是無限的。 在這里,我建議使用基于Servlet篩選器的解決方案來清理HTTP請求。 攻…

NoSQL入門第一天——NoSQL入門與基本概述

一、課程大綱 二、入門概述 1.為什么用NoSQL 單機MySQL的年代: 一個網站的訪問量一般都不大,用單個數據庫完全可以輕松應付。      我們來看看數據存儲的瓶頸是什么?        1.數據量的總大小 一個機器放不下時。(現…

隨機森林特征個數mtry matlab,基于隨機森林的特征選擇算法

2.1 算法描述本文提出了一種基于隨機森林的Wrapper特征選擇方法RFFS,利用隨機森林算法的變量重要性度量對特征進行排序,然后采用序列后向搜索方法,每次從特征集合中去掉一個最不重要(重要性得分最小)的特征,逐次進行迭代,并計算分類正確率,最終得到變量個數最少、分類正確率最高…

matlab循環讀取變量,Matlab for 多個變量循環能不能這樣啊 ,求教高手!!!!

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓for a0.003:0.0005:1; b0.002:0.0005:0.9; c0.001:0.0005:0.8;d0.0005:0.0005:0.7;E1a* E_Bone;E2b* E_Bone;E3c* E_Bone;E4d* E_Bone;G1a* G_Bone;G2b* G_Bone;G3c* G_Bone;G4d* G_Bone;%% Integration for cortical bone partsIn…

UVA - 10384 The Wall Pusher(推門游戲)(IDA*)

題意:從起點出發,可向東南西北4個方向走,如果前面沒有墻則可走;如果前面只有一堵墻,則可將墻向前推一格,其余情況不可推動,且不能推動游戲區域邊界上的墻。問走出迷宮的最少步數,輸出…

JavaOne 2012:JavaOne技術主題演講

Mark Reinhold從JavaOne 2012技術主題演講開始。 他說,今年的版本將有所不同,因為它將使用大致相同的示例來說明Java的各個方面,而不是對Java的每個組件進行單獨的單獨介紹。 JavaFX團隊的Richard Bair和Jasper Potts (并與FXExpe…

C語言結構體及函數傳遞數組參數演示樣例

C語言結構體及函數傳遞數組參數演示樣例 注:makeSphere()函數返回Sphere結構體,main函數中。調用makeSphere()函數,傳遞的第一個參數為數組,傳遞的數組作為指針。posted on 2017-07-30 18:42 mthoutai 閱讀(...) 評論(...) 編輯 收…

Maven內部版本號插件–用法示例

假設我們需要向一些工件(jar,war等)添加內部版本號。 在這里,我想演示buildnumber-maven-plugin的用法。 這篇文章基于: http://mojo.codehaus.org/buildnumber-maven-plugin/usage.html http://www.site.lalitbhatt…