研发项目开发效率的影响因素浅析

适应日益加剧的竞争环境、把握瞬息万变的市场信息是企业得以生存和发展的基础,某大型IT公司估计其产品推迟上市一个月将导致收入减少530万(人民币)、利润减少265万、还要付出另外的研发费用37.5万。这就对产品研发项目提出了更高的要求:如何在有限的资源投入下以更快的速度满足或者超越用户的需求。本文汉捷咨询带大家浅析影响研发项目开发效率的因素。

在提高研发效率方面,业界已经进行了大量有益的探索和实践,下面是几种较有代表性的见解:

l 过程/流程决定一切(强调过程的重要性);

l 人是生产力的决定因素(强调人的重要性);

l 采用XXX编程工具,可以使您的开发效率提高一个数量级(强调工具的重要性);

l 良好的计划是项目成功的一半(强调项目管理的重要性);

……

尽管每种见解都有大量的拥趸(无论处于业务还是商务角度),但是仍然会遭到大量的挑战而不能自圆其说,从研发项目的实践来看也同样反映了“瞎子摸象”的现象:好像每种见解都是对的,但是又不完全对。

根据美国项目管理协会的定义:“项目管理是在项目活动中运用知识,技能,工具和技术,以便达到项目要求”;项目管理的目标是在给定的资源、预算和时间内安全地完成符合质量要求的项目。以上定义意味着项目的资源、预算、时间和项目范围有着内在的约束关系,在这四个因素已经被“极其乐观”的限定的情况下,项目最终无法完成——项目经理常常会遇到非常紧张的、不可能完成的Deadline,如何应对?项目范围的约束关系告诉我们手中的王牌包括增加人手(有时候人多反帮倒忙,可以参考《人月神话》)、投入更多资源(部分模块外包、使用COTS、购买最好的开发/管理工具)、削减项目范围/需求(承诺在后续版本中提供某些功能,但是用户未必会认同)、降低质量(软件项目交付质量的降低往往意味着客户需求没有完全实现,用户也未必会认同)。

更深一个层次,多个因素影响了研发项目的开发效率,片面强调某一个因素而忽略其他的因素,都无法揭示项目实践中遇到的问题。这里引用一个老笑话:

有个警察看到个喝醉的人在路灯下找东西,他就问:你找什么?那个醉鬼说,车钥匙下车时掉了,我在找。警察问:你不在掉的车子附近找,怎么到路灯下找呢。醉鬼说:那里黑啊,这里亮啊,好找!

其实很多项目经理或者咨询机构都在犯类似这个醉鬼的错误,不管是有意或是无意的——试图在自己最熟悉、最容易控制的因素上寻求突破,而对自己陌生的、难以控制的因素却置若罔闻,尽管它可以为项目带来更大的回报。汉捷推测很大程度上是由于“人类本能的需要心理安全感”。

那么,到底哪些因素影响了开发的效率、他们又能够在多大程度上造成影响?下面的资料是Capers Jones在《Software Assessments, Benchmarks, and Best Practices》中使用的数据,这是目前为止最新资料(虽然量化管理是管理追求的较高层次,但是现在度量方面的专著却几乎绝迹,可能是商业利益使然)。

影响软件项目生产率的积极因素(以影响程度排序):

项目因素影响程度(%)项目因素影响程度(%)
高质量可交付产品复用350正式审查的使用15
高水平的管理人员经验65好的办公室人体工程学15
高水平的技术人员经验55低的项目复杂度13
有效的方法与过程35适度的进度压力11
有效的管理工具30生产率测量10
有效的CASE工具27低的需求蔓延9
高级程序设计语言2410天以上的年度培训8
质量评估工具19开发团队分布集中8
细的岗位分工18高昂的团队士气7
有效的客户参与18分层管理机构5
正式的成本与进度估计17



 

影响软件项目生产率的消极因素(以影响程度排序):

项目因素影响程度(%)项目因素影响程度(%)
低质量可交付产品复用-300拥挤的办公空间-27
管理人员缺乏经验-90低级语言-25
技术人员缺乏经验-87工作场所分散-24
高的需求蔓延-77非正式的成本与进度估计-22
不适当的CASE工具-75岗位分工不细-15
没有使用审查-48没有客户参与-13
不适当的管理工具-45没有年度培训-12
无效的方法与过程-41平面式的管理结构-8
无质量评估-40没有生产率测量-7
项目很复杂-35低的团队士气-6
过大的进度压力-30



 

从上面的数据中可以有很多新的发现,当然是仁者见仁,智者见智:

l 同一要素的不同影响:相同的项目因素,例如“管理人员经验”,对项目生产率的正面影响为65%,也就是说管理人员具备高质量的管理经验,最高可以使生产率提升65%;而蹩脚的管理人员却对生产率造成最高90%的下降。65%对比-90%,并不相同,这一点在“需求蔓延”上面表现的最为突出,是9%对比-77%。这说明了相同的事情如果做的不好,带来的负面影响远远大于将其做好而带来的积极影响;

