置顶随笔
“文章分类”栏目的内容都不是原创的,多为转贴,如果在转贴时有原出处及作者,我会加以注明,但有些文章出处及作者不详的,会加上[转贴]字样,且版权都归原作者所有,如果您发现那篇文章是您的而没有署名,请与我联系,我会第一时间加上署名或应您要求进行删除

“随笔分类”中的文章为原创内容,采用许可:署名,非商业。
posted @ 2008-01-23 12:55 三千 阅读(498) | 评论 (1)编辑
  2007年5月29日
作者:ai829 (80s.net.cn)

在以前的一篇 文章中我已经说明了Adobe和Microsoft在presentation layer的竞争关系。根据一些资料总结的功能,我针对Flash以及silverlight做了一个比较的图表,后面我会针对每一个横向对比做出说明。由于国内外对Flash和silverlight的比较文章几乎没有,因此没法作为参考,文章中一些东西我不太确定的,请大家指出。


1 丰富的二维动画/图形和视音频表现 Rich 2D animation/graphics with audio and video
这点毋庸置疑,两个公司的产品都对这块做出的很大的努力,但是还有有席位差别的。用过Blend和Flash这两个软件的朋友一定会发现两个软件的不同,比如Flash独有的timeline形式和Blend强大的interaction面板等,从这一点可以看出,Bland对自己的interaction application develop tools的定位还是比较准确的,而Flash则是从basic到Professional版本涵盖了动画制作到RIA开发领域。

2 行业标准的视频解码器Industry standard video codec
先来介绍一下什么是视频解编码:视频压缩是所有令人振奋的、新型视频产品的重要动力。压缩-解压(编解码)算法可以实现数字视频的存储与传输。
典型的编解码器要么采用行业标准,如 MPEG2、MPEG4、H.264/AVC 与 AVS,要么采用专有算法,如 On2、Real Video等,而这两个公司分别位于不同的阵营。
从资料中得知微软的视频解码标准是:
SMPTE Society of Motion Picture and Television Engineers。而微软则在此基于WMV 进行了标准化修改,现在则以 VC-1 的新名称在业界实现了标准化—WMV9。
而Flash则是采用on2 VP6视频编码标准,虽然没有基于所谓的业界标准,但是on2是自己的专有算法,也是可以在文件大小和画面质量间找到平衡。
因此是否采用行业标准的视频编码器,也就变得不那么重要了。

3 硬件辅助解决方案Hardware-assisted editing and encoding solutions
这点不太清楚silverlight是如何进行硬件辅助的,但是Flash似乎是没有的,不过Adobe的同门师兄弟DIRECTOR则支持硬件辅助的功能,不知道Adobe会不会做这方面的移植。

4 以XML为基础的表现层有利于搜索引擎优化XML-based presentation layer for SEO
众所周知silverlight是基于XAML的,而所有的silverlight程序都是用户下载后在客户端由runtime来解释并执行的,也就是所在客户端可以看到程序的源代码,这样搜索引擎就可以索引其中的内容了。
而Flash则是在导出时生成swf格式的二进制文件,并由用户下载到本地由runtime执行,因此搜索引擎很难对其进行索引。

5 标准的高性能编程语言 Choice of standards-based and high-performance languages
新版的silverlight已经支持使用javascript C# 以及VB进行开发,新版的Flash CS3则支持使用ActionScript 1 ActionScript 2 ActionScript 3 进行开发。虽然as3的出现使得ActionScript在效率上有了很大的提升,但是较之C#这样的编程语言还是有比较大的差距。

6 端到端的服务器和应用平台 End-to-end server and application platform
这点silverlight有着天然的优势,其服务器和应用平台经过这么多年的发展已经具有了很大的垄断优势,而Flash相比较之下就显得不尽如人意了,只是在最近今年有所进展(ColdFusion Jrun),但是对于微软还没有什么优势可言。

7 媒体服务器license(无限频宽) Media server licensing (unlimited bandwidth)
虽然具体的价钱不太清楚,但是Flash Media Server确实比我们想像中的贵,而 Windows Media Server就显得平易近人多了。
这点没什么可说的 Adobe对Media Server的策略不是很成功,不过对于这个刚刚踏入2.0的服务器端软件来说,还需要给他一些时间。

8 客户端广告播放插入 Client side playlists for ad-insertion
这点两家都有各自的技术实现,比如在视频中加入提示点等多种插播广告的方式。

9 视频出版工具 Robust video publishing tools
在Flash中的视频出版工具叫做Flash Media Encoder 提供了很多视频编辑功能 相似的还有 微软的expression中Media 也提供了很多视频编辑的功能

10 高性能的客户端 High-performance, multi-core enabled client
虽然我不太清除高性能的标准是什么,但是我相信silverlight和FlashPlayer都是我们期待依旧的High-performance client

11 可调整全屏幕高清视频(720p)Scalable full screen video up to HD (720p)
虽然Flash也支持全屏观看,但是视频的质量确实还是稍弱一些,而silverlight可以同时播放多段HD视频的能力确实不容小看,再加上silverlight的video brush功能,确实比Flash视频略胜一筹。

12 离线文件操作Offline, document support
可以在本地存储文件,在Flash中是类似shareobject的功能,在silverlight中则还没有提供类似功能,但是可以借助javascript对cookie的操作来完成。

13 文件格式是二进制或者文本格式Binary or Text Format
两种文件格式各有优势,二进制的swf格式有利于源文件的保护,而文本的xaml则对seo有很大的好处。

14 开发制作工具 Tools
Flash后端有Adobe强大的CS3系列套件的支持,从网页三剑客到PhotoShop等图形类软件,在广大设计和开发人员中有着非常好的口碑。
而silverlight拥有后来居上的expression套件,也是不容小视。

15 工具操作复杂性 Tools complex operation
这点我要单独提出来是因为很多开发和设计人员已经习惯了Adobe的软件操作以及工作方式,而让他们一夜之间转到微软的expression上来确实有难度,而让从业者习惯expression的操作和工作方式更是摆在微软面前的难题

16 3D支持 3D Support
针对3D的支持,两个player都没有涉及,但是并不是说我们不能做3D的尝试,Flash阵营中很多第三方开发者基于ActionScript开发出了很多3D 引擎,而silverlight也可以让用户用微软提供的开发语言进行3D引擎的开发。

17 客户端大小(所需下载的安装文件大小)Client size
两个player都是寄生于浏览器的插件,因此安装文件的大小就是一个比较敏感的问题,但是两个公司在这方面做的都很好,基本上使用户可以很快下载并安装。

18 所支持的操作系统 Supported operating systems
FlashPlayer支持的操作系统基本上囊括了所有操作系统甚至连带手机的很多操作系统都有支持,这点是Flash一个很大的优势,让开发人员可以不必针对操作系统进行程序的修改。
Silverlight支持的操作系统相对Flash就少的多了,如果要让WPF真的Everywhere,还有很多路要走。

