软件设计自动化辅助系统的策划与实现

2024-01-08 12:14张治坤
现代计算机 2023年20期
关键词:数据表章节文档

张治坤,覃 曦

(1. 广西博联信息通信技术有限责任公司软件研发部,南宁 530023;2. 南宁市房地产信息中心有限公司,南宁 530023)

0 引言

各行各业的企业运作都会涉及各种软件、系统的开发,而在开发软件系统的过程中,往往需要产出概要设计与详细设计文档,在传统的设计文档编写过程中,要文档比较丰满以及满足甲方客户固定模板的需要,往往涉及一些比较重复且耗费时间的章节或者内容编写,例如:进行功能模块或者接口的上下级编号、功能描述、逻辑模型分布、交互清单等内容,其编写过程虽难度不大但却有点繁琐,因此需要在软件设计领域引入自动化设计辅助手段以便获取和重用工程知识,同时可以缩短在繁琐且重复性建模任务上所花费的时间和减少其中出现的错误,还可以进行扩展以简化下一阶段的开发流程,更早地进入开发环节,此外,也可对开发人员常用的代码生成器进行优化输入,形成更有针对性的代码基础项目。

1 实现意义

在一个软件系统项目开展的流程中,往往由于各种原因,导致在需求调研与需求规格说明书的编写上耗费大量的项目时间,在需求完备时项目周期上面留给概要设计和详细设计的时间太短,甚至开发时间都很紧张,需要在短时间内交付设计文档进行开发。因此,当一个软件系统所涵盖的功能模块比较多时,在不降低设计文档内容量和质量的前提下,利用自动化辅助设计手段,减少重复且耗费时间的章节与内容编写时间,避免分散设计人员精力,使设计人员的精力集中在重要的技术选型、技术架构、部署架构、数据架构、安全架构等重要内容上[1],提高设计质量,减少设计时间消耗具有重要意义。同时输入各种开发语言的代码生成器,可以生成一个系统包含基本功能的框架代码,类似“毛坯房”,开发人员只需要进行精装修就可以快速完成开发。

2 国内外的发展现状

目前,国内外自动化辅助设计的相关研究最典型与成功的应用,一是在电子设计领域,在电子设计自动化出现之前,设计人员只能手工完成集成电路的设计、布线等工作,所以当时只能完成相对现代简单得多的集成电路设计,当时代发展到需要进行超大规模集成电路设计时,利用电子设计自动化软件(EDA)来完成芯片设计(包括布局、布线、制图、规则、检查)等流程的方式就成为芯片设计和制造的必选方式;二是在建筑设计及制图领域,建筑设计人员以计算机软件(如AutoCAD、浩辰CAD、中望CAD 等)为工具,对建筑的设计、分析、模拟、制图等过程进行辅助,帮助设计人员减轻参数计算、信息检索、信息存储与传递的负担,并能快速地将草图输出成工作图供施工队使用。而当前在计算机软件辅助设计领域,业界并没有很成熟的辅助软件被开发出来以及广泛地推广应用的案例。

3 理论方法

在日常工作所遇到的项目中,用户要求的概要设计文档里面有众多章节,其中最核心的内容都是需要设计人员认真思考来完成的,但是所需要编写内容的篇幅却相对较短,例如:技术架构、数据架构、部署架构、系统间集成设计、开发模块划分、非功能设计章节。而有些章节重复性比较高,占用篇幅大,因为内容雷同所以会进行很多相似的分解动作,耗费设计人员时间和精力,例如:开发模块划分、数据模型等章节。在开发模块划分中,需要为每个功能进行层层分解[2],每个参与划分的功能都需要按层级编号并画出功能框图,通过文档结构分析我们发现,在编号、分解、画图方面,可以通过先录入关键信息再进行自动化辅助设计来优化空间。

本文采用的方法可以称为“核心扩展”法,基本思想是首先确定文档的核心内容,然后在此核心内容的基础上扩展其他相关内容,使文档更全面、更有说服力,此方法同时也适用于各种类型的文档编写[3]。现将先前写过的设计文档作为可靠案例进行分析,将涉及的章节按照适合的编写方式分类,在分析的过程中,我们发现很多章节都是围绕功能需求、表结构等核心信息来扩展描述的。

4 系统设计

系统技术架构设计如图1 所示,具体包括:①展现层,系统前端展现通过Vue 框架来开发,通过iView 提供前端页面基础控件,统一系统的界面样式;使用Axios 进行前后端数据交互,利用MVVM 模式,通过Vue 将服务端输出的数据绑定到UI 组件中,实现界面与业务逻辑隔离。②运算层,是系统的后端,主要实现业务功能组件,使用JFinal开发框架实现Web访问和业务功能开发,由POI 组件负责Office 文档处理,同时使用国产PaddlePaddle深度学习框架进行OCR与目标检测模型搭建、训练、推理运算,训练好的模型通过Django Web 服务进行对外提供推理调用的服务。③存储层,主要是保存结构化数据以及深度学习模型,包含PostgreSQL 主要用于存储结构化数据,使用SQL 语句对结构化数据进行增删改查处理。 “文件系统”针对各种格式的文件实行统一管理,提供目录和文件访问的功能,包括文件目录管理、文件管理、文件复制等。

图1 系统技术架构设计图

5 实现过程

5.1 痛点识别

5.1.1 多层级编号问题

当出现多层级内容需要在不同的位置按一定规则编号时,手工编号的工作量是很大的,功能很多的情况下,可能需要编几个小时才能编完,当出现改动时更是无法预计完成时间。

