一、概述

在软件外包项目中,甲方(发包商)通过资金或其它资源获取乙方(承包商)的开发服务,以达成其软件需求目标。为了让外包项目按时按质按量完成,甲方需要做好项目的采购管理外包管理,其中采购管理的核心是选择合适的供应商、签订合同,外包管理的核心是过程监控、项目验收。按照外包项目采用的形式和管理方法的不同,可以将外包项目分为项目外包人员外包[1]。

  • 项目外包

甲方将项目的需求和范围要求发给乙方,候选乙方对此进行报价,然后进行实地考察和分析确认,当甲方认为乙方符合承担条件后,将项目需求和技术资料发给乙方,进行软件开发[1]。项目研发过程涉及的需求、设计、编码、测试、上线、系统支持等项目活动全部由乙方承担。项目外包适合缺少相关专业人员的甲方。

  • 人员外包

甲方负责项目的组织和管理,雇佣乙方的相关人员参与项目研发的中间环节。常见的人员外包的形式是雇佣乙方的开发人员进行编码工作,人员外包适合拥有具备需求分析、项目管理、技术管理等相关能力的专业人员的甲方。

近期笔者以甲方项目负责人的身份参与我司一个内部系统的外包项目,项目前期以"项目外包"的形式进行,后期以"人员外包"的形式进行。在本文中笔者将结合项目经历对项目外包、人员外包中外包管理的异同、注意要点进行简要的说明。

二、项目外包

笔者在接手项目时, 项目已经进入开发阶段。获取到的项目资料仅仅只是短短几句的项目文档、项目外包合同。通过对业务进行调研,和业务人员沟通,阅读相关文档发现该项目在的规划、需求阶段存在着很大的不足,进而导致了很严重的项目后果。通过对该阶段项目进行复盘,笔者认为在项目立项项目规划需求分析项目验收阶段甲方的外包项目管理需要注意以下几点:

1. 明确项目干系人

什么是项目干系人?

项目干系人又称项目利益相关者,是指积极参与项目实施或完成的,或其利益可能受项目实施或完成情况产生积极或消极影响的个人或组织(如客户、发起人、执行组织或公众),识别干系人是一个持续性的过程[2]。通常参与项目的角色有项目发起人、项目业务方、项目经理、设计人员、开发人员、测试人员等,受项目影响的角色有成果拥有者、系统使用者等。

在本次的项目过程中,由于在项目规划阶段漏掉了一个重要的业务方,而且笔者因为缺乏干系人的资料导致没有及时干涉,进而导致了项目成果不能满足所有业务方的需要。因此在项目规划阶段明确干系人的人员组成、优先级、期望点,是保障项目定位、需求来源的准确性的必要途径,是进入项目需求阶段的基础

2. 合理的项目团队组织

项目团队组织包括人员安排、任务划分、沟通协作项目确认。合理项目团队组织能够明确人员职责,监控项目进程,及时发现问题,降低项目进度和质量失控的风险。在笔者没有介入该项目的前期,乙方项目经理直接和业务需求人员进行沟通,由于业务需求人员缺乏专业知识,导致需求设计不完善、项目节点不合理、项目资源提供不及时等诸多问题。同时在整个项目过程中缺乏正式有效沟通协调机制,导致对进度没有清晰的掌控,无法确认乙方是否充分投入资源。因此笔者认为合理的项目组织需要做到以下几点:

  • 安排专业人员作为项目对接人

合格的项目对接人需要了解软件开发知识,熟悉项目开发流程,善于交流,又了解业务知识。项目对接人负责对软件外包项目全过程进行全面的监控和协调,以期更好地消除由于信息不对称所产生的一系列项目进度和质量风险,确保软件外包各方能够更有效地履行合同[3]。

  • 建立项目进度跟踪机制

建立项目进度跟踪机制的目的是监督外包项目的进展情况,确认项目实际进度与合同规定的时间进度表是否相符,评估乙方投入的开发资源是否充分。项目进度跟踪通常以会议、邮件、即时聊天等约定的交流形式定期检查,频率至少1周一次。通过乙方定期提供的项目相关信息,来确认阶段任务完成情况、总结项目问题,检查实际进度是否延迟,评估项目进行的风险,并讨论相关解决方案。

3. 不可忽视项目的非功能需求

非功能需求是系统需求的重要组成部分,是影响用户使用体验、产品能否提供高效稳定服务的关键。常见的非功能需求包括性能需求、安全需求、集成需求、可靠性需求、兼容性需求、易用性需求等。在本次外包项目过程中,由于忽略了非功能需求导致了多个项目失误,比如管理后台没有对接单点登录,同时在线用户过多服务器瘫痪,因此在项目规划时不能忽视对非功能需求的需求分析。然而非功能的定义很抽象,如何清晰准确的描述非功能需求是非功能需求分析的关键。通常对于非功能需求的描述是通过量化业务指标、详细具体的规则进行说明,常用到的如下:

  • 性能需求

对于前台的系统而言,通常以“响应时间”上进行定义,并具体到的某个业务场景[4]。需求描述举例如下[5]:

  • 定位系统从点击到第一个界面显示出来所需要的时间不得超过300毫秒。
  • 在非高峰时间根据编号和名称特定条件进行搜索,可以在3秒内得到搜索结果。

对于后台的业务管理系统来说,通常以“整体能力上来定义”,并具体到某个业务场景[4]。常见的业务指标包括“并发量、资源使用率、业务量、系统容量”等等[4]。需求描述举例如下[5]:

  • 系统可以同时满足10,000个用户请求,并为25,000个并发用户提供浏览功能。
  • CPU占用率<=50%,内存占用率<=50%。
  • 数据库表行数不超过100万行,数据库最大容量不超过1000GB,磁盘空间至少需要40G以上。
  • 可扩展性需求

系统的可扩展性就是考虑系统未来为了追加新功能是否方便,便宜,能够满足未来业务量增长的需要。定义扩展性需求时要确定系统的生命周期,然后分析在系统生命期内,业务量变化情况,压力增长情况,以此分析出来的结果,作为扩展性需求,进行定义[4]。系统可扩展可以从系统性能、系统功能两个方面进行考虑,其基本要求是功能扩展时不需要对系统的基础架构进行改动,性能扩展不通过任何代码的更改。在描述系统性能的可扩展需求时应结合性能需求,举例如下:

  • 系统可以在未来需要的情况下,不通过任何代码的更改,对系统性能进行提升,使之中心系统每秒钟能记录25个以上的考勤记录[4]。

系统功能的可扩展性体现在需求分析与设计阶段是否能有效识别系统可变的需求,不能停留在可扩展的基本原则上,要落实对一个一个功能的分析中,以提供出合理的方案[6]。从业务设计的角度来说,模块化、可复用、较少依赖或耦合是可扩展的原则。

  • 集成需求

企业内部系统存在多个业务系统,系统之间集成和整合的需求就是集成需求。集成需求主要包括数据对接(系统之间的数据交换和信息传递)、单点登录(多个独立系统统一账号和登录认证)、系统融合( 将多个系统融合在一个系统中,统一账号、权限、应用的管理,最终以一个独立的软件系统存在)[7]。需求描述举例如下:

  • 某某图书管理系统采集##库存管理系统的数据包括库存数据、订单数据。
  • 某某课程管理系统通过与EHR系统实施集成,实现相关基础数据(组织机构、用户数据等)的共享,实施统一身份认证和统一登录界面。
  • 内训管理后台融合到社区管理后台中,统一账号、权限、功能的管理。
  • 兼容性需求

一般对于前台系统而言,都需要考虑其兼容性。目前最为广泛的前台系统是手机客户端、web端,在考虑系统的兼容性时主要前台的适用平台有哪些,需求描述举例如下。

  • 系统仅支持chrome浏览器,不考虑移动端适配。
  • 移动端需要兼容的操作系统IOS6以上、Andriod6.0以上。
  • 易用性需求

易用性和产品的用户体验相关,是一组规定或者潜在的用户为使用其软件所需做的努力和对这样的使用所作的评价有关的一组属性[8]。衡量易用性的标准是用户对于系统功能是否容易理解、是否容易学习、是否容易操作,需求描述举例如下:

  • 80%的用户经过培训后,可在5分钟内完成课程创建。
  • 90%的用户完成建课后,需要在5s内知道下一步需要进行什么操作,如课程上线、编辑、查看详情等。

4. 合理的项目里程碑安排

