‘壹’ 提高软件质量的决定性因素
决定软件可维护性的因素,主要有以下几个方面:
1.系统代码的质量。例如:软件的架构、代码的框架及程序员代码的规范问题。代码中结构是否合理,变量命名是否规范,代码中注释是否详细,这些都会影响到系统的维护成本。
2.系统文档是否完善。例如:概要设计文档、详细设计文档、数据字典、接口文档等。文档的有无及详细程度,这些都直接影响到软件的维护成本。
3.团队人员的稳定性。如果团队的人员流动比较大,新人接手项目,中间有个熟悉原有系统代码的成本,同时编码风格的差异,也会造成系统维护成本的变化。于整个饲料加工生产线来说,要想在成品库中得到混合均匀度达到标准要求的配合饲料,除了必须要配备一台结构和技术参数符合工艺要求,能在较短的时间内获得满意的混合均匀度的混合机外,前后工序的合理安排及混合机本身的合理使用均是决定性的因素。
1、物料的充满系数
不论哪种类型的混合机,适宜的装料状况,是混合机能正常工作,并且得到预期的混合效果的前提条件。在分批混合机中,卧式螺带混合机的充满系数在0.6~0.8较为适宜,料位最高不能超过转子顶部平面;分批立式混合机的充满系数,一般控制在0.8~0.85;单轴或双轴桨叶高效混合机充满系数为0.8~1。物料容重>0.6时,按每批混合量计算;物料容重≤0.6时,可按容重范围。
他们说你高冷,却没发现只不过是思想的不同
广告
2、物料的混合时间
对于连续式混合机不存在这个问题,但对于分批式混合机,确定好混合时间对于混合物料的质量是非常重要的。混合时间过短,物料在混合机中没有得到充分混合便被卸出,产品的混合质量肯定会受到影响;混合时间过长,物料在混合机中被长时间混合,不但造成能耗增加、产量下降,并且会因为过度混合,造成组分的分离积聚,使混合均匀度反而降低。决定软件可维护性的因素有:
1)可理解性2)可测试性3)可修改性4)可移植性5)可重用性
应该采取哪些措施:
1)提高可理解性:模块化·详细的设计文档·结构化设计·程序内部的文档和良好的高级程序设计语言
2)提高可测试性:良好的文档对于诊断和测试是至关重要的,此外,软件结构·可用的测试工具和调试工具,以及以前设计的测试过程也都是非常重要的
3)提高可修改性;模块结构良好,高内聚,低耦合。信息隐藏·局部化·控制域与作用域的关系等也影响软件的可修改性
4)提高可移植性:把因环境变化而必须修改的程序局限在少数程序模块中,从而降低修改难度
‘贰’ 抽象到底是什么意思我怎么总是弄不明白谁能具体的解释一下举个例子,请不要到百度百科那去复制的。
共同特征是指那些能把一类事物与他类事物区分开来的特征,这些具有区分作用的特征又称本质特征。因此抽取事物的共同特征就是抽取事物的本质特征,舍弃非本质的特征。所以抽象的过程也是一个裁剪的过程,将不同的、非本质性的特征全部裁剪掉了。 所谓的共同特征,是相对的,是指从某一个刻面看是共同的。比如,对于汽车和大米,从买卖的角度看都是商品,都有价格,这是他们的共同的特征,而从其他方面来比较是,他们则是不同的。所以在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
编辑本段主要目的
抽象化主要是为了使复杂度降低,以得到论域中较简单的概念,好让人们能够控制其过程或以综观的角度来了解许多特定的事态。
编辑本段思考过程
在哲学里,“抽象化”是一种将观念抽离原本客体的思想过程。 抽象化使用了简单的手法,其将具体的细节保留成含糊、暧昧或无定义的样子;因此对于抽象事物的有效沟通需要在沟通的发受者之间有着某种直觉或共同的经验。 由具体事物中所抽离出的抽象事物之描述会有点含糊不清,此种含糊或暧昧即为抽象化的特征之一。因此,如报纸之简单的事物有可能可以被分成六个等级,例如道格拉斯·理查·郝夫斯台特在《哥德尔、埃舍尔、巴赫》(1979年)这本书中由抽象至具体排出之对含糊的描述: (1)一个出版品 (2)一份报纸 (3)《旧金山纪事报》 (4)5月18日的《旧金山纪事报》 (5)我的5月18日的《旧金山纪事报》 (6)我首次捡起时的我的5月18日的《旧金山纪事报》(而现在则不是我的了,因为我在几天后丢进火炉里烧了) 抽象化可以因此以不失其一般性的方式包含着每个细节的层级。而或许一个侦探或一位哲学家/科学家/工程师可以以此来学习某些事实,以对细节渐进加深的方式,来解决一场犯罪或一件拼图。
编辑本段指称对象
抽象化有时会有些含糊不清的指称对象;例如,“快乐”(当做为一个抽象化)可以指涉成能使人快乐的人事物。相同地,“建筑”不只指涉着安全、功能性建筑的设定,也指涉着创作和创新的元素,其目的是为了解决建造、空间利用及试图引起建造者、拥有者、观看者和使用者的情绪反应等问题。
具现化
不存在于任一特定地点和时间的事物通常会被认为是抽象的。相对地,此类抽象事物的例子或元素则可能会存在于许多不同的地点及时间内。此类的抽象事会被称做是“多重具现”的。 但不必然需要将“抽象”的观念定义成能具现的观念,也不必然需要将“抽象化”定义成具现化的相反作用。这样做会令“猫”和“电话”这些概念因不随外观而变而为抽象的观念,而一个特定的猫或一个特定的电话则会是“猫”或“电话”等概念的一个例子。
物质性
一个物理物件(一个概念或一个字的可能指称对象)被认为是“具体”的(非抽象的),若它是一个会出现在特定的地点和时间的“特定个体”的话。 抽象的事物有时可以被定义成不存在于现实或只存在于感官经验上的事物,如红色。但该定义会有如何决定哪些事是真实的(即哪些事是存在于现实中的)之困难性。例如,很难去决定如“神”、“三号”和“女神”等概念是真实的,还是抽象的,亦或是两者都有。 解决此类困难的一种方法是将其述语不论事物是一真实的、抽象的、具体的或一特定性质(如“好”)等都将其做为一个一般性的词汇。有关事物性质的问题故而会是个有关其述语的命题,其中的命题则仍然需要由研究者来判断真伪。在上面的“图2”中,如连接着方格和椭圆间箭头的图像间之关系可以标示着述语。不同抽象化的等级可以以多层的箭头依序地连在一起来标记。
编辑本段哲学里的抽象
抽象是哲学的根本特点, 抽象不能脱离具体而独自存在。 我们所看到的大自然景象就是大自然的实物在我们脑海中的抽象。抽象就是我们对某类事物共性的描述。 具体来说,抽象是指: 1、将复杂物体的一个或几个特性抽出去,而只注意其他特性的行动或过程(如头脑只思考树本身的形状或只考虑树叶的颜色,不受它们的大小和形状的限制)。 2、将几个有区别的物体的共同性质或特性,形象地抽取出来或孤立地进行考虑的行动或过程。 抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素。 软件工程过程中的每一步部可以看作是对软件解决方法的抽象层次的一次细化。在进行软件设计时,抽象与逐步求精、模块化密切相关,帮助我们定义软件结构中模块的实体,由抽象到具体地分析和构造出软件的层次结构,提高软件的可理解性。
编辑本段艺术里的抽象
大多数在艺术中一般会将“抽象”当做是抽象画的同义词。但它可以是指任何由现实世界中精炼出的物件或图像,或者是完全无关的其他概念。在最现实的意义之下,抽象画并不是真的是抽象的。 艺术家罗伯特·斯塔克写道:“距离放弃了形式的风景画且改去发觉不具表现主题地将颜料自由地涂在画纸上之更直接的表现方式,已经过了有十年的时间了,我也发展出了一个新的词汇;明和暗、暖和冷、making marks、brush-strokes like heart-rhythms。每一天都是一次独自的作画能力之测试。每一张画作都会被不断地被更改、被重制、被擦掉或被重画,只要它还留在这个工作室里……”
编辑本段抽象艺术
抽象艺术是与具象艺术相对的名称,也可称为非具象艺术。它的特征是缺乏描绘,用情绪的方法去表现概念和作画,而这种方法基本上就是属于表现主义的,最早见于康定斯基的作品。它是由各种反传统的艺术影响融合而来,特别是由野兽派、立体派演变而来。 “抽象”艺术在毕加索看来并不存在,他认为只不过有人强调风格,有人强调生活罢了。在米歇尔·塞弗尔看来,抽象艺术是:“我把一切不带任何提醒,不带任何对于现实的回忆——不管这一现实是否是画家的出发点——的艺术都叫作抽象艺术。 实际上野兽派和立体派促进了形与色的独立发展。是康定斯基进一步发现了它的奥妙,他在1910年画了第一幅断然抽象的水彩画,是一幅无具象愿望的、充满活力的重叠色点。康定斯基的创造性发明是从音乐中获得美学启迪,尔后捷克人库普卡直接从音乐中获取灵感进行抽象艺术创作。人称他是音乐主义画家鼻祖,后来他们共同组成抽象派。
编辑本段心理学里的抽象
荣格对抽象化的定义将思考过程扩展至包含四个互斥互补的心理功能:知觉、直觉、感情和思维。它们一起形成一个异化着抽象化过程的总体架构。当抽象化作用在相对立的功能之一时,其会排除到其他功能及如情绪等不相关事物在同一时间内的影响。抽象化需要对心里面功能的结构分歧做选择性的运用。抽象化的相对为具体化。
编辑本段程序设计的抽象
抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。它可以忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
编辑本段科学中的抽象
概述
“抽象”这个词拉丁文为abstractio,它的原意是排除、抽出。在自然语言中,很多人把凡是不能被人们的感官所直接把握的东西,也就是通常所说的“看不见,摸不着”的东西,叫做“抽象”;有的则把“抽象”作为孤立、片面、思想内容贫乏空洞的同义词。这些是“抽象”的引伸和转义。 在科学研究中,我们把科学抽象理解为单纯提取某一特性加以认识的思维活动,科学抽象的直接起点是经验事实,抽象的过程大体是这样的:从解答问题出发,通过对各种经验事实的比较,分析,排除那些无关紧要的因素,提取研究对象的重要特性 (普遍规律与因果关系)加以认识,从而为解答问题提供某种科学定律或一般原理。 在科学研究中,科学抽象的具体程序是千差万别的,决没有千篇一律的模式,但是一切科学抽象过程都具有以下的环节。我们把它概括为:分离—提纯—简略。 第一,所谓分离,就是暂时不考虑我们所要研究的对象与其他各个对象之间各式各样的总体联系。这是科学抽象的第—个环节。因为任何一种科学研究,都首先需要确定自己所特有的研究对象,而任何一种研究对象就其现实原型而言,它总是处于与其他的事物千丝万缕的联系之中,是复杂整体中的一部分。但是任何一项具体的科学研究课题都不可能对现象之间各种各样的关系都加以考察,所以必须进行分离,而分离就是一种抽象。比如说,要研究落体运动这一种物理现象,揭示其规律,就首先必须撇开其他现象,如化学现象、生物现象以及其他形式的物理现象等等,而把落体运动这一种特定的物理现象从现象总体中抽取出来。 把研究对象分离出来;它的实质就是从学科的研究领域出发,从探索某一种规律性出发,撇开研究对象同客观现实的整体联系,这是进入抽象过程的第一步。 第二,所谓提纯,就是在思想中排除那些模糊基本过程、掩盖普遍规律的干扰因素,从而使我们能在纯粹的状态下对研究对象进行考察。大家知道,实际存在的具体现象总是复杂的,有多方面的因素错综交织在一起,综合地起着作用。如果不进行合理的纯化,就难以揭示事物的基本性质和运动规律。马克思说:“物理学家是在自然过程表现得最确实、最少受干扰的地方考察自然过程的,或者,如有可能,是在保证过程以其纯粹形态进行的条件下从事实验的。”(《马克思思格斯选集》第2卷,第206页)这里,马克思所说的是借助于某种物质手段将自然过程加以纯化。由于物质技术条件的局限性,有时不采用物质手段去排除那些干扰因素,这就需要借助于思想抽象做到这一点。伽利略本人对落体运动的研究就是如此。 大家知道,在地球大气层的自然状态下,自由落体运动规律的表现受着空气阻力因素的干扰。人们直观到的现象是重物比轻物先落地。正是由于这一点,使人们长期以来认识不清落体运动的规律。古希腊伟大学者亚里士多德作出了重物体比轻物体坠落较快的错误结论。要排除空气阻力因素的干扰,也就是要创造一个真空环境,考察真空中的自由落体是遵循什么样的规律运动的。在伽利略时代,人们还无法用物质手段创设真空环境来从事落体实验。伽利略就依靠思维的抽象力,在思想上撇开空气阻力的因素)设想在纯粹形态下的落体运动,从而得出了自由落体定律,推翻了亚里士多德的错误结论。 在纯粹状态下对物体的性质及其规律进行考察,这是抽象过程的关键性的一个环节。 第三,所谓简略,就是对纯态研究的结果所必须进行的一种处理,或者说是对研究结果的一种表述方式。它是抽象过程的最后一个环节。在科学研究过程中,对复杂问题作纯态的考察,这本身就是一种简化。另外,对于考察结果的表达也有一个简略的问题。不论是对于考察结果的定性表述还是定量表述,都只能简略地反映客观现实,也就是说,它必然要撇开那些非本质的因素,这样才能把握事物的基本性质和它的规律。所以,简略也是一种抽象,是抽象过程的一个必要环节。比如说,伽利略所发现的自由落体定律就可以简略地用一个公式来表示: S=1/2gt2 这里,“S”表示物体在真空中的坠落距离;“t”表示坠落的时间,“g”表示重力加速度常数,它等于981厘米/秒2。伽利略的落体定律刻划的是真空中的自由落体的运动规律,但是,一般所说的落体运动是由地球大气层的自然状态下进行的,因此要把握自然状态下的落体运动的规律表现,不能不考虑到空气阻力因素的影响,所以,相对于实际情况来说,伽利略的落体定律是—种抽象的简略的认识。任一种科学抽象莫不如此。 综上所述,分离、提纯、简略是抽象过程的基本环节,也可以说是抽象的方式与方法。 抽象作为一种科学方法,在古代、近代和现代被人们广泛应用。诚然,严格意义的经验科学在古代尚未形成,那时人们关于自然界的知识包溶在浑然一体的自然哲学之中,并且带有朴素、直观的特点,但是,这决不意味着当时的自然哲学家们是不应用抽象方法的。例如,古希腊米利都的留基伯和阿不地拉的德谟克利特,他们相信宇宙间万物都是原子组成的,而原子是不可分的物质。宇宙间有无数的原子,并在一个无限的虚空中永远运动着。它们既不能创造出来,又不能毁灭掉。应当肯定,留基伯和德谟克利特关于原子的认识,在二千多年前,确是了不起的抽象成果。 在近代,科学抽象法得到更自觉的应用,并对这种方法作出理论上的考察。英国的弗兰西斯·培根是近代实验科学的始祖。他所论述的归纳法其中就包含着科学抽象的方法。培根在《新工具》一书中说: “我们必须不用火而用人心,来把自然完全分解开,分离开,因为人心亦就是火底一种。在发现形式方面讲,真正归纳法底第一步是应该先排除了一些性质,因为有一些性质,往往不存在于所与性质存在的例证内,或存在于所与性质不存在的例证内;有时所与性质虽减, 它们却增,所与性质虽增,它们却减。因此,在适当地排斥了,拒绝了那些性质以后,一切轻浮的意见便烟消云散,所余的只有肯定,坚固,真实,分明的形式。”(《新工具》,商务印书馆,1936年版,第185页) 培根所说的“人心”,就是人的思维能力,在他看来,我们必须用人的思维能力“把自然完全分解开,分离开开”,排除那些不相干的性质,从而揭示现象的因果性和规律性。培根以探索热现象为例,应用排除法,在排除了所有不相干的性质以后,发现“热是某种性质底一个特殊情况,那种性质就是所谓运动”。((新工具》,商务印书馆,1936年版,第l86-190页) 培根所说的排除法,归纳法中巳包含着抽象的方法。但是,科学抽象法并不局限于培根讲的排除法、归纳法。 随着科学的发展,抽象方法的应用也越来越深入,科学抽象的层次则越来越高。如果说与直观、常识相一致的抽象为初级的科学抽象,那么与直观、常识相背离的抽象可以称之为高层次的科学抽象。日本物理学家汤川秀树根据对物理学史的考察,指出了物理学的抽象化发展这一规律性。 “如果我们考察物理学史,我们都知道在近三、四百年内曾发生过两次大革命。第一次革命当然是由伽利略发起的和由牛顿完成的十七世纪革命。第二次革命则在将近十九世纪末发端于这样一些伟大的事件——X射线、放射性和电子的发现。这第二次革命有两次高潮:一次是在二十世纪初导致了普朗克和波尔的量子理论以及爱因斯坦的相对论,第二次是发生在本世纪二十年代量子力学建立之时。……”;结果就是导致了物理学的理论概念背离直觉(直观)和常识。换言之,在从二十世纪初开始的物理学发展过程中,一种抽象化的倾向已经变得引人注目了。当抽象的数学概念是逻辑一致的,而且它们的结论符合于实验时,即使它们与我们的直观世界图象相矛盾,物理学家们也不得不接受它们。”(汤川秀树《科学思维中的直觉和抽象》,译文载《哲学译丛》1982年第2期第17—18页) 在科学发现过程中,抽象方法起着什么样的作用,对于这个问题,历史上存在过两种对立的意见,一种意见认为科学发现靠的就是抽象法,科学发现的过程就是从经验事实中抽出最初的基本概念,然后一层一层地往上抽象,构成金字塔形的科学体系。这是古典归纳主义者的观点。如弗兰西斯·培根就持这种观点。他说:“寻求和发现真理的道路只有两条,也只能有两条。……感觉与特殊事物把公理引伸出来,然后不断地逐渐上升,最后达到最普遍的公理。这是真正的道路”。(《十六——十八世纪西欧各国哲学》,商务印书馆,1962年版;第10页) 与此相反,另一种意见认为抽象法并非科学发现的方法。如爱因斯坦就持这种观点。他在论述科学体系的层次问题时指出,“抽象法或者归纳法理论的信徒也许会把我们的各个层次叫做‘抽象的程度’,但是我不认为这是合理的,因为它掩盖了概念对于感觉经验的逻辑独立性”。(《爱因斯坦文集》,第1卷,商务印书馆,1977年版,第34页)在爱因斯坦看来,与经验层次最接近的理论命题不是从经验层次抽象得来,而是从更高层次的理论命题中推导出来的;最高层次的理论命题则是思维自由创造的产物。 科学活动的事实告诉我们,科学发现的过程是多种方法综合运用的过程。因此不能把抽象法的作用和其他方法的作用,包括直觉的作用在内,互相对立起来。抽象法离开其他各种方法,是不可能孤立地作出科学发现的。 古典归纳主义者认为依靠抽象法就能从经验事实中找出事物的规律性,形成科学理论,这种观点是不符合科学发现过程的实际情况的。那么,是不是说抽象法在科学发现过程中是毫无用处的呢?完全抹煞抽象法的作用,也是不妥当的。 抽象法在科学发现中是一种不可少的方法。人们之所以需要应用抽象法,其客观的依据就在于自然界现象的复杂性和事物规律的隐蔽性。假如说自然界的现象十分单纯,事物的规律是一目了然的,那倒是不必要应用抽象法,不仅抽象法成为不必要,就是整个科学也是多余的了。但是,实际情祝并非如此。科学的任务就在于透过错综复杂的现象,排除假象的迷雾,揭开大自然的奥秘,科学地解释各种事实。为此就需要撇开和排除那些偶然的因素,把普遍的联系抽取出来。这就是抽象的过程。不管是什么样的规律,什么样的因果联系,人们要发现它们,总是需要应用抽象法的。抽象法也同其他的各种科学思维的方法一样,对于科 学发现来说,起着一种助发现的作用。
抽象的类型和合理性原则
抽象的类型和合理性原则 在科学研究中,抽象的具体形式是多种多样的。如果以抽象的内容是事物所表现的特征还是普遍性的定律作为标准加以区分,那么,抽象大致可分为表征性抽象和原理性抽象两大类。
表征性抽象
所谓表征性抽象是以可观察的事物现象为直接起点的一种初始抽象,它是对物体所表现出来的特征的抽象。例如,物体的“形状”、“重量”、“颜色”、“温度”、“波长”等等,这些关于物体的物理性质的抽象,所概括的就是物体的一些表面特征。这种抽象就属于表征性的抽象。 表征性抽象同生动直观是有区别的。生动直观所把握的是事物的个性,是特定的“这一个”,如“部分浸入水中的那支筷子,看起来是弯的”,这里的筷子就是特定的“这一个”,“看起来是弯的”是那支筷子的表面特征。而表征性抽象却不然,它概括的虽是事物的某些表面特征,但是却属于一种抽象概括的认识,因为它撇开了事物的个性,它所把握的是事物的共性。比如古代人认为,“两足直立”是人的一种特性,对这种特性的队识已经是一种抽象,因为它所反映的不是这一个人或那一个人的个性,而是作为所有人的一种共性。但是,“两足直立”对于人来说,毕竟是一种表面的特征。所以,“两足直立”作为一种抽象,可以说是一种典型的表征性抽象。 表征性抽象同生动直观又是有联系的。因为表征性抽象所反映的是事物的表面特征;所以,一般来说,表征性抽象总是直接来自一种可观察的现象,是同经验事实比较接近的一种抽象。比如说“波长”,虽然我们凭感官无法直接把握它,但是,借助于特定的仪器,就可以把握到波长的某种表征图象。所以,“波长”也是一种具有可感性的表征性抽象。又如,“磁力线”的抽象也是如此。大家知道,磁力线本身是“看不见、摸不着’的,但是,如果我们把铁屑放在磁场的范围内,铁屑的分布就会呈现出磁力线的表征图象,所以,在这个意义上说“磁力线”也是来自一种可观察的表征性抽象。
原理性抽象
所谓原理性抽象,是在表征性抽象基础上形成的一种深层抽象,它所把握的是事物的因果性和规律性的联系。这种抽象的成果就是定律、原理。例如,杠杆原理、落体定律、牛顿的运动定律和万有引力定律,光的反射和折射定律、化学元素周期律、生物体遗传因子的分离定律、能的转化和守恒定律、爱因斯坦的相对性运动原理等等,都属于这种原理性抽象。 当我们考察原理性抽象的特点时,如下两点是值得注意的: 第一,原理性抽象不同于表征性抽象,它所抽取的不是事物的外露的表面特征,而是事物内在的规律性联系。比如说,“静止”、“运动”、“直线”,“等距”等等,可以说是表征性抽象,它们表征着物体的一种状态,而“每个物体继续保持其静止或沿一直线作等速运动的状态,除非有力加于其上迫使它改变这种状态”([美]H·S.塞耶编《牛顿自然哲学着作选》,上海人民出版社,1974年版第28页),就可以说是一种原理性抽象,它抽取的是物体运动的一种规律性。正因为原理性抽象抽取的不是外露的表面特钲,所以它同表征性抽象相比,更远离了经验事实,但又是更探刻的认识,它认识到自然界的内部秘密。 第二,在科学发展的常规时期,原理性抽象的实现是以已有的理论作为指导,抽象的结果——定律、原理,与已有的理论之间的关系是相容的关系,或者说不推翻已有理论的框架,而在科学发展的革命时期,反常的原理性抽象的实现,不仅不依赖于原有理论的指导,而且与原有理论相违背。因此,反常的原理性抽象的实现必须突破已有理论的框架范围。比如说,经典力学作为一种背景知识,对于预测宏观低速运动的物体的运动状态,把握其运动规律,曾经是十分有效的。但是,一旦进入了微观领域,面临的是高速运动的微观物体,如果仍以经典力学为指导,并且在它的理论框架基础上进行抽象活动,那就不仅不能有效地揭示诸如光、电现象这种高速运动的微观客体的运动规律,而且反而会阻碍对这方面规律性的发现,所以,必须突破旧有理论的束缚,才能实现反常的原理性抽象,爱因斯坦建立相对论是极有说服力的一个例子。如果不突破牛顿力学的绝对时空观,那么就不可能建立相对论。
编辑本段科学抽象应当注意原则
上面我们一般地考察了科学抽象的类型问题,那么,怎样才能合理地、有效地进行科学抽象呢?科学抽象应当注意以下的原则:
科学抽象的东西必须是具有普遍性的东西
个别的、表面的东西是偶然的东西,要进行抽象,当然不能完全脱离这些个别的、表面的、偶然的东西,但是抽象的目的并不是去抽取那些个别的、偶然的东西,抽象的目的是在于从个别的经验事实中抽出普遍性的东西,只有这样才有意义,才能进一步去认识事物的规律性。当然,普遍性不一定是规律性,但是不普遍的东西不可能是规律性的东西。所以,什么东西需要抽象,什么东西不需要抽象,从定性的观点来看,应当抽象出普遍性的东西。比如从对空气的观察和实验的一系列事实中,抽象地认识存在于体积、温度以及压力之间的普遍关系,并进行定量的描述,这样也就发现了气体定律。
高层抽象必须能演绎出低层抽象
自然界事物及其规律是多层次的系统,与此相应,科学抽象也是一个多层次的系统。在科学抽象的不同层次中,有低层的抽象,也有高层的抽象。在科学发现中,相对于解释性的理论原理来说,描述性的经验定律可以说是低层抽象,而解释性的理论原理就可以说是高层抽象。 必须指出,我们把科学抽象区分为低层抽象和高层抽象,是相对而言的。理论抽象本身也是多层次的。比如说,牛顿的运动定律和万有引力定律相对于开普勒的行星运动三大定律来说,是高层抽象,因为我们通过牛顿三大运动定律和万有引力定律的结合,就能从理论上推导出开普勒由观测总结得到的行星运动三大定律。 如果高层抽象不能演绎出低层抽象,那就表明这种抽象并未真正发现了更普遍的定律和原理。一切普遍性较高的定律和原理,都能演绎出普遍性较低的定律和原理。一切低层的定律和原理都是高层的定律和原理的特例。如果一个研究者从事更高层的抽象,其结果无法演绎出低层抽象,那就意味着他所作的高层抽象是无效的,不合理的,应予纠正。
总结
抽象思维法是指在感性认识基础上运用概念、判断、推理等方式透过现象,抽取研究对象本质的理性思维法。具体地说,科学抽象就是人们在实践的基础上,对于丰富的感性材料通过“去粗取精、去伪存真、由此及彼、由表及里”的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律。 科学抽象是由三个阶段和两次飞跃构成的辩证思维过程。第一个阶段是感性的具体,即通过感官把事物的信息在大脑中形成表象。第二阶段是从感性到抽象的规定,也是第一次飞跃。这个阶段是将事物的表象进行分解、加工、分析和研究,最终形成反映事物不同侧面的各种本质属性。第三阶段是从抽象的规定上升到思维的具体,这是科学抽象的第二次飞跃。它是将事物的各种抽象规定在思维中加以综合、完整地重现出来,形成对事物内在本质的综合性的认识。
‘叁’ 谁知道如何提高软件质量
【摘要】 软件质量是软件产品的灵魂。本文全面介绍了质量的概念,提出了从流程、技术、组织管理、人员技能发展等多个角度提高软件质量的重要性;并对目前国际上流行的 CMM 标准进行了介绍,提出了使用 PSP 和 TSP 来实现 CMM 的方法。本文最后还给出了中小型软件公司在提高软件质量方面的一个初步思路。【关键字】 质量管理,软件开发过程模型,软件分析和设计方法,软件测试, CMM 如何提高软件的质量已经不是一个纯粹的技术问题,而是一个工程的问题。自从计算机诞生以来,相应的软件开发就存在了。由于早期的计算机运行性能较低,软件的可编程范围也较狭窄,因此质量问题就没有那么突出。 50 年代后期到 60 年代,高级语言的相继诞生并得到了广泛的应用,随之而来的是软件规模也越来越庞大,越来越复杂。伴随着软件应用的越来越广泛,软件的质量问题就变得越来越突出。根据美国国家宇航局 NASA 的统计,在 80 年代初,软件引起的故障与硬件引起的故障,其比率约为 1.1:1.0 ,到了 80 年代末,这一比率已达到 2.5:1.0 。因此如何提高软件的质量成为软件工程研究的一个重点。自从软件危机产生以来,出现了很多提高产品质量的理论和方法,有的从技术角度出发,例如:面向对象技术的产生和推广,第四代语言的诞生等等;有的从自动化工具入手,例如: CASE 工具、过程控制软件、自动化管理平台等;有的从过程模型角度出发,例如:迭代模型、螺旋模型、 RUP 、 IPD 、净室软件工程等;也有从管理角度出发的,例如:团队管理、绩效管理、 PSP 、 TSP 等;也有从测试角度出发的,例如:加强全流程的测试等;一些相应的规范和标准也孕育而生,例如: ISO9000 系列、 CMM 、 QMS 等。然而每一种技术都不是绝对的,软件质量的提高应该是一个综合的因素,需要从每个方面进行改进,同时还需要兼顾成本和进度。一、什么是质量? 作为软件产品的销售人员,市场人员或维护人员经常会受到客户这样那样的指责或抱怨,客户说:你们产品的质量太差,不稳定等等。那么什么是质量呢?我们该如何来衡量质量呢?质量具有三个维度:" 符合目标。目标是客户所定义的,符合目标即判断我们是不是在做需要做的事情。" 符合需求。即产品是不是在做让它做的事情。" 符合实际需求。实际的需求包括用户明确说明的和隐含的需求。ISO 关于质量的定义表示如下:“ 一个实体(产品或服务)的所有特性,基于这些特性可以满足明显的或隐含的需要。 ” 注意,在这个定义中包含明显的需求和隐含的需求。而往往我们会忽略隐含的需求。因此在控制一个产品的质量的过程中必须关注这些隐含的需求,并给予应有的验证。 另一方面因为我们的产品是为客户提供服务的,因此凡是不满足客户需求的,我们都认为是一个失效( failure )。所以我们的产品必须始终围绕着客户的需求进行开发和验证。 这里我们谈到客户,其实在一个软件的需求收集过程中需要关注客户和用户。而我们经常会忽略客户与用户之间的区别。那么谁是客户?谁是用户呢?简单的来说, 客户是真正能够决定是否购买你软件的人,而用户是实际使用软件的人。了解了这个区别,对于你在分析需求的重要性的时候就可以进行参考。同时在产品质量验证 的时候也可以做出不同的权衡。另一方面我们在考虑我们用户需求的时候,往往只考虑了实际使用软件的人员,而忽略了其它一些人员对软件的要求或对软件造成的 潜在竞争,这包括维护人员的要求、系统管理人员的要求、软件上下游人员的要求、先前版本的情况、市场上竞争对手的软件情况等。 每个人提到质量的时候,经常会遇到下列矛盾,在这些矛盾中隐含着对质量的承诺【 5 】:" 质量需要一个承诺,尤其是高层管理者的承诺。但为了得到质量,高层管理者必须和其雇用的员工进行紧密合作;" 许多人相信没有缺陷的产品和服务是不可能的。但是控制在一定级别的缺陷数是正常并可接受的;" 质量经常是和成本紧密联系在一起,一个高质量的产品同时也意味着高投入。这是设计的质量和一致性质量的一个矛盾;" 一个高的质量要求需求规格说明书足够详细,以便产品可以根据这些规格说明书进行定量的分析。然而许多组织没有能力或者不愿意产生如此详细程度的规格说明书;" 技术人员经常相信规范和标准会束缚他们的创造力,因此就不遵照标准做事。然而如果要得到高质量的产品,就必须遵循良好定义的标准和过程。二、流程对质量的贡献 好了,既然已经了解了什么是质量,那么怎么才能改进软件产品的质量呢?从一个企业的长远发展来看,首先应当从流程抓起,规范软件产品的开发过程。这是一个 软件企业从小作坊的生产方式向集成化、规范化的大公司迈进的必经之路,也是从根本上解决质量问题,提高工作效率的一个关键手段。 软件产品的开发同其它产品(如汽车)的生产有着共同特性,即需要按一定的过程来进行生产。在工业界,流水线生产方式被证明是一种高效且能够比较稳定地保证 产品质量的一种方式。通过这种方式,不同的人员被安排在流程的不同位置,最终为着一个目标共同努力,这样可以防止人员工作间的内耗,极大的提高工作效率。 并且由于其过程来源于成功的实例,因此其最终的产品质量能够满足过程所设定的范围要求。软件工程在软件的发展过程中吸取了这个经验并把它应用到了软件开发 中,这就形成了软件工程过程,简单的说就是开发流程。 无论做什么事情,都有一个循序渐进的过程,从计划到策略再到实现。软件流程就是按照这种思维来定义开发过程,它根据不同的产品特点和以往的成功经验,定义 了从需求到最终产品交付的一整套流程。流程告诉我们该怎么一步一步去实现产品,可能会有那些风险,如何去避免风险等等。由于流程来源于成功的经验,因此, 按照流程进行开发可以使得我们少走弯路,并有效的提高产品质量,提高用户的满意度。 目前流行的流程方法有很多种,不同的过程模型适合于不同类型的项目。瀑布模型是应用的最为广泛的一种模型,也是最容易理解和掌握的模型,然而它的缺陷也是 显而易见的。遗漏的需求或者不断变更的需求会使得该模型无所适从。然而,对于那些容易理解但很复杂的项目,采用瀑布模型会是比较适合的,因为你可以按部就 班的去处理复杂的问题。在质量要求高于成本和进度要求的时候,该模型表现的尤其突出。螺旋模型是也是一个经典模型,它关注于发现和降低项目的风险【 8 】。螺旋型项目从小的规模开始,然后探测风险,制定风险控制计划,接着确定下一步项目是否还要继续,然后进行下一个螺旋的反复。该模型的最大优点就是随着成本的增加,风险程度随之降低。然而螺旋模型的缺点是比较复杂,且需要管理人员有责任心,专注以及有管理方面经验。RUP ( Rational Unified Process )是 Rational 公司提出的一套开发过程模型,它是一个面向对象软件工程的通用业务流程【 9 】。它描述了一系列相关的软件工程流程,它们具有相同的结构,即相同的流程构架。 RUP 为在开发组织中分配任务和职责提供了一种规范方法,其目标是确保在可预计的时间安排和预算内开发出满足最终用户需求的高品质的软件。 RUP 具有两个轴,一个是时间轴,这是动态的。另一个是工作流轴,这是静态的。在时间轴上, RUP 划分了四个阶段:初始阶段、细化阶段、构造阶段和发布阶段。每个阶段都使用了迭代的概念。在工作流轴上, RUP 设计了六个核心工作流程和三个核心支撑工作流程,核心工作流轴包括:业务建模工作流、需求工作流、分析设计工作流、实现工作流、测试工作流和发布工作流。核心支撑工作流包括:环境工作流、项目管理工作流和配置与变更管理工作流。具体可以参考图 1 。 RUP 汇集现代软件开发中多方面的最佳经验,并为适应各种项目及组织的需要提供了灵活的形式。作为一个商业模型,它具有非常详细的过程指导和模板。但是同样由于该模型比较复杂,因此在模型的掌握上需要花费比较大的成本。尤其对项目管理者提出了比较高的要求。图1 RUP 工作流程示意图IPD ( Integrated Proct Development )流程是由 IBM 提出来的一套集成产品开发流程,非常适合于复杂的大型开发项目,尤其涉及到软硬件结合的项目。 IPD 从整个产品角度出发,流程综合考虑了从系统工程、研发(硬件、软件、结构工业设计、测试、资料开发等)、制造、财务到市场、采购、技术支援等所有流程。是 一个端到端的流程。在 IPD 流程中总共划分了六个阶段(概念阶段、计划阶段、开发阶段、验证阶段、发布阶段和生命周期阶段),四个个决策评审点(概念阶段决策评审点、计划阶段决策评 审点、可获得性决策评审点和生命周期终止决策评审点)以及六个技术评审点,具体可以参考图 2 。 IPD 流程是一个阶段性模型,具有瀑布模型的影子。该模型通过使用全面而又复杂的流程来把一个庞大而又复杂的系统进行分解并降低风险。一定程度上,该模型是通过 流程成本来提高整个产品的质量并获得市场的占有。由于该流程没有定义如何进行流程回退的机制,因此对于需求经常变动的项目该流程就显得不大适合了。并且对 于一些小的项目,也不是非常适合使用该流程。图2 IPD 流程示意图三、流程与技术 流程和成功不是等价的。没有流程就成功是不可能得到保证,但有了流程并不意味着肯定能够成功。这恐怕是很多迷信于流程的人所不能接受的。但这的确是个事实。记得有个做了将近 30 多年的需求分析专家说过:即使是一个已经达到 CMM4 级的公司,也完全有可能做不好需求分析。为什么?技术,技术是成功的另外一个必要条件。就好比现在你要从上海到北京去,流程给你指出了最短的路径,技术提供给你最快的交通工具。两者结合就是完美。 对于软件开发来说,要保证软件的质量,需要掌握多方面的技术,包括分析技术、设计技术、编码技术和测试技术等等。在国内有一个普遍的非正常现象,就是大家 觉得只有编程能力才是玩电脑的真正技能。就好像造一套房子,其它都不重要,只要砖瓦匠有高超的技能就行了。尽管这个比喻会打击很多程序员的自尊心,但这的 确是一个事实。我们缺少系统级的工程师,在分析和设计方面的工作做得很不扎实。需求是一个项目的灵魂。模棱两可的需求带来不可避免的后果便是返工 —— 重做一些你认为已做好的事情。返工会耗费开发总费用的 4 0 % ,而 7 0 % ~ 8 5 % 的重做是由于需求方面的错误所导致的( l e ff i n g w e l l1 9 9 7 )【 10 】。想象一下如果你能减少一半的返工会是怎样的情况?你能更快地开发出产品,在同样的时间内开发更多、更好的产品,甚至能偶尔回家休息休息。在《软件需求》一书中关于如何进行需求分析给出了比较详细的介绍【 7 】, RUP 中关于需求的指导也是很实用的。 设计是最能体现一个工程师能力和水平的环节。一个好的设计基本上决定了产品的最终质量。设计是把需求转换成系统的一个关键步骤,它需要从自然语言描述的需求中寻找出设计的基础单元,构建出整个系统的构架。在 RUP 中关于系统构架师和设计师的定位是相当高的。关于设计方面的技能涉及面是很广的,包括传统的结构化设计到面向对象设计。设计人员需要掌握一定的建模技术。 UML 是国际上比较流行的一种建模语言【 11 】。在嵌入式方面, SDL 也是一种非常好的选择。《设计模式》是在设计思想方面总结的非常出色的一本书【 6 】,作为一名设计人员(尤其是面向对象设计人员)必须要好好研究一下。但是对这些模式的应用应当讲究一种自然的应用,千万不要因为模式而去设计模式,否则会适得其反。 现在的程序员热中于掌握多种编程语言,或者讲究语言的过分技巧化,而往往忽略了编程语言的规范化。不规范的语言应用给程序的可理解性、可维护性以及可测试 性带来了大的伤害,进而损害了产品的质量。某公司曾对中国程序员和印度程序员做过一个测验,这个测验要求参加者对一组数进行排序。测试结果发现,印度程序 员设计的程序使用的算法并不是最优,但却是最不容易出错的,并且几个程序员写出来的代码如出一辙。而几个中国程序员写出的代码,有的非常漂亮,很精练,效 率很高;有的却很冗杂,还有错误。如果大家是在做研究性的项目或纯粹兴趣性的项目,那么充分发挥自己的编程天才也无可厚非。然而,对于一个软件公司,产品 最终是要交给用户的,需要遵循的是一个软件产品的开发工程。因此这类软件的开发需要遵循一定的编程规范,毕竟开发的软件不是自己用,还需要和别人的集成, 还需要给以后版本重用和维护。 测试的技术将在第五节进行阐述。总之流程很关键,技术也很重要,我的观点是:鱼和熊掌,两者都不能放。