总的来说,两个公司的平台还是各有千秋的,还有很多细小的功能没有进行详细的对比,比如对Alpha通道视频的支持,以及对文字的渲染等。两个公司各自有各自的优势,Adobe在player的占有率,对各个操作系统的支持以及工具的普及率上有着很长时间的积累。而微软在操作系统和应用软件以及服务器端软件的垄断地位则让微软有机会赶超。
posted @ 2007-05-29 13:34 三千 阅读(116) | 评论 (0)编辑
  2007年4月16日

ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/html。
在ASP中使用它:

 <% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "image/GIF" %>
<% Response.ContentType = "image/JPEG" %>
<% Response.ContentType = "text/plain" %>
<% Response.ContentType = "image/JPEG" %>

".*"="application/octet-stream"
".001"="application/x-001"
".301"="application/x-301"
".323"="text/h323"
".906"="application/x-906"
".907"="drawing/907"
".a11"="application/x-a11"
".acp"="audio/x-mei-aac"
".ai"="application/postscript"
".aif"="audio/aiff"
".aifc"="audio/aiff"
".aiff"="audio/aiff"
".anv"="application/x-anv"
".asa"="text/asa"
".asf"="video/x-ms-asf"
".asp"="text/asp"
".asx"="video/x-ms-asf"
".au"="audio/basic"
".avi"="video/avi"
".awf"="application/vnd.adobe.workflow"
".biz"="text/xml"
".bmp"="application/x-bmp"
".bot"="application/x-bot"
".c4t"="application/x-c4t"
".c90"="application/x-c90"
".cal"="application/x-cals"
".cat"="application/vnd.ms-pki.seccat"
".cdf"="application/x-netcdf"
".cdr"="application/x-cdr"
".cel"="application/x-cel"
".cer"="application/x-x509-ca-cert"
".cg4"="application/x-g4"
".cgm"="application/x-cgm"
".cit"="application/x-cit"
".class"="java/*"
".cml"="text/xml"
".cmp"="application/x-cmp"
".cmx"="application/x-cmx"
".cot"="application/x-cot"
".crl"="application/pkix-crl"
".crt"="application/x-x509-ca-cert"
".csi"="application/x-csi"
".css"="text/css"
".cut"="application/x-cut"
".dbf"="application/x-dbf"
".dbm"="application/x-dbm"
".dbx"="application/x-dbx"
".dcd"="text/xml"
".dcx"="application/x-dcx"
".der"="application/x-x509-ca-cert"
".dgn"="application/x-dgn"
".dib"="application/x-dib"
".dll"="application/x-msdownload"
".doc"="application/msword"
".dot"="application/msword"
".drw"="application/x-drw"
".dtd"="text/xml"
".dwf"="Model/vnd.dwf"
".dwf"="application/x-dwf"
".dwg"="application/x-dwg"
".dxb"="application/x-dxb"
".dxf"="application/x-dxf"
".edn"="application/vnd.adobe.edn"
".emf"="application/x-emf"
".eml"="message/rfc822"
".ent"="text/xml"
".epi"="application/x-epi"
".eps"="application/x-ps"
".eps"="application/postscript"
".etd"="application/x-ebx"
".exe"="application/x-msdownload"
".fax"="image/fax"
".fdf"="application/vnd.fdf"
".fif"="application/fractals"
".fo"="text/xml"
".frm"="application/x-frm"
".g4"="application/x-g4"
".gbr"="application/x-gbr"
".gcd"="application/x-gcd"
".gif"="image/gif"
".gl2"="application/x-gl2"
".gp4"="application/x-gp4"
".hgl"="application/x-hgl"
".hmr"="application/x-hmr"
".hpg"="application/x-hpgl"
".hpl"="application/x-hpl"
".hqx"="application/mac-binhex40"
".hrf"="application/x-hrf"
".hta"="application/hta"
".htc"="text/x-component"
".htm"="text/html"
".html"="text/html"
".htt"="text/webviewhtml"
".htx"="text/html"
".icb"="application/x-icb"
".ico"="image/x-icon"
".ico"="application/x-ico"
".iff"="application/x-iff"
".ig4"="application/x-g4"
".igs"="application/x-igs"
".iii"="application/x-iphone"
".img"="application/x-img"
".ins"="application/x-internet-signup"
".isp"="application/x-internet-signup"
".IVF"="video/x-ivf"
".java"="java/*"
".jfif"="image/jpeg"
".jpe"="image/jpeg"
".jpe"="application/x-jpe"
".jpeg"="image/jpeg"
".jpg"="image/jpeg"
".jpg"="application/x-jpg"
".js"="application/x-javascript"
".jsp"="text/html"
".la1"="audio/x-liquid-file"
".lar"="application/x-laplayer-reg"
".latex"="application/x-latex"
".lavs"="audio/x-liquid-secure"
".lbm"="application/x-lbm"
".lmsff"="audio/x-la-lms"
".ls"="application/x-javascript"
".ltr"="application/x-ltr"
".m1v"="video/x-mpeg"
".m2v"="video/x-mpeg"
".m3u"="audio/mpegurl"
".m4e"="video/mpeg4"
".mac"="application/x-mac"
".man"="application/x-troff-man"
".math"="text/xml"
".mdb"="application/msaccess"
".mdb"="application/x-mdb"
".mfp"="application/x-shockwave-flash"
".mht"="message/rfc822"
".mhtml"="message/rfc822"
".mi"="application/x-mi"
".mid"="audio/mid"
".midi"="audio/mid"
".mil"="application/x-mil"
".mml"="text/xml"
".mnd"="audio/x-musicnet-download"
".mns"="audio/x-musicnet-stream"
".mocha"="application/x-javascript"
".movie"="video/x-sgi-movie"
".mp1"="audio/mp1"
".mp2"="audio/mp2"
".mp2v"="video/mpeg"
".mp3"="audio/mp3"
".mp4"="video/mpeg4"
".mpa"="video/x-mpg"
".mpd"="application/vnd.ms-project"
".mpe"="video/x-mpeg"
".mpeg"="video/mpg"
".mpg"="video/mpg"
".mpga"="audio/rn-mpeg"
".mpp"="application/vnd.ms-project"
".mps"="video/x-mpeg"
".mpt"="application/vnd.ms-project"
".mpv"="video/mpg"
".mpv2"="video/mpeg"
".mpw"="application/vnd.ms-project"
".mpx"="application/vnd.ms-project"
".mtx"="text/xml"
".mxp"="application/x-mmxp"
".net"="image/pnetvue"
".nrf"="application/x-nrf"
".nws"="message/rfc822"
".odc"="text/x-ms-odc"
".out"="application/x-out"
".p10"="application/pkcs10"
".p12"="application/x-pkcs12"
".p7b"="application/x-pkcs7-certificates"
".p7c"="application/pkcs7-mime"
".p7m"="application/pkcs7-mime"
".p7r"="application/x-pkcs7-certreqresp"
".p7s"="application/pkcs7-signature"
".pc5"="application/x-pc5"
".pci"="application/x-pci"
".pcl"="application/x-pcl"
".pcx"="application/x-pcx"
".pdf"="application/pdf"
".pdf"="application/pdf"
".pdx"="application/vnd.adobe.pdx"
".pfx"="application/x-pkcs12"
".pgl"="application/x-pgl"
".pic"="application/x-pic"
".pko"="application/vnd.ms-pki.pko"
".pl"="application/x-perl"
".plg"="text/html"
".pls"="audio/scpls"
".plt"="application/x-plt"
".png"="image/png"
".png"="application/x-png"
".pot"="application/vnd.ms-powerpoint"
".ppa"="application/vnd.ms-powerpoint"
".ppm"="application/x-ppm"
".pps"="application/vnd.ms-powerpoint"
".ppt"="application/vnd.ms-powerpoint"
".ppt"="application/x-ppt"
".pr"="application/x-pr"
".prf"="application/pics-rules"
".prn"="application/x-prn"
".prt"="application/x-prt"
".ps"="application/x-ps"
".ps"="application/postscript"
".ptn"="application/x-ptn"
".pwz"="application/vnd.ms-powerpoint"
".r3t"="text/vnd.rn-realtext3d"
".ra"="audio/vnd.rn-realaudio"
".ram"="audio/x-pn-realaudio"
".ras"="application/x-ras"
".rat"="application/rat-file"
".rdf"="text/xml"
".rec"="application/vnd.rn-recording"
".red"="application/x-red"
".rgb"="application/x-rgb"
".rjs"="application/vnd.rn-realsystem-rjs"
".rjt"="application/vnd.rn-realsystem-rjt"
".rlc"="application/x-rlc"
".rle"="application/x-rle"
".rm"="application/vnd.rn-realmedia"
".rmf"="application/vnd.adobe.rmf"
".rmi"="audio/mid"
".rmj"="application/vnd.rn-realsystem-rmj"
".rmm"="audio/x-pn-realaudio"
".rmp"="application/vnd.rn-rn_music_package"
".rms"="application/vnd.rn-realmedia-secure"
".rmvb"="application/vnd.rn-realmedia-vbr"
".rmx"="application/vnd.rn-realsystem-rmx"
".rnx"="application/vnd.rn-realplayer"
".rp"="image/vnd.rn-realpix"
".rpm"="audio/x-pn-realaudio-plugin"
".rsml"="application/vnd.rn-rsml"
".rt"="text/vnd.rn-realtext"
".rtf"="application/msword"
".rtf"="application/x-rtf"
".rv"="video/vnd.rn-realvideo"
".sam"="application/x-sam"
".sat"="application/x-sat"
".sdp"="application/sdp"
".sdw"="application/x-sdw"
".sit"="application/x-stuffit"
".slb"="application/x-slb"
".sld"="application/x-sld"
".slk"="drawing/x-slk"
".smi"="application/smil"
".smil"="application/smil"
".smk"="application/x-smk"
".snd"="audio/basic"
".sol"="text/plain"
".sor"="text/plain"
".spc"="application/x-pkcs7-certificates"
".spl"="application/futuresplash"
".spp"="text/xml"
".ssm"="application/streamingmedia"
".sst"="application/vnd.ms-pki.certstore"
".stl"="application/vnd.ms-pki.stl"
".stm"="text/html"
".sty"="application/x-sty"
".svg"="text/xml"
".swf"="application/x-shockwave-flash"
".tdf"="application/x-tdf"
".tg4"="application/x-tg4"
".tga"="application/x-tga"
".tif"="image/tiff"
".tif"="application/x-tif"
".tiff"="image/tiff"
".tld"="text/xml"
".top"="drawing/x-top"
".torrent"="application/x-bittorrent"
".tsd"="text/xml"
".txt"="text/plain"
".uin"="application/x-icq"
".uls"="text/iuls"
".vcf"="text/x-vcard"
".vda"="application/x-vda"
".vdx"="application/vnd.visio"
".vml"="text/xml"
".vpg"="application/x-vpeg005"
".vsd"="application/vnd.visio"
".vsd"="application/x-vsd"
".vss"="application/vnd.visio"
".vst"="application/vnd.visio"
".vst"="application/x-vst"
".vsw"="application/vnd.visio"
".vsx"="application/vnd.visio"
".vtx"="application/vnd.visio"
".vxml"="text/xml"
".wav"="audio/wav"
".wax"="audio/x-ms-wax"
".wb1"="application/x-wb1"
".wb2"="application/x-wb2"
".wb3"="application/x-wb3"
".wbmp"="image/vnd.wap.wbmp"
".wiz"="application/msword"
".wk3"="application/x-wk3"
".wk4"="application/x-wk4"
".wkq"="application/x-wkq"
".wks"="application/x-wks"
".wm"="video/x-ms-wm"
".wma"="audio/x-ms-wma"
".wmd"="application/x-ms-wmd"
".wmf"="application/x-wmf"
".wml"="text/vnd.wap.wml"
".wmv"="video/x-ms-wmv"
".wmx"="video/x-ms-wmx"
".wmz"="application/x-ms-wmz"
".wp6"="application/x-wp6"
".wpd"="application/x-wpd"
".wpg"="application/x-wpg"
".wpl"="application/vnd.ms-wpl"
".wq1"="application/x-wq1"
".wr1"="application/x-wr1"
".wri"="application/x-wri"
".wrk"="application/x-wrk"
".ws"="application/x-ws"
".ws2"="application/x-ws"
".wsc"="text/scriptlet"
".wsdl"="text/xml"
".wvx"="video/x-ms-wvx"
".xdp"="application/vnd.adobe.xdp"
".xdr"="text/xml"
".xfd"="application/vnd.adobe.xfd"
".xfdf"="application/vnd.adobe.xfdf"
".xhtml"="text/html"
".xls"="application/vnd.ms-excel"
".xls"="application/x-xls"
".xlw"="application/x-xlw"
".xml"="text/xml"
".xpl"="audio/scpls"
".xq"="text/xml"
".xql"="text/xml"
".xquery"="text/xml"
".xsd"="text/xml"
".xsl"="text/xml"
".xslt"="text/xml"
".xwd"="application/x-xwd"
".x_b"="application/x-x_b"
".x_t"="application/x-x_t"

 
posted @ 2007-04-16 11:16 三千 阅读(222) | 评论 (0)编辑
  2007年2月14日
 
