软件工程的哲学思考
摘 要:近年来,随着社会经济的发展,人们对高素质的软件人才的需求越来越旺盛,软件人才的培养变的尤为重要。同时,出现了许多先进的软件人才培养模式和方法,有力地推动了软件工程学科的发展。本文尝试用哲学的观点和原理来理解软件工程中的基本技术和方法,通过对软件工程中几个重要知识点的哲学分析,使枯燥的软件工程理论变得通俗易懂、深入浅出。提出了一种以哲学的观点来理解软件工程的新思想。
关键词:软件工程;哲学;人才培养模式
1 引言(Introduction)
软件工程,英文名Software Engineering,是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科[1]。软件产业的发展水平,决定了一个国家的信息产业发展水平及其♀在国际市场上的综合竞争力。目前,我国软件高级人才的短缺已经成为制约我国软件产业快速发展的一个瓶颈。在中国,国内市场对软件人才的需求每年高达80万人,而高校计算机毕业生中的软件工程人才还很缺乏,尤其是高素质的软件工程人才的极度短缺。尽快培养起适合信息产业所需要的高素质软件工程人才,已经成为信息化工作中的重中之重。
哲学,社会意识形态之一,是关于世界观的学说[2]。是理论化、系统化的世界观,是自然知识、社会知识、思维知识的概括和总结,是世界观和方法论的统一。是社会意识的具体存在和表现形式,是以追求世界的本源、本质、共性或绝对、终极的形而上者为形式,以确立哲学世界观和方法论为内容的社会科学。爱因斯坦这样谈论哲学:如果把哲学理解为在最普遍和最广泛的形式中对知识的追求,那么,哲学显然就可以被认为是全部科学之母。马克思也说过:真正的哲学是时代精神的精华。
马克思主义哲学与具体科学是一般与个别的关系,二者之间存在着既相互区别又相互联系的辩证统一关系。它们之间的区别表现在:具体科学以世界某一特殊领域的具体规律为自己的研究对象,因而其理论具有个别性和特殊性;马克思主义哲学以包括自然、社会和人类思维在内的整个世界的最一般规律作为自己的研究对象,因而其理论具有一般性和普遍性。它们之间的联系表现在:一方面,马克思主义哲学以具体科学为基础,没有具体科学的发展,马克思主义哲学既不可能产生,也不可能发展;另一方面,具体科学以马克思主义哲学为指导,马克思主义哲学为具体科学的研究提供正确的世界观和方法论。
2 分层DFD体现了抽象和分解的关系(Hierarchical
DFD embodies the relation between abstraction
and decomposition)
抽象和分解是两种相互区别又相互联系的思维方式。所谓分解,就是面向高层对其按某种方式从思维、逻辑或功能上进行分解,使其一分为几个相对独立的模块。所谓抽象,是面向底层,隐藏低层的各种差异和复杂实现,向高层提供一个统一的平台或接口。在生活中,这种分解与抽象的概念也革新了我们的思维习惯。面对一个问题,我们现在的习惯是,把它化成一个个小的整体,再分而治之,再归纳总结,找出其中的共性。或者先从一个基本内核做起,再层层抽象扩展,最终达到自己的目标。
抽象是指忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面。在求解一个复杂问题时,可以有许多抽象级别。例如,欲用计算机解决一个复杂的应用问题,开发人员首先将该应用问题抽象成一个计算机软件系统。在这个抽象层次上,可以忽略应用问题内部的复杂性,只关注整个软件系统与外界的联系,即软件系统的输入和输出。然后,将这个大而复杂的问题分解成若干个较小的问题(如子系统或功能⌘),每个较小的问题又可分解成若干个更小的问题(如功能或子系统)。如此自顶向下一层一层地分解下去,直到每个最底层的问题都足够简单为止。这样,一个复杂的问题也就迎刃而解了。自顶向下逐层分解充分体现了分解和抽象的原则。随着分解层数的增加,抽象级别也越来越低,即越接近问题的解。自顶向下的过程是分解的过程,自底向上的过程是抽象的过程。
功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止[3]。功能模型用数据流图来描述。对于稍微复杂一些的实际问题,在数据流图上常常出现十几个甚至几十个加工,这样的数据流图看起来不直观,不易理解,分层的数据流图能很好地解决这一问题。按照系统的层次结构进行逐步分解,并以分层的数据流图反映这种结构关系,能清楚地表达和容易理解整个系统。图1为数据流图的分层示意图。对顶层数据流图中所表示的系统进行功能分解得到一层数据流图,对一层数据流图中的功能进一步分解得到二层数据流图,以此类推。
3 分级表示的CMMI与量变质变规律(The
hierarchical representation of CMMI and the
quantitative and qualitative rhythms)
世界上任何事物都是质与量的矛盾统一体,而一切事物又总是处于不断的运动、变化和发展的状态中。因此,事物的发展、变化必然呈现出量变和质变两种状态[4]。量变转化为质变,质变又引起新的量变,如此循环往复以至无穷,把事物推向前进,这就是事物发展的一般过程。
所谓量变就是事物量的规定性的变化。包括事物在数量上的增减以及各个组成成分在空间排列次序上的变化、程度的加强或削弱、结构的复杂或简单、个别属性的变化等等。凡是没有引起事物根本性质改变的一切变化都是量变。量变和质变是对立的范畴,量变就是非质变。所谓质变就是事物质的规定性的变化,是事物根本性质的变化,是渐进过程的中断,是由一种质态向另一种质态的转化。
量变和质变的辩证关系:①任何事物的变化总是在一定质的基础上先从量变开始的。②量变积累到一定程度必然引起质变。量变是质变的必要准备,质变是量变的必然结果。③质变又会引起新的量变。一方面,质变体现着量变的结果;另一方面,质变又为新的量变开辟道路。④量变可以转化为质变,质变又可以转化为量变。如此循环往复,以至无穷,体现着事物的永恒的变化和发展。 分级表示的成熟度等级(Maturity Level,ML)给出了软件组织按规定的过程改进如何从成熟度低的等级逐步向更高的等级发展[5],共有五个组织成熟度等级,这些等级如图2所示。五个等级均规定了所包含的过程域(Process Area,PA)。
分级表示为实施过程改进的组织规定了既定的软件能力成熟度提升的路径,即从初始级开始逐级提升。而每个等级均规定了相关的一组过程域,如图3所示。图中除第一级以外,每个等级上给出了每一组过程域名称的英文字缩写。
软件组织按CMMI分级表示规定的成熟度等级,逐级攀登就能从低级到高级ฝ一步步地成熟起来。每一个等级都要经历量变到质变的过程,每个等级包含多个过程域,每完成一个过程域都是量变的积累,完成一个等级的所有过程域就达到了质变的临界点。软件组织的软件开发能力就跃升了一个级别,又在一个新的高度开始了量变的积累。
事物的发展是从低级到高级、简单到复杂的新陈代谢的过程;是由低层次的平衡逐步上升为高层次的平衡的过程。事物的运动平衡有低层次的平衡和高层次的平衡之分,实现由低层次的平衡组合向高层次的平衡组合转化过程就是事物的发展过程。在这个转化过程中,事物先由低层次的平衡→不平衡(某一方面进步了、或某一部分突破了)→高一层次的平衡(其余方面的递进的相互跟上)→再到不平衡→……更高层次的平衡。
4 黑盒测试中的因果图♥方法与原因和结果的辩证
关系(Causality diagram in black box testing and
the dialectical relationship between the cause and
the effect)
原因和结果是揭示事物的前后相继、彼此制约的关系范畴。客观世界到处都存在着引起与被引起的普遍关系,唯物辩证法把这种引起与被引起的关系,称为因果关系或因果联系。其中,引起某一种现象的现象叫做原因,而被某种现象所引起的现象叫做结果。
原因和结果之间的关系是既对立又统一的关系[6]。首先,原因和结果是对立的。在具体的因果联系中,原因就是原因,结果就是结果,二者不能混淆和颠倒。这是原因和结果区别的确定性。其次,原因和结果又是统一的,表现在:第一,原因和结果是相互依存的。第二,原因和结果在一定条件下相互转化。第三,原因和结果是相互作用的。
任何事物都处于因果联系之中,原因和结果既严格区别,又密切联系;因果联系具有普遍性、客观性。这就要求我们在认识事物时,既要看到它的产生是有客观原因的,又要看到它还会引起一定的结果。承认因果联系的普遍性和客观性,是人们正确认识事物,进行科学研究的前提;正确把握事物的因果联系,才能提高人们实践活动的自觉性和预见性。只有找出某一事物或现象产生的原因,才能认识其本质和规律,提出解决问题的有效方法。
因果图方法是一种帮助人们系统地选择一组高效测试用例的方法,它既考虑了输入条件的组合关系,又考虑了输出条件对输入条件的依赖关系,即因果关系,其测试用例发现错误的效率比较高[7]。
用因果图设计测试用例的步骤:
(1)分割功能说明书。
将输入条件分成若干组,然后分别对每个组使用因果图,这样可减少输入条件组合的数目。
(2)识别“原因”和“结果”,并加以编号。
“原因”是指输入条件或输入条件的等价类;“结果”是指输出条件或系统变换。每个原因和结果都对应于因果图中的一个结点,当原因或结果成立(或出现)时,相应的结点的值为1,否则为0。
(3)根据功能说明中规定的原因与结果之间的关系画出因果图。
图中左边的结点表示原因,右边的结点表示结果。画因果图时原因在左,结果在右,由上向下排列,并根据功能说明中规定的原因和结果之间的关系,用上述符号连接起来。必要时还可以引入一些中间结点。
(4)根据功能说明在因果图中加上约束条件。
由于原因②与③,④与⑤不能同时发生,分别加上约束条件E。
(5)根据因果图画出判定表。
列出满足约束条件的所有原因组合,写出每种原因组合下的结果(如有的话)。
(6)为判定表的每一列设计一个测试用例。
5 项目管理的本质与联系的普遍性原理(The
essence of project management and the general
principle of contact)
所谓联系,就是事物之间以及事物内部诸要素之间的相互影响、相互制约和相互作用。联系是普遍的。世界上一切事物都与周围其他事物有着这样或那样的联系[8]。世界是一个普遍联系的有机整体,是一幅由种种联系交织起来的丰富多彩的画面,其中没有一个事物是孤立存在的。联系的普遍性原理要求我们要用联系的观点看问题,既要看到事物之间的联系,又要看到事物内部诸要素之间的联系。
项目管理的目标,就是以最小的代价(成本和资源)最大限度地满足软件用户或客户的需求和期望,也就是协调好质量、任务、成本和进度等要素相互之间的冲突,获取平衡。概况地说,项目管理的本质,就是在保证质量的前提下,寻求任务、时间和成本三者之间的最佳平衡[9],如图5所示。
项目三要素:任务、时间和成本之间是相互影响、相互制约和相互作用的关系。在一个项目中,一般说任务、时间和成本中的某项是确定的,其他两项是可变的。这样,我们就可控制不变项,对可变项采取措施,保证项目达到预期效果。例如,产品质量是不变的,要有足够的时间和成本投入去保证产品的质量。但同时市场决定产品,时间受到严格限制,这时,如果要保证产品的功能得到完整的实现,就必须有足够的成本投入(人力资源、硬件资源等)。如果成本也受到限制,就不得不减少功能,实现产品的主要功能。
6 结论(Conclusion)
软件工程知识中蕴涵了丰富的哲学思想,让学生掌握这些哲学思想,对学生深刻理解并灵活运用软件工程知识,激发学生的想象力和创造力,意义重大[10]。本文采撷了软件工程理论中一些简单的现象进行哲学分析,旨在帮助大♡家进一步理解软件工程理论的思想精髓。其实软件工程中许多现象都和哲学思想相关,如:软件设计方法的改变中体现了唯物辩证法中发展的观点。大型软件开发过程中资金、开发时间、开发人员之间的辩证联系。需求设计和具体编码是原因和结果的辩证关系。软件维护过程中体现矛盾的斗争性。软件功能和底层代码之间是现象和本质的关系等等。这些都将是下一步研究的重点目标。从哲学的角度讲,人们更希望用软件工程理论来改造世界而不仅仅是认识世界。