软件开发模型之装修篇

经历了 N 次项目的 delay 和失望之后,经常反思,为什么我们会这样?为什么我们天天加班还会这样?为什么我们在借鉴了一堆先进的软件开发模式之后还是这样?为什么一群白领做出来的东西还经常让工人们挑出一堆一堆问题?难得这就是我们的宿命?

相信很多朋友都碰到类似的问题,很多时候我们把原因归咎到需求变更太大、项目进度太紧、项目组某某人水平不行、用的技术框架不对、项目经理的管理水平不行等等原因。诚然,上述因素对项目的最终产出物是有很大影响的,但是为什么需求变更了对项目的进度和成果会有这么大的影响?为什么项目进度可以在与客户、与领导协商的时候可以不断地被压缩、很难科学地评估项目的进度?为什么项目个体的水平对整个项目影响会很大?为什么我们要等到 deadline 的时候突然意识到我们有如此之多的问题?

最近很多朋友在讨论买房、装修的问题,我才突然意识到,与建筑行业相比,我们软件工业还处于非常原始的阶段。建筑业中上百人的施工工地可以井然有序,而我们软件工业中到了几十个人的项目团队的时候就出现这样那样的问题;反而是一些小项目, 3 、 4 个人做出了的产品可以受到客户的好评,但是 3 、 4 个人作坊式的工作方式建不了鸟巢、水立方。 我们生活的房子,从通常意义上来说,大概经历了市场调研、设计规划、地基、建设、装修、物业服务 6 大阶段;比较瀑布模型需求分析、设计、实现、测试、安装、维护的 6 个阶段,我们缺少装修的这么个阶段,有过装修经历的朋友应该都知道,装修不是一个简单的几个星期就可以完成的工作;比较 XP 的简单需求调研,简单设计,回馈,重构的开发模型,我们发现 XP 对开发人员的要求非常高,类似于要求建筑业的民工既要懂图纸设计、又要懂地基怎么样才能牢固、还要懂室内装修设计等等,从这个意义上来说,我们的 XP 出来的软件产品基本上可以到达名家大师的全手工别墅的档次,离工业化的道路还很远很远。

瀑布模型已被很多案例证明在需求分析方面存在比较大的问题,通常客户一开始只知道我要这么个东西,并不能精确地描述他们需要的究竟是什么。这样导致我们的需求分析阶段非常长,比较规范的做法最后可能一个小系统会产生上百页的需求文档,并且在软件原型基本完成的时候可能又会有比较大的调整。然后就是设计阶段,也非常冗长,详细到类、方法等等,这两个阶段占用项目的大约一半的时间,最后留给开发的时间、测试的时间还不到 50% 。参考建筑业的周期,实际上最长的时间段是建设和装修阶段。市场调研和设计很重要,但是基本上只到了平面图、预算、工期的规划等问题,除了样板房,不会把家里电视背景墙是什么样,沙发用什么等等考虑进去,这些都是后续在装修阶段通过装修公司与业主沟通后才确定,开发商交给我们大部分时候都是毛胚房。这样做的好处是把能够工业化,批量生产的部分和需要客户参与定制的部分分离开来。

软件业能不能参考这个模式?把建设和装修阶段分离开,形成以下阶段:

1) 相对比较简单的需求调研,确定客户基本的需求;

2) 相对简单的设计规划,制定项目的规范、整体模块划分和要求(类似于建筑的户型)、对外的接口(类似与建筑的电梯、水、电、气等)和项目的进度预算;

3) 编码阶段,编码阶段的产物应该是稳定的、健壮的、具有良好扩展性的实现了基本功能的产品(类似与框架结构的房子,而不是砖混结构的房子);

4) 装修阶段,用户参与的,进行产品定制、用户体验的相关的开发和完善;

5) 后期维护阶段

通过上述阶段的划分, 1 、 2 、 3 阶段的进度是可控的,并且第 3 个阶段的工作应该是可以工业化的,不需要太多的用户参与过程,第 4 个阶段需要与用户密切配合。

( 未完待续 )

软件开发模型之装修篇相关推荐

  1. 软件开发模型-瀑布模型、V形模型、原型模型、增量模型、快速开发、敏捷模型

    文章目录 0x01 边做边改模型 0x02 瀑布模型 0x03 V形模型 0x04 原型模型 0x05 增量模型 0x06 螺旋模型 0x07 快速应用程序开发模型 (RAD) 0x08 敏捷模型 0 ...

  2. 一、软件/软件工程/软件开发模型概述

    文章目录 一.软件 1.软件的定义 2.软件的分类 3.软件危机 3.1软件危机的主要问题 3.2软件危机产生原因(6点) 二.软件工程 1.软件工程定义 2.软件工程目标(6点) 3.软件工程研究的 ...

  3. 软件工程与软件开发模型、软件开发方法

    什么是软件工程? 软件工程一直以来都缺乏一个统一的定义. IEEE给出的定义是:软件工程是:1.将系统化的.严格约束的.可质量化的方法应用于软件的开发.运行和维护,即将工程化应用于软件:2.在1中所述 ...

  4. 2022年下半年 系统架构师,论文-软件开发模型(Software Development Model)

    软件开发模型(Software Development Model)是指软件开发全部过程.活动和任务的结构框架,软件开发过程包括需求.设计.编码和测试等阶段,有时也包括维护阶段.软件开发模型能清晰.直 ...

  5. 软件开发模型、软件设计模式、软件架构风格

    一. 软件开发模型 1. 瀑布模型: 结构化方法.开发阶段性. 需求明确.文档齐全. 风险控制弱 .前一步的错误会延申到后一步: 2. 原型开发模型: 迭代方法. 有两种开发方式,分别是原先开发和目标 ...

  6. 软件开发模型/原型法/瀑布模型/螺旋模型

    软件开发模型(Software Development Model)是指软件开发全部过程.活动和任务的结构框架.软件开发包括需求.设计.编码和测试等阶段,有时也包括维护阶段. 软件开发模型能清晰.直观 ...

  7. 2D_Detection-模型加速(网络篇)

    layout: post title: 2D_Detection-模型加速(网络篇) date: 2021-09-04 16:34:34.000000000 +09:00 categories: [算 ...

  8. 软件开发模型介绍、总结归纳

    软件开发模型(SoftwareDevelopmentModel)是指软件开发全部过程.活动和任务的结构框架.软件开发包括需求.设计.编码和测试等阶段,有时也包括维护阶段. 软件开发模型能清晰.直观地表 ...

  9. 敏捷软件开发模型--SCRUM

    一 什么是Scrum? Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种,在最近的一两年内逐渐流行起来. Scrum的基本假设是: 开发软件就像开发新产品,无法一开始就能定义软件产品最 ...

最新文章

  1. 想知道什么是“成员变量”吗?
  2. Linux基本命令——vi文本编辑器
  3. word2013 blog test
  4. 成功解决TypeError: ‘tuple‘ object is not callable
  5. struts2配置文件中action的name属性
  6. java如何用键盘输入_java中如何从键盘输入(附代码)
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试工程经济10202k2
  8. 为什么我要重新开始数据科学
  9. IntentService解析
  10. JavaScript——面向对象之继承(原型对象)与多态(重载、重写)
  11. Library not found for -lPods-Unity-iPhone 的解决方法
  12. mysql ssl编译_MySQL8开启ssl加密
  13. 计算机一级选择题电子档,计算机一级考试选择题
  14. latex编译错误尝试生产pdf
  15. 计算机如何重装网络,电脑无网络怎么重装?离线一键重装win7系统教程
  16. 计算机cpu电压,怎么样调电脑cpu电压啊
  17. Unity3d之AR小游戏
  18. 167. 两数之和 II - 输入有序数组(java)
  19. 什么是数据源?如何配置数据源?
  20. laravel view

热门文章

  1. 【PKI技术】第一弹 — 什么是PKI?
  2. 整理的selenium WebDriver提供的8种元素定位方法
  3. 【软件测试】2021年软件测试领域常用工具总结(1)-抓包工具与单元测试工具篇
  4. 重力加速计低通滤波算法——安卓开发文档
  5. 修复gnome3下chrome鼠标主题不正确的问题
  6. 2021年煤矿采煤机(掘进机)操作考试及煤矿采煤机(掘进机)操作模拟试题
  7. sae中如何rewrite
  8. 边缘化你必须知道的一件事!(FEJ知识点总结)
  9. 我如何在1年内转行成了一名软件工程师
  10. iOS_系统原生分享