- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件特性及其意义
软件特性及其意义
我们对软件的大体映像,建立于其根本特性之上;而软件的外部行为表现、和内部结构等,均受这些特性的影响和制约,并反反复复地印证着那些特性。
人们往往不愿意浪费时间去认真思考软件的本质特性,其后果常常是使用了错误的方法去开发软件。
软件是人类有史以来创造的一种非常特别的制品,它具备与传统制品完全不同的特性。而软件的这些特性既来自信息技术本身,也来自其所要解决的问题域。正是它的这种特殊性,使得人类至今仍然在苦苦寻觅解决软件开发问题的终极手段――所谓“一枪毙命的银弹”。
胡协刚 中国软件架构师网 首席软件架构师
网站:
从1991年起一直从事IT行业,长期担任软件开发的高级技术和管理职务,拥有非常丰富的工作经验(其中有2年硬件开发的特别经历);曾经成功主持过多个大型软件项目及软件产品的开发;是国内较早引入UML模型驱动开发方法的倡导人之一,和最早的UP统一软件过程推动人之一;目前是国内培训与咨询界最受欢迎的资深软件架构师之一,和屈指可数的能够领导开展软件教练项目的顶级咨询师之一。
曾经给东软、华为、中兴通讯、雅虎中国(3721)、西门子、海南航空集团等知名企业做过教练项目或咨询培训。
软件的精确性与模糊性
大部分人造物,比如象建筑,都可以允许一定的误差存在。我们在修建公路时,并不苛求最终的路面位置与设计图中的坐标值丝毫不差;在建造楼房时,也不要求施工队浇注的钢筋混泥土框架与设计的承重指标精确相符。一方面,这是因为人类还没有能力以合理的成本在建筑上实现极高的精度;另一方面,人类可以通过留有余量的手段来解决误差问题。例如建筑师在设计楼房时,会为承重指标留一定的余量,即使施工队浇注的框架结构强度比设计指标低一点,也不会因为这种不精确而导致其坍塌。(留余量、多付出一定的代价以规避风险的做法,实际上是传统工程的一种通行原则,称为Overengineering过度工程或过度设计;极端的例子是运载火箭上的控制设备至少备有三套,以防控制指令出错)
但是软件却不像上述其它人工制品,软件的最终交付形态是二进制的可执行码,执行码是不能容忍误差的。想象一下,我们复制一段可执行文件到主机上去运行,如果文件中的某个字节出现了错误,这时我们恐怕只能向上帝祷告,祈求系统不要突然挡机了。据说欧洲亚利安娜火箭一次发射失败的主要原因,就是其飞行控制软件中的一行代码有误所造成的。实际上,程序代码中的任何误差,都可能导致软件的整体失效;人们也无法通过简单地留余量的(过度工程)方式来解决这种问题。
其背后的原理是:建筑设计的客体内容(结构、材料、工艺等)本身并不是精确的东西(取值是连续的);而软件开发的客体,是计算机的执行序列码,它本身是绝对精确的东西(取值是离散的,最终会转化为机器中代表0/1的电平信号),不允许误差的存在(当然,如果未来哪一天,神经元计算体系取代目前的冯?诺依曼体系,局面可能就完全不同了)。
软件的这种精确性,迫使人们在开发时,必须投入大量的精力来确保代码的正确性。而人类的思维特性正好与之相反,是模糊和充满误差的。因此,程序员很难在第一次就写出正确的代码;他总是要不断的测试这些代码,然后调试、跟踪,进行除错,直到获得正确的结果。
这样,软件的测试与验证在开发活动中就占据了极其重要的地位。另外,其它行业中很少会出现软件开发中的一种特有现象――程序员大部分时间中不是在编写新的代码,而是在排除已有代码中的各种Bug;更要命的是,程序员自己也没有把握,在其承诺的时间内,将主要的缺陷都排除掉。
软件的精确性还体现在软件的规格定义上,如果软件的需求规格没有定义准确,那么据此所开发出来的交付也不大可能符合用户的要求。
理论上已经证明,程序的百分之百正确性是不可能实现的。因此软件同样无可奈何地需要容忍一定误差的存在,但这种误差主要体现在软件的某些质量范围上,而软件的功能本身在逻辑上仍然是排斥误差的。
软件中的可以接受的误差或不精确主要体现在:
◆ 交付的可靠性误差――用户对交付中缺陷的接纳程度(用户能够接受一些非关键功能的失效)。开发组总是尽量减少交付中的缺陷数量,但实现零缺陷在理论上是做不到的;因此,只要将交付的缺陷率控制在一定范围之内,能够为用户所容忍就行了。
◆ 软件的健壮性误差――软件对规格定义之外的异常状况的适应能力(用户总是可能执行一些非法的操作等)。开发组应当在规格定义中就将异常处理囊括进去,并在设计时考虑更多的异常处理场景;这样用户的非法操作不至于引起系统的崩溃。
◆ 系统的性能误差――软件性能处于用户能够接受的范围之内。开发组尽力设计性能最优的方案,比用户的接受标准更高,为今后系统的演进留下更大的余量(
原创力文档


文档评论(0)