发表时间:2006-12-26 20:53:28   楼主:azurebz  [转自架构师]
微软的DotNet开发绝对是属于那种入门容易提高难的技术。而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的。特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此       RUP方法论也认同以架构为核心,体现4+1视图在整个软件开发过程中的重要作用。架构人员既要精通技术,又要熟悉业务,而且基本对软件生命周期各阶段的相关技术都需要有相关的积累和知识储备,而这些不经过多年的磨练是很难达到这个高度的。  

要成为一个合格的架构师首先必须是一个合格或优秀的编码人员,对于开发来讲编码始终都是最重要的一项技能,在编码过程中只要自己善于去思考和分析问题,就可以多学到很多相关的知识和技术。所以我们在开发过程中一定要注意新知识和新技术的学习,前人经验和成果的学习。编码过程中应该去思考的一些问题有:  

1.在编码过程中自己是否做单元测试,是否使用相关工具做单元测试,如果没有的话是什么原因无法把单元测试做起来?  
2.自己编码的泄露率情况,编码泄露的BUG的原因分析  
3.是否有意识的对代码进行重构,重构过程中是否引入了相关设计模式的思想?  
4.是否对C#语言的一些高级特性进行学习,如反射调用,异步处理等。  
5.是否对Remoting和WebService两种分布式技术做过研究和对比分析?  
6.是否经常研究开源项目和开源代码,如Duwamish,PetShop,NUnit,Enterprise       Library,Nant等  
7.是否对对象持久化机制和O/R       Mapping等相关技术做过相关的研究  
8.平时在编码过程中是否注重公用组件和公用类的复用和抽取  
9.自己在平时工作和学习中是否经常开发些小工具提高工作效率,巩固学习知识  