l 产品/模块复用:复用可以包括平台化开发、模块重用等,高质量产品复用所带来的收益是惊人的,但是如果有问题的模块被复用,就会对相关产品均造成负面影响,这种影响被批量放大,解决起来也更加困难;

l 人的问题:我们会发现管理人员、技术人员的能力经验对项目造成很大的影响,在这方面的努力会得到很好的回报:不少公司愿意在营销运作、过程改进、设备引进等方面投入巨资,在引入和培训人才方面缺乏力度,初衷是认为“人”在短期内不可改变,即便是这样,对“人”视而不见,长期看来只能是在低水平踏步;另一个问题,项目经理往往会认为项目团队的成员是短板,事实却常常相反,项目失利源于经理的经验不足,对项目丧失控制,“能力越大,责任越大(”With Great Power, Comes Great Responsibility”, Uncle Ben to Peter Parker in Spider-Man)”,不断提升应该是管理者的必修课;

l 需求:产品需求可以看作射击的目标,如果目标没有找准或是错误的,项目必定走向失败。需求对于项目的重大意义无论怎么强调都是不为过的,几乎每个项目经理都会被“需求蔓延/变更”折磨过,但是真正能够从中吸取教训的比例却相当少;

l 管理工具/编程语言:运用恰当的管理工具/编程语言会极大的提高工作效率,例如项目管理工具、配置管理工具、团队交流工具、集成开发环境等,但是却不能指望工具可以改变项目的命运或者产生数量级的飞跃,因为整个项目的工作不仅仅是编写代码,需求分析、系统设计、测试设计、评审等活动不能由工具完全代劳;此外,过分迷信工具的效果反而会削弱对其他因素的关注程度;

l 流程:CMM/CMMI的影响已经将过程的重要性渲染得无以复加,但是令人失望的是它只有30%-40%的影响,其实在其他因素不变的情况下,哪怕只有10%的改善已经非常可观了;过程改进方面过犹不及,不顾公司的商业收益而片面强调规范化、一味向某个所谓“业界最佳”实践看齐,更像是一场无收效的做秀而不是真正的过程改进;

l 进度估计与控制:现在已经有很多成熟的估算方法和工具,那些复杂的方法并不见得比相对简易的方法拥有更好的准确度,关键是方法运用和熟悉的程度;适当的进度压力可能刺激开发人员的工作积极性,但是过大的进度压力却可能导致追求进度而放弃产品质量,结果就是产品不稳定,开发周期拖长,直到大家都已经不耐烦了才勉强发布;

l 团队士气:尽管这个因素的影响程度并不大,但是相比耗资巨大、周期漫长的过程改进活动,其投资回报是非常高的。开发团队具备高昂士气并且由衷的愿意为项目做贡献,就会主动的高质量完成工作,这是任何流程规范无法比拟的。电影《勇敢的心》、《特洛依战争》、《魔戒》中,在英雄们率领他的部队展开诗史般的冲锋之前,都会发表一番激情洋溢的演说,用意就是激励起部队斗志,显然这样会比士气低落时的胜算要大很多。但是一味的强调“精神胜利”是不够的,古人曾总结出“一鼓作气,再而衰,三而竭”,试图激励士气并不是一件很容易的事情,不过挫伤士气倒是轻而易举的;

汉捷认为,项目管理是一门寻求平衡的艺术,即凭借有限的资源最大程度的满足项目干系人的期望;上述的表格只是众多因素的一个子集,不同的项目在不同的阶段可能会出现不同的短板,这就是我们改进的机会所在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s的基本使用和认识

目录 介绍 控制端 Node(节点) 控制端与节点的关系图 基本使用 创建和运行资源 查找和参看资源 修改和删除资源 介绍 控制端 api-server(api)是集群的核心是k8s中最重要的组件,因为它是实现声明式api的关键 kubernetes api-server的核心功能是提供了Kubernetes各类资…

应用监控SkyWalking调研

参考: 链路追踪( Skyworking )_skywalking-CSDN博客 企业级监控项目Skywalking详细介绍,来看看呀-CSDN博客 SkyWalking 极简入门 | Apache SkyWalking 使用 SkyWalking 监控 ClickHouse Server | Apache SkyWalking https://zhuanlan.zhihu.com/p/3…

Linux应急响应靶机 2

