软件工厂模式的软件产品快速构建技术

来源 :计算机与网络 | 被引量 : 0次 | 上传用户:goodhope9010
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:在研究了现代信息系统软件架构模式的基础上,提出了软件工厂模式的项目软件快速开发和构建技术。设计了一个自动模型开发和代码自动生成方法,通过CodeSmith代码模板可以将数据模型转化成为平台无关的可执行程序,并在此基础上研究了基于逆向工程的项目文档自动生成技术。通过在实际项目中的验证,使软件产品的开发时间缩短到1/10,设计文档编写的时间缩短到1/17,并且代码质量极大提高,应用开发和维护成本大大降低。
  关键词:MDA;模型驱动;软件架构;代码模板;逆向工程;软件产品线
  中图分类号:TP311文献标志码:A文章编号:1008-1739(2021)15-61-5
  


  0引言
  如何提高软件项目开发效率、降低研发成本、交付高质量的、客户满意的软件系统一直是软件开发企业追求的终极目标。而实现这一切的根基是建立在组织的核心资产建设和一套先进的软件工程方法,其中核心资产包括稳定可靠的软件架构、正确的业务逻辑和注释清晰的软件构件集合,可以不依赖于组织人力资源的变化而持续演进和发展。而一套先进的软件工程方法和自动化开发平台是实现核心资产快速构建的前提和保证。
  从架构、开发方法和工具3个方面阐述了大型项目的开发方法,结合工具的使用,提出了一套软件工厂模式的自动化开发平台和产品线开发方法[1],将模型驱动开发(MDD)自动化代码生成、软件架构、设计模式、平台+插件、基于模板的开发、基于逆向工程的文档自动生成等几个方面的技术相结合,解决大型软件系统开发中速度和质量二者不可兼得的问题。
  1软件工厂模式软件产品开发
  采用软件工厂模式的软件开发方法的核心关键是基于MDA的软件开发过程[2],采用模型驱动开发(MDD)快速构建系统[3],主要特点是在软件开发生命周期的需求阶段建立模型,并在模型的基础上快速导出目标系统。
  软件工厂模式软件产品开发分为业务对象模型开发、自动化代码生成和自动化文档生成3个阶段,整个过程如图1所示。
  


  第1步是业务对象模型开发(AMD)。该阶段,首先采用面向对象分析和设计方法,对用户需求进行建模,建立领域的概念模型[6]和业务对象模型[4],分析出系统的界面类、控制类和实体类,然后对实体类进行建模抽象出系统的实体对象模型,并进行数据建模,建立系统的数据库物理模型。
  第2步是自动代码生成(ASCG)阶段。根据系统的架构约束要求选择合适的架构实现模板、目标系统的编程语言和数据库实体,采用CodeSmith工具编写架构各层(数据访问层、业务逻辑层和界面层)的代码模板文件以及代码引擎模板。然后运行代码引擎自动生成架构各层的软件代码和为便于集成开发环境(IDE)开发的解决方案文件(如sln等),对代码业务逻辑进行简单的定制和修改,通过IDE进行编译自动生成可执行软件。
  第3步是用自动文档生成(ADG)阶段。生成符合组织文档规范要求的数据库设计、概要设计和详细设计文档。通过代码逆向分析工具抽取类的属性、方法以及类之间的关系自动生成符合组织文档规范要求的数据库设计、概要设计和详细设计说明等文档[5]。
  2自动模型开发
  AMD是一种自动化的实体对象生成方法,能够根据数据库模型自动生成代码,根据数据库表一对一、一对多、多对一关系生成实体类,支持多平台语言,方便上层应用使用[2]。
  自动模型开发的原理是读取数据库元数据,按照指定的经过测试的成熟代码模板文件、领域规则和软件架构约束,混合产生源代码。典型的代码生成器模型如图2所示,为了能够自动生成程序代码,必需的4个关键要素是设计模式(所产生代码的模板文件)、领域元数据、领域规则和软件架构约束。
  


  3自动代码生成
  软件架构是软件系统的顶层设计[3],基于最常用的分层架构模式和软件系统的使用场景,采用CodeSmith工具設计编写了软件架构各层(界面层、业务处理层、数据访问层和领域模型层)模板及代码引擎模板,以支持代码的自动生成[6]。如表1所示。在领域模型层定义了主要包括业务对象和属性相应的getter和getter方法;在数据访问层模板中,通过接口定义了不同的接口方法,包括数据库CRUD操作;在业务逻辑层的模板中,定义了初始化、表单验证、CRUD常用业务逻辑;在界面层模板中,定义了面向最终用户的页面流逻辑;代码生成引擎,定义了集成多类模板和批量执行的功能,并能够根据项目需要生成目标平台的工程项目文件,便于使用IDE打开项目文件并进行编译和调试。
  


  每个层次的模板都具有各自独立的功能,通过代码生成引擎串联起来形成完整的系统,如图3所示。
  


  (1)数据访问层模板
  数据访问层主要包括用于与数据库关联映射的实体对象以及数据访问层(Dao)接口层和接口实现(DaoImpl)3个模板文件。业务数据库中的每张数据表都会对应生成一个Model对象,每个Model对象定义了get/set方法,Dao定义操作数据库的基本功能(如增删改查),接口实现DaoImpl层实现Dao层定义接口的具体实现,为业务层提供调用接口,适应不同的数据库类型,如Oracle、sqlserver、国产数据库和Nosql数据库等。   (2)业务逻辑层模板:调用DaoImpl层接口,向界面层提供调用接口服务。
  BLL.cst:生成业务逻辑层代码的模板文件主要的方法包括:
  CheckValid:对界面输入进行数据有效性、合法性检查,包括非空、类型和长度等;
  Delete:根据主键从数据库中删除相关记录,并返回受影响的行数;
  GetAllList:从数据库中读取并返回所有数据对象列表;
  GetDataById:根据数据对象的主键从数据库中获取数据对象的实例;
  GetPageList:从数据库中分页读取数据仅用于在数据控件中显示;
  Insert:将数据对象新增到数据库中,并返回受影响的行数;
  IsExist:检测是否存在该主键的数据;
  Update:根据主键将业务对象数据更新到数据库中。
  (3)用户界面层生成模板
  支持桌面应用和Web应用2类,以满足C/S和B/S两种不同的架构模式。根据数据库描述文件的备注文件生成界面标签(label)项,根据数据库字段的类型生成表单元素,包括文本框、组合框、按钮及图片等,生成表单的提交按钮、取消按钮以及响应事件,包括表单初始化、数据填充、表单验证及取消等。主要的模板文件示例如图4所示。
  


  (4)配置文件生成模板
  系统运行必须配置文件,如数据库连接等,也在代码引擎运行时根据生成配置自动修改,如数据库类型、数据库名称、链接用户名、密码等。
  (5)解决方案生成模板
  根据目标语言的类型和软件开发的IDE环境,生成项目解决方案。支持VisualStudio2010以上版本、Eclipse3.5以上版本,支持exe、dll、jar等类型的组件和运行程序,打开解决方案文件,相关生成的领域模型层、数据访问层、业务逻辑层和界面层类文件能够自动加载。编译执行就可以生成可执行软件。包括的模板文件有:
  WebConfig.cst:生成WebConfig的模板文件;
  csproj.cst:生成csproj.cs文件的模板文件;
  Default.asp..cst:生成defalut.asp文件的模板文件;
  sln.cst生成sln文件的模板文件;
  vs2010.cst:生成2010工程解决方案的主文件,被BuildAll.cst调用。
  (6)代码生成引擎
  支持根据项目需求,批量選择多个数据库表,完成领域模型层、数据访问层、业务逻辑层和界面层代码的批量生成,生成工程文件的模板文件。启动界面如图5所示。
  


  开发人员根据需要设置作者名称、组织名称、系统中英文名称、命名空间、代码输出路径以及软件架构数据访问层、业务逻辑层、客户端C/S软件或Web网站界面,选择待生成的多个数据库实体,点击“generate“,根据用户的选项将自动生成软件代码和项目解决方案文件。主界面如图6所示。
  


  生成后的文档的代码结构如图7所示。
  


  (7)与传统的人工代码编写方法的对比
  通过对一个由4个软件组成的中等规模软件系统来测算,新开发代码行数95 387,按照平均每人每天开发代码行数100计算,需要953/22/8≈8个人5个月的工时,使用自动代码生成方法,软件代码在分钟级生成,60%以上的业务逻辑实现基本生成,只需要在需要定制的部分做出修改,加上调试和测试的时间,总的研制时间不会超过1个月。软件开发的时间降低到1/10。这样的结果是建立在有可靠稳定的代码模板和成熟的关键算法组件的基础之上。通过软件代码模板的编写达到“一次编写,永久使用”的目的,极大地降低了人力成本,提高了软件测试用例的通过率。
  4自动文档生成
  在软件项目研制中,除了软件代码之外,工作量最大、最耗时的是数据库设计说明文档和软件设计说明文档的编写工作,对于大型软件项目常常需要耗费1~2个月的编写时间。针对这2类文档,研制了DBDcoumentCreater数据库设计文档生成工具和DocBuilder两类工具。
  (1)数据库设计说明文档自动生成
  为了提高数据库设计文档的编写效率,研制了DBDcoumentCreater数据库设计文档生成工具,能够读取领域元数据,通过读取数据库表包含数据库字段名称、类型、长度、非空项说明和主键、外键等内容生成数据库描述文档。数据库说明文档自动生成过程如图8所示。
  


  (2)软件设计说明文档自动生成
  软件设计文档包括概要设计部分和详细设计两部分,主要使用了DocBuilder和Doxgen两个工具,通过逆向分析对软件代码的类和类间关系进行抽取,然后按照文档模板的特定格式要求,对章节内容进行填充。设计说明文档自动生成过程如图9所示。   ①软件概要设计文档(软件架构设计):主要包括逻辑视图、部署视图、开发视图、进程视图和用例视图。在逻辑视图中类包的组成通常由表格组成,详细描述类及其说明文件。文档模板根据逆向生成的类及其注释自动生成表格及其说明文件。
  ②软件详细设计文档:主要是对类包内每个类的属性、操作、操作内部算法的描述以及类关系的描述,通过代码逆向工程方法获取上述内容,根据文档模板,按照模板格式依次批量生成类的详细设计内容,尤其对于大型项目来讲,将会带来效率的极大提升。
  


  (3)与传统文档编写方法的对比
  通过对一个由4个软件组成的中等规模软件系统来测算,数据库设计文档和软件设计文档的总页数在998页,大量时间耗费在类详细设计部分,按照一周可以编写160页文档计算,耗费的人时在170人时,在采用自动化文档生成方法之后,假设一篇设计文档需要2 h进行文档格式标准化,4个软件的总设计时长不超过10 h。将文档编写的时间降低到1/17,而且设计文档和软件代码高度一致,避免了人为编写造成的设计文档与代码不一致的情况。
  5结束语
  详细介绍了基于模板的MDD、ASDG、ADG软件产品开发的具体实现过程,通过本方法,可以实现模板一次编写,多样化产品生成的软件工厂软件产品开发模式,使软件系统的构建可以像工业系统生产流水线一样,通过用戶简单的定制,选择不同类型的模板、数据模型,平台就能够按照用户的需求自动化生产,批量生成所见及所得的软件产品。产生的代码非常健壮,是高品质、高一致性、高效率的统一体;产生的文档与设计一致,是风格一致、逻辑清晰、可读性强、整洁规范的统一体;产生的测试用例可重用、可复用、可执行,是一致性、覆盖率高、可执行性高、执行准确、持续更新、复用性高的统一体。
  参考文献
  [1]普尔.软件产品线工程[M].张佳骥,李彦平,译.北京:国防工业出版社,2010.
  [2]袁晓桂,吴掬鸥.基于MDA的软件开发方法的研究.现代电子技术,2017,40(14):52-54.
  [3]岳辉,王全宇.基于MDD的住宅报警系统开发模型分析[J].兰州交通大学学报,2013,32(4):31-34.
  [4]埃文斯.领域驱动设计:软件核心复杂性应对之道[M].赵俐,盛海艳,刘霞,译.北京:人民邮电出版社.
  [5]叶彭飞,彭鑫,赵文耘.通过静态分析逆向恢复面向对象程序中的用况[J].计算机研究与发展,2010,47(12):2192-2200.
  [6]朱晓辉,王杰华,石振国,等. NET下基于PowerDesigner和CodeSmith的软件自动化开发技术[J].计算机科学,2010,37(7):156-159.
