一种符合DO-178B/C的机载软件敏捷开发过程的优化方法与流程

文档序号:17948254发布日期:2019-06-18 23:49阅读:399来源:国知局
一种符合DO-178B/C的机载软件敏捷开发过程的优化方法与流程

本发明涉及软件工程领域,尤其是涉及一种机载软件敏捷开发过程优化方法。



背景技术:

rtcado-178b/c,即“机载系统和设备认证的软件考虑”,是应用于机载系统安全关键软件的安全指导,是为机载软件的符合性证明和审查活动提供指导的一套标准,其目的是指导航空机载软件开发,确保机载系统中的软件可靠地运行。do-178b/c标准是以目标为导向,涵盖整个软件研制周期的机载软件研制过程规范,它以传统的瀑布模型定义了机载软件开发过程。随着do-178b/c标准的发展和机载软件规模的不断扩大,do-178b/c定义的瀑布式开发模式暴露出变更困难、容易引入错误以及无法及时响应需求变更的缺点。

文献“escapethewaterfall:agileforaerospace[c].ieee/aiaadigitalavionicssystemsconference,2009”公开了一种将敏捷开发应用到符合do-178b/c的机载软件开发过程中的方法。文献总结了航空航天领域软件开发应用的关键技术,将敏捷实践映射到符合do-178b/c约束的软件开发过程,并对关键实践进行了详细分析,将结对编程、重构等敏捷方法成功的应用到传统的do-178b/c软件开发过程中。文献虽然实现了将敏捷开发应用到do-178b/c软件开发中,但也带来了迭代式的频繁变更。瀑布开发模型下机载软件开发过程人为规划变更次数较少,对管理人员而言尚可接受,但在频繁变更的敏捷开发模型下就暴露出严重缺乏通用性、灵活性与效率低下的缺点。



技术实现要素:

为了克服现有技术的不足,针对do-178b/c标准约束的机载软件敏捷开发流程中,机载软件开发过程须由管理人员规划,严重缺乏通用性、灵活性与效率低下的缺点,本发明提供一种基于ooda循环与基于min-min算法改进的pmms调度算法的机载软件敏捷开发过程优化方法。本发明采用通过定义项目人员模型与任务模型,估算项目人员工作效率与任务规模,增加流程输入输出依赖的约束,使用基于min-min算法改进的pmms调度算法对人员指派与机载软件的开发过程进行静态生成和优化。该方法应用ooda循环,允许人员的变动和计划的频繁改动,依据当前软件开发进度,反馈人员的预估工作效率,动态地预测与优化软件开发过程,提高机载软件开发效率。

本发明解决其技术问题所采用的技术方案包括以下步骤:

步骤一,建立模型

(a)do-178b/c任务任务模型

使用有向无环图dag表示do-178b/c标准定义的机载软件开发过程中有前置约束关系的所有任务集合;任务流程由任务节点构成的有向无环图a=(n,e),a的顶点集n为任务节点的集合,代表一个满足do-178b/c标准的机载软件开发流程中的所有任务,边集e代表任务间的前置约束关系,若边集e中含有边eij,则任务节点nj依赖于任务节点ni;任务节点ni用六元组ni=(ti,tpi,ci,esti,lsti,efti)表示,其中t表示任务属性的集合,t包括任务名、任务id、任务所属的阶段等,tp是任务类型,tpi∈{项目计划、需求、设计、编码、验证、质量保证、配置管理、合格审定},c表示任务预计的工时,est表示任务最早开始时间,lst表示任务最晚开始时间,eff表示任务对于人员角色组的任务效率;

(b)do-178b/c人员模型

使用三元组mk=(ik,rk,efftk)描述参与项目的人员mk∈m,其中m是所有参与项目的人员的集合,ik是mk的成员属性的集合,包含成员名、成员id、成员状态等;rk是mk的do-178b/c角色,其中rk属于集合{项目管理人员,软件需求人员,软件设计人员,软件编码人员,软件验证人员,质量保证人员,配置管理人员,适航联络人员},effk是mk对任务类型的效率表,effkl表示成员mk做l类任务的效率;