设计和编码其实是密切而不可分的,对于严格将设计和编码分开的瀑布模型一般也仅仅在大型项目中应用。而及时编码和设计分离,也不是将编码人员不需要思考,编码活动始终是一项创造性的劳动,如果否定这个观点那就代表编码过程完全不需要人员介入而可以完全自动化。因此在这里谈设计主要还是指设计人员的系统化思维能力,设计人员应该比开发人员站高一个层次来分析和思考问题。设计人员最重要的一个技能就是现实-   >抽象的转换,而这个就需要谈到方法论的问题了,技术人员需要积累面对对象分析和设计或结构化分析知识的积累,需要有较强的数据库分析和设计能力。一个设计能否成为很好的架构师关键就在这种积累的深度和广度上面了。  

因此在设计过程中应该考虑的问题有:  
1.你现在分析和设计能力能否胜任大中型的应用系统还是只是独立功能分析和设计?  
2.设计过程中是否有意识的考虑到组件的复用和相关接口设计准则。是否能够很自然的将分析模式,设计模式的相关内容应用到自己的设计过程中。  
3.是否对XP,RUP,面向对象,结构化等方法论都有过较系统化的学习和思考。  
4.是否真正理解系统功能需求和非功能需求对系统设计的不同的指导作用。  
5.对自己设计的功能是否会根据后期的变更来反思自己的设计为何不能很好的适应变更?  
6.是否在设计过程中经常自己开发些原型来对自己的设计思路进行验证?  
7.是否专注技术的同时开始专业业务流程的分析,关注业务建模?  


如果我们在设计和开发过程中经常关注这些知识和技能的话,成为一个合格的架构师是早晚的事情。平时能够胜任工作开发用到的知识和技能是微不足道的,如果自己不是有意识的去学习这些知识的话,那技能是很难得到进一步提高的。我参加过两次微软的架构师培训,在北京的微软架构峰会上也有机会专门参加了P&P       Workshop的学习,培训老师是微软总部SmartClient       Architecture       and       Design       Guide一书的作者Edward       A.Jezieski,让我感受最深是老外深刻的技术底蕴,对程序开发的执著。  

对于DotNet架构经常用到的知识和技能储备有  
1.RUP方法论,4+1视图。用例驱动业务建模-   >分析模型-   >设计模型  
2.用例模式-   >分析模式-   >设计模式  
3.常用的分布式技术  
4.对安全,异常,日志,性能等非功能性需求的关注  
5.对应用系统整体业务的关注  

相关的一些参考书籍(微软网站和电驴都可以下载到)  

微软网站提供的参考书籍  
Enterprise       Solution       Patterns       Using       Microsoft       .NET  
.NET       Data       AccessArchitecture       Guide  
Application       Architecture       for       .NET:Designing       Applications       and       Services  
Caching       Architecture       Guide       for       .NET       Framework       Applications  
Designing       Application-Managed       Authorization  
Smart       Client       Architecture       and       Design       Guide  

其它架构方面的参考书籍  
Software       Architecture       In       Practice  
Pattern-Oriented       Software       Architecture  
The       Art       Of       Software       Architecture  
Beyond       Software       Architecture  

模式方面的书籍  
Analysis       Patterns  
Design       Patterns       -       Elements       of       Reusable       Object-Oriented       Software  
Applying       UML       and       Patterns  
Design       Pattern*       **plained      


【标签】: 架构,DotNet

---------------------------------------------------------
没搜出原作者的blog,只在csdn上搜出.csdn整合的真是好啊,找不到一点儿原作的链接.
posted @ 2007-02-14 14:45 三千 阅读(167) | 评论 (0)编辑
  2006年11月29日
 
文章出处:希赛 作者: 发布时间:2006-09-05

主流软件测试工具介绍

  测试工具一般可分为白盒测试工具、黑盒测试工具、性能测试工具,另外还有用于测试管理(测试流程管理、缺陷跟踪管理、测试用例管理)的工具,这些产品主要是MercuryInteractive(MI)、Segue、IBM Rational、 Compuware和Empirix等公司的产品,而MI公司的产品占了主流。

白盒测试工具

  白盒测试工具一般是针对代码进行测试,测试中发现的缺陷可以定位到代码级,根据测试工具原理的不同,又可以分为静态测试工具和动态测试工具。

  静态测试工具:直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。静态测试工具的代表有:Telelogic公司的Logiscope软件;PR公司的PRQA软件。

  动态测试工具:动态测试工具与静态测试工具不同,动态测试工具的一般采用"插桩"的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据。其与静态测试工具最大的不同就是动态测试工具要求被测系统实际运行。动态测试工具的代表有:Compuware公司的DevPartner软件;Rational公司的Purify系列等。

黑盒测试工具

  黑盒测试工具适用于黑盒测试的场合,黑盒测试工具包括功能测试工具和性能测试工具。黑盒测试工具的一般原理是利用脚本的录制(Record)/回放(Playback),模拟用户的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。黑盒测试工具可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。黑盒测试工具的代表有:Rational公司的TeamTest、Robot;Compuware公司的QACenter。

性能测试工具

  专用于性能测试的工具包括有:Radview公司的WebLoad;Microsoft公司的  WebStress等工具;针对数据库测试的TestBytes;对应用性能进行优化的EcoScope等工具。   MercuryInteractive的LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。

测试管理工具

  测试管理工具用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且,测试管理工具还包括对缺陷的跟踪管理。测试管理工具的代表有:Rational公司的Test Manager;Compureware公司的TrackRecord;Mercury Interactive公司的TestDirector等软件。

