从作坊到工厂_工厂和作坊的本质区别

从作坊到工厂_工厂和作坊的本质区别作坊离工厂究竟有多远(二) smilemac 1.   软件大规模定制 在这个市场越来越起主导作用,定制的产品广受欢迎的时代,软件是否也可以做到大规模定制呢?首先看什么是软件的大规模定制。规模与产品的开发速度有关,如果一个定制的软件能够在一个月内交付,如果定制软件的交付数量可以与程序员数目成正比,我们可以将这种开发模式叫做大规模定制,如果这种结果能够出

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

作坊离工厂究竟有多远 (

 

smilemac

 

1.    软件大规模定制

 

在这个市场越来越起主导作用,定制的产品广受欢迎的时代,软件是否也可以做到大规模定制呢?首先看什么是软件的大规模定制。规模与产品的开发速度有关,如果一个定制的软件能够在一个月内交付,如果定制软件的交付数量可以与程序员数目成正比,我们可以将这种开发模式叫做大规模定制,如果这种结果能够出现,那一切将是多么美好!但这种开发模式可行吗?大家还记得那句著名的话吗:给再多的女人,生一个孩子也需要9个月。那么,这个答案应该是否定的。但是我们如果将软件生命周期用显微镜观看,也许会发现,我们不能够提高第一个版本的交付速度,但我们也许有可能提高第二个,第三个版本的交付速度。我们先看看软件的生命周期曲线:

 

从作坊到工厂_工厂和作坊的本质区别

 

图中表明的是这样一个事实,任何体系结构均有一个扩展的上限,一旦达到这个上限,软件将变得难以重构,这时必须重新开发新的体系结构,有时这种开发可能会完全coding from scratch.

 

而基于每个体系结构的重构周期取决于该体系结构的设计是否有比较强的灵活性以及包容性。这也说明了体系结构设计的重要性。然而,需要注意的是,体系结构并非只有一层,一个软件的功能事实上可以划分出若干闭包,也就是说,不同功能之间的关系并非杂乱无章或随意组合的,如果去研究它,你会发现有一些功能是相关的,另外一些功能也是相关的,而不同组功能之间相关程度则弱一些,通过对其分解,可以得到若干个闭合的子空间,而对每个子空间作正交分解,可以得到若干稳定灵活的子框架。这说明了什么呢?说明即使每一次小规模重构定制版本,在定制开发新功能的时候,也可以丰富整个体系结构,为后面的重构活动修桥铺路,这是即使小的重构活动也可以产生的边际效益。

 

这样的生命周期,也体现了软件的这一商品的盈利方式,即高沉没成本,低边际成本。第一个版本,或重新开发体系结构的成本很高,但每一次小的重构则成本很低,但条件是什么呢,就是重构必须快。如果软件开发不以这样一种盈利方式来进行,则即便能存活一年半载,也可能难以为继,所以,如果你不能实现大规模定制,那就最好只作产品,而不要定制。

 

如果我们能真正实现上面一种软件生命周期,那么软件大规模定制则并非空想。但是这里依旧有一个组织架构问题需要解决,这正是下面要阐述的内容。

 

2.          非对称双螺旋组织架构

 

在现实世界中,定制软件的开发组织往往是针对每一次定制需求成立一个项目组的方式来应对,这是一种单层的结构,其缺点是显而易见的,项目组既是负责产品未来发展的唯一组织,也是直接应对当前客户,需要对当前客户负责的组织,这二者之间是有矛盾的。尤其当不同用户的要求有极大差异甚至截然相反的时候,项目组在疲于奔命,产品也在摇摆不定,这样每次的重构周期和产品质量都将是无法预测也无法管理的。那么如何解决这样的一个矛盾呢?

 

效率来源于分工,定制开发与长线规划是价值取向完全不同的活动,理应交给不同的人去做。我们再增加一层组织,叫做产品组,她专门作长期的产品规划和开发,但她又不是闭门造车,而是与项目组构成一种类似双螺旋结构的互动关系,但这种双螺旋是非对称的。

 

从作坊到工厂_工厂和作坊的本质区别

 

项目组在产品组开发的基础上为用户定制开发,而产品组的工作包括:1)将项目组作的有较好应用前景或对基础架构有较好加强作用的代码集成到基础架构中;2)基于来自项目组的反馈,预测未来可能有用的功能,基于此预测作日常的常规开发;3)或对来自项目组的预研要求提供支持。

 

这样,产品的方向及保证是来源于市场,也可保证以相对稳定的方式发展。只是这个产品并非最终产品,而是最终交付给用户的定制产品的开发基础。而最大的好处在于她最大限度的保证了一个稳定的可预测的产品质量。

 

软件到底什么最重要?当前版本最重要,那么是否就不考虑未来了呢,也不能,那么就都去做吧。其实这也是很多公司管理层与程序员之间的分歧,每个程序员都希望自己的代码漂亮,而漂亮的标准是什么呢?是耦合度低,可重用,可扩展性强,但很少程序员认为,漂亮的标准是可靠稳定。学校在培养程序员的时候也并没有告诉,当前版本的质量才是第一位!

 

<节二 >

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194914.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 1DCNN理解

    1DCNN理解1DCNN理解其实这更像一个滑动窗口

  • Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

    Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包&gt;&gt;&gt;&gt;&gt;©Copyright 蕃薯耀2017年3月6日http://fanshuyao.iteye.com/ 一、Linux快速部署War包操作,暂时是最简单的操作1、先关闭Tomcat/home/java/tomcat7/bin/shutdown.sh 2、进入War包存放目录(可以通过工具:SSHSecureShellClient把War传到Linux服务器)cd/home/projec

  • java 旅游管理系统

    java 旅游管理系统旅游系统设计分为前后网站和后台管理系统,功能点包含旅游景点信息分类展示、景点详情(地理位置、特色景点概述等)、下单预订、记录分享等功能。需搭建ftp服务:https://blog.csdn.net/weixin_44989660/article/details/111280276一:前端子系统功能需求分析1.游客注册登录功能模块:游客预定景点等操作需要先将账号密码进行注册,根据注册的账号密码登录到前端子系统中对功能模块进行操作。2.预定景点功能模块:游客遇到自己喜欢的景点信息后,可以通过点击预定景点按

  • makefile中的include的作用(makefile中的变量)

    1、wildcard:扩展通配符2、notdir:去除路径3、patsubst:替换通配符例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$mkdirtest$cdtest$mkdirsub在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2个文件建立一个简单的Makef

  • WireShark抓包后数据分析

    WireShark抓包后数据分析在分析数据之前,我们先了解一下我们传输数据的结构体系,如下图:这是两种体系,我们常知的一般都是TCP/IP体系结构。TCP/IP体系架构分析不难发现,TCP/IP体系中包含着很多我们熟悉的协议,比如说:http、smtp、https等。而我们人(使用者)是站在应用层之上的,我们想把数据上传或者说发送给别人,就要通过一些应用,如:QQ、微信、百度网盘等。然后就经过一层层加密(在数据包前加个“头”),一层层的传递。Frame层(物理层)分析这是我自己抓包的一个例子,我从我自己的QQ发了一条消息给朋友,

  • pytest的assert_assert中文

    pytest的assert_assert中文前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号