背景
至今,我在Motorola网络部工作超过了5年,所在的产品线也是采用统一软件开发过程和敏捷思想(但不是SCRUM)来组织软件开发活动的,但这5年多的工作经历从未引起我象微博上对于SCRUM话题的激烈讨论这样的思考。原因之一可能是,公司的流程已经很成熟了且形成了一种文化,不论怎样的新人进入公司,都只需按照流程按步就班的工作就行了。另外,公司的开发流程并不包含象SCRUM所要求的形式化内容,使得我在工作中没有机会体会和思考各种行为的利与弊。
 
与周围的同事相比,我自认为自己的工作质量和效率都很突出,这归功于我所掌握的知识、工具、方法和形成的思想。这四大块内容也是将要出版的《专业嵌入式软件开发 — 全面走向高质高效编程》一书的骨架。然而,最近微博上对于SCRUM的讨论使我意识到,我的焦点更多地放在了工程师身上,而忽视了从组织的角度思考如何高质高效地从事软件开发工作。即使这样,我仍持这样一种观点:不论是怎样的开发方法,一定要最终从基层工程师身上找到着力点,因为软件产品的最终质量是他们“码”出来的。一个方法论是否真的有效,得看方法论能多大程度地帮助工程师高效地开发出高质代码,且该方法论被工程师所接受。注意,是“帮助”他们而不是“规范”他们。
 
对于SCRUM我还是一个门外汉(注:Motorola网络部被NSN收购后也要求使用SCRUM,希望到时能写些文章与大家分享所得与体会),但这并不妨碍我思考从事高质高效软件开发我们到底需要什么。
SCRUM是银弹吗?绝对不是,因为她只是一个很粗的开发流程框架,仍无法消除开发活动中的人为因素(但可以减缓)。如果SCRUM不是银弹,那将SCRUM引入到团队中时我们应如何本地化呢?
 
模型
纵观软件行业开发方法论的发展,大多关注于开发过程。这一点从瀑布模型、统一软件开发过程、CMMI和现在的敏捷软件开发方法无一例外。开发工程化的思想深深地影响着软件行业对开发方法论的探讨,但业内也以意识到了软件开发不只是工程,它更包含个体心理、行为等难以工程化的内容。在这里,我想抛砖引玉地提出自己的一个能力模型,来帮助思考我们到底需要什么、走向哪。该模型存在抽象与具体两大层次。让我们先从抽象模型开始,如图1所示。 
图1
 
从面象对象的角度来看,抽象模型是基类,而具体模型则是其派生类。高质高效的软件开发工作需要涉及多个部门的各种岗位,各岗位的能力模型应在抽象模型的基础上进行具体化。为了便于理解,图2所示了我所认为的软件开发部门的能力模型。

图2
意义
引入这一能力模型的意义在于:
    1) 让我始终牢记实现高质高效的软件开发是所有活动的根本目的。
    2) 帮助我们在探索软件开发方法论的道路上时刻关注我们需要什么,并以此了解软件开发方法论解决了什么问题,哪些问题又是开发方法论不能解决的。
    3)为人力资源管理提供一定的框架。引导组织思考:我们需要招聘什么样的人?人员培养的着力点是什么?
结束语
这个模型是我花了不到一天的时间想出来的,所以一定很粗糙。个人认为,这个模型不应只是一种文字游戏的玩法,更应包含一定的实证研究。比如,模型中的关键要素又是什么?各要素的比重是多少?但无论如何,我希望这样的模型不会让我们在诸如SCRUM这样的探讨中迷失软件开发活动的本原,这是我写这篇文章的根本出发点。
 
最后,欢迎读者提出自己的见解和参与讨论。我的微博是@杭州李云(新浪)或@杭州李云(51CTO)。
 
Q&A
1. 软件设计是质量之本,为什么在软件开发工程师模型中没有体现?
答:设计能力应体现在工程师的抽象与概括能力上,这两者在模型中已涵盖。
2. 在软件开发工程师模型中为什么没有体现建模的重要性?
答:建模应是软件架构师的工作内容。建模在模型中可分解为“抽象 + 概括 + 工具”,它其实是设计的一种表达形式。

