張治坤,覃 曦
(1. 廣西博聯信息通信技術有限責任公司軟件研發部,南寧 530023;2. 南寧市房地產信息中心有限公司,南寧 530023)
各行各業的企業運作都會涉及各種軟件、系統的開發,而在開發軟件系統的過程中,往往需要產出概要設計與詳細設計文檔,在傳統的設計文檔編寫過程中,要文檔比較豐滿以及滿足甲方客戶固定模板的需要,往往涉及一些比較重復且耗費時間的章節或者內容編寫,例如:進行功能模塊或者接口的上下級編號、功能描述、邏輯模型分布、交互清單等內容,其編寫過程雖難度不大但卻有點繁瑣,因此需要在軟件設計領域引入自動化設計輔助手段以便獲取和重用工程知識,同時可以縮短在繁瑣且重復性建模任務上所花費的時間和減少其中出現的錯誤,還可以進行擴展以簡化下一階段的開發流程,更早地進入開發環節,此外,也可對開發人員常用的代碼生成器進行優化輸入,形成更有針對性的代碼基礎項目。
在一個軟件系統項目開展的流程中,往往由于各種原因,導致在需求調研與需求規格說明書的編寫上耗費大量的項目時間,在需求完備時項目周期上面留給概要設計和詳細設計的時間太短,甚至開發時間都很緊張,需要在短時間內交付設計文檔進行開發。因此,當一個軟件系統所涵蓋的功能模塊比較多時,在不降低設計文檔內容量和質量的前提下,利用自動化輔助設計手段,減少重復且耗費時間的章節與內容編寫時間,避免分散設計人員精力,使設計人員的精力集中在重要的技術選型、技術架構、部署架構、數據架構、安全架構等重要內容上[1],提高設計質量,減少設計時間消耗具有重要意義。同時輸入各種開發語言的代碼生成器,可以生成一個系統包含基本功能的框架代碼,類似“毛坯房”,開發人員只需要進行精裝修就可以快速完成開發。
目前,國內外自動化輔助設計的相關研究最典型與成功的應用,一是在電子設計領域,在電子設計自動化出現之前,設計人員只能手工完成集成電路的設計、布線等工作,所以當時只能完成相對現代簡單得多的集成電路設計,當時代發展到需要進行超大規模集成電路設計時,利用電子設計自動化軟件(EDA)來完成芯片設計(包括布局、布線、制圖、規則、檢查)等流程的方式就成為芯片設計和制造的必選方式;二是在建筑設計及制圖領域,建筑設計人員以計算機軟件(如AutoCAD、浩辰CAD、中望CAD 等)為工具,對建筑的設計、分析、模擬、制圖等過程進行輔助,幫助設計人員減輕參數計算、信息檢索、信息存儲與傳遞的負擔,并能快速地將草圖輸出成工作圖供施工隊使用。而當前在計算機軟件輔助設計領域,業界并沒有很成熟的輔助軟件被開發出來以及廣泛地推廣應用的案例。
在日常工作所遇到的項目中,用戶要求的概要設計文檔里面有眾多章節,其中最核心的內容都是需要設計人員認真思考來完成的,但是所需要編寫內容的篇幅卻相對較短,例如:技術架構、數據架構、部署架構、系統間集成設計、開發模塊劃分、非功能設計章節。而有些章節重復性比較高,占用篇幅大,因為內容雷同所以會進行很多相似的分解動作,耗費設計人員時間和精力,例如:開發模塊劃分、數據模型等章節。在開發模塊劃分中,需要為每個功能進行層層分解[2],每個參與劃分的功能都需要按層級編號并畫出功能框圖,通過文檔結構分析我們發現,在編號、分解、畫圖方面,可以通過先錄入關鍵信息再進行自動化輔助設計來優化空間。
本文采用的方法可以稱為“核心擴展”法,基本思想是首先確定文檔的核心內容,然后在此核心內容的基礎上擴展其他相關內容,使文檔更全面、更有說服力,此方法同時也適用于各種類型的文檔編寫[3]。現將先前寫過的設計文檔作為可靠案例進行分析,將涉及的章節按照適合的編寫方式分類,在分析的過程中,我們發現很多章節都是圍繞功能需求、表結構等核心信息來擴展描述的。
系統技術架構設計如圖1 所示,具體包括:①展現層,系統前端展現通過Vue 框架來開發,通過iView 提供前端頁面基礎控件,統一系統的界面樣式;使用Axios 進行前后端數據交互,利用MVVM 模式,通過Vue 將服務端輸出的數據綁定到UI 組件中,實現界面與業務邏輯隔離。②運算層,是系統的后端,主要實現業務功能組件,使用JFinal開發框架實現Web訪問和業務功能開發,由POI 組件負責Office 文檔處理,同時使用國產PaddlePaddle深度學習框架進行OCR與目標檢測模型搭建、訓練、推理運算,訓練好的模型通過Django Web 服務進行對外提供推理調用的服務。③存儲層,主要是保存結構化數據以及深度學習模型,包含PostgreSQL 主要用于存儲結構化數據,使用SQL 語句對結構化數據進行增刪改查處理。 “文件系統”針對各種格式的文件實行統一管理,提供目錄和文件訪問的功能,包括文件目錄管理、文件管理、文件復制等。

