.Net平台下并行工程项目规划与团队组织系统的设计与实现

发表于:2008-02-15来源:作者:点击数: 标签:项目规划
摘 要 并行工程技术的引入为企业带来了明显的效益,已在国内外得到了广泛的应用。本文结合并行工程环境下对设计时间估计,项目规划,团队组织方面的研究成果,针对实际生产中遇到的产品 开发 计划制订和规模较大的团队组织问题进行了深入研究,考虑到现实中的
摘 要 并行工程技术的引入为企业带来了明显的效益,已在国内外得到了广泛的应用。本文结合并行工程环境下对设计时间估计,项目规划,团队组织方面的研究成果,针对实际生产中遇到的产品开发计划制订和规模较大的团队组织问题进行了深入研究,考虑到现实中的具体问题,在 .net 平台上设计并实现了基于 C/S 的产品项目规划和团队组织系统,给出了相应的流程设计、模块结构设计和总体系统的实现, 为企业生产效率的提高提供了一条科学途径 。

  关键词 并行工程,项目规划,团队组织,设计时间估计

  0 引言

  并行设计的思想和方法强调产品设计和相关的各种过程设计的并行与集成,并且要求产品生命周期内的各种因素在产品开发的一开始就要同时考虑,这也是它与传统的串行产品开发模式的根本区别所在。例如机械产品的设计活动中,按照传统的串行生产方式,工艺设计要等到产品结构设计全部完成后才能进行,然而大多数情况下,产品结构设计并不能完全满足工艺设计的要求,在工艺设计阶段发现问题后修改已经完成的产品结构设计将会比较困难,工作量比较大。在并行工程的模式下,相应的问题将会比较简单,工艺设计并不需要等到产品结构设计全部完成后才开始,在产品结构设计到达一定的完成度时,工艺设计就可以开始了,此时发现问题,产品结构设计还正在进行,对后期的影响比较小,修改量也比原先的串行模式要小。目前,并行设计的主要模型有: Krishnan 等提出的基于模具的框架模型 [1] ,用于描述上游设计活动进化规律及其对下游设计活动影响的模型; Luh 等提出的活动网络模型 [2] ,用于对产品开发项目进行规划与调度等。

  在产品的设计生产中,人的因素很大,不同的设计生产阶段选择最合适的人参与会起到事半功倍的效果。根据对不同人员业务程度等指标的评估,将其在特定时间段安排到特定的岗位将能最大程度发挥该员工的能力,同时提高整个团队的任务完成效率。人员的选择既要考虑到其自身的技术水平,工作业绩等,也要注意其参与的设计活动之间的相似度,并尽量

  使其利用率达到最高。 虚拟产品开发团队 (Virtual Team) 和灵活产品开发团队 (Agile Team) 强调产品开发人员之间的协作以及团队的自治性 [3] ,为解决此类问题指出了一条可行的途径。

  现代的工业生产设计中产品越来越复杂,涉及到的人,物越来越多,生产设计计划的合理制订和安排,各部门人员之间的配合均对任务快速、高效、高质量的完成起到决定性的作用。以并行工程思想为基础的项目规划和团队组织,可以较好的解决生产设计时间过长,修改工作量过大,人员利用率偏低等传统串行模式生产方式下的弊病。

  本文采用模糊神经网络模型和支持向量机模型,以及并行工程项目规划和团队组织模型,来描述产品研发计划制订和研发团队人员选择的问题,为提高企业研发过程中的决策和组织能力提出了一种可行的实现方案,从而可以在缩短产品研发时间的同时,提高研发过程中的资源利用率。

  1 理论基础

  1.1 设计活动时间估计

  对于一个并行项目的规划,首先,需要比较准确地估计各子项目的完成时间。文献 [4] 和 [5] 提出的模糊神经网络模型和支持向量机模型为此提供了一个比较好的解决方法。其主要思想认为各种外部影响因素和设计活动时间之间存在某种非线性映射关系,通过对样本的学习找出最相似于该映射的逼近函数,再通过该函数求出具体设计活动的时间估计。文献 [4] 指出模糊神经网络模型需要大量的学习样本,海量的学习样本将显著提高时间估计的精度;文献 [5] 的结论说明支持向量机模型对学习样本的数量要求远低于模糊神经网络模型,样本的数量对精度影响不大,适用于小样本情况。

  1.2 并行工程产品开发计划制订

  文献 [6]提出了一种新的活动组网络模型, 着重描述由于下游设计发现上游设计的错误而导致的设计迭代 , 同时也体现上游设计活动对下游设计活动进度的影响。该模型关注上下游设计活动之间存在重叠的情形 , 而不是纯粹的串行或平行的情形。在并行工程模式下 , 项目的每个阶段都可以用若干组相互重叠的设计活动 ( 包括产品设计活动及其相关的过程设计活动 ) 来描述,因此产品开发项目就可以用设计活动组 ( 组内包含若干相互重叠的设计活动 ) 构成的网络来描述如图 1 。

  文献 [6] 也给出了一种分枝定界算法解决此最优问题,在分配给各项目的资源确定时,调整分配的资源数量,最小化完成时间的同时使平均资源利用率不低于一个给定值。为了更好地模拟现实中的情况,又引入了扩展随机高级判断 Petri 网模型来描述实际生产中存在的生产设计过程的中断,该模型和算法能够较真实的反映和解决实际生产中的问题。