(c)调度模型

将任务队列节点用pi表示,pi定义如公式(1)、公式(2)所示:

pi=(nk,ml,sti,edi),nk∈n,ml∈m(1)

pi∈ql(2)

其中nk为任务节点,ml为任务分配给人员,sti,edi分别为任务的开始时间和结束时间,一个人员的任务队列节点的集合构成一个任务队列,所有成员的任务队列构成任务队列集合q,q实质上扩展自sched:n→m,即所有任务节点集合到人员集合的一个映射,nk与ml满足sched(nk)=ml;

调度问题的目标函数g的形式化描述如公式(3)所示,即求任务队列中最晚完成的队列的结束时间:

对于任务dag图g=(n,e),人员集合m存在一个调度schedmin:n→m在满足约束条件的情况下产生一个任务队列q,使得g最小,如公式(4)所示:

即求出一个调度序列使得所有任务完成时间最小即可;

步骤二:观察阶段(observe):统计当前各任务完成度与人员工作效率,项目开发人员每隔项目组规定的固定时间段,在redmine上登记工时和完成进度增量,经过计算得到一个人员mi的登记工时si和完成一个任务的nj完成进度增量δlij,其中,mi∈m,nj∈n,redmine记录所有时间的人员i完成任务j的完成进度与任务j之前的进度的差值δlij,构成集合δl,si构成集合s;角色类型为rtype的人员执行任务类型为ttype类任务的平均效率,为rtype类人员执行ttype类任务的实际贡献工时与登记工时之和比值,计算方法如公式(5)所示:

式中,avgeff(rtype,ttype)为时刻t下某类人员执行某类任务的平均效率,参数rtype为人员角色类型,参数ttype为任务类型,sl代表时刻t人员类型为rtype的人员ml的登记工时,δllm代表该登记工时关联的任务的完成进度增量;

人员mi完成任务类型m的当前计算效率,对于mi∈m的人员,任务类型m的效率efftim为该人员最近一次做m类任务中一个任务nj的效率与完成m类任务的平均效率的比值,计算方法如公式(6)所示:

对于给定的任务集合n,在当前时刻t,某一任务节点ni∈n,对人员类型为r的人员的任务效率effir是取t时刻前该任务所有的登记工时之和与完成进度增量之和与计算比值,计算方法如公式(7)、公式(8)所示:

effir∈effi(8)

指定任务ni∈n分给指定人员mj∈m的预计完成时间eft,计算方法如公式(9)所示:

式中,li是任务的已完成度,ci是任务预计工时时间;

其中r=rj即人员mj∈m的角色类型,即任务ni∈n的任务类型;

任务效率与人员效率计算结果以增量形式保存并输出到.csv文件中,同时更新保存项目任务dag图的顶点与边的.csv文件;

步骤三、调整阶段(orient):任务粒度优化与任务效率预测;依据观察阶段输出的计算结果进行调整,调整分为两部分,基于工作窃取的任务粒度优化器和基于统计学习模型的任务、人员效率的回归器;

基于工作窃取的任务粒度优化器判断当前所有人员目前进行的任务,若当前存在没有分配任何任务人员,且该人员可以完成其他人员正在进行的任务,则将其他人员正在进行任务的剩余部分按照闲置人员个数拆分,拆分的比例由人员效率决定;

基于统计学习模型的任务,通过统计过去所有记录的任务效率与人员效率的计算值训练统计学习模型,从而预测任务的效率与人员的工作效率;

步骤四、决策阶段(decide):生成新的调度序列;

针对步骤一建立的任务模型、人员模型和调度模型,每次调度将所有任务分配给完成对应任务时间最少的处理机,得到每个任务到处理机的映射对<task,machine>,再从该映射对集合中,获得最小完成时间的一个映射<taskmin,machinemin>,最后将该映射对中的taskmin分配给machinemin;以.csv文件形式读取调整阶段输出的经过调整的人员效率、任务效率以及任务dag图,在java中构造尚未指派的任务dag图对象和人员表、人员、任务效率表,生成一个调度序列;当生成调度序列后,输出为.csv文件,redmine读取该.csv文件,对当前没有任务指派的人员,按照调度序列的安排进行相应的指派;