5.1.2 接口报文编写的问题

接口报文中往往有很多前缀和后缀内容的编写是比较重复和繁琐的,入参和出参、调用方式和调用时机的设计是比较重要而且简短的,在明确列明入参、出参的情况下,接口的编写同样也需要几个小时甚至几天才能写完。

5.1.3 参考界面绘制的问题

在参考界面的绘制中,在大多数情况下,都是有几种类型的界面,比如列表、表单、树形、选择器等,界面布局和风格大同小异,在一个项目界面比较多的情况下,绘制起来也是比较耗时耗力的。

5.2 模板分析

现将先前写过的设计文档作为可靠案例进行分析,并进行信息收集方式策划,确定哪些应该手工整理,哪些能自动生成,见表1。

表1 信息收集方式策划

5.3 信息建模

文档生成主要经过两个阶段,第一阶段是从输入的人工资料提取信息并进行结构化,存入基于信息建模的相关数据表;第二阶段是基于信息模型根据规则生成最终的输出文档的过程,经过分析可知需求与功能关系、功能模块信息、功能与表关系、数据表信息、字段信息、外键信息是最主要的信息建模项。

5.4 输入手段分析

经过分析,输入手段主要分成两种,实际上本系统两种方式都用程序实现了,方便在不同的项目阶段和不同输入条件下都能进行辅助设计:

第一种是界面原型直接识别并生成基于信息建模的相关数据表的方式,这种方式需要人工干预最少,首先将原始需求的界面原型按照需求和功能划分好文件夹,然后导入程序中进行表格和AI 两种识别,可以自动识别出功能模块信息、需求信息、界面元素特征信息,进一步将已识别的信息进行固化与加工,在这一步表结构和字段信息可以直接从界面原型中的表单或者列表元素直接生成出来,自动配好中英文名称并分类导入到预先规划好的数据表中,通过简单的信息补充即可自动生成设计文档和代码,如图2(灰格为需人工整理的信息)所示。

图2 数据流向图(方式一)

第二种是需要先完成表结构设计再导入生成基于信息建模的相关数据表的方式,这种方法需要先根据需求设计好数据模型表结构,如果是使用pdm 文件,可以使用脚本程序导出相关信息的xls文件,将xls文件导入系统进行识别后,数据进入预先规划好的数据表中;接下来通过表结构信息可以为每个表都生成一套包含增删改查的一、二级功能模块信息,方便后面进行信息完善修改,同时可以得到功能与数据表的关系;最后需要对生成的需求信息与功能设计信息的关系进行手工对应,并完善功能特征、接口标识后即可自动生成设计文档和代码,如图3所示。

图3 数据流向图(方式二)

5.5 识别模型训练

基于百度飞桨PaddleDetection 的YOLO3 模型[4]及程序,加入几千张自己收集和整理的界面原型图片进行标注后开展微调(Fine Tune)训练[5]所得到的模型。YOLO3 是一种目标检测模型,能识别物体的种类以及物体的位置。

微调训练数据集采用VOC的格式进行编排,首先在各系统以及网络上收集各种风格的界面原型,并通过标注工具进行人工标注,标注结构划分为三个部分,训练集用于训练,验证集用于调整超参数,测试集用于测试模型的泛化能力。

通过使用微调训练后的YOLO3 模型,可以快速分析出界面原型中列表、表格、查询条件、树形元素,训练完成后识别结果如图4所示。

图4 界面原型识别效果图

将识别结果分割图片后整合PaddleOCR 进行OCR 文字识别,最终得到表结构设计所需字段清单并通过http输出,准确率90%。

5.6 信息组合与输出

程序主体框架主要使用Java EE 技术体系,一是进行信息收集归类;二是信息传递到模型中以进行AI 视觉识别以及结果加工,在信息齐全后,利用POI 组件进行文档处理以及写入与调整格式,同时采用Java SE 的Graphics 绘制模块框图及参考界面。

6 实际使用效果

(1)概要设计的文档页数以及文档字数扩展了5倍:

概要设计模板页数(生成前):共49 页,12616个字;

概要设计所生成文件页数(生成后):共277页,60685个字;

概要设计输出如图5和图6所示。

图5 功能及子功能图与描述信息生成效果

图6 分级功能清单及编号生成效果

(2)详细设计文档的页数以及文档字数扩展了50倍:

详细设计模板页数(生成前):共19 页,3120个字;

详细设计所生成文件页数(生成后):共600页,156087个字。

详细设计输出如图7~图9所示。

图7 参考界面自动绘制生成效果

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

图9 接口报文示例生成效果

7 结语

软件设计自动化辅助将在软件开发领域中逐渐成为不可缺少的一部分,通过使用自动化工具和方法,设计人员可以提高设计文档质量、缩短编写周期、降低工作量和提高效率,从而开发人员也可以提高开发效率和质量。

未来,软件设计自动化将会发展得更加成熟,人工智能技术也将在软件设计自动化中得到更广泛的应用,提高自动化的效率和精度,此外,新兴的生成式人工智能技术[6]也将对软件设计自动化产生深远的影响。

猜你喜欢
数据表章节文档
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
湖北省新冠肺炎疫情数据表
高中数学章节易错点提前干预的策略研究
基于列控工程数据表建立线路拓扑关系的研究
素养之下,美在引言——《“推理与证明”章节引言》一节比赛课的实录
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
黄廖本《现代汉语》词汇章节中的几个问题
图表