監(jiān)視和改善軟件開發(fā)質(zhì)量的制作方法
【專利摘要】此處描述用于監(jiān)視和改善軟件開發(fā)質(zhì)量的系統(tǒng)和方法。根據(jù)本公開的一方面,監(jiān)視與源代碼有關(guān)的監(jiān)視任務(wù)的發(fā)生。編譯和測試源代碼以產(chǎn)生測試結(jié)果。分析測試結(jié)果。測試結(jié)果分析包括用于評價(jià)源代碼的質(zhì)量的質(zhì)量分析。
【專利說明】監(jiān)視和改善軟件開發(fā)質(zhì)量
【技術(shù)領(lǐng)域】
[0001]本公開一般涉及軟件開發(fā),更具體地,涉及監(jiān)視和改善軟件開發(fā)的質(zhì)量。
【背景技術(shù)】
[0002]開發(fā)軟件產(chǎn)品是冗長的、勞動(dòng)密集的過程,通常涉及來自不同的開發(fā)者和測試者的貢獻(xiàn)。開發(fā)者對源代碼做出頻繁地改動(dòng),而測試者匆忙地安裝軟件包、執(zhí)行回歸測試并發(fā)現(xiàn)程序錯(cuò)誤(bug)或缺陷(defect)。當(dāng)測試者執(zhí)行回歸測試時(shí),開發(fā)者簽入(check-1n)對于源代碼的更多的改動(dòng)以引入更多的特征。這會(huì)產(chǎn)生惡性循環(huán),在該惡性循環(huán)中開發(fā)了越來越多的特征,而同時(shí)通過對源代碼的改動(dòng)引入了更多的缺陷。在這過程期間,沒有人真正地準(zhǔn)確知道當(dāng)前產(chǎn)品質(zhì)量是什么,以及該產(chǎn)品是否足以發(fā)行。最后,由于時(shí)間的限制可能發(fā)行具有沒有處理的許多隱蔽缺陷的軟件產(chǎn)品。當(dāng)軟件質(zhì)量下滑時(shí),錯(cuò)過最后期限,并且損失投資回收。
[0003]在軟件工業(yè)的許多企業(yè)致力于改善他們的產(chǎn)品供應(yīng)的質(zhì)量并保證他們的產(chǎn)品滿足最高的可能標(biāo)準(zhǔn)的過程中,他們執(zhí)行持續(xù)的軟件質(zhì)量保證協(xié)議。ISO 9001標(biāo)準(zhǔn)和能力成熟度模型集成(CMMI)模型兩者都是行業(yè)中用于保證開發(fā)項(xiàng)目的質(zhì)量的普遍指導(dǎo)。CMMI指定企業(yè)的軟件開發(fā)過程中的五級的組織和成熟度,每個(gè)級別具有對于將要獲得的CMMI認(rèn)證必須滿足的一系列不同的要求。
[0004]諸如CMMI的現(xiàn)有標(biāo)準(zhǔn)和指導(dǎo)通常僅提供一般目標(biāo)。通常不提供關(guān)于獲得那些目標(biāo)的細(xì)節(jié),而必須由遵循該標(biāo)準(zhǔn)的企業(yè)開發(fā)所述細(xì)節(jié)。一般不存在用于評價(jià)產(chǎn)品的質(zhì)量和使質(zhì)量趨勢可視化的已知的有效方法。因此難以預(yù)測風(fēng)險(xiǎn)和進(jìn)度。諸如產(chǎn)品負(fù)責(zé)人(product owners)、開發(fā)管理者和質(zhì)量工程師之類的項(xiàng)目干系人(stake holders)不能獲得關(guān)于整體產(chǎn)品質(zhì)量狀態(tài)的定期更新。
[0005]因此期望提供用于評價(jià)、監(jiān)視和/或改善軟件質(zhì)量的工具。
【發(fā)明內(nèi)容】
[0006]此處描述用于監(jiān)視和改善軟件開發(fā)質(zhì)量的系統(tǒng)和方法。根據(jù)本公開的一方面,監(jiān)視與源代碼有關(guān)的監(jiān)視任務(wù)的發(fā)生。編譯和測試源代碼以產(chǎn)生測試結(jié)果。分析測試結(jié)果。測試結(jié)果分析包括用于評價(jià)源代碼的質(zhì)量的質(zhì)量分析。
[0007]利用將在下文中變得清楚的這些和其它優(yōu)點(diǎn)與特征,通過參照以下詳細(xì)描述的說明書和所附權(quán)利要求以及附圖,可以獲得進(jìn)一步信息。
【專利附圖】
【附圖說明】
[0008]在附圖中示出一些實(shí)施例。附圖中相同的參考標(biāo)號指示相同的部分。
[0009]圖1是示出示范性的質(zhì)量監(jiān)視系統(tǒng)的框圖;
[0010]圖2示出示范性的簽入任務(wù);
[0011]圖3示出示范性的構(gòu)建(build)報(bào)告;[0012]圖4示出示范性的基于時(shí)間的監(jiān)視任務(wù);
[0013]圖5示出自動(dòng)測試的示范性方法;
[0014]圖6示出示范性的總結(jié)報(bào)告;
[0015]圖7示出示范性的基于時(shí)間段的儀表盤(dashboard);
[0016]圖8示出另一示范性的基于時(shí)間段的儀表盤;以及
[0017]圖9示出再一示范性的基于時(shí)間段的儀表盤。
【具體實(shí)施方式】
[0018]在下面的描述中,為了說明,具體數(shù)目、材料和配置被闡述以便提供本框架和方法的徹底理解,并且以便滿足法定撰寫的描述、實(shí)現(xiàn)和優(yōu)選模式的要求。然而,本領(lǐng)域技術(shù)人員清楚地是,可以在沒有具體示范性細(xì)節(jié)的情況下實(shí)現(xiàn)給出的框架和方法。在其他情況中,省略或簡化公知的特征以使給出的框架和方法的示范性實(shí)施方式的描述清楚,并且從而更好地解釋給出的框架和方法。此外,為便于理解,將某些方法步驟描繪為單獨(dú)的步驟;然而,這些單獨(dú)描繪的步驟不應(yīng)該被解釋為必須依賴次序或者其執(zhí)行必須分離。
[0019]此處描述一種對于監(jiān)視和改善軟件質(zhì)量的框架。在一個(gè)實(shí)現(xiàn)中,本框架通過定期地監(jiān)視軟件開發(fā)和/或測試的質(zhì)量來提供軟件項(xiàng)目的整體狀態(tài)或質(zhì)量的定期更新。不是僅在特征在最終的構(gòu)建包中就緒以后才花費(fèi)巨大的努力來查找和報(bào)告缺陷,本框架而是通過可以在整個(gè)軟件開發(fā)過程期間頻繁地運(yùn)行的一系列過程(例如,編譯檢查、代碼測驗(yàn)、單元測試、功能測試、代碼覆蓋分析、性能測試等等)以獲得軟件項(xiàng)目的第一手的健康狀態(tài)來監(jiān)視整體質(zhì)量。
[0020]可以定期地提供一系列總結(jié)報(bào)告以報(bào)告所述過程的結(jié)果??商鎿Q地,或附加地,可以提供基于時(shí)間段的儀表盤以呈現(xiàn)項(xiàng)目的概括或總結(jié)。如果項(xiàng)目的質(zhì)量指數(shù)降到預(yù)定閾值之下,則可以通知項(xiàng)目干系人采取合適的行動(dòng)。例如,儀表盤可以指示紅光以對質(zhì)量方面的顯著下降發(fā)信號,從而提醒項(xiàng)目干系人采取行動(dòng)來調(diào)節(jié)開發(fā)過程并使得質(zhì)量回到正軌。將在以后幾節(jié)里更詳細(xì)地討論這些和其它示范性特征。
[0021]圖1是示出實(shí)現(xiàn)此處描述的框架的示范性的質(zhì)量監(jiān)視系統(tǒng)100的框圖。系統(tǒng)100可以包括一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng),為了說明目的圖1僅示出一個(gè)計(jì)算機(jī)系統(tǒng)。雖然利用一個(gè)計(jì)算機(jī)系統(tǒng)101示出環(huán)境,但是應(yīng)當(dāng)理解也可以采用多于一個(gè)計(jì)算機(jī)系統(tǒng)或服務(wù)器,諸如服務(wù)器池,以及除服務(wù)器以外的計(jì)算機(jī)。
[0022]更詳細(xì)地轉(zhuǎn)向計(jì)算機(jī)系統(tǒng)101,它可以包括中央處理單元(CPU) 104、非臨時(shí)計(jì)算機(jī)可讀介質(zhì)106、顯示設(shè)備108、輸入設(shè)備110和輸入輸出接口 121。非臨時(shí)計(jì)算機(jī)可讀介質(zhì)106可以存儲(chǔ)機(jī)器可執(zhí)行指令、數(shù)據(jù)和各種程序(諸如操作系統(tǒng)(未示出))以及用于實(shí)現(xiàn)此處描述的技術(shù)的軟件質(zhì)量監(jiān)視單元107,它們?nèi)慷伎梢杂蒀PU104處理。因而,計(jì)算機(jī)系統(tǒng)101是通用計(jì)算機(jī)系統(tǒng),當(dāng)該通用計(jì)算機(jī)系統(tǒng)運(yùn)行機(jī)器可執(zhí)行指令時(shí)變?yōu)閷S糜?jì)算機(jī)系統(tǒng)??商鎿Q地,此處描述的質(zhì)量監(jiān)視系統(tǒng)可以實(shí)現(xiàn)為經(jīng)由操作系統(tǒng)運(yùn)行的軟件產(chǎn)品或應(yīng)用的一部分。該應(yīng)用可以集成到現(xiàn)有的軟件應(yīng)用中,諸如現(xiàn)有應(yīng)用的附件(add-on)或插件(plug-1n),或作為單獨(dú)的應(yīng)用?,F(xiàn)有的軟件應(yīng)用可以是軟件應(yīng)用的套裝。應(yīng)當(dāng)注意,在一些實(shí)現(xiàn)中,軟件質(zhì)量監(jiān)視單元107可以整體或部分地由不同的計(jì)算機(jī)系統(tǒng)作為主機(jī)。從而,此處描述的技術(shù)可以本地發(fā)生在計(jì)算機(jī)系統(tǒng)101上,或者可以發(fā)生在其他計(jì)算機(jī)系統(tǒng)中并向計(jì)算機(jī)系統(tǒng)101報(bào)告。
[0023]每個(gè)計(jì)算機(jī)程序可以實(shí)現(xiàn)為高級面向過程或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn),或者如果需要可以以匯編或機(jī)器語言來實(shí)現(xiàn)。該語言可以是編譯或解釋語言。機(jī)器可執(zhí)行指令并不旨在局限于的任一特定編程語言及其實(shí)現(xiàn)。將理解的是,各種編程語言及其編碼可以用來實(shí)現(xiàn)此處包含的公開的教導(dǎo)。
[0024]非臨時(shí)計(jì)算機(jī)可讀介質(zhì)106可以是任何形式的存儲(chǔ)設(shè)備,例如,半導(dǎo)體存儲(chǔ)器件,諸如可擦除可編程只讀存儲(chǔ)器(EPROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)以及閃速存儲(chǔ)器件;硬盤,諸如內(nèi)部硬盤和可移動(dòng)盤,磁光盤,以及光盤只讀存儲(chǔ)器(CD-ROM)。
[0025]計(jì)算機(jī)系統(tǒng)101可以包括輸入設(shè)備110(例如,鍵盤或鼠標(biāo))和顯示設(shè)備108(例如,監(jiān)視器或屏幕)。顯示設(shè)備108可以用來顯示通過軟件質(zhì)量監(jiān)視單元107生成的分析結(jié)果(例如,總結(jié)報(bào)告、儀表盤等等)。此外,計(jì)算機(jī)系統(tǒng)101還可以包括用于使用通信鏈路(例如,電話線、無線網(wǎng)絡(luò)鏈路、有線網(wǎng)絡(luò)鏈路或電纜網(wǎng))與網(wǎng)絡(luò)交換數(shù)據(jù)的諸如通信卡或設(shè)備(例如,調(diào)制解調(diào)器和/或網(wǎng)絡(luò)適配器)之類的其他設(shè)備,以及其他支持電路(例如,高速緩存、電源、時(shí)鐘電路、通信總線等等)。此外,可以通過專用集成電路補(bǔ)充上述中的任何一個(gè),或者可以通過專用集成電路合并上述中的任何一個(gè)。
[0026]計(jì)算機(jī)系統(tǒng)101可以通過一個(gè)或多個(gè)中間網(wǎng)絡(luò)使用到一個(gè)或多個(gè)遠(yuǎn)程客戶端系統(tǒng)的邏輯連接在網(wǎng)絡(luò)環(huán)境中操作。這些網(wǎng)絡(luò)一般表示任何協(xié)議、適配器、組件、以及與有線和/或無線通信網(wǎng)絡(luò)關(guān)聯(lián)的其它通用的基礎(chǔ)設(shè)施。根據(jù)在不同的實(shí)現(xiàn)中的情形,這種網(wǎng)絡(luò)可以在范圍和本質(zhì)上是全球的、區(qū)域的、本地的和/或個(gè)人的。
[0027]遠(yuǎn)程客戶端系統(tǒng)(未示出)可以是,例如,個(gè)人計(jì)算機(jī)、移動(dòng)設(shè)備、個(gè)人數(shù)字助理(PDA)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他公用網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括上面相對于計(jì)算機(jī)系統(tǒng)101描述的多數(shù)或全部元件。遠(yuǎn)程客戶端系統(tǒng)還可以包括非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)或存儲(chǔ)器件(未示出)的一個(gè)或多個(gè)實(shí)例。非臨時(shí)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括適用于通過網(wǎng)絡(luò)與軟件質(zhì)量監(jiān)視單元107交互的客戶端應(yīng)用或用戶界面(例如,圖形用戶界面)??蛻舳藨?yīng)用可以是互聯(lián)網(wǎng)瀏覽器、瘦客戶端(thin client)或任何其他合適的應(yīng)用。這種交互的示例包括對報(bào)告或儀表盤的請求。隨后,客戶端應(yīng)用可以向計(jì)算機(jī)系統(tǒng)101轉(zhuǎn)發(fā)這些請求以用于運(yùn)行。
[0028]在一個(gè)實(shí)現(xiàn)中,軟件質(zhì)量監(jiān)視單元107耦接到軟件配置管理(SCM)系統(tǒng)130 (或與SCM系統(tǒng)130接口連接)??梢酝ㄟ^遠(yuǎn)程計(jì)算機(jī)系統(tǒng)或相同的計(jì)算機(jī)系統(tǒng)101實(shí)現(xiàn)SCM系統(tǒng)130。SCM系統(tǒng)130跟蹤并控制軟件中的改動(dòng)。更具體地,可以將SCM系統(tǒng)130設(shè)計(jì)為捕捉、存儲(chǔ)和管理訪問并提供對于軟件源文件、設(shè)計(jì)和類似文件的版本控制。SCM系統(tǒng)130的示例包括SourceSafe、源代碼控制系統(tǒng)(SCCS)或PVCS系統(tǒng),但不局限于此。
[0029]軟件質(zhì)量監(jiān)視單元107可以被設(shè)計(jì)為與SCM系統(tǒng)130 —起工作以監(jiān)視軟件項(xiàng)目的整體質(zhì)量。在一個(gè)實(shí)現(xiàn)中,軟件質(zhì)量監(jiān)視單元107從SCM系統(tǒng)130接收軟件項(xiàng)目文件、通過一系列編譯和測試過程估計(jì)項(xiàng)目的整體質(zhì)量以及向項(xiàng)目干系人(例如,開發(fā)者、測試者、負(fù)責(zé)人、工程師等等)報(bào)告評價(jià)的結(jié)果。有益地,不是僅在特征在最終的軟件產(chǎn)品中就緒以后才花費(fèi)巨大的資源查找和報(bào)告缺陷,而是在項(xiàng)目的開發(fā)過程期間提供關(guān)于項(xiàng)目的當(dāng)前狀態(tài)的定期更新。
[0030]根據(jù)一個(gè)實(shí)現(xiàn),軟件質(zhì)量監(jiān)視單元107使用監(jiān)視任務(wù)來實(shí)現(xiàn)編譯和測試過程。在一個(gè)實(shí)施例中,監(jiān)視任務(wù)可以包括簽入任務(wù)和基于時(shí)間的任務(wù)??梢杂刹煌氖录|發(fā)這些監(jiān)視任務(wù)。例如,每當(dāng)開發(fā)者向SCM系統(tǒng)130 “簽入”新改動(dòng)時(shí)就可以觸發(fā)簽入任務(wù)??梢酝ㄟ^時(shí)間事件觸發(fā)基于時(shí)間的任務(wù)。例如,可以以規(guī)定時(shí)間間隔或在預(yù)定時(shí)間觸發(fā)基于時(shí)間的任務(wù)。還可以當(dāng)軟件項(xiàng)目的安裝包就緒或可用于安裝時(shí)觸發(fā)基于時(shí)間的任務(wù)。還可以使用具有不同的觸發(fā)事件的其他類型的監(jiān)視任務(wù)。
[0031]觸發(fā)事件可以啟動(dòng)自動(dòng)編譯和構(gòu)建過程以及相應(yīng)的監(jiān)視任務(wù)。取決于監(jiān)視任務(wù)的類型,可以執(zhí)行一系列不同的測試。例如,簽入任務(wù)可能涉及更少的廣度測試(例如,僅單元測試),而基于時(shí)間的任務(wù)可能涉及更多的廣度測試。作為示例,對監(jiān)視任務(wù)的測試可以包括代碼覆蓋分析、功能測試、質(zhì)量檢驗(yàn)、單元測試,以及其他類型測試,但是不局限于此。對于基于安裝包的任務(wù),測試可以包括功能測試、性能測試以及其他類型的測試,但是不局限于此。一旦測試完成,例如,系統(tǒng)可以通過計(jì)算質(zhì)量指數(shù)和/或在報(bào)告或儀表盤中總結(jié)測試結(jié)果來估計(jì)測試結(jié)果。系統(tǒng)可以在數(shù)據(jù)庫中存儲(chǔ)測試和/或評價(jià)結(jié)果,并且還向相應(yīng)的項(xiàng)目干系人發(fā)送通知。當(dāng)接收通知時(shí),項(xiàng)目干系人可以立即修復(fù)與軟件項(xiàng)目有關(guān)的任何檢測到的故障或缺陷。將在以下部分中提供這些和其它示范性特征的更多細(xì)節(jié)。
[0032]圖2示出用于監(jiān)視并報(bào)告軟件項(xiàng)目的整體質(zhì)量的示范性的簽入任務(wù)(或過程流)200。當(dāng)開發(fā)者(或任何其他用戶)向SCM系統(tǒng)130提交改動(dòng)時(shí)簽入任務(wù)200從202開始。
[0033]在204,在已經(jīng)由SCM系統(tǒng)130接受改動(dòng)之后,自動(dòng)地編譯或“構(gòu)建”軟件項(xiàng)目以考慮對源代碼的新改動(dòng)。然后在單個(gè)軟件項(xiàng)目模塊上執(zhí)行一個(gè)或多個(gè)單元測試。單元測試被設(shè)計(jì)為運(yùn)用源代碼的各個(gè)單元,或一個(gè)或多個(gè)程序模塊的集合,以便確定他們滿足可靠性要求。單元測試的結(jié)果可以存儲(chǔ)在數(shù)據(jù)文件214中,諸如可擴(kuò)展標(biāo)記語言(XML)文件。應(yīng)當(dāng)理解,也可以使用其它類型的文件格式。
[0034]在206,以合適的文件格式呈現(xiàn)測試結(jié)果和任何其他相關(guān)信息用于通知。取決于將要發(fā)送的通知類型,數(shù)據(jù)文件214被轉(zhuǎn)換為合適格式的通知文件216。在一些實(shí)現(xiàn)中,通知是電子郵件、網(wǎng)頁、傳真文檔、彈出顯示窗口、文本消息、私有的社交網(wǎng)絡(luò)消息和/或通過定制的客戶端應(yīng)用(例如,移動(dòng)設(shè)備應(yīng)用)發(fā)送的通知的形式。在一個(gè)實(shí)現(xiàn)中,通知文件216包括可以使用網(wǎng)絡(luò)瀏覽器、電子郵件軟件應(yīng)用或任何其他軟件程序查看的超級文本標(biāo)志語言(HTML)文件。應(yīng)當(dāng)理解,還可以使用諸如富文本格式(RTF)或可移植文檔格式(HF)之類的其他類型標(biāo)準(zhǔn)文件格式。
[0035]圖3示出示范性的構(gòu)建報(bào)告(或通知文件)216。如所示,構(gòu)建狀態(tài)302和通用信息304可以包括在構(gòu)建報(bào)告中。例如,構(gòu)建狀態(tài)302包括軟件區(qū)域名(area name)、構(gòu)建或測試的成功/失敗狀態(tài)、改動(dòng)列表標(biāo)識符、提交標(biāo)識符、簽入日期以及做出的改動(dòng)和執(zhí)行的測試的描述。通用信息304可以包括報(bào)告產(chǎn)生的時(shí)間、操作系統(tǒng)以及在其中執(zhí)行編譯的機(jī)器的型號。通過沿著各種維數(shù)來過濾數(shù)據(jù)文件214中的信息,還可以在報(bào)告中提供其他類型的信息。
[0036]再次參考圖2,在208,向各個(gè)項(xiàng)目干系人自動(dòng)地發(fā)送通知。在一個(gè)實(shí)現(xiàn)中,以電子郵件218的形式發(fā)送通知。還可以提供其他形式的通知。示范性項(xiàng)目干系人包括測試者、開發(fā)者、程序員、工程師、產(chǎn)品設(shè)計(jì)者、負(fù)責(zé)人等等。每當(dāng)檢測到缺陷,通知可以提醒各個(gè)項(xiàng)目干系人以便采取任何必需的行動(dòng)。例如,可以促使開發(fā)者立即修復(fù)缺陷以避免引入更多嚴(yán)重的問題。在其它情況下,由于檢測到的缺陷,項(xiàng)目經(jīng)理可以決定停止發(fā)布用于內(nèi)部使用或演示的項(xiàng)目。
[0037]在210,將測試結(jié)果傳送到數(shù)據(jù)庫文件。在一個(gè)實(shí)現(xiàn)中,包含結(jié)果的數(shù)據(jù)文件214 (例如,XML文件)轉(zhuǎn)換為數(shù)據(jù)庫文件220。數(shù)據(jù)庫文件220以與數(shù)據(jù)庫(DB) 222兼容的格式存儲(chǔ)測試結(jié)果。例如,數(shù)據(jù)庫文件220可以是結(jié)構(gòu)化查詢語言(SQL)文件。可以使用工業(yè)標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)實(shí)現(xiàn)DB222,不過也可接受其他實(shí)現(xiàn)。在一個(gè)實(shí)現(xiàn)中,數(shù)據(jù)庫可以是微軟SQL服務(wù)器(Microsoft SQL server)。在212,生成的數(shù)據(jù)庫文件220存儲(chǔ)在數(shù)據(jù)庫222中用于將來訪問或檢索。
[0038]圖4示出更廣泛的示范性的基于時(shí)間的監(jiān)視任務(wù)400。可以通過時(shí)間事件和軟件項(xiàng)目的安裝包的可用性來觸發(fā)基于時(shí)間的監(jiān)視任務(wù)400。例如,可以以規(guī)定時(shí)間間隔(例如,每晚、每日、每周等等)或當(dāng)任何人對SCM系統(tǒng)130簽入改動(dòng)的可能性更小時(shí)在預(yù)定時(shí)間(例如,午夜、周末或假日)觸發(fā)基于時(shí)間的任務(wù)400。還可以當(dāng)軟件項(xiàng)目的安裝包對安裝就緒時(shí)觸發(fā)基于時(shí)間的任務(wù)。安裝包的就緒使涉及安裝的問題最小化并因此減少錯(cuò)誤警告故障。
[0039]在402,在任務(wù)400開始之后,更新來自SCM系統(tǒng)130的源代碼??梢酝ㄟ^諸如基于Java的CruiseControl (或Cruise Control.NET)系統(tǒng)的自動(dòng)構(gòu)建系統(tǒng)來啟動(dòng)更新。也可以使用諸如SVN, MS Build、Code Project、Jenkins或其他非基于Java的系統(tǒng)之類的其他自動(dòng)構(gòu)建系統(tǒng)。自動(dòng)構(gòu)建系統(tǒng)可以實(shí)現(xiàn)為守護(hù)進(jìn)程(daemon process)以對于對源代碼的改動(dòng)連續(xù)地(或周期性地)檢查SCM系統(tǒng)。在一個(gè)實(shí)現(xiàn)中,自動(dòng)構(gòu)建系統(tǒng)觸發(fā)SCM客戶端應(yīng)用以從SCM系統(tǒng)130下載源代碼的最近的版本。
[0040]在404,自動(dòng)構(gòu)建系統(tǒng)將更新的源代碼構(gòu)建(或編譯)成為可執(zhí)行程序。
[0041]在406,在更新的源代碼(或目標(biāo)代碼)上執(zhí)行靜態(tài)代碼分析(或靜態(tài)程序分析)。當(dāng)SCM系統(tǒng)客戶端完成源代碼的更新時(shí)可以通過自動(dòng)構(gòu)建系統(tǒng)調(diào)用這種靜態(tài)代碼分析。靜態(tài)代碼分析是對被執(zhí)行的軟件的分析但不實(shí)際上運(yùn)行從該軟件構(gòu)建的程序,而利用給定的一系列測試用例來實(shí)際上運(yùn)行程序被稱為動(dòng)態(tài)測試。例如,動(dòng)態(tài)測試包括功能測試和性能測試。靜態(tài)測試便于通過確定他們是否是可構(gòu)建、可部署并滿足給定規(guī)范來驗(yàn)證應(yīng)用。
[0042]在一個(gè)實(shí)現(xiàn)中,通過使用靜態(tài)代碼分析器工具,諸如Cppcheck、FindBugs、FlexPMD等等來執(zhí)行靜態(tài)代碼分析。應(yīng)當(dāng)理解,也可以使用其它類型的工具。靜態(tài)代碼分析器工具可以在諸如C/C++、Java, Flex、Pascal、Fortran等等的一種或多種編程語言中檢查非標(biāo)準(zhǔn)代碼。例如,CppCheck可以用來檢查C/C++代碼的質(zhì)量,F(xiàn)ind Bugs用于檢查Java代碼的質(zhì)量,而FlexPMD用于檢查Flex代碼的質(zhì)量??梢詫τ诿總€(gè)靜態(tài)代碼分析器工具指定代碼范圍以執(zhí)行分析。代碼分析的結(jié)果可以保存在數(shù)據(jù)文件(例如,XML文件)中。
[0043]在408,在更新的源代碼上執(zhí)行單元測試。在單元測試期間,可以在源代碼的各個(gè)單元或者一個(gè)或多個(gè)程序模塊的集合上執(zhí)行一個(gè)或多個(gè)單元測試。單元測試試圖測試源代碼的可靠性,而不是功能性問題。在一個(gè)實(shí)現(xiàn)中,在406中靜態(tài)代碼分析完成之后通過自動(dòng)構(gòu)建系統(tǒng)啟動(dòng)單元測試。單元測試的結(jié)果和相關(guān)信息可以記錄在數(shù)據(jù)文件(例如,XML文件)里。這種信息的示例包括單元測試的數(shù)目、通過率、代碼語言等等,但是不局限于此。
[0044]在410,分析代碼覆蓋。“代碼覆蓋”描述源代碼已經(jīng)被測試的程度。例如,代碼覆蓋數(shù)據(jù)可以指示已經(jīng)通過單元測試覆蓋的源碼文件、單元或模塊的數(shù)目??梢砸匀舾杉壛鞩j (包括在單元測試期間運(yùn)行的行、分支或方法)收集代碼覆蓋數(shù)據(jù)。所得到的代碼覆蓋數(shù)據(jù)可以存儲(chǔ)在數(shù)據(jù)文件中,并且用于生成報(bào)告,例如,該報(bào)告示出目標(biāo)軟件需要執(zhí)行更多測試。
[0045]在416,自動(dòng)構(gòu)建系統(tǒng)將來自各個(gè)測試(例如,靜態(tài)代碼分析、單元測試、代碼覆蓋分析等等)的結(jié)果和其它相關(guān)信息合并并格式化。例如,可以通過將包含信息的數(shù)據(jù)文件(例如,XML文件)添加到單個(gè)數(shù)據(jù)文件中來合并信息。可以將信息格式化成為總結(jié)報(bào)告436。
[0046]信息可選地包括功能測試結(jié)果412和/或性能測試結(jié)果414。在一些實(shí)現(xiàn)中,測試管理工具用于執(zhí)行功能和/或性能測試以便獲得結(jié)果(412和414)。測試管理工具可以用來管理并監(jiān)視測試用例、項(xiàng)目任務(wù),自動(dòng)或人工測試、環(huán)境和/或缺陷(或bug)。例如,測試管理工具可以用來驅(qū)動(dòng)(或開始)目標(biāo)機(jī)器、設(shè)計(jì)和/或運(yùn)行工作流、安裝軟件構(gòu)建、運(yùn)行自動(dòng)功能和性能測試等等。示范性測試管理工具包括SAP的自動(dòng)化系統(tǒng)測試運(yùn)行(Automation System Test Execution)、 HP Quality Center、 IBM Rational QualityManager等等。測試管理工具可以存在于相同的計(jì)算機(jī)系統(tǒng)101中(如圖1所述)或者在可通信地耦接到計(jì)算機(jī)系統(tǒng)101的遠(yuǎn)程服務(wù)器中。
[0047]圖5示出自動(dòng)測試的示范性方法500??梢酝ㄟ^如上所述的測試管理工具實(shí)現(xiàn)此方法500。可以與參照圖4描述的基于時(shí)間的監(jiān)視任務(wù)400同時(shí)地執(zhí)行自動(dòng)測試方法500。每當(dāng)軟件項(xiàng)目的新構(gòu)建和/或安裝包可用時(shí)方法500可以啟動(dòng)。
[0048]參照圖5,在504,測試管理工具接收構(gòu)建信息文件。在一個(gè)實(shí)施例中,獨(dú)立應(yīng)用監(jiān)視安裝包的可用性。一旦安裝包就緒,獨(dú)立應(yīng)用就刷新構(gòu)建信息文件。用于監(jiān)視和刷新構(gòu)建信息的其他技術(shù)也可以使用。在一個(gè)實(shí)現(xiàn)中,構(gòu)建信息文件存儲(chǔ)最近的構(gòu)建包編號和安裝包位置。還可以包括其他信息。
[0049]在506,測試管理工具審查(inspect)構(gòu)建信息文件以檢測對構(gòu)建的任何改動(dòng)。如果檢測到改動(dòng)并且安裝包可用,則測試管理工具觸發(fā)一個(gè)或多個(gè)構(gòu)建有關(guān)的任務(wù)。構(gòu)建有關(guān)的任務(wù)可以包括用于實(shí)現(xiàn)自動(dòng)測試的步驟508到步驟516。還可以觸發(fā)諸如客戶端軟件安裝的其他構(gòu)建有關(guān)的任務(wù)。
[0050]在508,測試管理工具在檢測到改動(dòng)之后安裝軟件項(xiàng)目的新構(gòu)建。
[0051]在510,測試管理工具運(yùn)行一個(gè)或多個(gè)自動(dòng)測試。自動(dòng)測試可以是動(dòng)態(tài)測試。例如,自動(dòng)測試可以包括一個(gè)或多個(gè)自動(dòng)功能和/或性能測試。
[0052]在一個(gè)實(shí)現(xiàn)中,測試管理工具運(yùn)行一個(gè)或多個(gè)自動(dòng)功能測試。功能測試試圖驗(yàn)證軟件代碼的指定功能或動(dòng)作是否滿足設(shè)計(jì)要求。例如,可以通過將輸入?yún)?shù)供給軟件區(qū)域并且檢查輸出結(jié)果來測試功能。可以由測試者設(shè)計(jì)和編寫這種測試,并且可以持續(xù)數(shù)小時(shí)。此外,可以同時(shí)測試不同的區(qū)域。
[0053]可替換地,或在其組合中,測試管理工具可以執(zhí)行一個(gè)或多個(gè)自動(dòng)性能測試。性能試驗(yàn)通常確定在特定工作負(fù)荷下系統(tǒng)的響應(yīng)、穩(wěn)定和/或可靠的程度。性能測試可能花費(fèi)很長時(shí)間來運(yùn)行,測試的范圍可能僅局限于非常典型的場景以迅速獲得最近構(gòu)建的性能測試結(jié)果。此外,可以在若干機(jī)器上并行執(zhí)行性能測試以提高效率。
[0054]在512,測試管理工具在一個(gè)或多個(gè)日志文件中存儲(chǔ)自動(dòng)測試的結(jié)果。例如,可以根據(jù)測試運(yùn)行的日期在不同的文件夾中分類日志文件。[0055]在514,分析結(jié)果。在一個(gè)實(shí)現(xiàn)中,以每日(或定期)為基礎(chǔ)分析結(jié)果。例如,可以運(yùn)行軟件應(yīng)用(例如,Java應(yīng)用、性能測試驅(qū)動(dòng)器等等)以執(zhí)行自動(dòng)的結(jié)果分析任務(wù)。應(yīng)用可以解析來自各個(gè)日志文件夾的最近的日志文件并分析結(jié)果。例如,應(yīng)用可以確定通過(pass)和/或失敗的測試的用例數(shù)目。應(yīng)用然后可以將總結(jié)信息寫入到綜合數(shù)據(jù)文件(例如、XML文件)用于臨時(shí)存儲(chǔ)??偨Y(jié)信息還可以包括其他測試相關(guān)信息,諸如構(gòu)建信息、機(jī)器配置信息、測試時(shí)間、測試結(jié)果(例如,操作、第90個(gè)百分點(diǎn)的時(shí)間花費(fèi)等等),等等。總結(jié)信息可以存儲(chǔ)在用于每個(gè)各自的軟件區(qū)域的數(shù)據(jù)庫的每個(gè)行中。
[0056]在一個(gè)實(shí)現(xiàn)中,數(shù)據(jù)庫包括來自關(guān)于先前的產(chǎn)品的先前測試的數(shù)據(jù),該數(shù)據(jù)可以用作用于評價(jià)當(dāng)前項(xiàng)目的測試結(jié)果的基準(zhǔn)數(shù)據(jù)。例如,可以運(yùn)行軟件應(yīng)用(例如,Java應(yīng)用)以生成每日的性能報(bào)告。應(yīng)用可以訪問數(shù)據(jù)庫以檢索基準(zhǔn)數(shù)據(jù)和最近的測試結(jié)果,并且比較他們以確定處于測試中的當(dāng)前軟件項(xiàng)目的性能。如果當(dāng)前項(xiàng)目的性能比基準(zhǔn)情況慢一個(gè)預(yù)定閾值(例如,10%),則可以將它認(rèn)為是“失敗”。相反地,如果相對性能快一個(gè)預(yù)定閾值,則將它認(rèn)為是“通過”。在下面的表1中示出示范性每日性能報(bào)告:
【權(quán)利要求】
1.一種用于監(jiān)視和改善軟件開發(fā)質(zhì)量的方法,包括: 監(jiān)視與源代碼有關(guān)的監(jiān)視任務(wù)的發(fā)生; 編譯源代碼; 測試源代碼以產(chǎn)生測試結(jié)果;以及 分析測試結(jié)果,其中分析測試結(jié)果包括用于評價(jià)源代碼的質(zhì)量的質(zhì)量分析。
2.如權(quán)利要求1所述的方法,還包括計(jì)算與測試結(jié)果相對應(yīng)的質(zhì)量指數(shù)。
3.如權(quán)利要求1所述的方法,其中所述監(jiān)視任務(wù)包括簽入任務(wù)或基于時(shí)間的任務(wù)。
4.如權(quán)利要求3所述的方法,其中所述簽入任務(wù)是當(dāng)由開發(fā)者簽入對源代碼的新改動(dòng)時(shí)觸發(fā)的。
5.如權(quán)利要求3所述的方法,其中所述基于時(shí)間的任務(wù)是以規(guī)定時(shí)間間隔、在預(yù)定時(shí)間或當(dāng)安裝包對于安裝可用時(shí)觸發(fā)的。
6.如權(quán)利要求1所述的方法,還包括向項(xiàng)目干系人發(fā)送測試結(jié)果的通知。
7.如權(quán)利要求6所述的方法,其中所述通知是電子郵件、網(wǎng)頁、傳真文檔、彈出顯示窗口、文本消息、私有的社交網(wǎng)絡(luò)消息或定制客戶端應(yīng)用的形式。
8.如權(quán)利要求1所述的方法,還包括: 將測試結(jié)果轉(zhuǎn)換為數(shù)據(jù)庫文件;以及 在數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)庫文件。
9.如權(quán)利要求8所述的方法,其中所述數(shù)據(jù)庫包括來自先前的產(chǎn)品的先前測試的數(shù)據(jù)庫文件作為用于評價(jià)當(dāng)前產(chǎn)品的基準(zhǔn)數(shù)據(jù)。
10.如權(quán)利要求1所述的方法,其中編譯源代碼包括使用自動(dòng)構(gòu)建系統(tǒng)將源代碼更新成為可執(zhí)行程序。
11.如權(quán)利要求10所述的方法,其中所述自動(dòng)構(gòu)建系統(tǒng)包括基于Java的系統(tǒng)或非基于Java的系統(tǒng)。
12.如權(quán)利要求1所述的方法,其中測試源代碼包括: 執(zhí)行靜態(tài)代碼分析; 執(zhí)行單元測試; 執(zhí)行代碼覆蓋分析; 將來自測試和分析的結(jié)果和相關(guān)信息合并成為單個(gè)數(shù)據(jù)文件;以及 將單個(gè)數(shù)據(jù)文件格式化成為總結(jié)報(bào)告。
13.如權(quán)利要求12所述的方法,其中所述相關(guān)信息包括功能測試結(jié)果和性能測試結(jié)果O
14.如權(quán)利要求12所述的方法,其中所述總結(jié)報(bào)告包括儀表盤或通知文件。
15.如權(quán)利要求14所述的方法,其中所述儀表盤包括用于指示軟件開發(fā)的健康的質(zhì)量指數(shù)。
16.如權(quán)利要求15所述的方法,其中所述質(zhì)量指數(shù)是基于加權(quán)的開發(fā)者質(zhì)量分?jǐn)?shù)和加權(quán)的軟件測試者質(zhì)量分?jǐn)?shù)導(dǎo)出的。
17.一種具有存儲(chǔ)在其上的程序代碼的非臨時(shí)計(jì)算機(jī)可讀介質(zhì),所述程序代碼由計(jì)算機(jī)運(yùn)行以進(jìn)行下述步驟: 監(jiān)視與源代碼有關(guān)的監(jiān)視任務(wù)的發(fā)生;編譯源代碼; 測試源代碼以產(chǎn)生測試結(jié)果;以及 分析測試結(jié)果,其中分析測試結(jié)果包括用于評價(jià)源代碼的質(zhì)量的質(zhì)量分析。
18.如權(quán)利要求7所述的非臨時(shí)計(jì)算機(jī)可讀介質(zhì),其中編譯源代碼包括: 執(zhí)行靜態(tài)代碼分析; 執(zhí)行單元測試; 執(zhí)行代碼覆蓋分析; 將來自測試和分析的結(jié)果和相關(guān)信息合并成為單個(gè)數(shù)據(jù)文件;以及 將單個(gè)數(shù)據(jù)文件格式化成為總結(jié)報(bào)告。
19.一種系統(tǒng),包括: 非臨時(shí)存儲(chǔ)設(shè)備,用于存儲(chǔ)計(jì)算機(jī)可讀程序代碼;以及 處理器,與存儲(chǔ)設(shè)備通信,該處理器利用計(jì)算機(jī)可讀程序代碼可操作以進(jìn)行如下步驟: 監(jiān)視與源代碼有關(guān)的監(jiān)視任務(wù)的發(fā)生; 編譯源代碼; 測試源代碼以產(chǎn)生測試結(jié)果;以及 分析測試結(jié)果,其中分析測試結(jié)果包括用于評價(jià)源代碼的質(zhì)量的質(zhì)量分析。
20.如權(quán)利要求19所述的系統(tǒng),其中編譯源代碼包括: 執(zhí)行靜態(tài)代碼分析; 執(zhí)行單元測試; 執(zhí)行代碼覆蓋分析; 將來自測試和分析的結(jié)果和相關(guān)信息合并成為單個(gè)數(shù)據(jù)文件;以及 將單個(gè)數(shù)據(jù)文件格式化成為總結(jié)報(bào)告。
【文檔編號】G06F11/36GK103793315SQ201210419814
【公開日】2014年5月14日 申請日期:2012年10月29日 優(yōu)先權(quán)日:2012年10月29日
【發(fā)明者】P.王, X.葉, L.趙, W.趙, C.周 申請人:Sap股份公司