自动编程系统构造一个软件,与人类软件工程师思考构建系统的思路并无二致,必须遵循一定的流程:
需求分析-->业务划分-->技术选型-->模块划分-->领域接口设计-->代码实现-->集成测试-->部署上线
1.需求分析
每一个需求的诞生都与具体业务环境相关,解决的问题也必须能够在当前的软件工程技术条件下解决。所以需求的问题域、业务环境域和软件工程能力域必须有合适的匹配度。当如何确定需求的细节,则必须依赖于解决方案提供者以多个角度,向需求提出者提出具体的问题,而且每个问题的回答可能无法一次性完成信息的收集,所以还必须结合上次回答所确定的细分领域,进一步细分,消除各种需求不确定因素。对于无法回答的问题,或回答的结论与现有结论冲突的情况下,必须提出争议。问题细分到一定地步,到了技术领域,这时系统开始搜索已有技术素材库查找历史解决方案。这里的难点在于如何搜索验证已有的解决素材能够满足当前需求点。
2.业务划分
划分业务产品线,必须基于对业务场景的理解,利用类似聚类分析的技术,对需求特征进行归类分析,从最大粒度将相关度较低的需求点分开,而将相关度较高的需求点聚合。
3.技术选型
技术选型是在已有条件中选择出最快最合适的实现方案,需要从语言、技术成熟度、业务适应度、素材等角度筛选排序。同时也要优先考虑人类的指定。
4.模块划分
模块划分有纵向调用层次划分和横向领域划分。纵向划分的模块上层依赖于下层,上层贴近业务需求,下层贴近技术需求。横向划分,划分的是一个个的实体领域,并且构造接口确定领域实体之间的依赖关系。将依赖关系紧密的领域分到同一个模块包中。
5.领域接口设计
领域的属性是为了标识领域所表示的现实实体在参与具体业务场景时,所需要记录的状态。涉及业务越复杂,领域属性个数越多。接口的作用在于标记和约定,从而保证领域对象在具体场景下,能够相互配合完成数据的传递与转换。
5.代码实现
这里的代码实现指的是一系列执行动作的确定与打包,是指在时间维度上的顺序执行动作的排列。
6.集成测试
集成测试在于不同领域实体对象在配合完成具体方法时,能够输入一定的测试样本得出预期输出。所以自动编程系统必须收集或伪造测试样本数据,比对运行输出与预期输出是否一致。不一致时,还必须分析堆栈内容,确定出错点,结合运行条件,查找解决方案。