项目里程碑安排就制定项目计划,是对项目的进度管理、目标管理,是进度跟踪的关键。项目里程碑就是通过识别项目的软件活动,以软件活动完成时间节点作为项目里程碑。具体的项目计划安排由乙方产品经理负责,甲方需要进行评审,判断其合理性。
在此次项目中,由于项目的阶段划分、开发计划制定都没有进行严格的审核,项目过程虽然按照业务需求划分成两个阶段,但是没有做相关的阶段验收计划,因此笔者增加了项目阶段验收的环节。项目第一阶段的计划周期过短,中间有法定假日的影响,虽然乙方组织开发人员进行加班,但是只有web端完成,追赶进度的同时导致了严重的质量问题。由于移动端采用的技术方案是以SDK的形式嵌入公司的移动OA应用中,在项目集成过程中产生了严重的类库冲突问题,阻碍了项目进展。因此合理项目计划安排、计划实施过程中需要考虑以下几点:

  • 提前预估项目风险

在进行项目规划的时候,要充分地平台项目进展过程中可能遇到的风险,针对这些风险制定相应的规避措施,对于容易产生风险的项目任务,需要预留充足的时间。

  • 项目任务的工期要符合项目开发实际

在很多时候乙方为了中标会向甲方承诺工期,然而实际开发的结果往往会是不能按时交付、完成质量不能满足客户期望。因此对应甲方对接人在乙方完成需求分析后,根据需求规格说明书评审乙方的项目开发计划,如果发现不合理需让乙方调整,确认计划无误后须进行冻结。

  • 划分子项目

对应涉及多终端、多业务需求的大型项目,可根据业务需求的优先级、系统终端类型,划分多个子项目进行多次验收多次交付,一个阶段没有完成不能进入下一阶段,项目通过多次迭代完成上线验收。采用这种方式能够降低项目风险,提高项目完成质量。

三、人员外包

在此次项目的人员外包阶段,外包的开发人员异地开发,因此项目过程中如何协调异地开发人员的开发工作,如果保证需求沟通中无阻碍,就是人员外包面临主要问题。复盘此次的项目经历,笔者认为人员外包需要注意以下几点:

###1. 和乙方项目经理沟通

在项目过程中可能会出现外包人员工作配合度不高,需要安排外包人员加班处理某些任务等问题。遇到这些问题时首先要和乙方的项目经理进行沟通反应问题,或者在告知外包人员的同时告知乙方项目经理。

###2. 统一的项目协作平台

通过在线的项目协作平台,能够方便团队成员直接进行沟通,便于项目经理对项目任务协调和控制,同时记录项目需求、项目决策、需求变更等重要内容。笔者参与的外包项目采用的在线协作平台是wiki+redmine的形式,wiki记录项目需求、项目人员、项目里程碑、会议纪要等内容,redmine进行任务分配、任务跟踪、bug管理。

四、总结

软件项目外包管理涉及到很多流程,甲方从项目立项到选择承包商,再到签订合同、跟踪监控,最后成果验收,乙方从项目竞标到竞标成功 ,再到系统策划、需求分析、系统设计、编码测试,最后提交验收,整个项目从开始到收尾,甲方乙方其实是合作者,为了共同的项目目标而走到一起的,虽然整个过程中,难免会遇到很多问题,踩很多坑。
笔者结合自身的项目经验总结了一些要点,希望能对大家在进行外包项目能够有所帮助,减少弯路,其中难免会有不足之处,请大家批评指正。

参考资料

