- 浏览: 261573 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
zhagener:
package com.huawei.qyq.impl;imp ...
EasyMock使用说明 -
LetCode:
将String转换成InputStream -
Mr_kimilo:
MyEclipse6.5安装的时候出现问题: JS Test ...
javascript测试工具: JsTestDriver -
jersey109:
我同意楼下的,SQLException和IOException ...
check exception和uncheck exception -
jersey109:
楼主,你不说CODE,我觉得你对RuntimeExceptio ...
check exception和uncheck exception
最近有不少朋友写信问我一些关于团队开发的问题,由于这段时间有些忙,没有回复.今天写一篇这方面的文章向大家介绍一下我是如何带领团队开发工作流项目的
关于团队建设,项目管理的文章网上已经有很多了,在这里我就不谈这些理论了,直接给大家展示一个我在 项目开发方,后台服务开发方式,前台UI开发方式,后台服务与前台UI对接方式,代码文档,页面的开发文档,源码管理,单元测试,以及单元测试文档,实现思路设计文档,数据库文档,数据库设计规范,编码规范,操做数据的方法命名规则 方面的一些片断,这是一个为期6个月的工作流平台开发项目,是今年3月份启动的,现在已完成,比计划时间多出25天.核心开发人员(不包括美工,需求,黑盒测试)共有12人(编号从114到125)
补充一点:在UI草图设计上,这次想用绘图板,但最后还是使用铅笔绘制+扫描的方式制做的.
目录
项目开发方式说明图
后台服务开发方式说明图
前台UI开发方式说明图
后台服务与前台UI对接方式说明图
代码文档(片断节选)
√ |
方法签名 |
public int? addBaseEnumeration(string powerID, List<baseEnumeration> list) |
√ |
返回值 |
|
√ |
参数 |
|
√ |
约束 |
<1> 调用[security.checkPowerID方法]判断[powerID],如果[security.checkPowerID方法]返回[false],返回[401] <2> 如果参数[list]为[null],返回[-1] <3> 如果参数[list]中的[baseEnumeration.rowID]为[Guid.Empty],返回[-2] <4> 如果参数[list]中的[baseEnumeration.entity]为[null]或[string.Empty], 返回[-3] <5> 如果参数[list]中的[baseEnumeration.field]为[null]或[string.Empty], 返回[-4] <6> 如果参数[list]中的[baseEnumeration.entityType]为[null]或[string.Empty], 返回[-5] <7> 如果参数[list]中的[baseEnumeration.title]为[null]或[string.Empty], 返回[-6] <8> 如果参数[list]中的[baseEnumeration.value]为[null]或[string.Empty], 返回[-7] <9> 如果参数[list]中存在[rowID]重复的记录,返回[-8] <10>如果参数[list]中存在[entity][field][value]重复的记录,返回[-9] <11>如果参数[list]中的[baseEnumeration.rowID]在数据库中已存在, 返回[3] <12>如果联合唯一索引[entity][field][value]在数据库中已存在, 返回[4] <13>如果参数[entity]为["baseEnumeration"],[field]为[entitytype]的数据,返回[7] <14>如果参数[entityType]的传入值不是枚举表[entitytype]的基础枚举数据, 返回[5] <15>如果插入时数据库异常, 返回[6] |
√ |
说明 |
[Entity][field][value] 联合唯一索引 <14>获取[Entitytype]基础枚举数据时,使用[23 selectBaseEnumerationTypeName]得到枚举类型名称 |
√ |
单元测试 |
(组合测试),(自动判断返回状态),(自动判断返回结果) WFServiceTestProject. manageServiceTest. addBaseEnumerationTest() |
//[26] 批量添加枚举 public int? addBaseEnumeration(string powerID, List<baseEnumeration> list) { //<1> if (!security.checkPowerID(powerID)) { return 401; } //<2> if (list == null) { return -1; } using (wxwinterDBDataContext db = new wxwinterDBDataContext()) { //<3> if (list.Count(p => p.rowID == Guid.Empty) > 0) { return -2; } //<4> if (list.Count(p => string.IsNullOrEmpty(p.entity)) > 0) { return -3; } //<5> if (list.Count(p => string.IsNullOrEmpty(p.field)) > 0) { return -4; } //<6> if (list.Count(p => string.IsNullOrEmpty(p.entityType)) > 0) { return -5; }
............................... |
页面的开发文档(片断节选)
模块编号 |
Wxwinter.Index.Power.manageDutyControl |
模块需要调用的其它UI模块列表 |
Wxwinter.Index.Power.insertDutyControl Wxwinter.Index.Power.changeDutyControl |
模块的调用入口UI |
Wxwinter.Index.Power.navigationOrganizationControl |
UI类型 |
[ V ] 中控件 700 * 500 |
工具栏按钮的调用路径 |
[ V ] 无工具栏 |
模块调用方式 |
[ V ] 模式化弹出框 |
action说明 |
不需要action |
源码管理
单元测试,以及单元测试文档(片断节选)
文档
× |
方法签名 |
public int? transactComplete(string powerID , Guid instanceID , Guid stateID , string transactResult , status status) |
× |
返回值 |
|
× |
参数 |
|
× |
约束 |
<1>调用[security.checkPowerID方法]判断[powerID],如果[security.checkPowerID方法]返回[false],返回[401] <2>调用[checkInstanceState()]方法对[instanceID][stateID]指定的实例状态进行验证,返回值不为[null],返回[checkInstanceState()]的返回值 <3>调用[checkStatus()]方法对[status]进行验证,返回值不为[null],返回[checkStatus()]的返回值 <4>得到[wfStateTransactTask]表中 [ wfStateTransactTask.instanceID = instanceID && wfStateTransactTask.stateID = stateID && wfStateTransactTask.departmentNo = status.departmentNo && wfStateTransactTask.dutyNo = status.dutyNo && wfStateTransactTask.personNo = status.personNo ] 的记录并赋给变量[taskInfo],如果不存在,返回[1] <5>如果[taskInfo.runState != runState.wait],返回[2] <6>修改 [ taskInfo.runState=runState.end taskInfo.completeTime=System.DateTime.Now taskInfo.transactResult=transactResult ] 用[taskInfo]修改[wfStateTransactTask]表中记录 <7>向[wfStepList]中插入数据 [ flowID = taskInfo.flowID flowName = taskInfo.flowName nodeID = taskInfo.nodeID nodeName = taskInfo.nodeName departmentNo = status.departmentNo departmentName = status.departmentName dutyNo = status.dutyNo dutyName = status.dutyName personNo = status.personNo personName = status.personName instanceID = taskInfo.instanceID stateID = taskInfo.stateID processID = taskInfo.processID processName = taskInfo.processName stepAction = stepAction.办理 stepTime = System.DateTime.Now taskID = stepAction.办理 ] <8>如果数据库提交失败,返回[3],成功,返回[null] |
× |
说明 |
调用[checkInstanceState()]方法对实例状态进行验证 |
× |
单元测试 |
单元测试选项
范围 |
判断 |
影响 |
(无)
(不需要)
(全路径)
(正常路径)
(简单调用)
(组合测试)
(已在外部调试通过) |
(自动判断返回状态)
(自动判断返回结果)
(人工判断返回结果,结果控制台输出)
(人工判断返回结果,结果存入磁盘)
(自动判断操作结果)
(人工判断操作结果,结果存入数据库)
(人工判断操作结果,结果存入数据库)
(不出异常即可)
(说明…) |
(操作数据库,完成测试后已复原)
(操作数据库,已做state标记)
(操作数据库,需要手工复原)
(操作临时数据库) |
实现思路设计文档(片断节选)
例1:工作流结构的解析
例2:删除部门职能人员的约束
例3:查询用户的模块权限
public List<viewRelationModel> searchModelPowerOfPerson(string powerID,string personNo)
searchModelPowerOfPerson("","user1")
step1 |
使用 searchStatusList("", "user1") 得到[得到身份列表]
|
|||||||||||||||||||||||||
step2 |
用得到的身份与[powerRelationModel]对比,并返回如下算法的集合
|
数据库文档
wfFlow 流程表
表说明:存储流程模板的属性信息,该表内容是将xoml存入时,解析xoml后一次性生成的,不能修改
相关推荐
该案例为一个为期六个月的工作流平台开发项目,该项目从今年三月份启动,现已顺利完成,虽然比原计划多用了25天的时间,但整体来看仍取得了良好的成果。 #### 二、团队构成 本项目的开发团队由12名核心成员组成...
在《如何带领团队开发项目》一书中,作者分享了实际案例,指导项目经理如何有效地管理团队进行软件开发,特别是工作流平台的开发。以下是对书中涉及的关键知识点的详细解释: 1. 团队建设:项目成功的关键在于团队...
在“C#软件项目开发全程剖析”一文中,将通过具体案例和实践练习的方式,带领读者从项目规划、需求分析、系统设计、编码实现、测试验证,直至部署上线的完整过程,帮助读者全面掌握C#开发的各个环节。通过理论与实践...
在软件开发项目中,项目经理的作用无可替代。他们承担着确保项目顺利推进、团队成员协调、以及实现最终项目目标...通过上述多维度的工作,项目经理能够确保项目管理的成功,最终带领团队交付符合预期的高质量软件产品。
DarkWarrior是我在2016年带领团队创业开发的项目,这两年一直躺在硬盘里,不如开源出来分享给大家。 由于产品设计是在2015年做的,前端使用bootstrap实现,后端使用django 1.8,现在来说有点老,但程序本身很好用,...
例如,用户可以创建项目特定的组件来组织工作,并通过看板来展示和管理团队的工作流。 ### 版本计划与管理 在敏捷项目中,版本计划是管理产品发布的关键部分。手册中详细介绍了如何规划版本,如何在Scrum和Kanban...
需求分析工作可由专门的系统分析人员或项目经理带领的技术团队完成。 6. 获取需求的方法包括问卷调查、会议讨论和获取原型,但不包括决策分析,因为决策分析是一种运筹学方法,主要用于处理复杂和不确定环境下的...
项目总负责人润滋润滋带领团队成功研发了一系列高科技创新成果,获得省科技创新成果奖。 5. 项目目标与内容: 目标包括制定企业内部技术标准,建设物联网感知体验中心,以及推动市场推广和产业化。内容包括物联网...
不具备技术基础的管理者往往难以带领团队成功完成项目。同时,技术的变化速度很快,需要定期更新知识,避免被淘汰。 4. **时间管理与自我提升**:软件开发人员应确保每天有专门的时间用于学习和提高。例如,平均...
通过明确的目标和步骤,我带领团队有效地推进了项目进度,并保证了最终产品的质量。 在个人述职报告中,通过这些具体的工作内容和成果展示,我不仅仅是在向管理层汇报我的工作表现,更重要的是在进行自我分析和反思...
6. **项目管理**:在客服系统项目中,宋宁宁不仅开发了部分功能页面,还承担了带领新人的任务,这显示了他的团队合作和指导能力。 7. **数据可视化**:通过Echarts,宋宁宁在多个项目中实现了销售数据的可视化展示...
我了解到,一个项目的成功不仅仅依赖于高质量的代码,还需要一个明确的开发流程来指导整个项目的进行。数据库设计和表的建设是其中的关键步骤,它们决定了数据的组织方式和访问效率。在实习期间,我参与设计了简单的...
总之,"Oracle 9i JDeveloper开发指南"是一份宝贵的资源,它将带领你深入理解Oracle JDeveloper的各个方面,提升你的Java EE开发能力。无论你是初学者还是有经验的开发者,这份指南都将是你学习和工作中不可或缺的...
总结而言,IT部门在过去一年中不仅承担了多个关键项目的开发工作,还通过团队合作提升了个人技能和团队凝聚力。未来,部门将继续致力于技术创新和团队建设,为公司的业务发展提供强有力的技术支持。通过不断的努力和...
实习初期,我对即将从事的软件开发工作充满好奇与期待。很快,我就被分配到一个项目组中,负责企业管理系统中的人事管理模块。在指导老师的带领下,我们使用了流行的Spring框架、Hibernate框架等Java主流技术进行...
需求分析可以由专门的系统分析人员或项目经理带领的技术团队完成。软件需求包括业务需求、用户需求、功能需求和非功能需求。 6. 获取需求的方法通常包括问卷调查、会议讨论和获取原型,但不包括决策分析,因为决策...
2) 成员构成:团队应由各领域的专家组成,避免层级结构,强调经验丰富的成员带领并培养新人,确保团队的全面性和自主性。 04 运行机制 2 Pizza Team的成功运行依赖于以下几个关键要素: - 自主决策:团队拥有高度...
这一章节的重要性在于它为后续的开发工作奠定了坚实的基础,使得开发者能够专注于代码编写与功能实现,而无需过多地担心环境兼容性问题。 ### PHP for Flash 动态网站开发基础入门 接下来,本书将带领初学者快速...