一、靶机介绍 应急响应靶机-Linux2 前景需要:看监控的时候发现webshell告警,领导让你上机检查你可以救救安服仔吗!! 1,提交攻击者IP 2,提交攻击者修改的管理员密码(明文) 3,提交第一次Webshell的连接URL(http://xxx.xxx.xxx.…

SpringMVC中的注解配置

文章目录 13、注解配置springmvc13.1、创建初始化的类,代替web.xml13.2、使用流程声明一个类来继承AbstractAnnotationConfigDispatcherServletInitializer,并且实现他的抽象方法实现配置SpringConfig的java文件实现SpringMvcConfig的java文件 13.3、实例…

【每日刷题】Day78

【每日刷题】Day78 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1608. 特殊数组的特征值 - 力扣(LeetCode) 2. 1385. 两个数组间的距离值 - …

R可视化:好看的气泡图

加载R包 library(tidyverse) library(camcorder)gg_record(dir "tidytuesday-temp", device "png", width 8, height 8, units "in", dpi 320)导入数据 team_results <- readr::read_csv(https://raw.githubusercontent.com/rfordata…

设置Docker中时区不生效的问题

项目中使用docker-compose&#xff0c;并通过以下方式设置了时区 environment:- SET_CONTAINER_TIMEZONEtrue- CONTAINER_TIMEZONEAsia/Shanghai 但是并没有正确生效&#xff0c;网上有很多博客都在推荐这个做法&#xff0c;另外一种是使用标准环境标量 -TZAsia/Shangehai …

24 年程序员各岗位薪资待遇汇总(最新)

大家好&#xff0c;我是程序员鱼皮。今天分享 24 年 6 月最新的程序员各岗位薪资待遇汇总。 数据是从哪儿来的呢&#xff1f;其实很简单&#xff0c;BOSS 直聘上有一个免费的薪酬查询工具&#xff0c;只要认证成为招聘者就能直接看&#xff0c;便于招聘者了解市场&#xff0c;…

RabbitMQ消息可靠性等机制详解(精细版三)

目录 七 RabbitMQ的其他操作 7.1 消息的可靠性(发送可靠) 7.1.1 confim机制(保证发送可靠) 7.1.2 Return机制(保证发送可靠) 7.1.3 编写配置文件 7.1.4 开启Confirm和Return 7.2 手动Ack(保证接收可靠) 7.2.1 添加配置文件 7.2.2 手动ack 7.3 避免消息重复消费 7.3.…

python(63): dict: del/pop不释放内存

Python中的字典&#xff0c;只有不再使用的时候才会释放对应的内存。在使用 pop 或者 delete 删除字典中的item(或者说entry)后&#xff0c;为了保证hash table 探测链的完整&#xff0c;那个被删除的entry只是被标记成了空&#xff0c;并没有真正被删除掉&#xff0c;所以该字…

如何解决安卓模拟器无法上网的问题

如何使安卓模拟器上网 在使用Android模拟器进行开发时&#xff0c;有时会遇到模拟器无法联网的问题。这篇博客将分享我解决这个问题的步骤和方法。 看了网上很多解决android studio内置模拟器无法联网的问题&#xff0c;基本上都是在模拟器手机上配置dns&#xff0c;个人试了多…

【C语言】23.文件操作

由于要对数据进行持久化保存&#xff0c;我们就有了文件。 一、程序文件与数据文件 磁盘&#xff08;硬盘&#xff09;上的文件是文件。 但是在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09…

“论云上自动化运维及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸&#xff0c;通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本&#xff0c;提升系统的灵活度&#xff0c;以及系统的交付速度&#xff0c;增强系统的可靠性&#xff0c;构建更加安全、可信、…

go语言里怎么使用kafka怎么拉取消息?

Apache Kafka 是一个分布式流处理平台&#xff0c;它允许你发布和订阅记录流。在 Go 语言中&#xff0c;你可以使用第三方库如 segmentio/kafka-go 或 Shopify/sarama 来与 Kafka 进行交互。 以下是一个使用 segmentio/kafka-go 库的简单示例&#xff0c;说明如何在 Go 语言中从…

MySQL中update语法的使用(超详细)

在MySQL中&#xff0c;UPDATE 语句用于修改已存在的表中的记录。以下是对 UPDATE 语句的详细解释和使用方法&#xff1a; 语法 UPDATE table_name SET column1 value1, column2 value2, ... WHERE condition; table_name&#xff1a;要更新的表名。SET&#xff1a;用于…

2024年最适合Python小白的零基础入门教程!

伴随着云计算、大数据、AI等技术的迅速崛起&#xff0c;市场对Python人才的需求和市场人才的匮乏&#xff0c;让长期沉默的Python语言一下子备受众人的关注&#xff0c;再加上简单易学&#xff0c;使得Python一跃成为TIOBE排行榜的第一。 准备学Python或者想学Python的小伙伴们…

13 Redis-- 数据一致性模型、MySQL 和 Redis 的数据一致性

数据一致性模型 根据一致性的强弱分类&#xff0c;可以将一致性模型按以下顺序排列&#xff1a; 强一致性 > 最终一致性 > 弱一致性 数据一致性模型一般用于分布式系统中&#xff0c;目的是定义多个节点间的同步规范。 在这里&#xff0c;我们将其引入数据库和缓存组…

【正点原子K210连载】第十四章 按键输入实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DNK210开发板 2&#xff09;平台购买地址https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十四章 按键输入实…

Vue3 登录成功,浏览器存在toke,再次访问/login路由到/index 首页页面

文章目录 目录 文章目录 流程 小结 概要流程技术细节小结 概要 首先需要清楚知道浏览器localstorage和Session storage的区别 localStorage 和 sessionStorage 是 HTML5 提供的两种客户端存储数据的方法&#xff0c;它们在使用和生命周期上有一些区别&#xff1a; 1. 生命周期…

单机的redis安装

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 单机的redis安装很简单 安装EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;存储库 sudo y…