精华内容
下载资源
问答
  • 软件研发管理体系建设

    千次阅读 2019-09-11 23:30:51
    最近一段时间,我一直在反复思考一个问题:我们的软件研发管理体系应该是怎样的?在不断思考的过程中,结合对公司近几年在软件研发方面的主要做法,逐步有一些粗浅的认识,在此将这些认识记录成文字,并期待能够与更...

    最近一段时间,我一直在反复思考一个问题:我们的软件研发管理体系应该是怎样的?在不断思考的过程中,结合对公司近几年在软件研发方面的主要做法,逐步有一些粗浅的认识,在此将这些认识记录成文字,并期待能够与更多的伙伴碰撞,进一步完善这种认识,并逐步上升到理论高度,从而有利于指导具体实践。本Chat讨论的软件研发管理体系建设主要包括以下内容:1、对软件研发管理体系的一些概念认知2、什么样的软件研发管理体系适合我们的发展3、构建我们的软件研发管理体系应包含哪些内容

    适合人群:对软件研发管理体系有兴趣的人员

    对软件研发管理体系的一些概念认知

    研发管理是什么

    关于研发管理,百度百科中这样定义:研发管理就是在研发体系结构设计和各种管理理论基础之上,借助信息平台对研发过程中进行的团队建设、流程设计、绩效管理、风险管理、成本管理、项目管理和知识管理等的一系列协调活动。

    也就是说,研发管理首要一点就是要根据公司业务的发展确定相应的研发体系结构,之后按照这种研发体系结构组件一支高水平的研发团队,设计高效合理的研发流程,借助合适的研发信息平台支持研发团队高效工作,以绩效管理调动研发团队的积极性,以风险管理控制研发风险,以成本管理使研发在成本预算范围内完成研发工作,以项目管理确保研发项目的顺利进行,而知识管理使得研发团队的智慧联网和知识沉淀。

    纵观各类软件企业,由于自身所处环境不同,因此其软件研发管理模式也不尽相同,这其中有基于 CMMI 能力成熟度模型指导下构建的研发管理体系,也有基于 IPD 集成产品研发框架指导下构建的研发管理体系,当然也有一些目前不少小企业、互联网企业推崇的敏捷研发管理体系。不同的研发管理体系其实都会有相应的交叉部分,最终追求的目标都是能否适合企业的发展,给企业带来市场和财务上的成功。

    基于 CMMI 的研发管理

    CMMI 能力成熟度模型相信大家都不陌生,从一级到五级,覆盖了 22 个过程域,一般能达到 CMMI3 级别的基本上可以理解为各类流程、过程规则等已经达到一个较好的水平。当然,这里主要是指企业能够确实按照 CMMI 模型去实践,这种实践其实更适合于以瀑布式开发为主导的项目开发及产品研发模式。然则,实际上,大部分企业尤其是国内企业并不会严格按照这个模型去做,因为如果每一个过程域都不打折扣地执行地话,需要非常标准化的流程和强大的资源支撑,在这个讲究快速响应变化的时代其实是很难做到的,通常这个时候都会进行相应的裁剪,甚至会结合敏捷迭代等方面的模式,从而逐步形成自己公司的研发管理体系。

    基于敏捷模式的研发管理

    在这个快鱼吃慢鱼的互联网时代,对用户和环境越来越要求要快速响应。敏捷研发是当前不少互联网企业、中小企业推行的研发管理体系,主要理念就是敏捷迭代、小步快跑,快速改进、拥抱变化,用户参与等等。目前这方面也有不少公司除了有相应的敏捷研发体系之外,还有相应的成熟工具做支撑。例如,腾讯的 TAPD 敏捷研发平台就是其中的代表。通过对用户故事的层级拆分,实现对需求的有效管控和分解,从而确保持续迭代上线。

    敏捷研发管理在当前我们以业务为导向、项目为主的情况下,要全面实施尚有较大困难,当然并非是完全不能做,主要是当前所处的环境、所面向的业务、项目开发模式、人员结构等可能较难满足敏捷模式推行的需要。

    基于 IPD 的研发管理

    之前有简单了解过 IPD 产品研发管理体系,我认为其中的核心就是“四四四”模型,四四四代表了四大团队、四个流程、四个支撑体系。

    四大团队建设包括建立集成产品管理团队(IPMT)、建立产品市场团队(PMT)、建立产品开发团队(PDT)、建立技术开发团队(TDT)。

    四大流程建设包括建立产品战略流程、建立需求管理流程、建立产品开发流程、建立技术开发及平台开发流程。

    四个支撑体系建设包括建立项目管理体系、建立质量管理体系、建立绩效管理体系、建立成本管理体系。

    个人感觉,基于 IPD 的产品研发管理从整体上来看是一个相对重量级的体系,要落地执行往往需要从整个公司层面去整体考虑和推动。

    IPD 的理念和敏捷开发理念在本质上是基本一致的,比如以市场需求(用户价值)为核心,将产品开发看成一项投资(商业价值),通过 CBB—公共基础模块和跨部门的团队准确、快速、低成本、高质量地推出产品(各评审点的多团队参与和决策、通过各种技术改进提升产品开发效率和降低浪费、持续交付)。

    从理论上来讲,IPD 研发管理体系是一个较全面的体系,在当前我们的现状下也可能容易出现水土不服的情形,当然其中有一些好的做法是值得借鉴的。

    什么样的软件研发管理体系适合我们的发展

    从项目及产品的研发角度来看,发展到一定阶段的传统 IT 企业在研发管理上多数都是基于瀑布型的传统研发模式,由于项目的特点及人员的组织结构等因素,项目开发及产品研发的周期往往较长,较难适应市场快速变化的需要,也较难做到对客户的需求进行快速响应。而大部分的互联网公司及一些大厂,推行了敏捷研发模式,或者是在标准化项目管理和敏捷迭代两者融合上进行了相应的实践。

    那么,针对当前我们所面临的一系列问题,究竟什么样的软件研发管理体系在未来一定时期内适合我们的发展?我们需要重构我们的软件研发管理体系吗?我们有必要重构我们的软件研发管理体系吗?带着这些问题,我想主要思考几个方面的问题。

    能否快速适应未来业务的发展变化

    技术是为业务发展而服务的,因此在考虑软件研发管理体系构建时,第一个要考虑的问题就是我们的软件研发管理体系能否快速适应公司未来业务的发展变化。特别是在传统 IT 业务与互联网新兴业务加速融合的大环境下,信息化能力是越来越多客户的第一选择,因此在业务的快速发展方面需要更加强有力的技术支撑,而这个支撑的背后就是需要我们能够有一套能够快速响应变化、敏捷高效的研发体系,特别是能够有一定的前瞻性并支撑到老业务的快速转型和新业务的拓展。

    在业务出现较大波动时能否弹性伸缩

    另外一个问题就是,业务在发展过程中,受大环境等诸多因素的影响,定然很难一直都是呈现直线上升的发展趋势,这当中必然会有波峰波谷,只不过这个波峰波谷是大是小的问题。而我们面临的问题则是,当出现较大的波峰波谷的时候,我们的研发管理体系应该如何适应?特别是在软件业务处于相对低谷时,既能够继续保持对技术研发的持续投入,又能够在应用开发等方面有一定的可伸缩性,从而正确地处理好软件生产效益问题。这里面可能会涉及到中高层次软件人才的相对稳定和低层次软件人才的灵活流动等问题。特别是在我们业务多样化的背景下,不同业务单元的发展会有不同的发展路径,对软件研发能力的诉求也有所不同,那么这里面首先涉及到的一点就是如何有效平衡基础研发能力和行业研发能力。

    对于基础研发能力,个人认为应该是一个软件公司最内在的核心技术能力,往往很多时候基础研发工作很难像做行业应用开发那样立竿见影,但这项工作干得不好往往又容易成为行业研发能力的掣肘,这也是我们当前在人工智能、区块链等新技术潮流背景下总感觉难以发力的原因之一。

    对于行业研发能力,个人认为应该要从两个方面去考虑,一个是产品化的能力,其二才是应用开发能力。应用开发能力很好理解,就是目前我们这么多年以来一直在做的各种类型的项目开发,而这里面大部分的项目开发其实都是偏应用层面的开发。而产品化的能力则是最近一两年以来我们重新关注的一个内容,不过这条路上我们尚开始起步,还有很长的路要走,也还有不少坑要踩。个人认为,产品化的能力能否真正发展起来,其中很重要的一点就是要考虑如何与基础研发能力做充分融合。产品化不等同于应用开发,应用开发更多是定制化的开发,是客户导向的软件开发,通常面向的是一个或少数几个的客户;而产品化则是要综合行业、市场、客户群体、新技术等多方面因素的研发,是市场导向的软件开发,面向的是一个或多个的客户群体,甚至面向的是一个市场或跨界市场。

    新技术研发及成果转化能否跟上业务变化

    最近几年,新技术层出不穷,在软件架构的发展方面也非常迅猛,历经了单体架构、垂直架构、SOA 架构、微服务架构的演化。从我们公司目前的技术研发实际来看,我们有少量的项目/系统采用了 SOA 架构,然则大部分的项目/系统仍然采用的是单体架构和垂直架构。单从这一点来看,我们在技术领域的持续跟进及成果转化方面已然有落后趋势,这方面需要我们奋起直追才行。当然,出现如今这种局面固然由众多因素催生而成。比如,已有开发框架前端兼容性的问题最近一两年以来常常被诟病,诚然有它内在的好处,然则最近一两年以来,用户对系统的用户体验要求更高了,不再是单纯地满足于功能实现层面,而是开始追求良好的人机交互和界面展现。因此,这方面势必对新技术的要求更加迫切。最近几年,当不少团队都在往前后端分离走的时候,我们至今的绝大部分软件项目开发仍然停留在前后端分离之前,对不少用户界面展现要求高的软件项目而言,难以快速有效响应变化,同时对一些相对比较成熟的软件产品而言也难以做到接口自动化。

    因此,能否在新技术的研发上抓住正确的方向并加快研发成果转化,为业务的快速变化提供强有力的技术支撑,是一个摆在我们面前急需解决的课题。从当今新技术的发展趋势来看,研发架构方面,我们虽说不能完全抛弃传统的单体/垂直架构,但我们必须要往微服务架构方向迈进,除了与最新技术接轨之外,更重要的是如何进行业务解耦,沉淀行业积累,并反向推动人员组织层次的变革,提升软件生产效率,提高软件质量。

    除此之外,对于人工智能、区块链等新领域,也是需要综合业务应用场景打造适合我们自身发展的技术+业务融合之路。

    在标准化和敏捷迭代之间如何平衡

    标准化的软件研发道路固然有不少好处,有严谨的流程、规范的体系、固定的套路,当然更多的则是瀑布开发模式,虽然最近几年也陆续有迭代开发的模式,但更多的是被动式响应,而且这种迭代开发模式基本上是大阶段的划分,在每一个大阶段里面依旧是一个典型的瀑布开发模式,即历经需求分析、交互原型设计、UI 设计、Web 前端开发、程序开发、系统测试、部署实施等步骤,横跨周期往往较长,一旦发生需求变更,变动的代价过高。

    敏捷开发强调以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

    那么,问题来了,既然标准化项目管理模式下存在太多流水线作业及效率低下等问题,那么我们能够直接转向敏捷迭代模式呢?世界上万事万物都是对立统一的,个人认为不论是标准化项目管理模式还是敏捷迭代项目管理模式都有其擅长的一面。一方面,在现有的以项目为主导的软件开发体系中,标准化模式是我们一直以来的主要做法,也积累了不少经验做法;另一方面,采用敏捷迭代模式对于产品复杂不断有新需求加入等场景是比较适合的。所以这里面更多的是考虑如何更好地平衡标准化项目管理和敏捷迭代两者之间的关系。基本的思路就是结合标准化项目管理和敏捷迭代的优缺点进行适度裁剪,既能提高软件质量和软件开发效率,也能够保留一定的规范性和软件过程文档。例如,针对项目管理,通常是五个过程组:启动、规划、执行、监控、收尾,那么我们其实可以结合实际将规划提前,将监控贯穿于执行过程,这样就势必要求在启动时也要做好项目计划相关工作,在执行过程中抓住关注点并定期监控其执行情况,在收尾阶段做好项目回顾总结。

    不论采用何种模式,我们的根本目标就是达到更低的成本实现更快速、更可靠的交付。近年来比较火热的是 DevOps。DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

    因此,我们的软件研发管理体系中是否应该引入 DevOps,进而改善公司组织文化、提高员工的参与感、提高交付效率,我想这也是需要重点关注和考虑的。

    组织过程资产能否持续积累并盘活

    组织过程资产指一个学习型组织在项目操作过程中所积累的无形资产。组织过程资产的累积程度是衡量一个项目组织管理体系成熟度的重要指标,项目组织在实践中形成自己独特的过程资产,构成组织的核心竞争力。

    组织过程资产主要包括但不限于以下内容:项目组织在项目管理过程中指定的各种规章制度、指导方针、规范标准、操作程序、工作流程、行为准则和工具方法等。项目组织在项目操作过程中所获得的经验和教训,其中既包括已经形成文字的档案,也包括留在团队成员脑子中没有形成文字的思想。项目组织在项目管理过程中形成的所有文档,包括知识资料库、文档模板、标准化的表格、风险清单等。 项目组织在以往的项目操作过程中留下的历史信息。

    经过多年的软件开发,我们做了大大小小形形色色的软件项目和产品,也逐渐积累了一些行业化的软件项目,但总的来看,能够形成规模化效应的软件产品尚较为匮乏,更多的是以定制化开发为主的软件系统,当然也积累了不少项目经验。在这过程中,也积累了不少标准、规范、流程、模板等各类软件过程资源。然而,从目前掌握的情况来看,这些资源是分散的,不够体系化的,还谈不上真正意义上的资产,至少在价值的发挥上还不充分。况且,软件行业这几年的人才流动率明显加快,人员更替的速度以及未能体系化的过程资产积累,加剧了组织过程资产的盘活难度。

    那么,构建一个相对健全的、动态的、能够适应未来业务发展的组织过程资产库就显得尤为重要。这既是软件研发管理体系的一个重要组成部分,也是公司层面应该给予充分重视的。在组织过程资产库构建的过程中,其中很重要的一点就是如何让研发知识与经验成为公司的宝贵财产,这里就要充分考虑研发知识管理。知识管理把“隐形知识显性化”,是一项涉及知识库、过程资产、环境和交流等元素的整合过程,所管理的知识将作为一个团组织中过程资产的重要组成部分。对于软件研发而言,我们需要考虑怎么把业务人员和技术人员脑中的蓝图转化为显性知识。

    构建我们的软件研发管理体系应包含哪些内容

    软件研发管理体系的建设离不开几个关键要素:人员、技术、过程、资源,并在此基础上配以相应的管理手段。进一步来看,要构建适合我们自身发展的软件研发管理体系,需要着重考虑几个能力体系的建设,即:人员组织能力、技术研发能力、过程管理能力和资源建设能力。在这里插入图片描述前面也有针对“什么样的软件研发管理体系适合我们的发展”进行了一些相对粗浅的探讨,那么在考虑如何构建适合我们发展的软件研发管理体系之前,我想这里首先要明确一下我们期待构建的软件研发管理体系。我们公司的业务涉及众多行业客户,一直以来主要以定制化项目开发为主,同时也涉及运维服务,而在产品研发等方面则处于起步阶段,且在一段时期内项目、产品、服务将会长期并存,因此,个人认为适合我们的软件研发管理体系应该至少经历三个阶段,包括初期的标准化软件研发管理体系、中期的标准化与敏捷相结合的软件研发管理体系和后期的敏捷化软件研发管理体系。

    基于上述这样的考虑,正常来讲我们当前应该在标准化的软件研发管理体系中要做进一步强化,而考虑到市场的快速变化、技术的日益进步,个人认为我们当前就需要开始考虑标准化的与敏捷相结合的软件研发管理体系。为什么还需要考虑标准化的软件研发管理体系呢?主要是传统的定制化的软件项目开发依旧占据主体,且目前在这方面仍然有非常大的改进提升空间,然而标准化的模式常常是过于强调标准、规范、流程,开发模式过于线性化,因此需要引入敏捷开发模式。所以,我们又需要考虑敏捷的软件研发管理体系,这主要是为了更好地适应市场变化、更快速地响应客户需求,更好地提升软件开发生产效率。

    人员组织能力

    关于人员组织能力,个人认为有两个关注点:一是团队的发展,二是个体的发展。这两者是相辅相成、互相融合促进的。综合来看,人员组织能力的建设主要包括设立与公司战略、业务、技术发展相适应的组织架构,并配以构建相对完整可行的岗位体系和对应的人员考核体系,同时在团队建设等方面持续改进与提升。

    关于组织架构,当前的组织架构虽然解决了一些曾经的主要矛盾,但依然存在不少问题,突出的一点就是核心薄弱,即核心技术能力不强,仍旧需要投入大量的人力到各行业的应用开发中,当然这与我们一直以来承接定制化的软件项目开发不无关系。这是当前乃至未来一定时期需要解决的。

    同时,最近几年来的组织架构主要是以职能型组织架构为主,产品线为主导的研发模式尚不成熟,针对项目及产品的团队构建主要是以项目经理来驱动,在项目团队的组成方面固然与互联网的项目团队截然不同。在团队建设方面,需要进一步打通团队之间的壁垒,强化团队的整体协同作战能力。

    在岗位体系方面,特别是对人员的绩效评价方面,需要在已有的岗位体系基础上进一步考虑如何更好地执行落地,确保个人绩效目标与团队绩效目标的一致性和顺利达成。

    技术研发能力

    结合我们的实际,我认为在技术研发能力方面要考虑四个方面:一是技术预研,二是技术开发,三是产品开发,四是定制开发。在这里插入图片描述关于技术预研,通俗来讲就是:预研=预先+研究。这种预先研究通常来源于几个方面,例如来自外部竞争对手的迫使、来自客户或市场的需求、来自公司高层的决策等。为什么要做技术预研呢?这是扫清前行障碍的过程,这为后续展开总体设计、详细设计指明了方向,也是持续积累公司技术能力、保持与新技术同步而不至于脱离轨道的方式之一。

    关于技术开发,其实这里主要指与基础平台、公共组件、关键技术等方面的技术研发。另外一个方面来理解,技术开发是技术预研的延续,是在技术预研成果经论证的基础上开展的一系列能促进公司发展、业务发展、技术发展而开展的技术研发工作。

    软件产品是指向用户提供的计算机软件、信息系统、套装软件或在提供计算机信息系统集成、应用服务等技术服务时提供的软件,是通用的产品应用于某一行业领域而不是像软件项目一样为某一需求或者单位定制开发。

    软件项目主要为特定企业开发或者部署实施一套专用的系统,在进入项目开发之前需要与用户进行具体的交流和讨论,了解用户心中对于软件预期的样子,后经过招投标,签订合同,实施交付。

    关于产品开发,这方面我们尚处于起步阶段,尚缺乏一套完整可行的产品研发流程及最佳实践,需要摸着石头过河,也需要长期坚持不懈地努力。

    关于定制开发,当前主要是基于客户需求的软件项目定制开发,后续还会包括基于产品衍生出来的定制化开发。前面的这种方式是我们当前最熟悉的模式,主要面临的困境是两个:一是如何实现快速交付,二是如何实现成本可控,从而提升软件项目的利润。

    做项目侧重于在最短的时间内,按照客户的需求开发出操作敏捷,用户体验良好的软件。而做产品则侧重于市场驱动,时间相对充足,但要开发出有竞争力,有自身特色,且受客户欢迎的产品,要求功能响应速度快,操作简单,界面美观。

    技术预研+技术开发是强化内核的内在需要,定制开发是现阶段的生存根本,产品开发则是为未来发展铺路。

    过程管理能力

    过程管理能力主要包括项目管理、开发管理、质量管理和配置管理等几个方面,需要一套完整合理的流程贯穿整个过程。

    在项目管理方面,我们需要梳理当前项目管理体系的标准、规范、流程及相关实践,建立以过程为核心、以度量为基础、以人为本的可裁剪、受认可、能执行的信息集成项目管理体系,进一步规范公司的项目管理,提升项目群管理能力。结合项目管理的五大过程组(启动、计划、执行、监控、收尾),并结合敏捷迭代的思想,形成标准化项目管理与敏捷迭代相结合的具有实际指导意义的方法体系,同时将这套方法体系以指南性文件、规范性文件等形式传导到相关人员,确保可落地执行。此外,为加强过程管控、资源共享、工作协同,组建 PMO 团队,实现对项目群及重大项目的统一管控与决策支持。

    在开发管理方面,一是要落实统一的软件开发规范,包括架构规范、设计规范、UI 规范、编码规范、测试规范等。强化设计及开发关键环节的评审,包括对需求、概要设计、详细设计、UI 设计等的设计方面的评审,对测试用例等方面的评审,对代码的评审检查(例如利用 SonarQube 进行代码的自动检查等)及发布评审等。同时通过试点+逐步铺开的方式着力推进 CI/CD 的落地。

    在质量管理方面,进一步强化项目质量审计,逐步改进软件过程生产效能。而在配置方面,则加强对配置项的识别、配置空间的管理、变更控制等,规范软件开发过程,确保构建正确的系统。正确应用软件配置管理是开发高质量软件所不可缺少的。软件配置管理的过程是软件开发过程中质量管理的精髓。

    综合来讲,在过程管理方面就是要形成一套适用的软件研发管理流程,并配以相应的节点管控,让不同开发角色之间即各司其职又相互融合促进,从而促进软件开发自组织能力的逐步提升,充分调动软件开发人员的主动性和积极性。

    资源建设能力

    简单来讲,资源建设是软件研发管理体系中的支撑体系。资源建设主要包括了一系列的制度规范、工具、模板、过程资料及交付物(例如项目文档、源代码等),以及相应的经验、知识沉淀等。一是要适时梳理相应的制度、规程、标准、规范、文档模板等,形成标准化资源库;二是要对不同行业历年来的项目资料及源代码分门别类做好规划和归档管理,形成静态库(归档库)和活跃库,同时做好数据安全管理;三是要对软件研发人员及工作中的一些隐性知识转化为显性知识,并逐步构建软件研发的知识图谱,促进知识经验的持续积累与转化,并通过链条式、网状式等方式实现知识分享与传播,形成经验知识库。


    本文首发于 GitChat,未经授权不得转载,转载需与 GitChat 联系。

    阅读全文: http://gitbook.cn/gitchat/activity/5d77c547011a36207b5f8d91

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • 软件研发软件基础设施的建设

    千次阅读 2017-05-14 23:15:59
    决定团队效率的不仅仅是成员的技术水平,团队的组织形式,还有一个关键因素就是软件研发的基础设施因素,团队再牛技术再好没有合适的基础设施往往都是事倍功半。本文将介绍经过两年的积累我们搭建的一套零成本的软件...

    前言

    决定团队效率的不仅仅是成员的技术水平,团队的组织形式,还有一个关键因素就是软件研发的基础设施因素,团队再牛技术再好没有合适的基础设施往往都是事倍功半。本文将介绍经过两年的积累我们搭建的一套零成本的软件研发基础设施,特别适合于无法直接连接互联网的团队。毕竟互联网上已经有相当成熟的软件研发基础设施,而且对于小团队来说还基本是免费的,具体的请出门百度。
    顺便提一句由于技术栈不一样可能需要的基础设施略有差别,请根据自身情况自行裁剪。

    推荐基础设施

    我们目前已经构建了如下图所示的研发基础设施,基本满足我们团队的需求,此外我们也建立了资料共享的wiki,docker的镜像仓库以及适应特殊网络的持续部署系统。
    这里写图片描述

    版本管理系统

    说到基础设施,第一个要介绍的就是版本管理系统。若一个团队没有版本管理系统,那只能说明这个团队要么是一个人要么是属于石器时代。就算只有一个人,其实也需要版本管理系统来支持对比,回滚,分支。
    目前最流行的版本管理系统非Git莫属,强烈推荐使用Git来作为新团队的版本管理系统。但由于历史原因我们采用的是SVN,对于身处于局域网中的我们影响到还不是很大。
    这里特别提一下,使用SVN的话也能有一些好处那就是能尽量保证主线的一致性,因为其支线和合并功能并不是特别好使。
    我们使用的VisualSVN作为服务端,至于客户端就看个人喜好了,可以使用TortoiseSVN或IDE内嵌的,问题都大。

    Bug管理系统

    Bug管理系统也是支持研发的一大利器,哪个团队能开发出没有Bug的产品,与其说是没有不如说是不愿意看到,同时Bug管理系统记录缺陷及时进行修复。
    这里需要说明的是能修复的Bug就直接修复,不能修复的在录入,不要让Bug管理系统成为Bug的最终归属地。
    我们搭建的是BugFree,简单实用。

    持续集成系统

    持续集成系统是现代软件研发团队的标志,高效的团队离不开持续集成系统的支持。它能够自动构建,自动测试,自动部署产品,不断地确认产品的质量,及时发现问题和缺陷。
    我们采用的Jenkins作为我们的持续集成系统,免费开源功能强大,插件众多。
    持续集成系统需要版本管理系统的支持,还可以与后面的质量自动检查系统配合使用。
    需要注意的是Jenkins构建过程是十分消耗内存和CPU的应当为其找到合适的硬件,同时注意配置系统来及时清理构建产物,我们最开始的jenkins莫名的挂掉,后来发现可用空间为0,好几百G的构建文件。。。
    同时Jenkins支持集群,要是团队比较大,产品庞大可以考虑使用集群的方式来搭建持续集成系统。

    代码自动质量评价系统

    产品质量的另一大利器是代码自动质量评价系统,这个系统可以自动评价项目中的源码的质量情况,找到可能的缺陷和问题,以及不符合编码规范的地方。
    我们最开始使用功能的checkStyle等IDE插件来实现这个工作,后来发现了sonar系统,效果杠杠的项目的编码质量上了一个大台阶,技术债务大幅下降。
    需要注意的是清理技术要适度,过分的追求0债务往往是不合适的。

    依赖仓库

    我们采用的maven进行项目构建,同时我们又是身处局域网中,依赖下载我们的一个大问题,经过调研确定可以搭建nexus作为局域网仓库。
    需要注意的是,局域网内开发,在开始时会经常遇到局域网仓库没有依赖的现象,我们的做法是在外网通过项目的pom下载依赖后,再将外网的本地仓库同步到局域仓库。

    代码评审系统

    为了进一步提高产品的质量,我们每天进行代码审查,开始我们通过IDE来进行代码review有时候发现不是很方便,后来我们搭建了Upsources来辅助进行代码审查,效果还不错。
    一个意外收获是由于有统计信息的存在,大家提交代码的频率高了很多,同时SVN的严重冲突现象基本消失了。
    需要注意的是Upsources是商业产品,但小于10人的团队可以免费使用,怎么用大家都懂了吧。。。。

    其他基础设施

    除了上文的这些系统我们还搭建了doukuwiki来实现资料的共享、docker的镜像仓库来进行镜像的管理、finesse作为我们的验收测试系统。

    总结

    需要注意的是,随着技术的发展,基础设施始终处于一个动态的演化过程,基础设施是为了提高团队的工作效率,产品的质量。不能忽视团队和项目的实际情况,过于追求新奇的基础设施,对于产品或团队造成负面影响,这就是舍本逐末。
    对团队来说最重要的基础设施就是版本管理系统+持续集成系统+Bug管理系统,有了这些系统可以更高效的支撑团队的研发。
    磨刀不误砍柴工,愿大家都有一个好的平台。

    展开全文
  • 再谈软件研发管理体系建设

    千次阅读 热门讨论 2019-09-24 08:10:31
    在前面的文章中,我曾和大家分享了软件研发管理体系建设的一些见解,其中涉及对软件研发管理体系的一些概念认知、什么样的软件研发管理体系适合我们的发展以及构建我们的软件研发管理体系应包含哪些内容。...

    在前面的文章中,我曾和大家分享了软件研发管理体系建设的一些见解,其中涉及对软件研发管理体系的一些概念认知、什么样的软件研发管理体系适合我们的发展以及构建我们的软件研发管理体系应包含哪些内容。结合最近一段时间的思考,今天再次和各位朋友探讨一下软件研发管理体系建设这个话题。今天要谈的这个话题主要包括以下几点: 1、研发体系框架 2、人员组织能力 3、项目管理能力 4、技术研发能力 5、持续交付能力 6、运维服务能力 7、安全可控能力 8、资源建设能力
    在正式探讨该话题之前,简要谈谈最近的一些思考和想法,首要一点是社会的发展、业务的变化、技术的进步促进了研发模式的转变,同时也促进了研发内容的转变,例如从以往的单体架构向云化架构演变、从以往的PC端应用向多终端应用演变、从以往的传统应用向智能化应用演变,另一方面项目交付的发展方向也是发生了重大转变,从以前的注重过程标准、流程可控、需求明确和面面俱到向关注交付价值、交付效率、安全保密和过程可视的方向转变。 正是基于对上述这些认知和理解,让我对软件研发管理体系的建设有了一些新的思考,为此和大家一起分享交流。

    一、研发体系框架
    在个人看来,研发体系主要从标准方法体系、技术能力、组织架构、交付模式、服务客户等方面去分解考虑,并在中间通过人员组织能力、项目管理能力、技术研发能力、持续交付能力、运维服务能力、安全可控能力和资源建设能力等贯穿。研发体系框架示意如下图所示:
    在这里插入图片描述
    二、人员组织能力
    在人员组织能力方面,需要建立组织岗位体系框架,包括岗位标准库、培训规范、岗位胜任能力标准、岗位认证流程、岗位等级认证、岗位发展通道等。在岗位体系建设方面,可以考虑按职能类(如部门总经理、部门副总经理、行政助理等)、项目类(如项目总监、高级项目经理、项目经理、项目工程师等)、专业类(如技术总监、技术经理、开发经理、系统架构师、开发工程师、测试工程师、实施工程师等)的方式进行分类设置。同时,明确相应的岗位发展通道。
    关于组织岗位体系框架的建立,通常需要在公司层面来统筹考虑,因此需要和HR部门等诸多部门进行协同落实。 此外还需要建立绩效考核评价方法,针对研发人员的绩效考核评价方法在会对各岗位人员个人技能、综合素质及工作任务进行持续跟踪,并根据人员考核计划开展绩效面谈辅导,帮助全员改进工作方法、提升工作技能和工作质效。 培训作为人员组织能力的有机组成部分,需要强化培训和知识共享,通过建立内部培训体系,内部培训与外部培训相结合,多样化培训形式,将技术认证、培训积分等纳入技术序列晋升考评条件,强调培训的结果。

    三、项目管理能力
    项目管理能力方面,需要在标准化项目管理与敏捷迭代之间融合升华并逐步形成满足未来发展需要的敏捷项目管理能力,促进管理与工程维度相结合,应用最佳实践,从而快速、高质量交付可工作的软件。 除了项目管理体系方面的内容之外,还需要关注设计评审规范、应用开发规范、质量管理、配置管理等方面的内容。 对于涉及评审规范,需要针对需求、概要设计、数据库设计、详细设计、原型设计、界面设计等制定相应的评审规范,同时要对测试计划、测试用例等进行评审,除此之外,还需要有代码评审和发布评审等方面的规范约束。 对于应用开发规范,可以重点关注架构规范、设计规范、UI规范、编码规范、测试规范等。其中,架构规范方面是通过规范架构设计,来管控软件的技术合规性;对设计进行规范,包括如统一文档格式规范、功能设计要素、DFX设计规范、数据库设计规范等;UI规范是为避免使用者对不同系统进行多次学习、操作思维不连贯,从而提升操作效率;代码规范是为了代码能被更好的维护、扩展和更高的质量。包括代码编写规范和代码质量管理规范;测试规范则是规范测试过程,包括测试步骤、测试方法、测试工具、用例规范等。通过对测试进行合规性管控,提高产品质量。

    四、技术研发能力
    技术研发能力主要从应用开发能力、平台研发能力和技术创新能力三个维度考虑。
    在这里插入图片描述
    应用开发能力着重于考虑对各类业务应用的前后端开发支撑能力;平台研发能力着重于考虑对基础平台、公共组件、套件、工具等的研发提炼并让软件开发逐步具备搭积木能力;技术创新能力着重于紧跟前沿技术,特别是云大移物智方面的相关新技术的研发突破,以便于更好地为业务服务。 在技术研发方面,需要持续增强基础开发能力,并在平台化、产品化方面深入研发,拓展云计算、物联网、移动互联网、大数据、人工智能等方面的技术能力。

    五、持续交付能力
    在持续交付能力方面,不同阶段会有不同的做法。个人认为,在构建持续交付体系框架的初期,可以考虑从两个方面出发,一是统一软件开发平台,二是推行CI/CD。 统一软件开发平台,主要目标是把基础服务平台化、软件架构标准化,从而进行快速的开发和迭代,提高整个应用开发域的自主可控能力。
    推行CI/CD方面,主要是通过搭建自动化工具平台,构建持续交付流水线,实现端到端无缝集成。这里面可快速运用的实践包括代码构建自动化、静态代码扫描自动化、API接口测试自动化等。有关这方面的一些实践会在后续计划分享的敏捷和DevOps转型实践的有关文章中探讨。

    六、运维服务能力
    在运维服务方面,有两方面的考虑。首先是对于软件开发项目的生产运维,这方面可能会涉及到持续部署等方面的内容,更多会牵涉到DevOps中有关Ops的部分内容。另外一方面是针对常规性的IT运维服务及管理,这方面需要围绕提升IT服务交付质量打造以流程、规范制度、技术人才和工具共同支撑的运维服务管理体系。

    七、安全可控能力
    在安全可控方面,着重于将安全问题摆在凸显问题。这里面既有应用安全,也有过程安全,同时也需要考虑本质安全。应用层安全包括应用安全、内容安全、工控安全等。过程安全包括物理层安全、设备层安全和数据层安全,其中设备层安全包括物理安全、环境安全、设备安全等,系统层安全包括网络安全、软件安全等,数据层安全包括数据安全、身份安全、隐私保护等。

    八、资源建设能力
    资源建设能力方面着重于持续积累组织过程资产,包括持续积累在研发过程中所获得的经验和教训,其中包含显性知识(文字档案),隐性知识(员工脑子中的思想、经验)。组织资产积累除了显性知识,更重要的是把隐性知识显性化。
    在这里插入图片描述
    同时还需要持续构建知识库,推行各项制度、标准、规范、流程。

    以上是本次针对软件研发管理体系建设的进一步思考,欢迎各位朋友广泛提建议,可以做进一步交流、探讨。

    展开全文
  • 软件研发部经理岗位职责

    千次阅读 2018-11-16 11:48:05
    组织制定与软件研发工作相关的规章制度和工作流程,经领导审批后执行 根据企业总体规划和经营管理的需要,制定软件研发工作计划 做好部门日常工作安排,确保部门工作顺利开展 二、研发过程控制 密切关注国内外...

    一、确定工作方向

    1. 组织制定与软件研发工作相关的规章制度和工作流程,经领导审批后执行
    2. 根据企业总体规划和经营管理的需要,制定软件研发工作计划
    3. 做好部门日常工作安排,确保部门工作顺利开展

    二、研发过程控制

    1. 密切关注国内外科技信息,及时反映同行业发展动态,为企业领导做好参谋
    2. 进行软件开发的可行性分析,提出研发立项申请
    3. 根据研发计划合理分配任务
    4. 组织本部门员工开展研发工作,制定技术方案,进行技术攻关
    5. 制定产品研发费用预算,实施成本控制

    三、工作总结

    1. 组织产品研发成果的鉴定和评审
    2. 分析总结研发过程的经验与教训,制定并执行工作改进计划

    四、其他工作

    1. 指导、监督、培训、考核下属人员的工作,提高工作效率
    2. 完成领导临时交办的其他工作
    展开全文
  • 如今,一个APP也许几天就需要更新,一个应用也许一、两周就需要上线,一套新的业务系统可能从理念提出到系统上线也仅仅只会给开发团队不足一个月的时间,这就是移动和互联网+时代对软件研发交付的真实需求。...
  • 浅谈软件研发管理体系建设

    万次阅读 多人点赞 2018-12-08 21:40:52
    最近一段时间,我一直在反复思考一个问题:我们的软件研发管理体系应该是怎样的?在不断思考的过程中,逐步有一些粗浅的认识,在此将这些认识记录成文字,并期待能够与更多的伙伴碰撞,进一步完善这种认识,并逐步...
  • 软件研发部管理制度

    千次阅读 2019-03-29 11:40:44
    为加强对公司软件研发部门工作管理,缩短开发周期,提高软件开发质量,降低开发成本,提高开发效率,特制定软件研发部管理制度。 第一章、总则 为保证日常工作正常有序的进行,让开发中各个环节更紧凑,更可控,...
  • 软件研发部门的基础设施

    千次阅读 2016-04-14 23:25:14
    作者:朱金灿来源:http://blog.csdn.net/clever101 有时我在想一个问题:软件研发部门的基础设施包括哪些东西?先说说硬件吧,最容易想到的开发人员用的电脑,还有开发部门局域网、源码服务器、构建服务器和备份...
  • 我原来是网络的刚接触软件研发的领域没多久,不是很了解,希望大神指点下。 我想知道软件研发的流程怎么样的,怎么做的。。。还有封包拆包的详解! 谢谢!
  • 第2家,是华为,软件开发 华为的面试分为4轮,第一轮技术面,问了项目的东西,然后是写了一个 双向链表的插入操作 ,第一轮很顺利。第二轮是群面PK,12个人,分为2组。我们组的话题是社会决定个人的命运,对方组...
  • 关于软件研发的一些体会总结

    千次阅读 多人点赞 2017-03-21 11:33:01
    关于软件研发的一些体会总结    都说码农是个苦逼的群体,果真如此?的确,程序员在我的印象中没有多少人能够是正常下班的,大多是需要加班加点的,有些行业的程序员高峰期需要通宵达旦来保障产品的上线,不少...
  • 软件研发的工程师。现在人们工作和生活、娱乐全部与软件息息相关,会编程的工程师人数少,需求缺口大。程序员的职业发展一般都较好。岗位描述: 1. 专职从事软件研发工作 2. 多数时候会从事基于Revit的软件研发 3....
  • 面试邮储银行软件研发中心

    千次阅读 2019-10-16 14:21:27
    上周,我去面试了邮储银行软件研发中心,这是我第二次报名并进入面试了,可想而知,我第一次失败了。 我上午面试,面试完我托朋友帮我打听我的面试结果,结果是暂定通过..... 当时我还不明白暂定的意思,但是因为...
  • 浅谈如何做好软件研发团队的盘点

    千次阅读 2019-12-13 15:51:23
    临近年底,各类工作总结接踵而来,同时也要着手考虑下一年的工作计划,作为一名研发部门的负责人,做好软件研发团队的盘点工作,有利于分析团队现状,清理工作思路,明确未来发展。在此,本人将如何做好软件研发团队...
  • 漫谈软件研发特种部队之一

    千次阅读 2014-07-18 23:23:54
    回到本题,软件研发特种部队是指企业中承担高难度研发任务的精英小组,这样的小组人数一般在10人以内,甚至只有2-3人,但却能解决掉竞争对方几十人团队不能完成的任务,完成看似不可实现的目标。例如以前公司负责...
  • 完整软件研发流程

    万次阅读 多人点赞 2019-09-16 13:04:45
    软件产品开发流程: 下图所示的是一个软件产品开发大体上所需要经历的全部流程: 1、启动 在项目启动阶段,主要确定项目的目标及其可行性。我们需要对项目的背景、干系人、解决的问题等等进行了解。并编制...
  • 软件研发的间接成本为组织级成本,服务于整体研发活动,只要该组织还有软件研发活动,该成本就会发生,而不会因某个特定项目的结束或中止而不再发生。间接成本又分为间接人力成本和间接非人力成本。 间接人力成本 ...
  • 软件研发管理之版本管理

    万次阅读 2014-01-21 19:11:57
    版本管理是软件研发管理中比较容易忽视的一环,这当然是比较好理解的,因为版本管理毕竟和具体业务关系不大。其实,版本管理是很多更高级管理制度的基础,如果版本管理做得糟糕,类似代码审查一类的工作就很难高效...
  • 让你提前认识软件开发(39):软件研发之殇

    千次阅读 多人点赞 2014-07-23 20:06:18
    第3部分 软件研发工作总结软件研发之殇 在经典著作《人月神话》中,作者提出了一个观点:绝大部分的软件研发项目都不能按期完成。我工作也有一段时间了,发现这确实是一个不争的事实。我所从事的项目中,能按期按质...
  • 我们在对一个软件项目的研发成本进行估算时,除了要使用成本估算常用公式之外,还应该了解一下软件研发成本的构成及含义,这样更有助于我们系统的理解软件研发成本估算的内容及过程。 软件研发成本包含直接成本和...
  • 软件研发中敏捷开发和迭代开发的异同 在讲敏捷开发之前,先了解几个常见的软件研发模式 瀑布模型:瀑布模型的软件研发过程与软件生命周期一致,由文档驱动,两相邻之间存在因果关系,需要对阶段性的产品进行review。...
  • 您会让自己的小孩将来从事软件研发吗? 很多程序员,都已经30多岁了,过了而立之年,有了自己的老婆,自己温馨的小家庭,自己可爱的小孩。小孩也都是00后的。 “您会让自己的孩子从事软件研发吗?” 本来小孩的...
  • 软件研发的绩效考核漫谈一

    千次阅读 2017-02-27 14:40:30
    前提:最近公司老总觉得我们的软件研发部门比较懈怠,具体表现为进度严重滞后,研发团队从不加班,每日站立会都汇报任务完成阶段会议时任务全部滞后。 老大觉得这样十分不妙,所以就准备开展一次以进度质量为主的...
  • 企业管理软件研发能力普遍问题

    万次阅读 2013-09-08 15:12:00
    企业管理软件研发能力普遍问题一、产品经理1、普遍对客户现实不了解(没有调研方法、没有亲身体会感受、跑客户现场少) 对企业经营管理方法不了解(没有理论基础) 也没有方法和敏锐力洞察到需求本质和体系二、...
  • 软件研发人员考核的基本原则

    千次阅读 2015-02-25 15:55:32
    软件研发人员的考核一直是软件企业管理的难点,总结了进行软件研发人员考核的一些基本原则,整理出来与大家共享:   要体现公司的价值观  公司的价值观体现了公司认可什么类型的人员?要挽留哪些人?提倡做...
  • 软件研发管理者的技能结构

    千次阅读 2012-08-09 12:28:46
    管理软件研发,是一项极具挑战性的事情。要管项目和产品的进度和质量、要管人员的招聘和解雇、要关注人员的士气,适合给予薪酬上的激励、要关注客户的反馈意见、要给销售团队提供良好支持、要关注业界新的技术发展...
  • 软件研发企业需要什么样的软件测试工程师领测软件测试网专访北京数字政通软件测试部经理:凌灿畅谈软件测试行业发展凌灿经理进入软件测试这个行业有些阴差阳错,最初应聘的是单位的软件开发岗位,但公司当时比较缺...
  • 软件研发部门经理的核心工作

    千次阅读 2013-05-08 15:53:34
    在一个软件公司的组织结构中,软件研发部的部门经理,是非常重要的一个软件研发管理者。项目和产品的需求分析、设计、开发和单元测试,都是在其领导下完成的。软件研发部门经理的管理能力,直接决定了项目和产品的...
  • 第5讲 软件研发度量体系建设(上)

    千次阅读 2018-12-06 13:52:32
    现在企业对质量要求越来越高,又要求能快速迭代,作为研发团队,我们如何进行软件研发度量体系建设? 我们先谈谈度量的意义,主要体现3个方面 1)让目标更明确,比如让大家在项目开始时、研发过程中、项目结束后,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,221
精华内容 105,688
关键字:

软件研发