步骤五、行动阶段(act):按照计划完成任务;

行动阶段接受步骤四中决策阶段给出的调度序列,按照调度序列对每位人员的任务进行指派,每位人员的任务不可剥夺,即人员当前正在完成的任务不能被其他任务抢占的方式来执行任务,固定时间在redmine上登记工时与完成度。

本发明的有益效果在于由于采用了一种符合do-178b/c的基于ooda循环与pmms调度算法的机载软件敏捷开发过程优化方法,本发明包含人员、任务、调度器三大模块,首先应用pmms调度算法生成初始符合do-178b/c要求的机载软件开发流程,在开发过程中不断进行ooda循环和调度算法优化,动态调整人员、任务的参数,动态生成更好的机载软件开发过程。

附图说明

图1是本发明基于pmms调度算法的机载软件开发过程生成示意图。

图2是本发明基于ooda循环的机载软件开发过程的动态优化流程图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

步骤一,建立模型

(a)do-178b/c任务任务模型

使用有向无环图dag表示do-178b/c标准定义的机载软件开发过程中有前置约束关系的所有任务集合;任务流程由任务节点构成的有向无环图a=(n,e),a的顶点集n为任务节点的集合,代表一个满足do-178b/c标准的机载软件开发流程中的所有任务,边集e代表任务间的前置约束关系,若边集e中含有边eij,则任务节点nj依赖于任务节点ni;任务节点ni用六元组ni=(ti,tpi,ci,esti,lsti,efti)表示,其中t表示任务属性的集合,t包括任务名、任务id、任务所属的阶段等,tp是任务类型,tpi∈{项目计划、需求、设计、编码、验证、质量保证、配置管理、合格审定},c表示任务预计的工时,est表示任务最早开始时间,lst表示任务最晚开始时间,eff表示任务对于人员角色组的任务效率;

(b)do-178b/c人员模型

使用三元组mk=(ik,rk,efftk)描述参与项目的人员mk∈m,其中m是所有参与项目的人员的集合,ik是mk的成员属性的集合,包含成员名、成员id、成员状态等;rk是mk的do-178b/c角色,其中rk属于集合{项目管理人员,软件需求人员,软件设计人员,软件编码人员,软件验证人员,质量保证人员,配置管理人员,适航联络人员},effk是mk对任务类型的效率表,effkl表示成员mk做l类任务的效率;

(c)调度模型

将任务队列节点用pi表示,pi定义如公式(1)、公式(2)所示:

pi=(nk,ml,sti,edi),nk∈n,ml∈m(1)

pi∈ql(2)

其中nk为任务节点,ml为任务分配给人员,sti,edi分别为任务的开始时间和结束时间,一个人员的任务队列节点的集合构成一个任务队列,所有成员的任务队列构成任务队列集合q,q实质上扩展自sched:n→m,即所有任务节点集合到人员集合的一个映射,nk与ml满足sched(nk)=ml;

调度问题的目标函数g的形式化描述如公式(3)所示,即求任务队列中最晚完成的队列的结束时间:

对于任务dag图g=(n,e),人员集合m存在一个调度schedmin:n→m在满足约束条件的情况下产生一个任务队列q,使得g最小,如公式(4)所示:

该人员与任务调度问题等价于有资源和偏序约束的静态调度问题,即求出一个调度序列使得所有任务完成时间最小即可;

步骤二:观察阶段(observe):统计当前各任务完成度与人员工作效率,项目开发人员每隔项目组规定的固定时间段,在redmine上登记工时和完成进度增量,经过计算得到一个人员mi的登记工时si和完成一个任务的nj完成进度增量δlij,其中,mi∈m,nj∈n,redmine记录所有时间的人员i完成任务j的完成进度与任务j之前的进度的差值δlij,构成集合δl,si构成集合s;角色类型为rtype的人员执行任务类型为ttype类任务的平均效率,为rtype类人员执行ttype类任务的实际贡献工时与登记工时之和比值,计算方法如公式(5)所示:

式中,avgeff(rtype,ttype)为时刻t下某类人员执行某类任务的平均效率,参数rtype为人员角色类型,参数ttype为任务类型,sl代表时刻t人员类型为rtype的人员ml的登记工时,δllm代表该登记工时关联的任务的完成进度增量;

人员mi完成任务类型m的当前计算效率,对于mi∈m的人员,任务类型m的效率efftim为该人员最近一次做m类任务中一个任务nj的效率与完成m类任务的平均效率的比值,计算方法如公式(6)所示:

对于给定的任务集合n,在当前时刻t,某一任务节点ni∈n,对人员类型为r的人员的任务效率effir是取t时刻前该任务所有的登记工时之和与完成进度增量之和与计算比值,计算方法如公式(7)、公式(8)所示:

effir∈effi(8)

指定任务ni∈n分给指定人员mj∈m的预计完成时间eft,计算方法如公式(9)所示:

式中,li是任务的已完成度,ci是任务预计工时时间;

其中r=rj即人员mj∈m的角色类型,即任务ni∈n的任务类型;

任务效率与人员效率计算结果以增量形式保存并输出到.csv文件中,同时更新保存项目任务dag图的顶点与边的.csv文件;

步骤三、调整阶段(orient):任务粒度优化与任务效率预测;依据观察阶段输出的计算结果进行调整,调整分为两部分,基于工作窃取的任务粒度优化器和基于统计学习模型的任务、人员效率的回归器;

基于工作窃取的任务粒度优化器判断当前所有人员目前进行的任务,若当前存在没有分配任何任务人员,且该人员可以完成其他人员正在进行的任务,则将其他人员正在进行任务的剩余部分按照闲置人员个数拆分,拆分的比例由人员效率决定;

基于统计学习模型的任务,通过统计过去所有记录的任务效率与人员效率的计算值训练统计学习模型,从而预测任务的效率与人员的工作效率,获得稳定、准确的预测效率;

步骤四、决策阶段(decide):生成新的调度序列;

针对步骤一建立的任务模型、人员模型和调度模型,对min-min调度算法做了相关适应性的改动并应用于人员与任务的调度,实现了一种适用于人员调度的pmms调度算法,即每次调度将所有任务分配给完成对应任务时间最少的处理机,得到每个任务到处理机的映射对<task,machine>,再从该映射对集合中,获得最小完成时间的一个映射<taskmin,machinemin>,最后将该映射对中的taskmin分配给machinemin;以.csv文件形式读取调整阶段输出的经过调整的人员效率、任务效率以及任务dag图,在java中构造尚未指派的任务dag图对象和人员表、人员、任务效率表,生成一个调度序列;当生成调度序列后,输出为.csv文件,redmine读取该.csv文件,对当前没有任务指派的人员,按照调度序列的安排进行相应的指派;

步骤五、行动阶段(act):按照计划完成任务;

行动阶段接受步骤四中决策阶段给出的调度序列,按照调度序列对每位人员的任务进行指派,每位人员的任务不可剥夺,即人员当前正在完成的任务不能被其他任务抢占的方式来执行任务,固定时间在redmine上登记工时与完成度。

参照图1-图2。本发明使用基于rubyonrails框架的redmine作为观察阶段,java编写的工作窃取优化器与python编写的tensorflow非线性回归器作为调整阶段,java编写的pmms静态调度算法作为决策阶段。其中java、python、ruby的实现均为可跨平台性的高级编程语言,且java满足编写调度算法需要的性能以及数据结构如hashmap等,python的tensorflow包支持gpu加速,满足统计学习回归的性能需求。

本发明基于ooda循环与pmms调度算法的机载软件敏捷开发过程的优化方法的实施例如下:

步骤一,观察阶段(observe):统计当前各任务完成度与人员工作效率。项目开发人员每隔一段时间在redmine上登记工时和完成进度增量。经过计算得到一个人员mi∈m的登记工时si和完成一个任务nj∈n的完成进度增量δlij。redmine记录所有时间的δlij构成集合δl,si构成集合s。

