• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      軟件質(zhì)量靜態(tài)度量信息統(tǒng)計(jì)工具的設(shè)計(jì)與實(shí)現(xiàn)

      2020-10-09 11:01:23張怡然唐躍川譚凱
      軟件 2020年8期
      關(guān)鍵詞:軟件可靠性

      張怡然 唐躍川 譚凱

      摘 ?要: 軟件代碼的靜態(tài)分析是一種針對(duì)代碼的自動(dòng)驗(yàn)證的非常有效的方法,其目的是在不運(yùn)行代碼的情況下,通過分析軟件代碼本身的語法和數(shù)據(jù)流,檢查代碼是否滿足安全性和可靠性要求。為控制程序的復(fù)雜性,便于后期的檢測(cè)與維護(hù),《GJBZ 102A-2012 軍用軟件安全性設(shè)計(jì)指南》對(duì)軟件的復(fù)雜性提出了控制要求,對(duì)此引入U(xiǎn)nderstand軟件對(duì)程序代碼的模塊規(guī)模進(jìn)行分析。在分析Understand軟件及其在分析程序代碼后生成的TXT文件后,設(shè)計(jì)一種統(tǒng)計(jì)工具,利用C++語言對(duì)文件中的數(shù)據(jù)進(jìn)行篩選,提取所需數(shù)據(jù)并對(duì)其進(jìn)行處理,以此提高靜態(tài)分析時(shí)的工作效率。

      關(guān)鍵詞: 軟件質(zhì)量;軟件可靠性;靜態(tài)度量;信息統(tǒng)計(jì);C++

      中圖分類號(hào): TP31 ? ?文獻(xiàn)標(biāo)識(shí)碼: A ? ?DOI:10.3969/j.issn.1003-6970.2020.08.027

      本文著錄格式:張怡然,唐躍川,譚凱. 軟件質(zhì)量靜態(tài)度量信息統(tǒng)計(jì)工具的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2020,41(08):94-96

      【Abstract】: The static analysis of program code is a very effective method for automatic verification of programs. The purpose is to check whether the code meets security and reliability by analyzing the syntax and data flow of the program code itself without running the code. In order to control the complexity of the program and facilitate the later detection and maintenance, GJBZ 102A-2012 The military software security design guide puts forward control requirements for the complexity of the software. Understand is introduced to analyze the module size of the program code. This article will focus on analyzing the statistical files generated by Understand software analysis program code, using C++ language to filter the data in the file, ignoring the useless information, extracting and processing the required data in order to improve the work efficiency in static analysis.

      【Key words】: Software quality; Software reliability; The static measurement; Information statistics; C++

      0 ?引言

      靜態(tài)分析工具主要檢查源代碼中的變量、模塊接口的一致性、邏輯上可能存在的錯(cuò)誤結(jié)構(gòu)和不可達(dá)的程序段等[1-2]。大部分靜態(tài)分析軟件無法對(duì)程序進(jìn)行詳盡的復(fù)雜度分析,引入的Understand軟件不僅可以分析多種編程語言,也可以對(duì)程序的復(fù)雜度、扇入扇出等方面進(jìn)行分析。

      Understand是一款內(nèi)部支持代碼編輯器和代碼分析器的靜態(tài)程序代碼審查軟件,該軟件可以將分析結(jié)果以圖表,文檔,架構(gòu)圖等形式呈現(xiàn)[3],但是由于其生成的結(jié)果信息非常散亂,且不直觀,尤其在統(tǒng)計(jì)函數(shù)扇出個(gè)數(shù)時(shí),需要通過人工的方式,肉眼觀察和統(tǒng)計(jì)調(diào)用的函數(shù)個(gè)數(shù)來獲取扇出信息,這種工作方式效率極低,容易出錯(cuò),而且,面對(duì)大型項(xiàng)目時(shí),基本不具備可操作性。為增加工程實(shí)踐的可操作性,本文提供了一種可以識(shí)別、分析、提取和統(tǒng)計(jì)結(jié)果信息的工具,高效完成對(duì)代碼質(zhì)量靜態(tài)度量信息的統(tǒng)計(jì)和直觀呈現(xiàn)。

      本文將從實(shí)際出發(fā),制定相應(yīng)的技術(shù)要求方案,針對(duì)Understand軟件輸出的結(jié)果文件中的散亂的數(shù)據(jù)信息進(jìn)行識(shí)別和讀取、讀取和分析,并分別通過GUI(Graphical User Interface)界面和Excel文件形式進(jìn)行顯示。同時(shí),為保證對(duì)歷史信息的可追溯性以及多次分析結(jié)果的效果比對(duì),設(shè)計(jì)使用CSV文件對(duì)歷次操作信息進(jìn)行存儲(chǔ)。

      1 ?數(shù)據(jù)的讀取和處理

      1.1 ?數(shù)據(jù)的識(shí)別與讀取

      Understand軟件輸出的TXT文檔包含20份report內(nèi)容,其中,F(xiàn)ile Contents Report部分包含了被檢查代碼的文件名信息;Program Unit Complexity Report部分能包含了被檢查代碼的函數(shù)圈復(fù)雜度信息;File Metrics部分包含了被檢查代碼的行數(shù)、注釋行數(shù)以及無效代碼行數(shù)等信息;Simple Invocation Tree Report部分包含了被檢查代碼的函數(shù)扇出信息;Program Unit Metrics report 部分包含了被檢查代碼的函數(shù)個(gè)數(shù)信息;Data Dictionary Summary Report部分包含了被調(diào)用函數(shù)所在的文件名信息。根據(jù)《GJBZ 102A-2012軍用軟件安全性設(shè)計(jì)指南》相關(guān)部分的要求,以上內(nèi)容是需要識(shí)別、讀取和處理的信息。

      統(tǒng)計(jì)工具采用C++編程語言對(duì)文本信息進(jìn)行數(shù)據(jù)的識(shí)別、讀取和處理。首先定義一個(gè)CStdioFile類的File,并將File與待測(cè)文件關(guān)聯(lián),調(diào)用.Find()函數(shù)查找關(guān)鍵字符串,如:“Cyclomatic”、“Lines”、“|”等,然后獲取所需數(shù)據(jù)并將數(shù)據(jù)存入vector類型容器中,完成數(shù)據(jù)的讀取。圖1為數(shù)據(jù)讀取流程圖。

      1.2 ?數(shù)據(jù)的處理

      1.2.1 ?數(shù)據(jù)的統(tǒng)計(jì)處理

      在結(jié)束讀取需要進(jìn)行數(shù)據(jù)提取的report信息后,對(duì)存儲(chǔ)相應(yīng)數(shù)據(jù)的vector容器進(jìn)行運(yùn)算,通過使用.accumulate()對(duì)vector容器進(jìn)行求和處理,獲得代碼的圈復(fù)雜度、函數(shù)行數(shù)和扇出個(gè)數(shù)的總和;通過.size()對(duì)vector容器的大小進(jìn)行計(jì)算,獲得代碼函數(shù)個(gè)數(shù)信息;有些統(tǒng)計(jì)結(jié)果需要極值數(shù)據(jù),通過max_element()對(duì)vector容器中的圈復(fù)雜度、函數(shù)行數(shù)、扇出個(gè)數(shù)等元素進(jìn)行極值處理,獲得所需項(xiàng)的最大值。

      1.2.2 ?數(shù)據(jù)的排序處理

      Understand軟件生成的TXT文件的數(shù)據(jù)是按照代碼函數(shù)調(diào)用的先后順序來進(jìn)行顯示的,因此,數(shù)據(jù)提取中所獲得的數(shù)據(jù)也是雜亂無章的。為保證最終顯示的不符合規(guī)范的函數(shù)能夠按照對(duì)應(yīng)數(shù)值的大小,由高到低次序輸出,這就需要對(duì)容器中的數(shù)據(jù)進(jìn)行排序處理。

      為保證重新排序的數(shù)值能夠與函數(shù)名稱及文件名稱正確對(duì)應(yīng),需要定義一個(gè)結(jié)構(gòu)體,將統(tǒng)計(jì)后需要的函數(shù)名和對(duì)應(yīng)數(shù)值及文件名存入結(jié)構(gòu)體數(shù)組,最后通過sort()函數(shù)對(duì)數(shù)值進(jìn)行排序,對(duì)應(yīng)的函數(shù)和文件也能夠被正確排序。最后,將完成排序的數(shù)據(jù)存入vector容器中。

      1.2.3 ?數(shù)據(jù)的輸出處理

      統(tǒng)計(jì)排序處理完成后的數(shù)據(jù)需要進(jìn)行輸出處理,輸出內(nèi)容有以下幾種:

      (1)GUI數(shù)據(jù)輸出

      在GUI界面添加兩個(gè)ListCtrl表格:可顯示代碼的基本信息和度量值不符合標(biāo)準(zhǔn)的函數(shù)名稱,對(duì)應(yīng)數(shù)值以及源文件名稱。

      在設(shè)計(jì)中對(duì)統(tǒng)計(jì)工具添加listCtrl可編輯功能,實(shí)現(xiàn)分析人員直接對(duì)界面信息的操作。圖2為界面可編輯功能部分代碼。

      m_ListCtrl.GetSubItemRect(m_row,m_column,LVIR_LABEL,rc);

      m_edit.SetParent(&m_ListCtrl);

      m_edit.MoveWindow(rc);

      m_edit.SetWindowTextW(m_ListCtrl.GetItemText(m_row,m_column));

      m_edit.SetFocus();

      m_edit.ShowCaret();

      m_edit.SetSel(-1);

      (2)Excel數(shù)據(jù)輸出

      在進(jìn)行Excel輸出數(shù)據(jù)的操作時(shí),需要設(shè)置Excel驅(qū)動(dòng),創(chuàng)建表格文件數(shù)據(jù)庫。然后,在表格文件數(shù)據(jù)庫中,進(jìn)行寫入數(shù)據(jù)信息的操作。圖3為Excel寫入數(shù)據(jù)的部分代碼。

      for (i = 0; i < iColumnNum; i++)

      {if (?。╩_ListCtrl.GetColumn(i,&lvCol)))

      return;

      if (i < iColumnNum - 1)

      {sSql = sSql + lvCol.pszText + _T(" TEXT , ");

      strInsert = strInsert + lvCol.pszText + _T(" , ");

      }

      else

      {sSql = sSql + lvCol.pszText + _T(" TEXT ) "};

      strInsert = strInsert + lvCol.pszText + _T(" ) ?VALUES ( ");

      }

      }

      database.ExecuteSQL(sSql);

      sSql = strInsert;

      對(duì)于度量值不符合標(biāo)準(zhǔn)的Excel文件,設(shè)計(jì)添加兩個(gè)sheet頁用來存儲(chǔ)不合標(biāo)準(zhǔn)扇出和函數(shù)行數(shù)的數(shù)據(jù)信息,來實(shí)現(xiàn)文件輸出的簡(jiǎn)潔性。

      (3)CSV數(shù)據(jù)輸出

      在文件處理中需要保證歷史數(shù)據(jù)的可查性,避免程序誤關(guān)后的數(shù)據(jù)遺失和重復(fù)操作等問題,實(shí)現(xiàn)可重用信息的提取和隔離[4]。通過對(duì)CSV文件的設(shè)計(jì)和編輯,設(shè)計(jì)CSV格式文件對(duì)系統(tǒng)的操作信息進(jìn)行存儲(chǔ)。

      定義CStdioFile類File文件打開CSV格式文件,將操作時(shí)生成的數(shù)據(jù)存入文件,同時(shí)對(duì)文件添加追加功能,保證文件可以保存多次操作信息,最后在保存的信息中添加被統(tǒng)計(jì)的TXT文件的名稱,實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢操作。圖4為CSV文件寫入數(shù)據(jù)的部分代碼。

      if (pos == size1)

      {str22="";

      for (j = 0; j < iRowCount; j++)

      {CString chTemp;

      i = 1;

      {

      chTemp = m_ListCtrl.GetItemText(j, i);

      str22+=chTemp;

      str22+=str2;

      }

      }

      2 ?結(jié)果與分析

      2.1 ?數(shù)據(jù)結(jié)果呈現(xiàn)

      GUI是現(xiàn)代軟件的重要組成部分,其充分利用可復(fù)用的構(gòu)件,可以使開發(fā)人員更加節(jié)省時(shí)間[5]。通過界面設(shè)計(jì),在統(tǒng)計(jì)結(jié)束后,在GUI界面呈現(xiàn)出如圖5和6所示的最終數(shù)據(jù)結(jié)果。

      2.2 ?性能效率分析

      僅僅依靠以密集為特征的傳統(tǒng)手工測(cè)試,已經(jīng)不能滿足快節(jié)奏軟件開發(fā)和測(cè)試的需求[6]。自動(dòng)化測(cè)試及統(tǒng)計(jì)為此提供了解決方案,同時(shí)通過驗(yàn)證可以確定:代碼基本信息中各數(shù)值統(tǒng)計(jì)值與實(shí)際值相同,函數(shù)名稱與數(shù)值和文件名稱能夠一一對(duì)應(yīng),CSV文件能夠存儲(chǔ)歷史操作信息。同時(shí),通過大量的工程實(shí)踐也能夠看出統(tǒng)計(jì)工具能極大地提高工作效率。圖7為工具統(tǒng)計(jì)與人工統(tǒng)計(jì)花費(fèi)時(shí)間的對(duì)比示意圖。

      3 ?結(jié)論

      軟件測(cè)試是軟件開發(fā)生命周期的重要組成部分,也是目前和今后相當(dāng)長(zhǎng)一段時(shí)間內(nèi)保證軟件質(zhì)量和可靠性的關(guān)鍵手段[7]。本文通過介紹軟件質(zhì)量靜態(tài)度量的重要性和必要性以及獲取這些信息的一般方法和工具,對(duì)設(shè)計(jì)和開發(fā)的統(tǒng)計(jì)工具的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)描述.在實(shí)際工程實(shí)踐中,人工統(tǒng)計(jì)與工具統(tǒng)計(jì)相比較而言,統(tǒng)計(jì)工具對(duì)生產(chǎn)效率有明顯的提升。通過比較人工統(tǒng)計(jì)和工具統(tǒng)計(jì)的時(shí)間,可以看出統(tǒng)計(jì)工具能夠在保證正確統(tǒng)計(jì)軟件質(zhì)量靜態(tài)度量信息的基礎(chǔ)上極大地提高工作效率,在工程應(yīng)用中具有較高的應(yīng)用價(jià)值。通過可視化技術(shù)將程序的內(nèi)部直觀顯示,有利于軟件的測(cè)試和分析[8],并且保證了軟件質(zhì)量。

      參考文獻(xiàn)

      [1] 張建. 精確的程序靜態(tài)分析[J]. 計(jì)算機(jī)學(xué)報(bào), 2008, 9(8): 1549-1553.

      [2] 文昌辭, 王昭順. 軟件測(cè)試自動(dòng)化靜態(tài)分析研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2005, 26(4): 987-989.

      [3] 王相懂. 軟件靜態(tài)分析自動(dòng)化工具的研究與實(shí)現(xiàn)[D]. 西安理工大學(xué), 2006.

      [4] 簡(jiǎn)崢峰, 譚建榮. 面向虛擬企業(yè)的應(yīng)用-基于可重用信息表達(dá)的CSV文件設(shè)計(jì)[J]. 浙江工業(yè)大學(xué)學(xué)報(bào), 2000, 7(28): 85-99.

      [5] 謝偉偉. GUI軟件自動(dòng)化測(cè)試工具的開發(fā)研究[D]. 大連海事大學(xué), 2008.

      [6] 余公平. 軟件自動(dòng)化測(cè)試系統(tǒng)的研究與實(shí)現(xiàn)[D]. 上海交通大學(xué), 2007.

      [7] 姚礪, 束永安. 軟件測(cè)試自動(dòng)化關(guān)鍵技術(shù)的研究[J]. 安徽大學(xué)學(xué)報(bào)(自然科學(xué)版), 2003, 27(4): 27-33.

      [8] 陳哲. 軟件自動(dòng)化測(cè)試系統(tǒng)的研究與實(shí)現(xiàn)[D]. 華中師范大學(xué), 2008.

      猜你喜歡
      軟件可靠性
      軟件可靠性耦合度量的測(cè)試用例約簡(jiǎn)優(yōu)化
      嵌入式應(yīng)用軟件可靠性自動(dòng)測(cè)試方法研究
      軟件可靠性工程綜合應(yīng)用建模技術(shù)研究
      淺談軟件開發(fā)質(zhì)量與軟件測(cè)試間的關(guān)系
      軟件可靠性設(shè)計(jì)技術(shù)應(yīng)用研究
      軟件可靠性與安全性研究
      數(shù)控系統(tǒng)軟件可靠性設(shè)計(jì)與故障分析技術(shù)
      基于GQM的裝備軟件可靠性參數(shù)選取方法
      簡(jiǎn)談使用BoundsChecker進(jìn)行計(jì)算機(jī)聯(lián)鎖系統(tǒng)人機(jī)界面軟件可靠性測(cè)試
      基于多準(zhǔn)則決策的軟件可靠性模型選擇方法
      兴安县| 清河县| 东源县| 阳泉市| 北碚区| 大渡口区| 武宣县| 阿鲁科尔沁旗| 宣恩县| 沙田区| 杂多县| 五寨县| 宁化县| 左权县| 景宁| 台江县| 溆浦县| 洛隆县| 长宁县| 赫章县| 彭山县| 合江县| 桃江县| 南丹县| 桃源县| 湖北省| 临高县| 梁平县| 陈巴尔虎旗| 台东县| 广东省| 含山县| 大化| 宜阳县| 湖口县| 昌黎县| 崇左市| 仁布县| 枝江市| 伊川县| 南康市|