高质高效软件开发组织能力模型相关推荐

  1. 软件开发V模型--解读

    RAD(rap application development),就是软件开发过程中的一个重要模型,称为快速应用开发模型.其模型构图形似字母V,所以又称V模型.       他通过开发和测试同时进行的 ...

  2. 高效软件开发团队的特征

    高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作的基础之上的,成员共同的迎接挑战.有效的计划.协调和管理各自的工作以至完成明确的目标,高效的开发团队具有如下特征: 1. 具有明确且有挑战性 ...

  3. “高质高效嵌入式软件开发”的企业内训开始

    上周末,大连某日资企业邀请我培训中心进行"高质高效嵌入式软件开发"的企业内训.培训由李老师进行讲授. 企业技术人员对该课程求知若渴,一直期盼着这次培训.这种强烈的学习欲望,在课堂上 ...

  4. 敏捷开发修炼之道 (一)高效软件开发之道、态度决定一切

    第1章:敏捷 - 高效软件开发之道 在软件开发领域里,在项目研发过程中出现的需求变化和挑战就是你在冲浪时要应对的海浪 - 它们从不停止并且永远变化,像波浪一样.在不同的业务领域和应用下,软件项目具有不 ...

  5. 汽车电子行业开发者的内功心法:汽车软件开发V模型

    目录 1.V模型概述 2.V模型实施 2.1.系统需求分析 2.2.软件需求分析 2.3.软件架构设计 2.4.软件单元设计和软件实现 2.5.软件单元测试 2.6.软件集成测试 2.7.软件系统测试 ...

  6. 详解AUTOSAR:汽车软件开发V模型过程中AUTOSAR工具链的应用(工具篇—1)

    目录 1.PREEvision 2.vVIRTUALtarget 3.DaVinci Developer 4.DaVinci Configurator 5.CANoe 6.VT System 7.CA ...

  7. 软件开发常见模型(瀑布模型、V模型、W模型、敏捷开发模型)

    软件开发经典流程图 一.瀑布模型 模型图 定义:瀑布模型(Waterfall Model)是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品. 地位:这是一 ...

  8. 软件开发传统模型——瀑布模型、原型模型、增量模型、螺旋模型、喷泉模型

    软件开发模型: 定义: 软件开发的全部过程.活动和任务的结构框架,通过该模型能清晰.直观地表达软件开发全过程,明确地规定要完成的主要活动和任务,它奠定了软件项目工作的基础. 其中最为代表的就有此五类模 ...

  9. 软件开发、软件设计培训笔记

    一.代码质量的提高培训笔记(2013.11.29): 部分内容摘自网络: 1.      struct:注意成员排列顺序. 2.      #pragma pack(1) :指定按1字节对齐. 3.  ...

最新文章

  1. C++ .h(头文件) 与 .cpp(源文件) 的使用
  2. Python 连接 redis 模块
  3. VLFeat库中加extern “C“
  4. 中的stop_谈谈stop容器
  5. server端推送消息机制
  6. DFB [02] 基础和相关的非常用的几个链接
  7. 企业如何实现大数据分析平台
  8. git安装后设置用户名和密码
  9. 编程之美——题目2 : 回文字符序列
  10. Emmet 简写语法
  11. android 动态设置priority,Android属性之android:priority
  12. 在unity中添加System.Windows.Forms引用和注意事项
  13. 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
  14. Numpy安装、升级与卸载
  15. 【毕业设计】基于树莓派的指纹识别考勤系统 - 单片机 嵌入式 物联网
  16. openGL之API学习(七十八)SPIR-V
  17. 用vim解压各种格式
  18. docker部署内网dns解析服务(coredns方案)
  19. 企业如何用InfBox架设自己的内部即时信息IM服务器
  20. 2018宾汉姆顿大学计算机排名,2020年宾汉姆顿大学QS世界排名

热门文章

  1. 【转】ABP源码分析四十五:ABP ZERO中的EntityFramework模块
  2. 【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析
  3. 第八节:Task的各类TaskTResult返回值以及通用线程的异常处理方案。
  4. Spring AOP(通知、连接点、切点、切面)
  5. 我们可以用SharePoint做什么
  6. TFS(Team Foundation Server)敏捷使用教程
  7. chrome webdriver_(最新版)如何正确移除Selenium中的 window.navigator.webdriver
  8. int转换为cstring_PostgreSQL 隐式类型转换探秘
  9. Idea Maven报错找不到程序包
  10. Hexo 博客本地预览报错:Error: listen EADDRINUSE 0.0.0.0:4000