posted @ 2006-11-29 11:43 三千 阅读(214) | 评论 (1)编辑
  2006年10月30日
     摘要: 转正此地址:https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.htmlprototype.js开发笔记Table of Contents1. Programming Guide1.1. Prototype是什么?1.2. 关联文章1.3. 通用性方法1.3.1. 使用 $()方法1.3.2. 使用$F()方法1.3.3. ...  阅读全文
posted @ 2006-10-30 19:17 三千 阅读(111) | 评论 (1)编辑
     摘要: /**////<summary>///视频(avi,mov等等格式)转换为flv格式视频///</summary>///<paramname="FromName">被转换的视频文件</param>///<paramname="ExportName">转换flv后的文件名</param>///<paramname="Exp...  阅读全文
posted @ 2006-10-30 19:07 三千 阅读(953) | 评论 (1)编辑
  2006年10月29日
Class nic                                                       '创建一个名为nic的类
    Private WawaValue                                           '创建一个内部私有变量
    
    
Private Sub Class_Initialize()                              '定义类的初始化事件
        Response.Write("nic类被创建了<br>")
        WawaValue
=1
    
End Sub
    
    
Private Sub Class_Terminate  ' 设置 Terminate 事件。        '定义类的清空事件
        Response.Write("<br>nic类被清空了")  
    
End Sub
    
    
Public Property Let propertynic(ByVal nic_arg)              '定义类的一个let属性
        WawaValue=nic_arg
    
End Propert
    
Public Property Get propertynic()                           '定义一个类的get属性
        propertynic=WawaValue
    
End Property
    
    
Public Function functionnic(ByVal name)                     '定义个一个类的方法
        Dim Hello
        Hello
="Hello "
        functionnic
=Hello+name
    
End Function
End Class
posted @ 2006-10-29 18:29 三千 阅读(23) | 评论 (0)编辑
  2006年9月13日