某类人员执行某类任务的平均效率。为某类人员执行某类任务的实际贡献工时cmδllm与登记工时之和比值,其计算方法如公式(1)所示。

式中,avgeff(rtype,ttype)为时刻t下某类人员执行某类任务的平均效率,参数rtype为人员角色类型,参数ttype为任务类型,sl代表时刻t人员类型为rtype的的人员ml的登记工时,δllm代表该登记工时关联的任务的完成进度增量。

mi∈m的人员完成任务类型m的当前计算效率。对于mi∈m的人员,任务类型m的效率efftim是该人员最近一次做m类任务中一个任务nj的效率与完成m类任务的平均效率的比值,计算方法如公式(2)所示。

对于给定的任务集合n,在当前时刻t,某一任务节点ni∈n,对人员类型为r的人员的任务效率effir是取t时刻前该任务所有的登记工时之和与完成进度增量之和与计算比值,计算方法如公式(3)、公式(4)所示:

effir∈effi(4)

指定任务ni∈n分给指定人员mj∈m的预计完成时间eft,计算方法如公式(5)所示。

式中,li是任务的已完成度,ci是任务预计工时时间。

其中r=rj即人员mj∈m的角色类型,即任务ni∈n的任务类型。

任务效率与人员效率计算结果以增量形式保存并输出到.csv文件中,同时更新保存项目任务dag图的顶点与边的.csv文件。

步骤二、调整阶段(orient):任务粒度优化与任务效率预测。依据观察阶段输出的计算结果进行调整。调整分为两部分,基于工作窃取的任务粒度优化器和基于统计学习模型的任务、人员效率的回归器。

基于工作窃取的任务粒度优化器从redmine保存的.csv文件中读出所需信息,并以此判断是否对当前任务进行拆分。若当前存在没有分配任何任务人员,且该人员可以完成其他人员正在进行的任务,则将其他人员正在进行的任务的剩余部分拆分为闲置人员个数,拆分的比例由人员效率决定。任务调整的结果通过.csv文件输出,然后由redmine读取该文件,并调整当前任务,拆分出新任务意味着redmine需要基于原有的任务信息创建新任务,并删除旧任务。

基于统计学习模型的任务、人员效率的回归器,通过统计过去所有记录的任务效率与人员效率的计算值训练统计学习模型,从而预测未来一段时间任务的效率与人员的工作效率,获得稳定、准确的预测效率。任务效率与人员效率的预测使用谷歌tensorflow机器学习框架实现了一个单因素神经网络非线性回归器,其流式计算模型使用tensorflow框架提供的tensorboard显示。

该tensorflow非线性回归模型由1个节点的输入层,16个节点的隐藏层,与1个节点的输出层构成,输入层到隐藏层的以及隐藏层到输出层的参数分别为(weight,biases)与(weight_1,biases_1),其中weight为前一个层入度到后一个层出度之间的正态分布随机数,biases为全0数组,激活函数为sigmoid函数,损失函数为mse(y-f(x))即离散点与拟合曲线均方误差,使用adams优化器最小化损失函数。并将每个任务的eff与每位人员的efft以.csv的形式输出,交给下一阶段调度器读取。

步骤三、决策阶段(decide):生成新的调度序列。基于pmms算法调度算法以.csv文件形式读取调整阶段输出的经过调整的人员效率、任务效率以及任务dag图,在java中构造尚未指派的任务dag图对象和人员表、人员、任务效率表,启用新一轮的调度,生成一个调度序列。当生成新的调度任务序列后,输出为.csv文件,redmine读取.csv文件,对当前没有任务指派的人员,按照调度序列的安排进行相应的指派。

步骤四、行动阶段(act):按照计划完成任务。行动阶段接受决策阶段给出的较优任务序列,按照任务序列,每位人员以任务不可剥夺,即当前正在完成的任务不能被其他任务抢占的方式来执行任务,固定时间在redmine上登记工时与完成度。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1