发信人: leitiger(雷老虎)
整理人: leeyg(2001-06-05 22:08:02), 站内信件
|
2000年9月8日,北京家中。
软件工程过程是什么?
1、 首先假设存在一个理想的不随时间变化的有限需求,即在有限的时间内,一定可以将需求形式化的完全表达出来。在此前提下,软件工程过程是一个信息表达过程,目的是用程序设计语言表达需求信息,从需求信息到最终的程序语义的转换过程。这一过程包括两个方面的推进过程:
(1) 信息的不断补充过程,即在从需求信息向程序设计语言表达的努力过程中,需求信息是在不断补充的过程。比如瀑布模型,我们把软件工程过程划分为数个阶段,每个阶段都在不断地补充需求信息,越早期的阶段,所收集补充的信息越具有一般性和全局性:一般性指早期信息描述使用的是抽象程度较高的语言;全局性指对软件系统具有全局影响的信息。越后期的阶段,补充的信息越具体化和局部性。
补充信息可能补充正确的信息,也可能补充错误的信息,由于认识必然是从片面到全面,在某一阶段补充错误信息的风险必然存在,完全避免是不可能的。
之所以将软件工程过程分为阶段,早期收集全局和抽象信息,后期收集局部和具体信息,正是因为错误的“全局抽象信息”的修正代价要比错误的“局部具体信息”大,表现出来就是我们熟知的“错误放大理论”。
(2) 形式化程度逐步提高的过程,从需求信息到最终的程序设计语言,前者是从现实世界中来,往往非形式化,后者则高度形式化,我们一致在努力将形式化描述的范围向需求信息端推进。
形式化有很多好处,比如减少歧义,便于人为理解和机器自动处理等等。但形式化也有缺点,比如往往具有较强的领域性,不同的领域形式化方法往往有不同的特点,难于提出普遍适应各种领域的描述方法。所以好的形式化方法一定要提供良好的扩充机制,必要的时候还要补充部分非形式化描述。
2、 如果需求是随时间变化的,可以认为是早期引入了“未来是错误的”需求信息,之所以这样说,因为软件系统的应用是在“未来”而不是早期提出需求的时候,我们可以说软件工程过程是“面向未来”的。这可以归入上面关于引入错误信息情况的讨论。
根据上面的思考,我们来大胆地提出一个问题:软件工程过程努力的目标是什么?或者说什么是好的软件工程过程呢?
理想的软件工程过程是需求信息全部采用形式化方法描述,从而计算机可以直接理解和处理。
努力的方向可以从上面这句话以及上面的讨论中提取:
狭义了软件工程过程:
1、 尽量用形式化方法描述需求信息,包括从需求信息向程序设计语言转变过程中的中间描述方式。描述方法要尽量贴近现实世界,接近人类认识方法。描述方法要求即可以描述抽象程度高的信息(软件工程过程早期),有能描述具体的信息(软件工程过程后期)。
2、 努力减少软件工程过程中,或需求信息收集补充过程中的错误信息引入。其实采用形式化描述方法可以减少歧义,也有助于减少错误信息引入,除此之外,提高对现实世界的认识程度是减少错误信息的本质方法,比如“领域专家”对领域内的认识深度深,前瞻性好(由于软件工程过程是面向未来的,前瞻性是必要条件);而“跨领域专家”的认识背景广博,对事物的认识更加全面。
广义的软件工程过程:
辨证唯物主义认识论告诉我们,认识必然是感性(非形式化)到理性(趋于形式化),具体到抽象,片面到全面的过程。认识的主体是人,认识的过程必然由人来完成,也必然符合上述规律。明确这一规律,可以指导我们认识方法。
我们还可以作出一个结论,只要认识的主体是人,软件工程过程就必然存在,并符合上面的规律。
机器认知尚处于起步研究阶段,我们还可以大胆地畅想,未来世界里,机器通过形式化方法认知世界,形式化问题可以解决,但由具体到抽象(形式化抽象本身就是制约机器认知的关键问题),由片面到全面的规律仍然起作用。所以关键问题就是“形式化抽象”问题。现在的知识工程正延着这一方向的探索。
---- 我雷老虎以德服人,呵呵。
|
|