来源不详

 

    老板们当然希望项目做得又快,又好,又便宜;但鱼掌难兼,项目经理必须知所取舍。 
  
  「要马儿好,又要马儿不吃草」这句话不知是谁「发明」的;发明这句 话的人,想来是项目管理的高手。为什么?因为项目管理的精义,就 是「又要马儿好,又要马儿不吃草。」

   一个成功的项目,通常有三个要素:

    时间的要素──完成的时间要「快」。

    成本的要素──完成的成本要「便宜」。

    效果的要素──完成后的表现要「好」。

  这三个彼此互斥的要素,就像一个等边三角形的三边一样,缺了 一边,或任何一边比其它两面边短,我们就不能再称这个三角形为等 边三角形了。

  在我的经验中,如果在这三个要素中袛要做到一项的话,这种专 案好做,百分之八、九十以上的项目经理大概都可以胜任愉快。如果 在三个要素中要做到两项,就不是一般的项目经理能胜任的了。在比 率上,我认为能把以上三个要素中的任何两项做到的项目经理,大概 不会超过百分之五十。真正能够把项目中三个主要需求都能做到的高 手,在一百位项目经理中,最多不到十个。

  有人听我这么说也许会不服气,认为我在这里危言耸听,乱吓唬 人。他们不了解我的本意。我的本意祗有两点:

  第一、项目成功的要素,彼此之间是鱼与熊掌的关系。

  第二、要兼顾的难度,是照几何级数上升而不是按算术级数上升。

  这样一个三角难题,要我们怎么去解呢?我认为应该从两方面去着手。

  第一,我如果是个项目经理,一定要问:

    □什么是「好」?

    □什么是「快」?

    □什么是「便宜」?

  「好」字咱们中国人用来真是千变万化,神奇不已。有时用来作 副词,像说:这颜色「好」漂亮。有时用来做动词;说那个家伙很「好」色,可不是什么恭维之词。「好」字用到恰处,又变成了另外意 思的代名词了。别人问:「这个女孩子怎么样?」你说;「她很好」,言下之意,就是不很漂亮。别人问:「这个人怎么样?」,你回答:「他很好」,言下之意,就是他不太能干。同时,某一个人认为好的,另外一个并不认为好,这是我们日常生活中常遭遇到的问题。

  在项目管理中,好就是好,不好就是不好,这没有什么主观或客观的差异,也没有什么明示或暗示的问题存在。要谈到项目管理中「好」的定义,第一个条件就是要看它是不是有用。「有用」和「能用」是两回事。很多「能用的」东西不一定「有用」,这牵涉到客观价值的问题。有一天,我在台北的街上看到一个年轻人开了一部德国制的跑车,车尾上还有一块压风板的那型。我心想,在台北这种交通堵塞、寸步难行的情况下,开这种跑车真是龙游浅水,英雄无用武之地。这部跑车算不算是部好车呢?当然算。但在台北街头这种客观环境之下,它还算不算是部好车?当然不算。

  我从前有一只瑞士制的名表,是属于那种很贵,很多仿制品那型。因为要动,它才会上炼,不动它,隔一阵就停了。我后来不胜其烦,换了一个日本制的石英表,价钱祗有那只瑞士表的几十分之一,不但不用上炼,并且有两个时间,能让我不用花脑筋就可以同时知道台湾和美国加州的时间。早上六点它会把我闹醒,打球、洗澡也懒得把它脱掉,并且是夜明的。你说这两个表那个比较好?我可以很坦白地告诉你,因为后者比较有用,后者比较好。因此,在项目管理上,关于「好」的定义,是「有用」而非能用」。

  「好」的第二个条件,要看它是不是能达到原先要达到的目的。 如果说目的是代步,汽车比脚踏车好;如果说目的是运动,脚踏车却 比汽车好。在日常生活中,有人叫你去买苹果,结果你买了橘子回来 。苹果和橘子虽然不是一样,但也许还勉强可以混过去。在项目管理 上,如果要的是苹果,交货的时候却变成了橘子,这就不能算是一个 成功的项目。为了避免这种错误,项目经理必须在项目设计时把项目 结果的规格先弄清楚。口说无凭,要的东西都要写下来。交货的时候 ,如果我交给你的是规格上写明的东西,那我就算给你一个「好」东 西。

  不管项目的成果是什么,也许是一套软件系统,或一部新的机器 ,或一条新修的铁路....凡是好的东西,一定是容易用的东西。 当录像机刚出来旳时候,懂得怎么用它去录电视节目,真是一门大学 问。在我的朋友中,大多数人都不会用,尤其是太太们,十有九人不 会用它。不会用、不敢用之人中,很多还都拥有博士学位哩。为什么 ?因为它设计得太复杂,太不容易用了。后来有两个中国工程师,想 出一个办法,请每个电视台把每个节目都用一个不同的数字来代替, 到时候任何人祗要把他想录节目的代号输进录像控制器中,节目时间 一到,录像开始,这样一来,人人会用录像机。从项目管理「好」的 定义来看,简单、好用的东西,就是「好」的东西。

  一个项目的产品,除了有用和好用之外,还要具有可塑性和可扩 展的弹性。前者表示它的功能,在必要时可以加以改变。后者表示在 时间上,它不但可以持久并能扩展。美国的超级公路,是艾森豪威尔主政 时的德政,在设计上,考虑到必要时可供喷射战斗机起落。扩充性比 可塑性更重要。如果说一套计算机实用软件的设计,在开发完成上线不 久,就不能满足公司业务上的新需要的话,设计这套系统的项目还够 格称为一个好专案吗?当然,未来的需要也许不是目前能预料的,为 了不可预测的将来而牺牲了现在的需要当然不对,但无论如何,一个 好的项目,它所设计的产品必须具有容易修改,可以扩充,并且不会 马上就失效的弹性。缺乏有这种弹性的产品,就不是一个好的产品。 一个生产没有弹性产品的项目,就不能算是一个好的专案。

  但是一般所谓好的项目,究竟指的是什么呢?换句话说,怎么知 道这个项目是成功的项目或失败的项目呢?你祗要问:

    项目的结果能否使公司的收入增加?

    项目的结果能否使公司的支出减少?

    项目的结果能否使公司的服务加强?

  能达到这三个目的,就是好的项目。

  接着,让我们来谈谈什么是「快」?在我们日常的生活中,「快 」和「好」一样,往往是主观的而非客观的。有时它又是凭感觉而非 凭理性的。小时候写作文,常喜欢用「光阴似箭」来破题。遇到做自 己不喜欢做的事情,老喜欢用「度日如年」来形容。在项目管理上, 时间是绝对的,而非凭感觉的──能在半年内完工,就是比在九个月 内完工要快三个月。但这个项目能在半年内完工就算快吗?谁说的? 我们搞项目管理的人常讲一个笑话:「如果你问你的老板他希望什么 时候要这个项目完工,他一定会回答说:昨天。」

  因此,项目经理最容易犯的一个错误,就是在完工日期的预测上 ,为了讨好上司的要求而尽量乐观。同时,老是用历史的数据或别人 的经验来影响自己的预测,殊不知每个项目的客观条件和外在环境都 不一样。项目经理在作完工预测时,千万要记得一个教训:你的老板 或客户不会记得你告诉他多快可以完工,因为再快他们都会嫌慢,但 如果你告诉他们该完工的时候完不了工,那你的麻烦可大了。所以在 预估时,胆子放小点,时间放长些。

  还有一点更重要:老板们当然不喜欢听坏消息,但更不喜欢听出 人意外的坏消息,因此当完工的预测如果出问题的时候,绝不能隐瞒 ,硬着头皮也要让老板知道。

  要达到预期完工的要求,项目经理一定要懂得怎么把一个规模大 、时间长的项目,分成不同的阶段来完成。在每个阶段中,又要根据 每阶段不同的重点分别来作完工预测。工程分得越细,预测的准确性 就越高。这道理很普通,但做起来却很困难,因为需要很周详的计划 和分析。计划和分析要花脑筋,可不是每个人都能做到的。说了半天 ,快字诀祗有一点,如果一切按照计划,这就合乎快的原则,否则就 是不快。该完工时完工就是快,否则就是慢。

  至于什么是「便宜」?我以为省钱不是项目管理中最重要的目的 。一个项目该花多少钱,是应该早就算出来的。一般来说,如果实际 的花费和预估的花费差别在三○%左右,应该是能接受的范围;超过 百分之三十,表示预算做得不彻底。

  在项目管理里,最难预估的不是完工的时间,而是项目的预算。 项目经理在这方面遭受的压力,比什么都大,因此,在做预算的时候 ,必须面对现实,既不能故意灌水,也不能故意过份乐观。

  一个聪明的主管,要重视的是产品的价值,而非只是重视价钱。 不懂得在价值上动脑筋,祗懂得在价钱上打算盘的项目经理,前途不 乐观。但是价值有两种:有形的价值和无形的价值。在项目管理中, 强调无形价值是致命伤。坦白地说,如果一个项目没有有形价值当后 台,其存在的价值就很有限。在我刚才提到那三个项目的目的中,增 加收入和减少支出属于有形价值,增强服务属于无形价值。有形价值 高的项目,就是「便宜」的项目。否则,就是不便宜的项目。

  项目经理了解项目管理三角关系的定义之后,至少对项目追求的 目标不会太迷糊。但这不能担保从此就天下太平。任何项目经理都想 把他的项目管得又快、又好、又便宜,但事实上,不是每个项目都能 达到这个境界,有时候,也并非一定要达到这个境界不可。

  一位有经验的项目经理,一定要懂得怎么做「取舍分析」︵ Trade-off Analysis︶;换言之,懂得「弃车保帅」的重要性。如果 我们用我提到过的「快、好、便宜」来作标准,有的时候三者可以祗 取其一,或者祗取其二,这就是我们所谓的「取舍分析」。

  现在,让我举几个例子来说明一下,我在这方面的看法:

  一般来说,凡是属于研究发展的项目,尤其是有关药品方面的研 究发展,钱和时间都很有弹性,但对项目产品的品质却没有任何弹性 。换句话说,快、好、便宜的这个三角形,「好」的那边比什么都重 要。反过来说,一般重工业机械或房屋建筑等有关项目,「快」却是 最重要的因素,因为祗有在项目结束交货后,才能收款来继续以后的 项目。

  再看有关制造环保控制机器的发展项目,由于它的订价和效果已 经按法律的规定而不能再有太多弹性,但在交货的时间上,快不快并 不是那么重要。相反地,所有的咨询项目,在时间和价钱上没什么弹 性,但在成品的品质方面,好不好就大有融通的余地。

  有些项目是没有什么「弃车保帅」那套的。一九六○年代初期, 美国受苏联发射史泼尼克号人造卫星的刺激,肯尼迪总统下命令要在 一九六○年代结束前把人送上月球,并安全地带回来。这个庞大的专 案,在时间上要快,必须赶在苏联之前完成;要好,绝不能出现任何 差错;并且在预算上有限制,因为预算来自老百姓交的税,经国会通 过才行。结果,美国果真抢先把人类送上月球,并平安地带回来。在 历史上可以和这个项目媲美的,大概祗有造原子弹的曼哈顿项目了。

  我提到「弃车保帅」的观念,并不是要国内的项目经理们放弃理 想,不追求项目三角关系的完美。我祗是强调一点:当这个三角难题 无解的时候,要懂得顾全大局,两害相权取其轻。很多时候,由于外 在和内在的压力,「取舍分析」是免不了的。要做好取舍分析,项目 经理至少要懂得六件事:

    第一,要很清楚地了解项目冲突的基本原因。

    第二,重新确认项目的目的。

    第三,了解项目现处的环境及目前状况。

    第四,寻求可行的其它方法。

    第五,选择最佳的其它方法。

    第六,重新策划项目计划。

  项目的目的,不外乎增加公司收入、节省公司支出和提升公司服 务水准三者。项目的成功与否,取决于项目完成是否又快又好又便宜 。这个三角关系虽然难解,但并非无解。运用之妙,存乎一心。我在 此文中谈到的一些技巧,有点像野人献曝,希望有些参考价值。