其他文献
针对在嵌入式平台上采用深度学习目标检测识别模型很难在精度和速度之间保持平衡的问题,提出一种基于深度可分离卷积块和反向特征融合结构的方法对YOLOv3模型进行改进,并通过基于距离的非极大抑制和损失函数的设计(DIoU-NMS和DIoU-Loss),最终实现在快速目标检测的同时提升了检测准确率。实验结果表明,在VOC2007+2012数据集上,实时性满足79FPS的同时m AP可达到80.22%,并在
摘要:随着信息化技术的快速发展,高校的信息系统日趋完善,各种信息系统如学习平台、教学和办公应用系统都运行在数据中心,数据中心存储了大量的业务信息。对高校数据中心存储的各类应用数据进行抽取、转化和处理,建立面向主题的数据仓库。对系统数据进行挖掘和探索式分析,以可视化驾驶舱的方式直观地展现学校的实际数据状态,通过对数据的可视化分析可以为学校在办学、人才培养和学生管理等方面提供数据支持和决策。  关键词
摘要:电子邮件欺骗是最常见的电子邮件攻击类型,其攻击及检测是电子邮件取证研究中一个具有挑战性的问题。提出利用内存取证技术来获取浏览器的实时进程提取电子邮件头进行分析,采用Message-ID检测,结合nslookup查询提取MX记录来检测和识别用户收到的伪造电子邮件。实验测试和分析结果表明,可以有效检测电子邮件欺骗,精度高、误报少,并且不会中断机器的常规操作。  关键词:电子邮件欺骗;内存取证;M
近日,安全研究人员披露了惠普打印机驱动程序中存在提權漏洞的技术细节,该驱动程序也被三星与施乐公司所使用。该漏洞影响了16年间众多版本的驱动程序,可能波及上亿台Windows计算机。攻击者可以利用该漏洞执行绕过安全防护软件、安装恶意软件、查看、修改、加密、删除数据和创建后门账户等操作。  SentinelOne的研究人员表示,该漏洞(CVE-2021-3438)已经在Windows系统中潜伏了16年
期刊
近日,英特尔宣布跟Sumber合作为下一代数据中心开发基于浸没式冷却的余热回收技术。英特尔和Submer正利用至强架构的服务器系统以及Submer的精密冷却技术为行业展示对于数据中心高品位废热的回收解决方案。英特尔和Sumber的这项前沿技术合作将加速数据中心行业对于浸没式液冷技术的应用以及生态链的建设。  英特尔院士数据中心和人工智能事业部Mohan Kumar表示:“近期在浸没式冷却技术方面的
摘要:针对计算机时间同步需求,设计了一种基于PCI Express(PCIe)总线的IRIG-B码(B码)解码卡,该板卡接收外部B码信号并解调出B码时间信息,通过PCIe总线将B码时间信息传递给计算机进而完成计算机时间同步。测试结果表明,计算机能够同步到B码时间,且B码解码精度优于100 ns,能够满足多数应用需求。  关键词:PCIe;B码;FPGA  中图分类号:TN253文献标志码:A文章编
期刊
随着社会的发展,无线电子通信技术被广泛应用在各个领域,但在应用过程中仍存在一定的安全隐患,严重影响了无线电子通信技术的发展。  无线电通信技术的主要应用  就目前而言,无线电通信技术的应用主要包含WiFi、4G以及WiMAX技术。WiFi技术是一种允许电子设备连接某一区域内无线局域网的技术,该局域网既可以是开放形式,也可设有密码保护;4G技术有效地实现了网络中不同平台、设备之间的信息传输并提供多样
伴随万物互联时代的到来,终端应用迎来爆发性增长。数据显示,2020年我国在架移动应用数量超350万,移动用户数高达9.3亿,人均上网时长4 h。从某种意义上说,移动应用市场正迈向一个崭新的阶段。  然而,现实情况中应用崩溃、网络卡顿、加载缓慢及页面白屏等问题时有发生,App应用性能的不稳定,严重影响了用户的使用体验。如何监测设备端用户体验,成为企业共同关注的问题。  App3.0:洞察真实移动用户
Adapdix近日宣布了一项补贴计划,为客户提供接触合格数据科学家的机会,以帮助克服全球实施人工智能(AI)和机器学习(ML)所需的熟练人员短缺问题。  Adapdix正在利用现有的熟练员工群体和先进的AI/ML边缘建模软件来满足客户对人工智能/机器学习项目的强大需求。然后,这一迫切需要的资源以5美元/h的补贴价格提供给Adapdix客户。此计划无需长期承诺,也就意味着参与积极概念验证、试点或生产
在过去20年,数字经济的兴起已经开始全面影响各个行业的发展,每一个企业都要顺应宏观经济市场的变化、应对同行业创新竞争的出现并紧密贴合持续变化的客户需求。因而企业和组织的数字化转型成为行业用户从过去到现在持续取得业务成功的关键,数字化进程正在全球范围内加速。  数字经济的蓬勃发展离不开全球范围内电子商务、移动互联和云服务等新兴业态在过去的起步和繁荣,而背后的关键支撑是数据中心的发展和赋能。  随着云
期刊