`
Rocky_rup
  • 浏览: 145368 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

闲聊软件开发过程

阅读更多
软件开发过程是连续的

太多开发人员受瀑布模型的影响太深了,习惯性的将开发过程做严格的划分。这样的划分多半是自欺欺人,软件开发过程主要是靠人的思维创造,而思维过程是连续的。切断一个连续的思维过程,这可能吗?

或多或少有完整项目经验的程序员,在接到新的项目需求时,很自然就会在脑海里浮现代码实现的轮廓,剩下的活就应该是动手编码了,用个成语来形容它就是“顺 理成章”。软件开发过程也应该顺理成章,不要再浪费力气去把这一个完整连续的过程划分需求、概设、详设、编码、验收啦。

此时,应该响起反对的声音了。

反方:“不划分怎么跟踪项目进度呢?”

项目进度是一定要跟踪的,但这样的划分对跟踪项目进度没有任何意义。因为在没有可运行的代码出来之前,需求完成度100%、概设完成度100%、详设完成度100%,这些数据根本不能真实反映项目的实质的进展,若你非要一个数据,我可以告诉你,项目进度为0。

反方:“等运行的代码出来,还用得着跟踪吗?”

当然不是等系统所有的代码出来啦,这都是瀑布模型惹得祸啊!项目可以按系统功能分批次计划实现,每个批次可视作一个迭代,每个迭代的结束点就是一个里程碑。在每个里程碑去跟踪系统功能的实现情况,此时功能实现数量占总量的比例才是有效的项目进度。


软件开发过程是迭代的

说到“迭代”,很多开发人员都会禁不住汗一把,有种近而远之的心态。还有人认为迭代就一个小瀑布,我曾经对此观点深信不疑,现在却感到惭愧不已。这种观点只能说明那个人还是没有打破瀑布的惯性思维的框框。

下面这个图相信大多数人都没有见过,即使眼熟也不见得看得懂。接下来,我们就来聊聊这个图。


这个图是RUP(Rational Unified Process)的一个核心概念图,它诠释了RUP提倡的过程精髓。图解如下:


  1. 图的横轴表示项目的生命周期,也就是时间轴;
  2. 横轴上划分了四个阶段,每个阶段又会有1~N个迭代,迭代个数的多少视阶段工作进展而定;
  3. 图的纵轴罗列了项目中可能实施的工作流程;
  4. 每个工作流程都在横轴上有一个波形图,用来表示它在时间线上工作量的起伏变化。
图中四个阶段很容易让人迷惑,我这就来简单解释一下:
  • 先启阶段 - 明确项目目标和范围;
  • 精化阶段 - 确立系统架构和技术方向;
  • 构建阶段 - 大规模并行实施设计、开发、测试;
  • 产品化阶段 - 产品验收、部署、发布。
反方:“哈哈,先启不就是需求,精化不就是设计,构建不就是编码,产品化不就是测试,这就是挂羊头卖狗肉,还是个瀑布”

“...来呀,把他给拖出去阉了...对付这类中毒太深的人,必须斩草除根!”


在RUP中,需求、设计、编码与测试不再是过程阶段,而是工作流程,从上图已经明确表明这些工作几乎存在于生命周期的每个阶段,只是不同的阶段工作量有多 有少而已。每个阶段的目标不一样,工作的侧重点自然不同,但上述四个工作流程却一个都不能少。通过各个工作流程的配合,实现阶段目标的演进,最终实现产品 化。

对事物从认知到理解,是一个由抽象到具体的演化过程。软件开发也是一样,起初是一些表象和问题,经过第一次迭代破除了表象和一些问题,但又产生了新的问题,在经过第二次迭代解决了第一次的问题,不过也会产生第二次的问题...

这样反反复复,从二维的角度看好像是原地踏步,但从三维的角度看,在理解事物本质的纵向上我们却又了很大的进展。项目范围是在一段时间内是相对稳定的,那 么迭代的周期也是固定。可从宏观上看,这个迭代是会持续下去的,就像office从97到2007,十年历经了多少迭代啊!迭代可以结束,有两种办法, 1)限定项目范围,这样问题域是有限的;2)终止项目。



收尾

再不收尾,估计没几个人看的下去了。不好意思,天马行空了一把,没办法,正如前文强调的
引用:
切断一个连续的思维过程,这可能吗?
还请大家勉强接受这个现实吧
分享到:
评论
9 楼 ozzzzzz 2007-11-16  
对于2的理解,你存在问题。首先你的这种方式很少见,也就是并发迭代方式,这种方式其实并不能算严格意义上的迭代。但是当项目中存在许多及其专门的人才,并且他们更加愿意只从事及其专业的工作的时候,才可能发生。此种方式管理和职责分配非常复杂,协调和整合也非常复杂,需要特别的技巧和策略才可以实施,因此我就不做深入介绍了。
本质上说迭代方式,应该叫增量开发的迭代实现方式。所谓增量开发,也就是围绕一个系统,不断的以增加新内容的方式进行开发:而迭代,则是按照固定的时间周期,将活动分配成一系列的小的流程,每一次流程都完整的经过一次流程,并且产生新的输入和输出。显然并发式的方式,并不完全符合。这里一层含义是,开发和测试等都应该是构筑程序的核心流程,也就是说它们都属于在一个迭代流程中必须存在的工作流,而不是说存在什么测试迭代和开发迭代。
同时请注意,迭代的过程是这样的。对迭代做计划,迭代1开始,迭代1结束,回顾和反馈迭代1,并修正迭代2或者3的计划,迭代2开始,迭代2结束,回顾和反馈前面迭代工作,并修正下次或者下下次迭代计划,。。。。。。。。
8 楼 ideafrog 2007-11-16  
非常感谢。
1.之所以问第1个问题,是因为很多人一个功能一次迭代需要彻底完成的,后面在回来进行,那是一个非常非常的特例。我很赞同你的意见。
2.你理解错我的意思了,可能是我没有描述清楚,我的意思是,多次迭代错开进行,前次迭代开始4天后,另一次迭代开始。还有种情况,开发与测试的迭代错开进行,这样是否可行,或者是否是常见的迭代情况。
3.嘿嘿。

4.马上去找书去。
7 楼 ozzzzzz 2007-11-16  
ideafrog 写道
o..z大大,请教关于迭代的问题:
1. 第一迭代完成的功能,后面的迭代能够继续吗?即某次迭代完成功能的部分?
2.后面的迭代是否需要等前面的迭代完成后,才能继续进行?
3.在CMMI的管理框架内(无法改变),如何进行更好的迭代?

1、这个问题问的不好。
首先迭代的计划有多种形式,存在以功能为导向的,也存在以程序结构为导向的。
因此你这个问题,可以看作前面迭代已经达成的目标,是不是可以在后续迭代中再次达成?
迭代的优势在于可以更好的支持增量开发,这个增量既可以使需求的增量,也可以是程序结构的增量。而显然增量的前提是你对需求做了分解,并且把功能也作了分解。而显然不对功能进行分解,就无法理解业务的细节,也无法将功能是否正确做验证。而迭代的计划更多的考虑是周期的均匀性,从而把一个大型的功能放到一系列小的迭代计划中去。同时你还会发现,随着后面工作的进行,对前期的工作会有新的认识,那么就存在一个修正和改造的问题。也就是说,需求导向的迭代式在每一次迭代周期中针对某些功能去构建,并且在今后的迭代周期中不断完善。

虽然一次就把事情做好很诱人,但是实际上又多少人能做到?

2、后面迭代的当然要等前面迭代完了以后才能进行。不过你要注意,我说的是完了,不是完成。实际上我们经常会发现计划是有瑕疵的,有问题,以至于是错误的,在这个时候还坚持严格实施计划是荒谬的。而实际上我想你的问题应该是,前面迭代需要完成的工作完成后,后面的迭代才能进行。其实这里还是一个迭代计划的策略问题,其实本着风险控制的原则及对客户需求关注的考虑,需要优先完成的功能顺序,是应该不断的调整的。即使前面迭代中被认为是重要的功能,但是一旦被判断为不重要,优先顺序就会下降,从而让位给更重要的功能去优先实现。也就是说下面的迭代应该总是完成最重要的部分。


3、本人无此类成功经验,因此无法给出有效建议。我想大概可以采取增大迭代周期的方式,来保证迭代计划在cmmi系统下的成功。比如项目在实施阶段分成两个迭代,当然如果想保住管理系统的稳定可以采取单一迭代周期的形式。嘿嘿。

我建议你还是去看看《敏捷迭代开发——管理者指南》,那里有对迭代的系统研究和介绍。
6 楼 ideafrog 2007-11-16  
o..z大大,请教关于迭代的问题:
1. 第一迭代完成的功能,后面的迭代能够继续吗?即某次迭代完成功能的部分?
2.后面的迭代是否需要等前面的迭代完成后,才能继续进行?
3.在CMMI的管理框架内(无法改变),如何进行更好的迭代?
5 楼 Rocky_rup 2007-11-16  
果然不出所料,一篇有争议的言论就是比平铺直叙的技术总结要更吸引眼球。

感谢上面4位高人的积极中肯的回复,你们观点给我启发
4 楼 ozzzzzz 2007-11-16  
我实际的我没看出楼主的意思到底是啥,大概楼主是看了一些RUP的书,发表的一席迭代学习阶段的感慨。
不过有些问题,我要说一说。
第一,敏捷的迭代是小迭代,包括RUP的迭代也不是很大的。而且每一个迭代普遍情况都是按照时间周期划分的,而且大多数情况都是会存在很多个周期。这个时候你把所有的迭代结束都按一个里程碑,这个是自找麻烦的办法,也是不明白里程碑究竟该如何设定的办法。同时也请注意,项目的进度跟踪完全可以不依赖里程碑,而采取其他方式。代码行和功能点,虽然陈腐和不合实际,但是这些都是可以去跟踪进度的。这样的东西都能拿来跟踪进度,那难道就不存在别的方法进行跟踪吗?
第二、很多情况下理解迭代是一些列的小瀑布,也未尝不可。而且就是楼主给的那个图,恰恰也可以说明在RUP的方式下,很多时候一个迭代就是一个小瀑布。
而且最后用office的例子,恰恰是很不合适的。因为这之中存在一个迭代周期过于不匀称的问题,而不匀称可以说是迭代计划失败和迭代实施失败的一个主要标志。

看了半天,楼主无非就是搞了半天也没有搞明白UP的一群里面的一个罢了。
最后还要说一句,并不是所有的项目进度都是蒙的,至少曾经存在和现在依然存在那么多模型就是干这个的。这里当然有好的有坏的,但是绝对不是拍脑袋蒙的,而且成熟的方法应该可以得到具体的数据。
说实在的最近很讨厌RUP,比CMM更甚。
3 楼 抛出异常的爱 2007-11-15  
celine 写道
1、这个程序员太强了
引用
或多或少有完整项目经验的程序员,在接到新的项目需求时,很自然就会在脑海里浮现代码实现的轮廓,剩下的活就应该是动手编码了,用个成语来形容它就是“顺理成章”。软件开发过程也应该顺理成章,不要再浪费力气去把这一个完整连续的过程划分需求、概设、详设、编码、验收啦。


2、第一次听说,RUP了之后,在可运行代码出来之前,项目进度是无法估算的
引用
因为在没有可运行的代码出来之前,......若你非要一个数据,我可以告诉你,项目进度为0。


3、好简单,比瀑布切的还厉害,每个功能都包括需求、设计、测试、部署吧,怎么才算是实现了呢?
引用
功能实现数量占总量的比例才是有效的项目进度。


4、什么叫产品?什么叫项目?产品的生命周期是怎么样的?项目的生命周期是怎么样的?

1.这样的程序员存在于大多数公司中,我非常恐怖让这样的人与客户去谈需求,恶梦。
2.所有的项目进度都是蒙的。。。。瀑布也一样。。。
几乎没有什么规律可言。只有加压让程序员向某个时间努力。。。。
3.同意,还是太肤浅了。有很多因素,有看的见的有看不见的。

4.PS:楼主的文章没有一点新东西。。。看着很没味道
2 楼 celine 2007-11-15  
1、这个程序员太强了
引用
或多或少有完整项目经验的程序员,在接到新的项目需求时,很自然就会在脑海里浮现代码实现的轮廓,剩下的活就应该是动手编码了,用个成语来形容它就是“顺理成章”。软件开发过程也应该顺理成章,不要再浪费力气去把这一个完整连续的过程划分需求、概设、详设、编码、验收啦。


2、第一次听说,RUP了之后,在可运行代码出来之前,项目进度是无法估算的
引用
因为在没有可运行的代码出来之前,......若你非要一个数据,我可以告诉你,项目进度为0。


3、好简单,比瀑布切的还厉害,每个功能都包括需求、设计、测试、部署吧,怎么才算是实现了呢?
引用
功能实现数量占总量的比例才是有效的项目进度。


4、什么叫产品?什么叫项目?产品的生命周期是怎么样的?项目的生命周期是怎么样的?
1 楼 hyhongyong 2007-11-15  
迭代开发是必要的。
但是这个软件开发是连续的从何说起?
lz想说明的问题是应用迭代的思想去开发吧,但是
“切断一个连续的思维过程,这可能吗? ”这个问题似乎说明不了迭代的必要性。
人的思维过程,有时是连续的,有时是跳跃的。就是瀑布开发过程,也不是从思维角度去考虑的,更多的是从分工角度。

相关推荐

    闲聊sdk相关

    在IT行业中,闲聊SDK通常是指为应用程序提供社交互动功能的软件开发工具包。这个压缩包文件名为“xianliao”,很可能包含了用于接入和整合闲聊功能的相关资源,特别是针对Cocos2Dx游戏引擎的接口和文档。Cocos2Dx是...

    27_闲聊几句AUTOSAR_基础软件供应商&开发工具链(二).pdf

    标题中的“27_闲聊几句AUTOSAR_基础软件供应商&...这些工具对于实现AUTOSAR标准的软件开发至关重要,它们帮助工程师高效地完成从系统设计、软件架构、配置、测试到标定的全过程,确保了ECU软件的质量和功能的完整性。

    最新软件开发、评测平台行业办公室管理制度.pdf

    一、软件开发、评测平台行业办公室管理制度的重要性 办公室管理制度是公司正常运营的重要组成部分,它确保了办公秩序的正常运转和提高工作效率。办公室管理制度结合国家相关法规和特定行业的实际情况制定,旨在规范...

    26_闲聊几句AUTOSAR_基础软件供应商&开发工具链(一).pdf

    典型的基于AUTOSAR的ECU软件开发流程涉及需求分析、系统设计、软件模块划分、配置、集成测试和验证。 基础软件供应商,如Tier2,扮演着至关重要的角色。由于AUTOSAR规范的复杂性和细致性,大多数一级供应商(Tier1...

    04_开篇之作—闲聊几句AUTOSAR(五).pdf

    AUTOSAR方法论旨在规范汽车软件开发流程,从整车架构的拆解到ECU层面的开发,以及基础软件的构建。 【关键词】: AUTOSAR, 开发方法论, 抽象系统描述, VFB系统描述, 软件组件, 基础软件 正文: AUTOSAR(AUTomotive...

    软件开发项目管理:7-软件项目沟通计划.pdf

    在软件开发项目管理中,沟通计划是至关重要的一个环节,它涵盖了项目的整个生命周期,包括项目启动、计划、执行、监控和收尾。本章主要探讨了沟通的概念、沟通方式、沟通计划及其重要性,并通过案例分析来具体阐述...

    基于pytorch训练一个小型的chatgpt闲聊程序

    PyTorch是Facebook(现Meta)开发的一个开源深度学习库,因其易用性和灵活性而受到广大开发者喜爱。 首先,要构建这样的聊天机器人,我们需要一个大规模的语言模型数据集。ChatGPT的训练数据通常包括大量的对话记录...

    02_开篇之作—闲聊几句AUTOSAR(三).pdf

    4. 对于新市场参与者:标准化流程和接口降低了技术门槛,鼓励更多公司参与汽车软件开发,它们可以选择特定环节进行深度研发和市场推广。 三、AUTOSAR软件框架 AUTOSAR软件框架由三个主要部分构成:Foundation、...

    局域网qq闲聊

    .NET框架是由微软开发的一个用于构建Windows应用程序的软件开发平台。它提供了一套丰富的类库、编程模型和运行时环境,支持多种编程语言,如C#、VB.NET等。在这个QQ局域网聊天应用中,开发者可能使用C#语言,结合...

    Python制作闲聊型AI机器人对话系统源码

    让我们逐步了解这一过程,以及如何利用提供的源码进行实践。 首先,Rasa是一个强大的工具,它为开发聊天机器人提供了全面的解决方案,包括自然语言理解(NLU)、对话管理(DM)和对话执行。在Python中,你可以通过...

    毕设&课程作业_基于百度plato-mini的中文闲聊API服务.zip

    5. **毕业设计/课程作业**:这个项目作为一个计算机科学的毕业设计或课程作业,旨在让学生实际操作,将理论知识应用于实践,掌握 API 设计、开发和部署的全流程,提升解决实际问题的能力。 6. **系统源码**:项目...

    13_闲聊几句AUTOSAR_BSW(四).pdf

    在AUTOSAR(AUTomotive Open System ...这些组件通过细致的层次划分和接口设计,使得软件开发更加模块化和可扩展,便于维护和适应不同应用场景的需求。对于汽车电子系统的开发者而言,深入理解和掌握这些知识至关重要。

    07_闲聊几句AUTOSAR_SWC(三).pdf

    在开发过程中,开发者使用像DaVinci Developer这样的工具配置Runnable的属性,完成设计后,代码生成器会自动生成模板代码。开发者可以根据这些模板编写实际的Runnable实现代码,以满足具体的功能需求。模板代码提供...

    08_闲聊几句AUTOSAR_RTE(一).pdf

    在初始化过程中,BswM调用Rte_Start函数启动RTE调度,OS随后按照预设的调度规则对Task进行调度。 例如,OsTaskInit_ASIL_B_Core0任务在激活后,进入OS内核等待调度。一旦调用条件满足,该Task就会被调用,执行相应...

    18_闲聊几句AUTOSAR_OS(四).pdf

    在开发过程中,如果对具体配置不确定,可以选择"AUTO"选项,让生成工具根据Runnable的配置自动计算并确定Task类型。这种方法可以帮助工程师避免错误的配置,同时简化了配置过程。 总的来说,理解Basic Task和...

    14_闲聊几句AUTOSAR_BSW(五).pdf

    DCM负责实现诊断过程中的通信协议,如UDS,以及常见的诊断服务,如0x10服务。DEM则处理诊断事件,包括事件的触发、记录和存储,与非易失性存储(NvM)模块交互。FIM根据诊断事件来控制SWC和功能,以适应不同级别的...

    09_闲聊几句AUTOSAR_RTE(二).pdf

    RTE是软件组件(SWC,Software Component)和底层硬件之间的桥梁,它负责管理和调度软件组件的执行,以及它们之间的通信。本文将深入探讨RTE与BSW(Basic Software)以及Port的关系。 首先,RTE不仅管理SWC的...

    阿里云在线聊天系统

    8. **安全性**: 在开发过程中,确保用户数据的安全至关重要。开发者需要对输入进行验证,防止SQL注入等攻击,同时使用HTTPS协议加密传输,保护用户隐私。 9. **可扩展性与性能优化**: 系统可能包含一些设计,以便...

    big-talk-app:跳过闲聊,直接回答大问题

    8. **持续集成/持续部署(CI/CD)**:使用如Jenkins或GitLab CI/CD来自动化构建、测试和部署过程,保证开发流程的顺畅。 9. **版本控制**:如Git用于代码版本管理,便于团队协作。 10. **前端技术**:虽然未提及,...

Global site tag (gtag.js) - Google Analytics