图 1 活动组网络模型

  1.3 并行工程产品开发的团队组织

  文献 [7] 使用一个整数规划模型描述产品开发团队组织问题, 在这一模型中 , 考虑了团队组织的几个主要原则 , 即已完成的产品开发设计活动和当前设计活动的相似性 , 开发人员的技术水平 , 创新能力 , 管理能力及产品开发设计活动对开发人员数量和工作负荷的要求, 并使用 Tabu 搜索算法解决了这个问题。

  2 项目规划与团队组织系统的总体设计


  本系统主要由三部分组成:产品设计时间估计,产品开发计划制订,产品开发团队组织。其中后一步的计算都需要用到前一步的结果。具体结构如图 2 。

  2.1 产品设计时间估计模块的设计

  产品设计时间估计模块主要作用是根据各产品设计过程所具有的不同特征,对比从样本库中学习到的规律,估计其完成设计活动所需要的时间。

  作为整个系统的第一步,设计时间估计的精度对后两个模块计算的准确性有着相当大的影响。由于设计时间估计的精度很大程度上依赖于学习样本的数量和质量。考虑到用户并不一定拥有大量的高质量样本,所以提供了两种算法供用户选择。模糊神经网络模块对样本数量的敏感性比较强,样本数量越多精度越高,随着样本数量的减少精度的下降速度比较快;支持向量机模块则偏向于小样本情况,其精度随样本数量的减少下降不明显。

  为了用户录入的方便和输出结果的统一,两个模块共用同一输入输出界面。设计时间估计的统一输入为影响产品设计时间的各方面的特征描述,例如产品的复杂程度,某些部分对整体的重要性,工艺精度的要求等,其中有部分量为数值型,另一部分为模糊型。该输入可以由用户经验得到,也可以由其他方式例如 QFD 质量屋评估得到,为此系统提供了相应接口,只要输入符合格式要求即可无缝结合。由于考虑到用户输入量比较大,或者数据有可能来自于其它程序得到得数据文件,所以在输入方式上考虑有手工输入和文件导入两种方式并存。所有输入作为独立的表存入数据库中,用户通过前台程序对数据库进行操作。

  无论是模糊神经网络模块还是支持向量机模块均包含产品设计时间训练和产品设计时间计算两部分。

  2.1.1 产品设计时间训练

  此部分主要功能是对样本进行学习和训练,模拟出其内部的规律。由于此部分需要处理大量的样本数据,进行复杂的迭代运算,所以耗费时间比较长,经测试在 PIII733MHZ , 256 兆内存的机器上,使用微软的 .net 平台,对应于 46 组样本的模糊神经网络训练需要 50 秒左右;对应 40 组样本的支持向量机训练需要 330 秒左右。为此需设置进度条以展示计算的进度。因为此部分样本数据比较多,所以输入大多是文件导入方式。

  由此可见将训练部分与结果计算部分分离用户不必每次均进行耗时的训练,可以以避免不必要的等待时间。

  2.1.2 产品设计时间计算

  此部分根据训练部分的结果经过运算得到产品设计时间的估计值。相比训练部分,此部分运算较为简单,耗时几乎可以忽略,输入大多使用手工输入(产品数量多时也可使用文件导入方式)。由于两种算法都有外推性差的缺点,所以输入产品的特征不能超出样本特征的范围,为此提供了提示和检查机制,避免产生错误的结果。

  2.2 产品开发计划制订模块的设计

  产品开发计划制订模块以设计时间估计模块估计出的产品设计时间为基础,结合其它约束条件(如资源约束)制定出在一定约束条件下,具有前后制约的设计流程的最短完成时间计划。

  该模块的输入之一是设计时间估计模块的输出。程序将每个设计活动看作由多个单独设计活动组成的活动组,每个单独活动的设计时间即为设计时间估计模块的输出,各个活动组之间有顺序约束(如图 1 )。现实中的设计活动会受到资源的约束(例如人员材料分配等),并且这些资源还有可能出现缺席的现象 , 为此需要以一定的方式模拟缺席状况,在这里 设所有资源的某一次缺席开始时刻和结束时刻之间的时间间隔的长度服从参数为 0.5 的负指数分布,并设所有资源的某一次缺席结束时刻和下一次缺席开始时刻之间的时间间隔的长度服从参数为 0.02 的负指数分布 ( 文献 [8]) ,当然缺席函数是可以变化的。

  综上所述,该模块的输入主要为:设计时间估计模块的输出,即设计时间估计,资源的约束,活动组的信息和活动组的顺序约束。为了使用户可以直观方便的录入和修改输入数据,软件采用了树型结构输入,利用 .net 平台的 TreeView 控件实现活动组的分组和顺序约束。使用 TreeView 控件的优点在于可以直观的反映图 1 所示的活动组之间的关系,每个活动组都可以动态扩展其内部的活动数量和承接其下一步的活动组数量,并可以直接在此结构中录入上一步的结果。当此模块单独工作时,需要手工录入每个活动的设计时间估计和资源约束;当此模块和设计时间估计模块共同工作时,首先需要建立树型架构,即规定好每个活动组包含活动的数量和活动组之间的顺序关系,之后软件会自动生成类似于上一个模块的录入界面(见图 3 ),该界面使用 datagrid 控件和数据库直接关联包含每个设计活动的特征(模糊型和数值型)及其资源约束,录入完成后存入数据库(其中每个活动组的第一个活动为主活动,其余为子活动,主活动与子活动之间有相互影响,子活动本身之间没有相互影响),运行时,时间估计模块调用录入数据库中的数据计算出每个活动的设计时间估计,然后自动填入树型架构中,此时整个树型架构就成为了产品开发计划制订模块的输入。

  经过后台的计算就可以得到处理结果,其中包括每个活动组及活动的开始和结束时间,所需每种资源的数量,资源的平均利用率,这同时也是下一步——产品开发团队组织模块的部分输入。