圖1 系統技術架構設計圖
5.1.1 多層級編號問題
當出現多層級內容需要在不同的位置按一定規則編號時,手工編號的工作量是很大的,功能很多的情況下,可能需要編幾個小時才能編完,當出現改動時更是無法預計完成時間。
5.1.2 接口報文編寫的問題
接口報文中往往有很多前綴和后綴內容的編寫是比較重復和繁瑣的,入參和出參、調用方式和調用時機的設計是比較重要而且簡短的,在明確列明入參、出參的情況下,接口的編寫同樣也需要幾個小時甚至幾天才能寫完。
5.1.3 參考界面繪制的問題
在參考界面的繪制中,在大多數情況下,都是有幾種類型的界面,比如列表、表單、樹形、選擇器等,界面布局和風格大同小異,在一個項目界面比較多的情況下,繪制起來也是比較耗時耗力的。
現將先前寫過的設計文檔作為可靠案例進行分析,并進行信息收集方式策劃,確定哪些應該手工整理,哪些能自動生成,見表1。

表1 信息收集方式策劃
文檔生成主要經過兩個階段,第一階段是從輸入的人工資料提取信息并進行結構化,存入基于信息建模的相關數據表;第二階段是基于信息模型根據規則生成最終的輸出文檔的過程,經過分析可知需求與功能關系、功能模塊信息、功能與表關系、數據表信息、字段信息、外鍵信息是最主要的信息建模項。
經過分析,輸入手段主要分成兩種,實際上本系統兩種方式都用程序實現了,方便在不同的項目階段和不同輸入條件下都能進行輔助設計:
第一種是界面原型直接識別并生成基于信息建模的相關數據表的方式,這種方式需要人工干預最少,首先將原始需求的界面原型按照需求和功能劃分好文件夾,然后導入程序中進行表格和AI 兩種識別,可以自動識別出功能模塊信息、需求信息、界面元素特征信息,進一步將已識別的信息進行固化與加工,在這一步表結構和字段信息可以直接從界面原型中的表單或者列表元素直接生成出來,自動配好中英文名稱并分類導入到預先規劃好的數據表中,通過簡單的信息補充即可自動生成設計文檔和代碼,如圖2(灰格為需人工整理的信息)所示。

圖2 數據流向圖(方式一)
第二種是需要先完成表結構設計再導入生成基于信息建模的相關數據表的方式,這種方法需要先根據需求設計好數據模型表結構,如果是使用pdm 文件,可以使用腳本程序導出相關信息的xls文件,將xls文件導入系統進行識別后,數據進入預先規劃好的數據表中;接下來通過表結構信息可以為每個表都生成一套包含增刪改查的一、二級功能模塊信息,方便后面進行信息完善修改,同時可以得到功能與數據表的關系;最后需要對生成的需求信息與功能設計信息的關系進行手工對應,并完善功能特征、接口標識后即可自動生成設計文檔和代碼,如圖3所示。

圖3 數據流向圖(方式二)
基于百度飛槳PaddleDetection 的YOLO3 模型[4]及程序,加入幾千張自己收集和整理的界面原型圖片進行標注后開展微調(Fine Tune)訓練[5]所得到的模型。YOLO3 是一種目標檢測模型,能識別物體的種類以及物體的位置。
微調訓練數據集采用VOC的格式進行編排,首先在各系統以及網絡上收集各種風格的界面原型,并通過標注工具進行人工標注,標注結構劃分為三個部分,訓練集用于訓練,驗證集用于調整超參數,測試集用于測試模型的泛化能力。
通過使用微調訓練后的YOLO3 模型,可以快速分析出界面原型中列表、表格、查詢條件、樹形元素,訓練完成后識別結果如圖4所示。

圖4 界面原型識別效果圖
將識別結果分割圖片后整合PaddleOCR 進行OCR 文字識別,最終得到表結構設計所需字段清單并通過http輸出,準確率90%。
程序主體框架主要使用Java EE 技術體系,一是進行信息收集歸類;二是信息傳遞到模型中以進行AI 視覺識別以及結果加工,在信息齊全后,利用POI 組件進行文檔處理以及寫入與調整格式,同時采用Java SE 的Graphics 繪制模塊框圖及參考界面。
(1)概要設計的文檔頁數以及文檔字數擴展了5倍:
概要設計模板頁數(生成前):共49 頁,12616個字;
概要設計所生成文件頁數(生成后):共277頁,60685個字;
概要設計輸出如圖5和圖6所示。

圖5 功能及子功能圖與描述信息生成效果

圖6 分級功能清單及編號生成效果
(2)詳細設計文檔的頁數以及文檔字數擴展了50倍:
詳細設計模板頁數(生成前):共19 頁,3120個字;
詳細設計所生成文件頁數(生成后):共600頁,156087個字。
詳細設計輸出如圖7~圖9所示。

圖7 參考界面自動繪制生成效果

圖8 界面元素及事件描述生成效果

圖9 接口報文示例生成效果
軟件設計自動化輔助將在軟件開發領域中逐漸成為不可缺少的一部分,通過使用自動化工具和方法,設計人員可以提高設計文檔質量、縮短編寫周期、降低工作量和提高效率,從而開發人員也可以提高開發效率和質量。
未來,軟件設計自動化將會發展得更加成熟,人工智能技術也將在軟件設計自動化中得到更廣泛的應用,提高自動化的效率和精度,此外,新興的生成式人工智能技術[6]也將對軟件設計自動化產生深遠的影響。