posted @ 2006-09-13 14:12 三千 阅读(74) | 评论 (0)编辑
来源不详

回想一下你所经历的项目,有没有出现过以下这样的情况:客户在检查项目阶段成果时,指出曾经要求的某个产品特性没有包含在其中,并且抱怨说早就以口头的方式反映给了项目组的成员,糟糕的是作为项目经理的你却一无所知,而那位成员解释说把这点忘记了;或者,你手下的程序员在设计评审时描述了他所负责的模块架构,然而软件开发出来后,你发现这和你所理解的结构大相径庭…… 

    可能你遇到的情况比上面谈到的还要复杂。问题到底出在哪儿呢?其实很简单,就两个字——沟通。以上这些问题都是由于沟通引起的,沟通途径不对导致信息没有到达目的地。“心有灵犀一点通”可能只是一种文学描绘出的美妙境界。在实际生活中,文化背景、工作背景、技术背景可以造成人们对同一事件理解方式偏差很大。 

    在项目中,沟通更是不可忽视。项目经理最重要的工作之一就是沟通,通常花在这方面的时间应该占到全部工作的75%~90%。良好的交流才能获取足够的信息、发现潜在的问题、控制好项目的各个方面。 

沟通管理的体系 

    一般而言,在一个比较完整的沟通管理体系中,应该包含以下几方面的内容:沟通计划编制、信息分发、绩效报告和管理收尾。沟通计划决定项目干系人的信息沟通需求:谁需要什么信息,什么时候需要,怎样获得。信息发布使需要的信息及时发送给项目干系人。绩效报告收集和传播执行信息,包括状况报告、进度报告和预测。项目或项目阶段在达到目标或因故终止后,需要进行收尾,管理收尾包含项目结果文档的形成,包括项目记录收集、对符合最终规范的保证、对项目的效果(成功或教训)进行的分析以及这些信息的存档(以备将来利用)。 

    项目沟通计划是项目整体计划中的一部分,它的作用非常重要,也常常容易被忽视。很多项目中没有完整的沟通计划,导致沟通非常混乱。有的项目沟通也还有效,但完全依靠客户关系或以前的项目经验,或者说完全靠项目经理个人能力的高低。然而,严格说来,一种高效的体系不应该只在大脑中存在,也不应该仅仅依靠口头传授,落实到规范的计划编制中很有必要。因而,在项目初始阶段也应该包含沟通计划。 

    设想一下,当你被任命接替一个项目经理的职位时,最先做的应该是什么呢?召开项目组会议、约见客户、检查项目进度……都不是,你要做的第一件事就是检查整个项目的沟通计划,因为在沟通计划中描述了项目信息的收集和归档结构、信息的发布方式、信息的内容、每类沟通产生的进度计划、约定的沟通方式等等。只有把这些理解透彻,才能把握好沟通,在此基础之上熟悉项目的其它情况。 

    在编制项目沟通计划时,最重要的是理解组织结构和做好项目干系人分析。项目经理所在的组织结构通常对沟通需求有较大影响,比如组织要求项目经理定期向项目管理部门做进展分析报告,那么沟通计划中就必须包含这条。项目干系人的利益要受到项目成败的影响,因此他们的需求必须予以考虑。最典型也最重要的项目干系人是客户,而项目组成员、项目经理以及他的上司也是较重要的项目干系人。所有这些人员各自需要什么信息、在每个阶段要求的信息是否不同、信息传递的方式上有什么偏好,都是需要细致分析的。比如有的客户希望每周提交进度报告,有的客户除周报外还希望有电话交流,也有的客户希望定期检查项目成果,种种情形都要考虑到,分析后的结果要在沟通计划中体现并能满足不同人员的信息需求,这样建立起来的沟通体系才会全面、有效。 

语言、文字还是“形象” 
 
    项目中的沟通形式是多种多样的,通常分为书面和口头两种形式。书面沟通一般在以下情况使用:项目团队中使用的内部备忘录,或者对客户和非公司成员使用报告的方式,如正式的项目报告、年报、非正式的个人记录、报事帖。书面沟通大多用来进行通知、确认和要求等活动,一般在描述清楚事情的前提下尽可能简洁,以免增加负担而流于形式。口头沟通包括会议、评审、私人接触、自由讨论等。这一方式简单有效,更容易被大多数人接受,但是不象书面形式那样“白纸黑字”留下记录,因此不适用于类似确认这样的沟通。口头沟通过程中应该坦白、明确,避免由于文化背景、民族差异、用词表达等因素造成理解上的差异,这是特别需要注意的。沟通的双方一定不能带有想当然或含糊的心态,不理解的内容一定要表示出来,以求对方的进一步解释,直到达成共识。除了这两种方式,还有一种作为补充的方式。回忆一下体育老师授课,除了语言描述某个动作外,他还会用标准的姿势来教你怎么做练习,这是典型的形体语言表达。像手势、图形演示、视频会议都可以用来作为补充方式。它的优点是摆脱了口头表达的枯燥,在视觉上把信息传递给接受者,更容易理解。 

两条关键原则 

    在项目中,很多人也知道去沟通,可效果却不明显,似乎总是不到位,由此引起的问题也层出不穷。其实要达到有效的沟通有很多要点和原则需要掌握,尽早沟通、主动沟通就是其中的两个原则,实践证明它们非常关键。 

    曾经碰到一个项目经理,检查团队成员的工作时松时紧,工期快到了和大家一沟通才发现进度比想象慢得多,以后的工作自然很被动。尽早沟通要求项目经理要有前瞻性,定期和项目成员建立沟通,不仅容易发现当前存在的问题,很多潜在问题也能暴露出来。在项目中出现问题并不可怕,可怕的是问题没被发现。沟通得越晚,暴露得越迟,带来的损失越大。 

    沟通是人与人之间交流的方式。主动沟通说到底是对沟通的一种态度。在项目中,我们极力提倡主动沟通,尤其是当已经明确了必须要去沟通的时候。当沟通是项目经理面对用户或上级、团队成员面对项目经理时,主动沟通不仅能建立紧密的联系,更能表明你对项目的重视和参与,会使沟通的另一方满意度大大提高,对整个项目非常有利。 