图 3 产品设计时间估计模块

  2.3 产品开发团队组织模块的设计

  团队组织模块的作用主要是从一批候选人员中,根据设计活动计划的要求和人员自身素质挑选出最合适的人选完成先前制订的计划。对应于每一类资源均有其独立的挑选过程。

  计划制订模块计算出的活动组各个设计活动的工作量和工作强度是影响人员挑选的因素之一。这两个量在前一步计算中就已经作为结果存入了数据库表中,此时只需要从特定的数据库表中找到这几个字段,读出就可以直接作为输入。

  候选人员的自身素质是决定挑选结果的主要因素。人员对设计活动的影响主要体现在以下几个方面:

  •  候选人员的经验。在这里将其表现为以前参加的设计活动和现在的每个设计活动之间的相似程度,相似程度高则体现其经验较丰富。

  •  候选人员的各方面能力。其中包括管理能力,创新能力等。在实际计算中将以专家评估出的数值量参与计算。

  •  候选人员当前的工作负荷。

  以上这些因素暂时缺乏有效的评估方式,目前只能由专家组进行人工评估。不过本软件提供了相应的接口,如果有合适的评估方式,只要其结果符合接口的要求就可以直接无缝连接。

  本模块的输入通过与数据库直接连接的 datagrid 控件,它可以直观,方便地对录入的数据进行查看和修改。

  由于搜索合适员工的过程需要遍历和迭代整个人员表,所以时间花费比较长,经测试在 PIII733MHZ , 256 兆内存的机器上,使用微软的 .net 平台,在 40 名员工中搜索 10 名合适的员工需要大概 90 秒时间。

  经过计算之后软件将输出挑选出的员工号以及其参加哪几个阶段的工作,期间的工作负荷是多少。这些都将以水晶报表的形式输出。

  3 系统模块集成

  本系统建立在微软的 .net 平台上, .net 平台是微软推出的面向未来的一种新的体系架构,其核心为 .net framework ,任何电脑只要有了这个基础运行库都可以运行 .net 程序,并且程序不需要在注册表里注册,可以避免传统的 dll hell 。 .net 也提供了一种新的数据库连接方式—— ADO.NET ,它使用 dataset 缓存数据库中的数据,使客户端仅在更新数据库的时候建立连接而不需要和服务器时刻保持连接。主要考虑到以上两个优点本系统采用该平台。

  3.1 逻辑运算模块

  产品设计时间估计、产品开发计划制订和产品开发团队组织三个模块都可以独立工作,但一般情况下由于其之间的承接性,它们通常是协同工作的。

  其中每个模块中都有相应的算法组件。将算法程序以 .net 组件的形式组合在程序里可以有效的实现代码的重用性,将来如果改进或替换更好的算法将不必要重写所有程序,仅需要将该替换相应的组件即可。

  3.2 数据库访问模块

  由于用户样本数据中个数,每个样本的特征数,活动组数,以及如何分配活动组间的关系都未定,所以数据库中的表必须在用户录入样本数据时即时创建。系统将通过我自己建立的 SqlTabCreator 类来创建数据表,该类只有一个带参数的构造函数:

  public SqlTabCreator(System.Data.SqlClient.SqlConnection con,string[,] col,string tableName)

  其中 3 个参数 con 代表数据库连接字段, col 代表以(列名,数据类型)的列参数对, tableName 为要创建的表名。实例化该类后将执行 System.Data.SqlClient.SqlCommand 实例类的 ExecuteNonQuery() 方法,自动由构造函数在数据库中建立表,其中第一列默认为主键。数据库表建立完成后需要在程序中建立操作表的命令和关联,为了实现数据层和应用层的分离,建立了 SqlCmdCreator 类。该类首先实例化 1 个 System.Data.SqlClient.SqlDataAdapter 类和 4 个 System.Data.SqlClient.SqlCommand 类(分别实现 insert , delete , select , update4 个功能),并根据构造函数的参数将 SqlCommand 类和 SqlDataAdapter 类关联,这样系统只要在外部声明一个 SqlDataAdapter 类并引用实例化的 SqlCmdCreator 类中的 SqlDataAdapter 类就可以使用外部的 SqlDataAdapter 类来对数据库进行各种操作。如下代码:

  SqlCmdCreator mlw = new SqlCmdCreator(sqlConnection1,n,"Hdz",t,ss);

  sqlDataAdapter1 = mlw.DataAdapter;

  sqlSelectCommand1 = mlw.SelectCommand;

  sqlInsertCommand1 = mlw.InsertCommand;

  sqlUpdateCommand1 = mlw.UpdateCommand;

  sqlDeleteCommand1 = mlw.DeleteCommand;

  DataSet hdzDataset = new DataSet();

  sqlDataAdapter1.Fill(hdzDataset,"Hdz");

  先创建 SqlCmdCreator 的实例 mlw ,该实例是对名为 Hdz 的表使用连接 sqlConnection1 进行操作,接着,外部声明的 sqlDataAdapter 类 sqlDataAdapter1 引用 mlw 实例的 sqlDataAdapter 类,之后, sqlDataAdapter1 类就可以使用 mlw 类所创建的数据库操作和连接来操作数据库。

  相对于外部程序,数据库的操作是不可知的,对不同的表或使用不同的连接来操作数据库则仅需要改变实例化 SqlCmdCreator 的参数就可以了。

  3.2 显示层集成

  由于本程序的整体计算花费时间比较多,为了给用户以进度提示,将在计算过程中显示进度条。进度条表示每个模块计算的完成度,并显示正在进行计算的模块名称。系统使用 .net 的事件委托机制来获得当前运行的模块名称和进度,由于模块计算过程复杂,进度条显示和模块计算必须分别在不同的线程中。计算流程开始时,系统将开辟两个独立的线程,主线程进行模块计算,辅线程负责进度条的显示。主线程在运行过程中不断向辅线程发送消息指示目前的进度,在运行到下一个模块时发送模块转换信息,辅线程调用相应的事件处理机制,在收到主线程发来的信息后更新进度条的显示。

  4 系统的计算机实现

  本系统的计算机实现使用传统的 Client/Server 结构,前台采用微软的 c#.net ,后台基于 SQLserver2000 数据库,可在局域网内实现信息共享。

  5 结论

  在产品开发项目开始实施之前制订一个合理的产品开发计划,可以有效地分配和利用有限的资源 , 控制项目进程,使得项目能够尽早完成。本文通过对实际生产中 研发计划制订和研发团队人员选择问题的研究 ,考虑到现实中各部分内容的联系性和承接性,提出了 并行工程项目规划与 团队组织系统的设计和实现方案,并进行了实用性开发。它的出现使得管理者可以根据现有的实际情况快速高效的制订计划,设定开发步骤的起始时间,合理分配资源,从而达到缩短项目开发时间,提高资源利用率的目的。

原文转自:http://www.ltesting.net