我对形式化方法的一点看法(欢迎讨论)
原创
©著作权归作者所有:来自51CTO博客作者贯颐奋戟的原创作品,请联系作者获取转载授权,否则将追究法律责任
在我看来,形式化方法就是使用精确的数学逻辑描述方法指导软件的开发过程。
其优点是首先机器可识别这样就能够实现自动化;其次无二义性且可以严格的证明开发的正确性,这样就能够保证程序的正确实现,给程序提供更好的安全性。
其缺点是该方法使用门槛高、难度较大。这种开发方法的引入将会给传统的程序开发人员带来巨大冲击。
软件形式化方法的研究始于20世纪50年代,兴于20世纪60年代的“软件危机”时期。经过30多 年的研究和应用,如今人们在形式化方法这一领域取得了大量、重要的成果,从早期最简单的形式化方法——一阶谓词演算方法到现在的应用于不同领域、不同阶段 的基于逻辑、状态机、网络、进程代数等众多形式化方法。形式化方法的发展趋势逐渐融入软件开发过程的各个阶段,从需求分析(功能描述)、设计、编程、测试直至维护。
那么它的前景怎么样呢?
为了能有一个直观的概念,我们把软件开发的发展进程与工业化进程进行一下比较。最初的软件开发像是作坊式的开发,工匠按照自己的想法制作产品;而后出现了著名的“软件危机”(20世纪60年代),应对软件危机有两种选择,一种是引入了软件工程的概念,把大批工匠集中起来,有组织的建造更大的产品,另一种是形式化方法,也就是说,遇到一个非常复杂的产品,单独的工匠已经无力面对,有两种解决方案,一种是有组织分工的使用大量工匠即“工程”思想,另一种是使用“机器”,最终的结果是两种方法都在发展,当然在“机器”不成谁的条件下,“工程”的方法发展更快;之后UML图(属于半形式化的方法)被引入,在一定程度上提高了开发的效率和质量。
如果软件开发行业会发生“工业革命”,那么“蒸汽机”很有可能就是形式化方法。在软件开发领域,人们的远大梦想是自动的生成代码和自动的生成工程。为达成这个目标,我们需要引入“机器”以实现自动化,而形式化方法就是“机器”的备选项。(我不清楚会不会出现或者存在其他的方法,但形式化方法理论上是可行的。)另外,可以清晰地看出软件开发已经从朴素的、非形式化的方法转变到了半形式化的方法,其趋势是向着更加严格、更加形式化的方向转变。
现在的形式化方法相当于“早期的蒸汽机”,性能还比较差,效率也不高,以至于还无法与人力相抗衡。所以至少它还需要发展,具体要发展多久很难说,也有可能像人工智能或者机器人那样几十年也没多少进展。感觉形式化的未来或许类似于语义网,看得到希望,却看不出远近。
形式化方法的应用在电路设计和协议设计上都取得了很大的成绩。相信它也能够在软件开发当中发挥威力。
虽然现在使用形式化的方法还不够成熟,但是它是软件开发未来发展的趋势。相信终有一天它会发挥出它的优势。
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java使用直接内存的好处
Java使用直接内存的好处
Java 数据 内存泄漏 -
软件形式化方法概述
开发中一直都受到多方面的争议。持
软件开发 软件系统 软件开发过程 -
#yyds干货盘点# 可信软件的形式化建模与方法
可信软件的验证技术-形式化建模与方法
归约 自动生成 软件系统 -
coq形式化验证学习进阶
(* TL m,表示取出m任务结构体里面的TL成员 *)
形式化验证 coq形式化 数据结构 构造函数 任务集 -
形式化验证的原理和过程
形式化验证就是通过数学方法对程序有一个精细的,准确的描述和认识。
形式化验证 formal method verification 建模