首先,经过课上老师的讲解和对资料的查阅,我认为银弹是存在的。
传统机器开发软件并不复杂,但今天机器包含了定位同步、机器人与CNC集成、安全、液压、HMI、视觉等的集成,并且,需要与MES互联提供语义互操作的能力,远程维护与诊断的能力,这也使得机器的软件开发较之十多年前更为复杂且庞大。
但是,对于设备制造商而言,软件的复杂性也为机器的开发带来了很多困难,(1).开发进度难以预测,(2).开发成本难以控制,(3).用户对产品功能难以满意,(4)产品质量难以保证,(5).软件难以维护,很多时候,需求的不明确,技术变化引发的变更,对于很多创新的机器开发而言,面临着一些未知的风险,都会使得软件开发变得同样充满挑战。
什么是银弹?它是否存在?
IT行业的大规模软件开发使得这些困难更早的被爆发,也引发了软件工程的方法论研究,自动化行业可以从其中窥见一斑。
从老师的PPT可以知道,20世纪80年代,Brooks在其著作”No Silver Bullet: Essence and Accident in Software Engineering“,对软件工程的根本性困难和次要困难进行了论述,他的一个基本论断是”没有银弹“*(银弹:欧洲中世纪的传说中有一种叫“人狼”的妖怪,只有用银子制成的特殊子弹才能杀死人狼。银弹用于比喻解决软件开发的根本性困难的有效手段)。即,没有任何一种技术活管理上的进展能够独立地承诺在10年内大幅度提高软件的生产率、可靠性和简洁性“。
Brooks所说的次要困难是指软件开发中那些曾经存在或者目前仍然存在,但并非与生俱来的一些困难。这些问题在过去一些年头里已经得到了解决,例如:高级语言、分时、统一开发平台等,这些进展极大的提高了软件开发效率和质量,但由于软件开发中的根本性困难的存在,这些进展对于软件开发的现状还难以带来本质的变化。
与此同时,Brooks也对一些可能的“银弹”进行了分析,包括购买而非自行开发(商用第三方构件),需求净化和快速原型、增量开发、好的设计师等,这些手段虽然也不能从本质上解决问题,但无疑能够在一定程度上帮助我们提高软件开发效率和质量。
软件复用与构件技术
Brooks认为在软件领域不存在银弹,然而并非所有人认同他的观点,Cox于1990年在“BYTE”杂志上发表了文章“There isa Silver Bullet”,他认为”软件复用和可插装的构件技术能够从根本上改变软件的开发模式“,软件复用的兴起使得Brooks本人也很关注,他随后在”No Silver BulletRefired”一书中承认复用所带来的革命性成果:“解决软件构件根本困难的方法是不进行任何开发。软件包知识达到上述目标的方法之一,另外的方法是程序复用。实际上,类的容易复用和通过继承方便地定制是面向对象技术最吸引人的地方。”,他在这篇文章中引用了Jones的观点,即“关注质量,生产率自然会随着提高“。
软件复用是指通过已有软件的各种有关知识来建立新的软件,这些知识包括:领域知识、开发经验、设计经验、体系结构、需求、设计、编码、测试和文档等
严格意义上的软件复用是指:重复使用“为了复用目的而设计的软件”的过程
软件复用技术虽然源自大型软件的开发,但是,其思想一样对于工业自动化和今天的智能时代的制造业开发系统有极高的借鉴价值。
对于软件复用而言,从软件工程角度分析,它必须制定一定的设计原则,如下描述:
在一个整体的概念和框架下,而不是在随意的方式下定义一个构件,以便增大复用的机会
构件设计的上下文无关:构件在新的环境中被使用时,无须将使用它的构件一起牵制过来
变化影响局部化:变化影响代码局限在一个小的范围内
构件应符合高内聚、低偶合
服务目标定义要单一:为了减少调用的次数,最好不要定义一个服务来处理附加的服务
让服务的接口保持最小
服务的命名能清晰地表达它要做的事:即“宾语+动词”的命名形式更有利于人们找到相关的服务。
软件复用是目的,而构件则是实现方法
构件技术,必须基于强大的服务平台做支撑,基础软件平台的必要性是毋庸置疑的,因此,构件必须是基于一定的软件基础前提下来实现。
构件的定义
构件是预先创建的(为什么)
原因一:源代码复用代价高,最好预先创建
原因二:应用集成中要求以未预料的方式复用
原因三:可维护性问题,构件间的界限更明确
原因四:易于采用渐进的开发方式
构件是黑盒的
内部结构进行良好的封装
通过接口提供服务(接口的规格说明书)
构件是可分离的
构件的定义是高内聚和低耦合的
构件的封装使得其它构件无需了解其内部知识
构件能用于组装和部署
构件组装在编译之后
构件部署在组装之后,也有在运行时组装(Jini)
构件是依靠支持技术和工具的
构件容器:提供支持构件的运行时环境,提供组装和部署工具
综上,软件构件的定义:
一个软件构件是可执行软件的一个可分离的单元
只能通过构件的接口来访问它的服务
必须能得到其接口的细节
可以与其它构件实现互操作
需要某种环境的支持
在进行了必要的组装和配置过程之后,它才能以接口规定的方式来使用
实现软件复用所需的技术
图3-实现软件复用所需的技术
如图3所示,软件复用所需相关技术来实现构件的设计与封装,这些技术包括:
(1).领域工程主要是指在行业里的应用积累和模型抽取,并由专家来定义行业库的模型,如针对包装机、注塑机(油压、全电、二板、色母等)。
需求分析、构件模型、软件验证技术的融合才能更好的开发构件。
(2).软件再工程:主要是对已有的软件功能进行构件技术架构下的重设计,封装和验证,确保其软件健壮性,以及完整性。
(3).软件构架技术:如何对构件进行标准化和描述,在自动化领域可以基于IEC61131-3,、PLCopen的标准来进行标准化。
(4).构件组装:构件之间的接口、使能关系、连接与UI接口的设计,是软件内部构造和外部互联构造的设计关键,因此,借助于开放技术当然可以**降低工作量,因此,基于IT技术的软件模块更容易实现标准化的组装。
因此,软件开发过程中是存在银弹的。