保持畅通的沟通渠道 

    沟通看似简单,实际很复杂。这种复杂性表现在很多方面,比如说,当沟通的人数增加时,沟通渠道急剧增加,给相互沟通带来困难。典型的问题是“过滤”,也就是信息丢失。产生过滤的原因很多,比如语言、文化、语义、知识、信息内容、道德规范、名誉、权利、组织状态等等,经常碰到由于工作背景不同而在沟通过程中对某一问题的理解产生差异。 

    如果深层次剖析沟通,其实可以用一个模型来表示: 

    从沟通模型中可以看出,如果要想最大程度保障沟通顺畅,当信息在媒介中传播时要尽力避免各种各样的干扰,使得信息在传递中保持原始状态。信息发送出去并接收到之后,双方必须对理解情况做检查和反馈,确保沟通的正确性。 

    如果结合项目,那么项目经理在沟通管理计划中应该根据项目的实际明确双方认可的沟通渠道,比如与用户之间通过正式的报告沟通,与项目成员之间通过电子邮件沟通;建立沟通反馈机制,任何沟通都要保证到位,没有偏差,并且定期检查项目沟通情况,不断加以调整。这样顺畅、有效的沟通就不再是一个难题

posted @ 2006-09-13 14:10 三千 阅读(74) | 评论 (0)编辑
来源不详

究竟如何进行项目成本管理呢?简单地说,就是通过开源和节流两条腿走路,使项目的净现金流(现金流入减去现金流出)最大化。开源是增大项目的现金流入,节流是控制项目的现金流出。    
    在项目建设期,开源表现为扩大项目融资渠道,保证项目能够筹集足够的建设资金;节流是使融资成本或代价最低,最节省地实现项目的必要功能。在项目经营期,开源表现为增加主营业务收入、其他业务收入以及投资收益等;节流就是控制项目经营成本。    
    在我国,项目的成本管理一直是项目管理的弱项,“开源”和“节流”总是说得多、做得少。例如,在项目前期,由于没有深入地调研,不能准确估算完成项目活动所需的资源成本,造成开源不足的局面;或者由于项目的资金“源”自政府或股东,花起来不心疼,更谈不上节流了。甚至部分项目根本就没有预测和分析项目现金流和财务执行情况,决策失误就在所难免了。    
    成本管理的现金流分析采用的数据大都来自估算和预测,具有一定的不确定性,可能造成项目的现金流入减少或现金流出增加。不确定性成本管理或风险成本管理已成为我国项目管理中的弱项,也是很多商业银行贷款最关心的问题。即使是专业的咨询公司或项目管理公司,大多只停留在简单的量本利分析和敏感性分析。本文着重介绍概率分析、挣值分析等项目成本管理新方法。
    
    项目成本或投资估算
    
    成本估算(CostEstimating)是为完成项目各项任务所需要的资源成本的近似估算。    
    美国项目管理学会(PMI)认为,有三种成本估算方法:    
    类比估算:是一种自上而下的估算形式,通常在项目的初期或信息不足时进行。    
    参数估算:是一种建模统计技术,如回归分析和学习曲线。    
    自下而上估算:通过对项目工作包进行详细的成本估算,然后通过成本账户和工作分解结构(WBS)将结果累加起来得出项目总成本。这种方法最为准确。    
    PMI成本估算的概念在我国常称作投资估算,即在对项目的建设规模、技术方案、设备方案、工程方案和项目实施进度等进行研究的基础上,估算项目的总投资。
    
    项目的现金流分析
    
    项目成本管理的基础是编制财务报表,主要有财务现金流量表、损益表、资金来源与运用表、借款偿还计划表等。其中,项目的现金流量分析是最重要的项目管理报表。    
    通过项目的财务现金流分析,可以计算项目的财务内部收益率、财务净现值、投资回收期等指标,从而对项目的决策做出判断。
    
    (1)财务内部收益率(FIRR)    
    它是指项目在整个计算期内各年净现金流量现值累计为零时的折现率,是评价项目盈利能力的相对指标。该指标可根据财务现金流量表中净现金流量,用插差法计算,也可以直接利用微软Excel软件提供的财务内部收益率函数计算,计算得到的项目财务内部收益率与行业基准收益率(Ic)比较,如果FIRR>Ic,即认为项目盈利能力能够满足要求。
    
    (2)财务净现值(FNPV)    
    它是指项目按基准收益率Ic将各年净现金流量折现到建设起点的现值之和。它是评价项目盈利能力的绝对指标,反映项目在满足基准收益率要求的盈利之外所获得的超额盈利的现值。也可直接利用微软Excel软件提供的财务净现值函数计算。若得到的FNPV≥0,表明项目的盈利能力达到或超过基准计算的盈利水平,项目可接受。
    
    (3)投资回收期(Pt)    
    它是反映项目真实偿债能力的重要指标,是指以项目的净收益抵偿项目全部投资所需要的时间。在现金流量表中,是累计现金流量由负值变为0的时点。    
    投资回收期越短,表明项目盈利能力和抗风险能力越强。
    
    项目的不确定性分析
    
    根据拟建项目的具体情况,有选择性地进行盈亏平衡分析、敏感性分析和概率分析等。
    
    (1)盈亏平衡分析    
    它是根据项目正常生产年份的产品产量(销售量)、固定成本、可变成本、税金等,研究建设项目产量、成本、利润之间变化与平衡关系的方法。当项目的收益与成本相等时,即为盈亏平衡点(BEP)。    
        
    (2)敏感性分析    
    它是研究项目的产品售价、产量、经营成本、投资、建设期等发生变化时,项目财务评价指标(如财务内部收益率)的预期值发生变化的程度。通过敏感分析,可以找出项目的最敏感因素,使决策者能了解项目建设中可能遇到的风险,提高决策的准确性和可靠性。一般以某因素的曲线斜率的绝对值大小来比较。    
    财务内部收益率对建设投资和商品房销售价格的变化都较为敏感。相比之下,财务内部收益率对建设投资的变化更为敏感。
    
    (3)概率分析    
    它是通过概率预测不确定性因素和风险因素对项目经济评价指标的定量影响。一般是计算项目评价指标,如项目财务净现值的期望值大于或等于零时的累计概率。累计概率值越大,项目承担的风险越小。
    
    项目挣值管理
    
    挣值管理(EarnedValueManagement,EMV)是综合了项目范围、进度计划和资源,测量项目绩效的一种方法。它比较计划工作量、实际挣得多少与实际花费成本,以决定成本和进度绩效是否符合原定计划。    
    要进行挣值管理,必须熟悉与挣值管理密切相关的计划成本PV、挣值(EV)和实际成本AC之间的相互关系,以及完工预算(BAC)、完工估算(EAC)和完工尚需估算(ETC)之间相互关系。    
    挣值管理也离不开偏差管理。偏差=计划实际    
    当成本偏差(CV)>0,表明成本节约;反之,当CV<0,表明成本超支。    
    当进度偏差(SV)>0,表明进度超前;反之,当SV<0,表明进度滞后。    
    特别注意的是,这是根据PMI的偏差含义做出的推断,与我国的工程监理投资控制中的偏差定义正好方向相反。注:本文作者均取得PMI项目管理专业资格(PMP)。

posted @ 2006-09-13 14:09 三千 阅读(92) | 评论 (0)编辑