研发团队的各个角色

今天看了一篇博客https://www.cnblogs.com/alabo1999/p/12887588.html 写了关于团队的各个角色的一些介绍。根据文章中的观点,进行了摘要,并且增加了一些个人看法。

总结如下:

组建研发团队

研发团队(R&D Team),指围绕特定软件产品组建的研发队伍。
组建研发团队是整个研发工作的基础。如果队伍阵容不整,软件项目的成功将面临更多挑战。
对软件产品而言,一个相对健全的研发团队包含产品经理、项目经理、开发团队(开发项目经理、系统分析员或者高级程序员、UI&UE设计人员、前后端开发人员)、测试团队(测试组长及若干测试人员)、配置管理员、运维人员UI&UE设计人员、前后端开发人员)、测试团队(测试组长及若干测试人员)、配置管理员、运维人员

管理者要根据产品或项目的特点组建合适的研发团队。要认识哪些岗位是不可或缺的,有些职位可以安排兼职,但不能丢弃其职责。

产品经理
产品经理负责市场调查并根据产品、市场及用户等的需求,确定开发何种产品,选择何种业务模式、商业模式等。并推动相应产品的开发组织,他还要根据产品的生命周期,协调研发、营销、运营等,确定和组织实施相应的产品策略,以及其他一系列相关的产品管理活动。
对于产品类软件,产品经理是不可或缺的。
产品经理一头是对外的,对接市场、销售和客户,其负责规划、裁剪和导入产品需求,制定产品路线图(RoadMap),编制阶段性大版本的功能性能需求集合。其对需求的取舍有最终的裁决权,因为其对最终交付的软件产品负责。
产品经理往往是业务领域的专家,至少要努力成为业务领域的专家,这样才能准确理解和把握客户的需求。对业务领域不熟悉的产品经理,对整个团队而言,可能是致命的。
产品经理另一头是对内的,对接开发、测试、运维团队。产品经理不必是技术专家,但其需要能够理解开发团队的诉求,包括开发测试资源(或环境)需求的满足,对存在技术实现障碍或实现代价较大的需求是否进行需求降级的取舍。
对于工程项目类的定制开发软件,也是需要产品经理的。
如果公司接触的是全新的业务领域,此时往往客户方是业务领域的专家,公司往往会指定开发项目经理来对接技术。此时要求客户方作为产品经理的角色足够投入,并且需要相互信任和理解对方,容易沟通,不会在问题发生时强调责任归属而扯皮,否则项目实施的风险就会很大。
如果公司在某个业务领域有类似经验,公司应将有经验的产品经理加入团队,由其对接客户,可大大提高项目的成功率。这种情况,产品经理可以兼顾多个同类项目。

项目经理
主要负责统筹规划项目进度及产品生命,其工作职能直接对公司高层负责。作为项目的管理者,PM通常会参与到一个或多个项目的管理与决策工作中。主要工作要求即在有限的资源约束下,运用系统的观点、方法和理论,对项目涉及的全部工作进行有效地管理。从项目的投资决策开始到项目结束的全过程进行计划、组织、指挥、协调、控制和评价,以实现项目的目标。
比较认同网上的一个观点:产品经理对产品成功负责,项目经理对完成项目负责。
项目经理强调过程控制并确保项目有计划、有序的、风险受控方式的开展和完成,而产品经理则强调结果,需要产品成功交付或销售额达到一定数额。

开发团队
1软件需求分析
(软件需求分析对软件项目是十分重要且必要的。软件需求与产品需求并不是一回事,软件需求来源于产品需求,然后转化为软件需求,包括功能需求、性能需求及各种质量属性需求如灵活性、安全性、可靠性。做好软件需求分析,等于项目成功了一半)
2 系统设计或架构设计
(服务器配置、前后端开发语言和框架选型、架构模式选择如:微服务/SOA、是否前后端分离)
3 接口设计(如采用微服务,则各子系统调用接口、跟第三方对接的接口设计、内部使用的抽象接口设计)
4 UI&UE设计
(用户界面及交互设计)
5 子系统或模块的概要设计
(选用的开发语言、开发框架、部署架构、数据库设计等形成文档)
6 重要的功能的详细设计
(国内大部分公司的详细设计文档都是后补的,尤其是敏捷开发模式,不太重视文档,详细设计文档一般都是验收的时候补的。所以重要功能的详细设计文档,可以在开发之前写一下,以便核对和留底)
7 编码实现
联调测试和单元测试
(前后端联调、正常的黑白盒测试)

测试团队
测试团队,Test Team或QA,是保障软件质量的重要单元。对于中小型软件,可以是一两个软件测试工程师,甚至一个软件测试工程师兼顾多个项目。
但是测试人员是比不可少的。
测试团队使用软件测试方法,根据需要,提供下列测试:
功能测试(黑盒测试)
接口测试
性能测试(压力测试)
视需要与开发人员共同完成白盒测试
必要时,搭建自动化测试框架,以更好地支持回归测试。

配置管理员
配置管理包含版本管理,对于较复杂的系统,其涉及多个子系统,每个子系统又有依赖的组件版本,这些构成了全部的配置项。
对于Java,有maven工具,帮助管理组件的版本,可以省心不少。
配置管理员一般由开发项目经理兼任,如果项目较大,可以另行专门指定一个配置管理员。
配置管理员协助项目经理和开发经理,完成配置管理工作。
代码的版本管理,一般使用版本管理,如SVN、Git。
配置管理员创建必要的代码分支,并进行代码merge审核,设置代码基线(或tag)。
没有良好的配置管理,导致代码版本混乱不堪,质量保证就无从谈起。

运维人员
现在项目大多数是云部署的项目。设计web服务器、数据库服务器、消息队列、Redis等,从可靠性和性能角度,还可能集群或分布式部署,还要考虑网络安全等因素。
因此,如果涉及云部署,应该有专门的运维人员,他可以兼顾多个项目。
运维人员往往兼任数据库管理员,及版本上线发布。

个人感想:
1 对于中小型企业,开发经理和项目经理一般不怎么区分,尤其外包型公司。因为开发经理也要负责管理人员,划分功能,所以很多时候项目经理和开发经理可能是一个人担任。
2 有的企业甚至连高级工程师都没有,都由开发经理来担任,当然这样是不好的。尤其项目时间紧张的时候,如果都是初级工程师,他们由于自身的局限性,无法保证代码质量,只能保证按期完成。那么对于代码质量、后续的技术和功能的扩展、项目的技术沉淀都是不利的。还会导致开发经理的时间被分散,要去指导初级工程师一些初级的问题。
3 项目有项目经理或者开发经理存在是非常重要的,尤其需求比较多变或者系统比较大或者对文档要求比较多的项目,如果由程序员去兼任负责人,会导致这些人核对需求和编写代码同时进行,会导致哪个都做不好。而且普通程序员对文档,尤其是需求文档、概要设计、详细设计没什么重视性,多半是应付了事,对于文档要求严格的客户,应付了事反而会让客户比较反感。由项目负责人去核对需求、安排相关文档的编写,可以保证需求和文档的统一及一致性。

原文地址:https://www.cnblogs.com/kxm87/p/13301010.html