[1] 杨曙贤, 王军辉和张爱国. 软件外包概论. 普通高等教育软件工程“十二五”规划教材. 人民邮电出版社, 2015.
[2](美)项目管理协会.项目管理知识体系指南(PMBOK指南)第四版.北京:电子工业出版社,2009:23-24.
[3] 王梅源. 软件外包项目全过程风险管理. 华中科技大学出版社, 2009.
[4] 非功能需求定义与测试.百度文库, 2011.
[5] 常见非功能性需求的描述案例.CSDN博客, 2018.
[6] [我们应当怎样做需求分析:非功能需求.ITeye博客, 2012.]
(https://www.iteye.com/blog/fangang-1497941)
[7] 软件系统集成与整合的常见方式.百度文库, 2018.
[8] 电子工业部标准化研究所.GB/T 16260-1996 信息技术 软件产品评价 质量特性及其使用指南.

对软件外包项目中甲方外包管理的思考(一)——人员外包和项目外包相关推荐

  1. 软件项目开发工程组织管理总结

    目录 一.软件项目开发工程组织管理步骤 二.甘特图的基本特点. 1.过程改进 2.能力成熟度模型 1.初始级(Initial) 2.已管理级(Managed) 4.已量化管理级(Quantitativ ...

  2. 软件行业适合扁平化的管理吗

    据中国产业信息网发布的<2014-2018年中国软件行业市场深度调研与发展战略咨询报告>的数据显示,我国软件行业的销售收入以年均30%以上的速度持续增长,远高于同期的GDP的增长速度,在软 ...

  3. 东北大学软件项目管理与过程改进复习提纲(2020)——第九章《项目人力资源管理》

    文章目录 9 项目人力资源管理 9.1 人力资源管理的重要性 9.2 什么是项目人力资源管理 9.3 人员管理关键理论 9.3.1 激励理论 马斯洛的需求层次理论 赫兹伯格的"激励 - 保健 ...

  4. 技术走向管理一些思考

    在<IT项目管理>一书中针对IT行业定义了一个新的"工种"--多才多艺者,并预言未来的IT产业中多才多艺者的重要性将逐渐凸显. 多才多艺者即是具有技术背景,同一时候了解 ...

  5. 欧美软件/IT高端外包项目的竞争和管理 高管研修班

      若您无法阅,请点击http://www.msup.com.cn/event/bpo/index.html 尊敬的阁下:     目前,服务外包的市场潜力巨大,但中国的服务外包产业尚处于起步阶段.我 ...

  6. 软件外包项目中的进度管理

    案例 A公司是一家美资软件公司在华办事机构,其主要的目标是开拓中国市场.服务中国客户,做一些本地化和客户化的工作.它的主要软件产品是由总部在硅谷的软件开发基地完成,然后由世界各地的分公司或办事机构进行 ...

  7. 《企业软件交付:敏捷与高效管理精要》——2.2 MyCo公司和MyProj企业软件交付项目...

    2.2 MyCo公司和MyProj企业软件交付项目 这个案例取材自真实的项目,可以说明很多实际情况.有一个跨国公用事业公司,依赖一家企业软件交付机构来为业务提供IT服务,而后者承受着很大的成本和效率压 ...

  8. 【JAVA】项目开发团队分配管理软件

    目录 前言: 一.系统功能结构 二.系统流程 三.实现思路 四.常见问题 五.具体实现代码 六.全部代码 前言: 模拟实现一个基于文本界面的<项目开发团队分配管理软件> 熟悉Java面向对 ...

  9. 实现一个项目开发团队分配管理软件思路及过程

    做一个项目之前首先要知道做什么?实现什么功能?得到什么效果?然后再理思绪以及怎么做,慢慢来,一口吃不成个胖子,切忌一上来就动手做,简单的代码还好,一旦代码更多更复杂进行到后面就很容易乱成一锅粥,所以我 ...

最新文章

  1. 音频编辑软件_Audacity2.12版
  2. 050_Boolean对象
  3. 一路慢行的JavaScript之旅(add)!!!
  4. Spring Cloud【Finchley】-17 使用Zuul为单个或全部微服务提供容错与回退功能
  5. 今天又听了蓝色的缘分
  6. 暴力优化解法+哈希解法——2016年第七届蓝桥杯省赛b组第八题 四平方和
  7. 地理信息系统软件测试培训,地理信息系统软件测试方法技术方案
  8. java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...
  9. linux文件大小和目录,查看Linux目录和文件大小
  10. springmvc java的验证码的小程序
  11. mybatis plus关联查询_Mybatis 和 Hibernate 持久层框架之间的区别是啥?
  12. 使用MASM07 - Win32汇编语言015
  13. ios:uibutton 中title 和image 共存那点事
  14. html页面布局主要有哪些形式,HTML页面布局形式与原则
  15. Paddle安装是遇到 Error: Can not import avx core while this file exists:
  16. 源码分析 --- Spark如何确定Splits和分区数
  17. 绝地求生+守望先锋?2019首款黑马游戏Apex英雄凭什么如此火爆?
  18. 软酷优计划java考试复习题_软酷题
  19. Altium designer 10安装破解以及出现缺少mfc71.dll文件的情况处理
  20. CANoe 之 CAPL编程

热门文章

  1. 360搜索和百度搜索的简单对比
  2. memcntl 函数 linux,Solaris中的酷命令
  3. 杂谈:硬件和软件接口选择
  4. 2023云南大学应用统计硕士专业考研成功经验分享
  5. centos7安装PostgresSQL14+PostGIS3.2记录
  6. 用模板建站 菜鸟变高手
  7. android悬浮球代码,Android 仿360悬浮球与加速球
  8. CDMA数字移动通信系统的软切换技术(转)
  9. winds主机部署zabbix_agent
  10. NumPy 初学者指南中文第三版·翻译完成