【公众号@ “项目管理研究所” 将会第一时间更新文章并分享《行业分析报告》】
归档于软件项目管理初级学习路线
第七章 软件项目进度计划
《初级学习路线合集 》
大家好,这节我们学习软件项目管理----进度计划编排--时间压缩法。
时间压缩法是在不改变项目范围的前提下缩短项目工期的方法。
这边介绍两个方法:
这个方法可能增加成本,但是我们希望增加的成本最小且换来项目时间的压缩。
那么赶工时间与赶工成本是什么关系呢?如下图一样,一般项目经理希望多压缩一些时间,成本少增加一点,但这是一个美好的愿景。

关于压缩时间与成本的关系,有不同的学说,我们这里介绍两个方法。进度压缩单位成本方法,进度压缩因子方法。

进度压缩单位成本方法也称为线性关系方法,他有严格的前提,只可以在一定的范围内进行压缩关系,在正常历时和可压缩历时之间是线性关系,

进度压缩单位成本方法首先需要计算进度压缩单位成本参数,既计算压缩每周或者一个固定时间,需要支出多少成本。如下图所示:

我们接下来看一个例题:来加深大家的理解。

我们来看这个PDM网络图,四个任务A,B,C,D。A任务正常历时7周,成本5万,可以压缩到5周成本6.2万。
第一条路径是开始->A->B->结束,长度16周。
第二条路径是开始->C->D->结束,长度18周。所以是关键路径,既项目的完成时间是18周。
我们首先计算单位压缩成本,计算各个任务压缩每周需要支付多少万?如下如图所示:

接下来回答第一个问题,项目压缩到17周,应该压缩哪个活动呢?步骤如下:

接下来回答第二个问题,项目压缩到16周,应该压缩哪个活动呢?步骤和上题一样。
但是注意C任务已经到达压缩限度,历时为9周,不能继续压缩。因此只能选择压缩任务D。

接下来回答第三个问题,项目压缩到15周,应该压缩哪个活动呢?步骤和上题一样。
因为关键路径为2条,历时都为16周,需要压缩两条路径的任务。故压缩任务A和任务D。

最终答案如下图所示:

我们在压缩过程中,遵循了这样一个原则,也就是成本越小越好。但是我们在实践中并不能通过增加人员,增加成本就能把时间缩短。
任何一个任务或者任何一个项目都存在一个可能的最短进度,就像这个图一样。这个可能的最短进度任何人都是不可逾越的,无论采用什么手段也是不可以的。
所以我们就引出另外一种压缩方法,进度压缩因子方法。
这个理论认为,任务的压缩时间与成本的增加不是简单的线性关系,需要计算进度压缩因子,来确定压缩后的工作量成本。公式如下:

现在看一个例子:

总结:进度缩短了17%,增加了21%的工作量,他不是一个线性的关系,而且也不能无限的压缩。
研究标明:进度压缩因子应该大于0.75,最多可以压缩25%,也就是10天最多可以压缩到7.5天。
我们前面讲的进度压缩,没有考虑到任务之间的关联关系,10天赶工到8天完成。我们接下来介绍平行作业法,也叫快速跟进法。
基本概念:改变活动间的逻辑关系,并行开展某些活动.是一个提前量(Lead)方法的应用。
我们举个例子:假如这个项目的完成时间是100天,其中需求10天,设计5天。也就是需求和设计完成需要15天,如果我们要求这个项目需要在12天内完成需求和设计,我们怎么办呢?

我们可以用刚才的赶工方法,需求10天压缩到8天,设计压缩到4天,一共压缩了三天,12天内完成了需求和设计,那么这个方法是需要增加成本的。
现在我们应用超前(Lead)方法,需求10天不变,设计5天也不变,在需求还没有结束的前三天,设计就开始。

这样需求和设计就有一段并行的关系,正好12天内完成。所以他是一种提前量方法的应用。
总之 这节介绍了两类进度压缩方法,应急法和平行作业法,应急法我们又介绍了线性和非线性两种情况。
到这里,第七章 第四节 第三小节 时间压缩法就讲解完毕了!下一小节介绍资源优化法~
如果您觉得这篇文章有帮助到您的的话不妨点赞支持一下哟~~?
后续将持续更新【软件项目管理初级学习路线】的全知识点,大家感兴趣的多多关注博主哟~
————————————————
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit