计算机软件工程技术中的逻辑应用
摘要
之间存在着紧密的联系,学科之间的渗透是当代科学发展的一个 重要趋势。本文主要探讨逻辑学在软件工程开发中的应用问题。由于软件工程技术所 涉及的内容比较广泛,因而,本文只是选取软件工程技术中软件部分生命周期、软件 开发阶段、以及软件项目管理中逻辑的应用展开探讨。
本文绪论部分主要为了说明软件工程与逻辑学之间联系的必要性,并简单地阐述 了论文选题的缘由及意义、国内外研究的现状、以及研究的框架和思路。第一章紧密 结合软件工程中的软件部分生命周期中逻辑的应用展开讨论,从软件工程的概念出 发,以需求分析作为切入点,再利用逻辑分析的合理性,主要结合了逻辑学中概念的 内涵和外延的应用,然后用软件工程中的事例来进行说明,并引入概念的分类与领域 建模中的应用进行对比。第二章则通过对软件开发阶段软件的分析,分别从各个阶段 出发,再次结合逻辑学中概念的限制和概括、种属关系以及真值函数的对比等方面进 行研究,同时结合一些实例来进一步说明逻辑学在其中的应用。第三章对软件工程技 术中的其他技术展开讨论,结合归纳逻辑的一些推理和证明的相关知识以及一些逻辑 方法,主要讨论软件开发团队逻辑的应用和一些逻辑方法在软件项目管理中的应用, 具体阐述了逻辑方法在团队管理中的应用。在论文结语部分,对全文进行了总结,进 一步说明逻辑学与计算机软件工程之间的关联,以及对交叉学科结合的展望。
关键词:软件工程,逻辑学,概念,逻辑方法。
摘要
绪论 1
一、 选题的缘由及意义 1
二、 国内外研究的现状 2
三、 研究的框架及思路 5
第一章软件工程技术中的软件部分生命周期逻辑的应用 6
一、 软件定义阶段逻辑的应用 6
(一)内涵和外延 7
(-)定义阶段具体的应用 8
二、 领域建模逻辑的应用 : 10
第二章软件开发阶段逻辑的应用 11
一、 需求分析阶段的应用 11
二、 软件设计(规范描述)的应用 16
三、 代码生成中的联系 19
四、 软件测试阶段的应用 20
五、 软件维护中的应用 21
第三章软件项目管理中逻辑的应用 23
一、 软件开发团队逻辑的应用 23
二、 逻辑方法在软件开发团队中的应用 25
(一) 抽象上升到具体的应用 25
(二) 分析和综合的应用 25
(三) 归纳和演绎的运用 26
(四) 归纳逻辑在软件开发团队中的应用 27
结语 33
参考文献 34
读研期间己发表科研论文 36
致谢 37
绪论
_、选曜的缘由及意义
目前现代逻辑中对软件工程研究领域中的人工智能与识别的深入研究比较多,比 如想要研究的软件工程技术中软件开发团队模式,我们可以利用逻辑方法去分析其中 的合理性,合理的定义整个开发组织中的各种角色、职责和技能要求,合理明确“谁”、 在“什么时间”、做“什么”、“怎么做”和如何评测等内容,不断改进软件团队的 生产效率和软件产品质量以此对软件工程中软件领域建模进行深入研究,可以类比于 数学建模,选择几个经典领域比如说高考阅卷系统、校园卡建设、地铁管理系统、环 境评价体系等的一个或几个进行对软件领域建模。数理逻辑与计算机的结合是现代逻 辑学发展的第一次转向。上世纪40年代,冯诺伊曼在从事电子计算机的研制时,把 30年代中数理逻辑的成果特别是图灵机的成果充分加以吸收,从而为现代电子计算 机的研制做出了开创性的贡献。包括图灵机理论在内的可计算性理论现在已成为整个 计算机科学的基础理论,是不可缺少的工具。数理逻辑的成果推进了计算机科学的发 展,同时,数理逻辑也随着计算机科学的发展得到广泛普及。①当前,逻辑研究正在 经历第二次转向一认知转向。逻辑研究与认知科学相结合起源于当今计算机科学发展 的需要。当前计算机科学发展进入了知识处理和智能模拟领域,各国科学家们正致力 于研究具有人类智能的第五代计算机,这种计算机能够模拟人的各种感知以应对外界 的变化。由于当代科学对人脑研究还是处于黑箱阶段,不能揭示人脑内部活动的全部 过程,因此,利用逻辑知识模拟其内部反应过程并以此做成应变系统是不可能的。然 而,尽管人们对人脑内部活动不了解,但却可以掌握它的外部反应。与此同时,一系 列尚待解决的新问题和急需研究的新领域也不断突现。人们在上述方向上已取得的成 果和未解决的问题已是逻辑学家所关注的热点,这一切暗示着逻辑学正在经历它诞生 以来的又一次重要的变化:逻辑学的认知转向。上述交叉学科将带动逻辑学和认知心 理学的发展,使它们为信息科学尤其是计算机科学的理论与应用提供方法。因而,说 明逻辑在此研究具有重要意义。②我们知道,计算机领域对于几个逻辑体系不同计算 机或软件系统也存在着互连和兼容的问题,我们不能保证所有的软件系统可以兼容, 如何进行协调?如何使其最大程度上兼容?如果不能兼容,软件系统可否自动予以调
您李夏妍、张敏强:“认知逻辑研究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第117-118 页。
•李夏妍、张敏强:“认知逻辑硏究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第118-119 页。
整?这些都是需要研究的问题。其实计算机逻辑语言并不多,大家在编写相关程序的 时候是可以考虑兼容性的,但是有许多逻辑语言是不完备的,用来开发出来的程序具 有许多漏洞,如果两种不同语言开发出来的软件可以兼容,并且能够减少运行中的漏 洞,提高运行的安全性,从逻辑语言相容的角度来考虑,从而提高编程效率。可以运 用逻辑技术深入研究利用逻辑系统兼容性研究,更便于程序员开发设计软件,节省大 量的人力、物力并且在后期的软件维护中,通过这些研究也便于改进软件。
此外,本文课题也是2013年中国逻辑学会学术研究项目立项名单中青年项目(本 人是主要参与者,排名第二);从应用的角度,交叉学科将带动逻辑学和其他学科的 发展,使它们为信息科学尤其是计算机科学的理论与应用提供方法。用到计算机软件 设计知识,又深深与当代逻辑发展和应用密切相连,这体现了学科间的交叉性和融合 性,同时无论是对于逻辑研究还是对于市场分析研究,智能软件开发方向主要研究以 认知逻辑、非形式逻辑、数理逻辑和人工智能的逻辑为工具,以人类知识表达为背景, 结合具体学科的知识表达和推理特点,建构智能化推理的模型,开发具有实用性的智 能软件,将人文社会科学的技术成果转化为生产力。
①通过此研究我们既要运用到数学建模方面知识,也要用到计算机软件设计知识, 又深深与当代逻辑发展和应用密切相连,这体现了学科间的交叉性和融合性,同时无 论是对于逻辑研究还是对于市场分析都具有非常重要的意义。本文从软件工程技术角 度入手,可以说此项研究贯穿了软件工程技术一系列的方面,因而具有一定的理论意 义。
二、国内外研究的现状
李未在《一个开放的逻辑系统中提到联合国教科文组织将逻辑学列为与数学、物 理学、化学、生命科学等并列的七个基础学科之一,其重要性不言而喻。②回顾它走 过的历程,展望未来,它将是充满活力的。林作徐、戴汝为在《纯悴理性批判与人工 智能》中提到计算机科学的发展使得人们有理由认为:对于任何一个知识领域,只要 严格地给出它的表达方式和推理方式,我们便可利用计算机解决它的一些问题。在这 一观点的支持下,20世纪中后期计算机科学的发展进入了知识处理和智能模拟领域。 ③国外一些学者提出的比如构造逻辑系统描述(高级)认知过程的特征;利用它们进行 知识表达与处理和研制新型软件,这已成为逻辑学研究的主流方向。另一方面,数理 逻辑尤其是Truign机理论的发展,启发人们用计算机隐喻来理解人类的信息加工过
。李夏妍、张敏强:“认知逻辑研究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第119-120 页。
応李未:“一个开放的逻辑系统”,《中国科学》1992年第10期,第1104-1113页。
'林作軽、戴汝为:“纯粹理性批判与人工智能”,《计算机科学》1992年第5期,第1-6页。 程,这为用心理学实验技术研究人的推理提供了条件;在20世纪70年代,人们终于 有可能用实验手段来判定,人是否采用某些逻辑规则和模式进行推理,这使得人类第 ―次有能力运用科学的方法研究思维(高级认知过程)的形式与规律。从国外研究趋势 来看,冯棉在《逻辑科学,将充满活力》中展望中国逻辑科学未来的发展趋提到以下 几个研究领域将会在中国逻辑学充满活力:
1.认知逻辑:认知逻辑是现代逻辑学与哲学的认识论、认知心理学的交叉学科。 它是逻辑学富有创新性的发展方向之一,推动逻辑学研究向认知方向的转化。
2.自然语言逻辑:自然语言逻辑是逻辑学和现代语言学的交叉学科。
3.自动推理和机器证明:自动推理和机器证明是逻辑学和数学、计算机科学的 交叉学科,它试图借助计算机来实施推理和证明的自动化,使人们从复杂的、难以胜 任的逻辑推理中解放出来。
4.逻辑哲学:逻辑哲学是逻辑学和哲学的交叉学科,是现代逻辑与现代哲学相 互渗透、相互作用的产物。它从哲学的层面上对逻辑科学作整体的考察,关注逻辑的 本体论承诺、逻辑真理的性质、逻辑与其他科学的区别和联系。
通过上述研究,我们知道学科之间相互交叉渗透是当代科学发展的一个重要趋 势,学科交叉的形成与发展极大地推动了经济与社会的发展。®
从CNKI数据库的搜集的与“逻辑发展”相关的论文多达124篇,而以“逻辑系 统”为主题的论文共搜索到24篇,题目中直接出现“计算机软件工程与逻辑系统” 字样的期刊论文只有2篇。学术著作方面,其中比较有代表性的著作有任晓明、桂起 权主编主编的《计算机科学哲学研究:认知、计算与目的性的哲学思考》,对于逻辑 与计算机方面,相关著作有邹崇理《自然语言逻辑研究》;陆汝铃《人工智能(上)(下)》; 吴炳荣、王雨田《归纳逻辑与人工智能》;李友仁《软件工程与软件质量分析》;黄 锡滋《软件可靠性、安全性与质量保证》这几本书中对软件和逻辑做了一些介绍,就 逻辑这门学科本身来说,当逻辑被越来越多地用于形式化哲学、语言、人工智能、逻 辑编程和计算机等这些领域时,所需要的逻辑的种类是越来越复合的。从研究内容来 看,陈波在《从人工智能看当代逻辑学的发展》中指出近几年学术界对计算机中逻辑 应用与发展研究取得了一系列成果,自1990年举办首次金岳霖学术奖(逻辑学)评 奖活动中评出的12项获奖成果中,大多数属于现代逻辑的各个分支领域。20多年后 的今天,我国的逻辑科学更是发生了显著的变化:对外交流日益频繁,涌现出一大批 具有现代逻辑素养的学科带头人,更新了逻辑学的教学体系,发表了大量的现代逻辑 论著,有的学术成果已经达到了国际的先进水平。冯棉在《逻辑科学,将充满活力》 中提到学术研究的现代化。近年来,我国学者在现代逻辑的研究中成果丰硕,涉及现
C冯棉:“逻辑科学,将充满活力”,《社会科学报》2004年第4期,第5-9页。
代逻辑的各个领域。以下述三项成果最具有代表性:
1.北京大学哲学系周北海教授的论文《Grafted-Frame and Si-Completeness》。这 篇题为《嫁接框架与S1-完全性》的论文发表在国际权威的国际权威的《符号逻辑杂 志》上。S1是现代模态逻辑的奠基者C丄Lewis所建立的五个模态命题逻辑系统之一, 一直未能建构出来,这成了模态逻辑研究中的一个空白点。周北海教授的论文巧妙地 将形式语义中的模态框架和相干框架组合起来,构建了一种新型的框架一一嫁接框 架,然后用其证明了 S1的完全性。这篇论文于2000年荣获第二届金岳霖学术奖(逻 辑学)一等奖。
2.北京大学哲学系刘壮虎教授的有关“邻域语义学”研究的系列论文。邻域语 义学是一种新型的语义理论,最初用于模态命题逻辑。刘壮虎教授在《领域语义学和 模型完全性》、《直觉主义逻辑的完全性和不完全性》、《相干逻辑的邻域语义学》、
《Neigh-borhood Semant ics of Modal Predicate Logic^、《初基演算的邻域语义学》、 《邻域语义学与推演系统的完全性》等一系列论文中,提出了适合一般命题逻辑的邻 域语义学,对诸多现代逻辑分支作统一的处理,得出许多一般性的结果。也为不同逻 辑系统的分类和比较提供了基础,并有助于澄清某些重要的逻辑问题和逻辑哲学问 题。
3.中山大学逻辑和认知研究所鞠实儿教授的“基于幵放世界预设的逻辑”的系 列论文。鞠实儿教授在《基于开放世界假定的3-值命题演算系统》、《可能世界的封 闭性和否定联结词》、《基于开放世界预设的3-值逻辑》等系列论文中,提出了封闭 世界和开放世界的预设。这是第一个描述开放域的演绎逻辑系统,为开发基于开放世 界假定的各类逻辑系统提供一个平台。这些系列论文于2002年荣获教育部高等学校 人文社会科学研究优秀成果一等奖。
综上,近年来在国内、国外的逻辑研究领域中出现了一些新动向,即在普及逻辑 知识的教学领域从系统地传授传统逻辑知识(国内称之为普通逻辑)、数理逻辑的同 时,向教授包容多种推理方法的非形式逻辑转变;在科学研究应用领域中逻辑研究从 以数理逻辑为主的哲学逻辑扩展为与认知科学、计算机科学、语言科学相结合的应用 逻辑研究。
从统计结果来看,无论是以“计算机” “人工智能”或“逻辑学”为关键词检索, 都有数百条信息,由此可见,逻辑学与计算机之间的研究一直都是当今热门课题之一, 特别是人工智能方面的研究。当然,其中专门关于软件工程与逻辑学的研究,几乎没 有。诸多论述都是从某一具体学科视角出发而论或者从某个方面,也有把几种学科之 间结合起来的,但没有专门关于软件工程中逻辑学应用的研究。“尽管软件工程有着 许多不同的定义,在这里还是引用Fritz Bauer 1969年的基本定义:软件工程是建立 和使用合理的工程化原则来获得经济的软件,并且是在实现中是可靠有效的。”①, 通过软件工程的定义,软件工程所涉及到的知识点比较多和杂,因而,本文所研究也 是从一个视角入手,着重分析了逻辑学在计算机软件工程技术中的应用。
三、研究
本文运用联系和类比,分析和综合以及归纳演绎等研究方法从软件工程技术视角 下,结合具体的事例,从而具体阐述逻辑学在软件工程中如何应用以及其功能。研究 的内容包括以下方面:
绪论:逻辑学特别是数理逻辑与计算机有密切相关。逻辑学可以看成是一门工具 性的学科,当然逻辑学与语言学也有很多联系。本文选取的是计算机软件工程技术中 的一些逻辑的应用,阐述了这两个学科之间的交叉与影响。特别是随着对人工智能的 进一步研究,交叉学科之间的研究显得尤为重要。绪论描述了在这一前提下确定了此 文的研充方向,阐释了论文在选题时候的背景及意义,并且,简单叙述了与该课题相 关的研究历史及现状。最后在整体上确立了论文基本结构。
第一章,软件工程技术中的软件部分生命周期逻辑的应用:对软件定义阶段逻辑 的应用相关概念进行了释义,特别是对内涵和外延的研究和应用。并且通过对其在定 义阶段具体的应用进行了表述,最后,又结合了领域建模逻辑的应用对逻辑学中概念 的理解进一步加强。
第二章,软件开发阶段逻辑的应用:本章分别对软件开发各个阶段即需求分析、 软件设计(规范描述)、代码生成、软件测试、软件维护这五个阶段入手说明来说明 逻辑学在这些阶段所应用。结合逻辑学相关理论进行了对比、总结、说明。并在此基 础上结合一些具体事例进一步加强。
第三章,软件项目管理中逻辑的应用:首先,指出软件开发团队中逻辑的应用, 为了进一步说明逻辑学中的一些方法在软件工程其他技术方面的应用,通过对抽象到 具体、分析和说明、归纳和演绎这三个方面进行阐述,结合具体事例比较、分析并运 用了上述方法。
总结:宏观的总结了一下全文,并对论文中一些没有细化的方面的不足做了说明 和展望,对交叉学科之间的相互作用有了进一步认识,并对后期一些学科之间的联系 和学习做了展望。胡飞、武胜君、杜承烈等:《软件工程基础》,北京:高等教育出版社,2008年,第7-8页。
第一章软件工程技术中的软件部分生命周期逻辑的应用
对于软件工程技术而言,如何提高软件在各个阶段的工作效率至关重要,而对于 软件的描述,软件的管理以及软件的文档等方面的研究,也是软件工程技术研究的主 要内容之一。从方法、工具、过程来看,也即我们可以从软件工程的三要素来展开研 究。我们通过逻辑学中的类比法,可以把软件工程的各个生存周期,看成是人的生命 周期。人首先从婴儿-幼儿时候开始,而软件也一样,首先从定义开始,在此阶段我 们会涉及到问题的定义,可行性分析等,如何对一款软件进行需求分析并对其定义, 在后期软件开发和维护中非常关键;其次,人经历了从儿童-少年-中年,这个阶段可 以看成是软件开发的阶段,在此阶段我们依旧要学会从需求分析入手,然后到概念设 计,随后是详细的设计,此外还要通过编写代码,进行测试,最后是对软件进行发布; 在这样一系列的软件过程中,我们不难发现,无论设计哪款软件,首先都需要从问题 的确认和范围的角度入手,这时候,我们首先应该分析一下市场的需求,也即:开始 需求分析。在得出需求分析结果的同时,我们才能够进一步的通过一些方法来辅助我 们获得想要的实验数据,以此来对这个软件进行可行性和有效性的分析,关于可行性 和有效性的分析我们能够结合逻辑学中的可行性和有效性的分析来理解。下面将具体 阐述:我们知道在逻辑学中检验一个真值函项模式的有效性和一致性的时候,我们通 常是对真值函项式进行真值分析,在真值分析的时候,如果每种情况下,得出的结果 都是真的,那么这个时候我们就认为它是有效的或说是一致性的;如果在每种情况下, 得出的结果都是假的,那么这个时候我们就认为它是不一致的。其次,我们对有效性 的证明的时候,当遇到一种情况是假的,那么我们对有效性的证明就可以停止。
综上,我们也可以把逻辑学中对有效性或一致性的检验方法运用到需求分析中, 我们在需求分析的时候,如果提出的每个步骤都符合用户需求,那么我们可以认为这 个分析是正确的。反之,如果我们对每个步骤都不符合用户的需求,那么我们则认为 这个分析是错误的。当然,如果在需求分析的时候,如果出现一种情况是不符合的, 这就可以继续完善,不一定要放弃这个方案。这也是与逻辑学中对真值函项判断的有 所不同的。
一、软件定义阶段逻辑的应用
在软件定义阶段,主要有以下三个方面:首先是问题定义,其次可行性分析,最 后是立项或签订合同。我们知道一个典型的范围描述有以下几点:
1、初始需求清单;
客户范围约束;
开发者范围约束。
我们知道在设计某个软件的时候,我们不可避免的需要考虑它的市场价值,因而 软件的经济性和有效性也一直是我们需要考虑的问题。这时候我们可以选用一些简单 的,容易实现的一种方案来实现。由此可见,对于软件的开发者而言,在软件的这样 一个过程中,需要明确的知道软件需要做什么以及不需要做什么,这样才能在设计软 件的时候知道出发点以及目标,而不是盲目的追求功能的实现和运行,不考虑有些功 能的必要性和有效性。
所以在初期设计出一个合理精确地范围文档在软件开发过程中是非常重要的。如 果一开始所设计出的文档,语义不清,表达内容模棱两可,这就会造成不必要的麻烦。 例如:当某医院需要一个医药管理软件,这款软件的部分功能是病人也能查询到医药 的价格,但是不能查看库存或者盘点药品等功能。而软件开发者在设计的时候由于一 开始对该医院所需求的软件定义不明确,或者是因为该医院在表述该软件功能的时候 对这款软件的实现表述不明确。最终导致的结果是:设计出来的医药管理软件,病人 根据他们个人信息登录进去也能查看到该医院医药的库存等方面的信息。这种由于一 开始的表述不精确,给双方都造成了麻烦。下面我们先通过了解逻辑学中如何对概念 进行概括和限制,再通过对比,知识的迁移运用到软件定义阶段。
(一)内涵和外延
在逻辑学中,我们在对概念进行描述的时候,会用到概括和限制这两种方法,同 样这样的两种方法也适用于软件工程需求分析阶段文档的描述。我们首先要先了解概 念的概括和限制的具体用法,这样才能准确的把握概念的内涵和外延。如何对一个概 念的内涵或外延进行增加或缩小呢?这是接下去我们要研究的问题。
我们常说要有正确的逻辑思维,而正确的逻辑思维就需要我们对概念有所了解, 也即需要概念明确,我们在概念明确的基础上,才能准确的把握概念的内涵和外延。 那什么是概念的内涵呢?在逻辑学中,对其定义是反映对象本质属性的概念。对于限 制而言,字面上理解是缩小其范围。那么在逻辑学中如何理解呢?逻辑学中有两种概 念:种概念和属概念。我们把表示范围大的概念称为属概念,把另一个表示范围小的 概念称为种概念。而逻辑学中对于限制的定义,首先需要判断我们所需限制的概念是 否具有种属关系。也就是说范围小的概念和范围大的概念之间需要存在着种属关系。 简言之我们的限制是把范围大的概念也即属概念,通过限制变成范围小的概念即种概 念。也即限制是通过增加内涵,缩小外延,从属概念得到其种概念的逻辑方法。上述, 我们知道内涵是揭示概念本质的,那么对于概念的外延,我们用什么来揭示呢?此时, 逻辑学中我们把它称为划分。此外,我们知道限制是由某个概念的属概念得到种概念
的这样一个方法,那么如果这个过程反过来看,就得到逻辑学中的另一个定义,即: 概括。当我们需要扩大某个概念的外延的时候,我们可以运用概括。这样这个概念的 内涵也相应减少了。下面我们可以通过几个例子来具体区分一下以上几种情况。如;
“学校”到“中学”,这个例子中我们对“学校”进行了限制,从而使得其更具体化 了。但是根据限制应用条件可知,我们在使用时候,一个要注意这两个概念之间的关 系,如果不具备上述条件,我们使用限制就是错误的。例如:“城市”限制为“农村” 这就是错误的,因为“城市”和“农村”这两个概念并不具备种属关系,两者是并列 关系。“麻雀”能概括为“鸟”,不能概括为“哺乳动物”,从抽象的角度来考察:
“鸟”是“麻雀”的抽象,而“哺乳动物”却不是“麻雀”的抽象。通过以上的例子, 我们在运用的时候一定要判断好你所要运用的对象是不是具备种属关系,如果不具备 就不能乱用,否则就容易造成错误。
既然种属关系在应用时候如此重要,那么,我们就需要对它进一步的认识和理解。 在概念外延间关系中,对于相容的关系我们又把其分为全同关系、属种关系和交叉关 系。我们主要看属种关系,概念S、P有属种关系,是指所有的S是P,且有S不是P 如“学生”和“大学生”有属种关系。属概念:外延较大;种概念:外延较小。我们 又可以把属概念称为上位概念,而把种概念称为下位概念。同时,概念S、P有属种 关系,则P、S有种属关系,反之也一样。概念S、P有属种关系,也称S真包含P, 或P真包含于S。对不相容关系,不相容概念有一个确定的属概念,称为论域。概念 的不相容,分为矛盾关系和对立关系两种。对矛盾关系而言,S和P不相容,但是S 和P的外延和等于其论域M,如“白虎”和“非白虎”就是矛盾关系;对立关系,S 和P不相容,但S和P的外延之和小于其论域M,如“白虎”和“黄虎”就是对立关 系。
(二)定义阶段具体的应用
通过上述逻辑知识,我们可以把它应用到需求分析中,在对软件进行范围描述的 时候我们,当我们把一个描述对象的定义定的过宽时,我们就可以对它加以限制;同 理,如果我们把它定义过窄的时候,同样我们也可以通过概括的方法把它进行扩大。 无论是限制还是概括一定要谨记上述的种属规则。下面将通过事例来说明它具体的应 用。当我们在设计一款管理软件时候,如果不对这款软件在使用时候人数加以限制, 就会导致服务器压力过大,并且当登陆人数过多的时候,容易造成程序“假死”现象 等。这时候,我们可以对其加以限制。例如,此款软件原来对人数没有限制,这时候 我们可以加以限制为:此款软件最多只能支持600个人同时在线,软件最多支持60 台终端收银机的联网工作,数据库必须在Oracle 8.0支持下才能运行,等等。①当两者 ©胡飞、武胜君、杜承烈、马春燕编著:《软件工程基础》,北京高等教育出版社,2008年,第17页。
8 没有种属关系,我们在运用的时候就会出现错误,如软件设计中需要设计一款录入软 件,他们在对其进行范围描述是管理软件,而管理软件和录入软件之间不存在种属关 系,这两款软件概念间是交叉关系,录入软件中有管理软件,而管理软件中也有录入 软件。这两款软件如果用S和P表示,就能表述为有的管理软件是录入软件即有的S 是P,且有的管理软件不是录入软件即有的S不是P。所以,在问题描述时候不能混 淆概念,否则容易导致不必要的错误。因而,我们进行前期分析的时候分清概念之间 的种属关系非常重要。接着我们通过分析流程来看:首先,我们在对问题的确认和范 围研究时,会对范围加以约束,主要分两个方面加以约束:其一是开发者范围的约束, 如何理解这点呢?我们知道软件的开发人员,在设计软件的时候,会在头脑中形成多 种方案,但是往往由于思考的过多,设计的时候渗入过多自己主观的想法,容易把一 个简单的问题复杂化,这样不仅浪费了大量的时间,也达不到用户所需要的设计效果。 由此可见,对软件开发者进行范围约束是必不可少的。
其二是客户范围的约束,对于软件设计者而言,设计的软件肯定需要满足用户的 需求,但是用户对软件设计以及代码编写很显然并不了解,他们不懂得有时候他们提 出的需求,实际上在已有的知识基础之上,并不能实现起来。如果此时,不对客户范 围进行约束,后期设计出来的软件如果与客户所需求的软件不匹配,就会导致客户的 不满,给双方造成不必要的矛盾。因此,前期对客户范围进行约束,很有必要。那么, 我们该如何对这两种需求进行约束呢?依旧可以运用到上述的限制和概括的方法。
在这个流程中首先是范围描述初期,根据初始化需求清单,在这个阶段,客户会 把对软件的全部功能罗列在一起。这样就会有一个典型的功能汇总。在这个汇总中, 我们可以运用限制或者概括的方法对各种汇总的对象进行划分或归类,这样会使得描 述更加清晰,比如,某个软件功能中需要支持交通银行、建设银行、浦发银行、农业 银行付款,可以概括成支持银行卡支付,而不需要一一罗列出来,显得多余。同时使 用时注意概念间的种属关系,如果两个概念不具有种属关系,那么我们就不能运用概 括的方法把这个概念和那个概念混为一谈。比如:当我们在亚马逊网站上购物的时候, 通常会有2个以上的购物付款选项,最常见的两种是货到付款和在线支付。而上述事 例中的那些银行卡支付方式,很显然是属于网上支付的一种,这时候我们可以把这些 付款方式归为一类。而货到付款这类当然不能归到这类中。通过上述事例,我们可以 知道,在对软件的需求进行描述的时候,我们可以通过逻辑学中的一些方法对这些需 求描述进行简化或者扩大,这样不仅提高了软件需求规格说明的准确性,也增加了描 述的有效性。这样得出的需求规格说明书更符合我们要求,给客户和软件开发者都提 供了方便。
二、领域建模逻辑的应用
在逻辑学中,任何概念都可以看成“类概念”,可以说概念是思维的形式,承载 着相应的思维内容,同时理性认识的基本形式也即概念。概念与语词或词组有一定关 系。逻辑学中有以下几类概念:第一种肯定概念和否定概念,任何事情都是相对而言, 这两个概念也一样,它们是根据概念所反映的对象是否具有某种属性来区分。其中肯 定概念又称为正概念,而否定概念又称为负概念;第二种是普通概念和单独概念,其 中单独概念的外延分子=1,是指1个对象,即独一无二的事物、专名或摹状物,而普 通概念则是外延分子>=2,也指一类对象、形容词或动词等。从这两类对象而看,它 们是根据反映对象数目不同来划分的。第三种是集合概念和非集合概念,我们把反映 集合体的概念称为集合概念,反之,不反映集合体的概念则称为非集合概念。我们把 由两个或两个以上的个体经组合构成的统一整体称为集合体。综上,可以看岀上述三 种概念的分类是根据每个不同概念的内涵或外延在形式上的共同点进行划分的,因而 概念的内涵或外延也反映出概念的本质。它们的两个特点分别从量和质两个方面来说 明概念。外延从字面上理解,就说明了概念所适用的范围,而内涵则代表着这个概念 所特有的属性。在计算机软件工程中的领域建模就可以运用到上述知识,领域建模是 为了过渡到类图建模的,通过分析它,更好的帮助我们了解领域建模。在领域建模中 有个问题域,这个问题域是研究的是相关事物或概念对象。我们通常会运用图形来表 示问题域里对象静态模型。
其中在领域模型中,关于它的描述主要有以下几点:概念类、概念类的属性以及 概念之间的关联。而关于它的表达也是从三个方面入手:符合、内涵、外延。首先从 符合来讲,就是把领域类中的图片或单词称为符合;而内涵则是对领域类的定义,和 上述逻辑学中内涵有共同点,其中此时的外延就是对领域类定义的一组事例。举个例 子:对于某销售场景的领域建模而言,其中包括概念符合有Sale、date和time,概念 的内涵为一次销售是购买交易事件,其有一个时间和日期,而概念的外延可以是是 Sale-1、Sale-2、Sale-3。由此可见,逻辑学中的概念在领域建模中也有应用,我们学 会对概念外延的划分,能够帮助我们更好的理解领域建模中的概念的外延,而内涵我 们也能利用前面所了解到的种属关系,进行限制或者概括,这样能够更好的帮助我们 来理解领域建模的内涵,此处就不举例子一一说明。
之间存在着紧密的联系,学科之间的渗透是当代科学发展的一个 重要趋势。本文主要探讨逻辑学在软件工程开发中的应用问题。由于软件工程技术所 涉及的内容比较广泛,因而,本文只是选取软件工程技术中软件部分生命周期、软件 开发阶段、以及软件项目管理中逻辑的应用展开探讨。
本文绪论部分主要为了说明软件工程与逻辑学之间联系的必要性,并简单地阐述 了论文选题的缘由及意义、国内外研究的现状、以及研究的框架和思路。第一章紧密 结合软件工程中的软件部分生命周期中逻辑的应用展开讨论,从软件工程的概念出 发,以需求分析作为切入点,再利用逻辑分析的合理性,主要结合了逻辑学中概念的 内涵和外延的应用,然后用软件工程中的事例来进行说明,并引入概念的分类与领域 建模中的应用进行对比。第二章则通过对软件开发阶段软件的分析,分别从各个阶段 出发,再次结合逻辑学中概念的限制和概括、种属关系以及真值函数的对比等方面进 行研究,同时结合一些实例来进一步说明逻辑学在其中的应用。第三章对软件工程技 术中的其他技术展开讨论,结合归纳逻辑的一些推理和证明的相关知识以及一些逻辑 方法,主要讨论软件开发团队逻辑的应用和一些逻辑方法在软件项目管理中的应用, 具体阐述了逻辑方法在团队管理中的应用。在论文结语部分,对全文进行了总结,进 一步说明逻辑学与计算机软件工程之间的关联,以及对交叉学科结合的展望。
关键词:软件工程,逻辑学,概念,逻辑方法。
摘要
绪论 1
一、 选题的缘由及意义 1
二、 国内外研究的现状 2
三、 研究的框架及思路 5
第一章软件工程技术中的软件部分生命周期逻辑的应用 6
一、 软件定义阶段逻辑的应用 6
(一)内涵和外延 7
(-)定义阶段具体的应用 8
二、 领域建模逻辑的应用 : 10
第二章软件开发阶段逻辑的应用 11
一、 需求分析阶段的应用 11
二、 软件设计(规范描述)的应用 16
三、 代码生成中的联系 19
四、 软件测试阶段的应用 20
五、 软件维护中的应用 21
第三章软件项目管理中逻辑的应用 23
一、 软件开发团队逻辑的应用 23
二、 逻辑方法在软件开发团队中的应用 25
(一) 抽象上升到具体的应用 25
(二) 分析和综合的应用 25
(三) 归纳和演绎的运用 26
(四) 归纳逻辑在软件开发团队中的应用 27
结语 33
参考文献 34
读研期间己发表科研论文 36
致谢 37
绪论
_、选曜的缘由及意义
目前现代逻辑中对软件工程研究领域中的人工智能与识别的深入研究比较多,比 如想要研究的软件工程技术中软件开发团队模式,我们可以利用逻辑方法去分析其中 的合理性,合理的定义整个开发组织中的各种角色、职责和技能要求,合理明确“谁”、 在“什么时间”、做“什么”、“怎么做”和如何评测等内容,不断改进软件团队的 生产效率和软件产品质量以此对软件工程中软件领域建模进行深入研究,可以类比于 数学建模,选择几个经典领域比如说高考阅卷系统、校园卡建设、地铁管理系统、环 境评价体系等的一个或几个进行对软件领域建模。数理逻辑与计算机的结合是现代逻 辑学发展的第一次转向。上世纪40年代,冯诺伊曼在从事电子计算机的研制时,把 30年代中数理逻辑的成果特别是图灵机的成果充分加以吸收,从而为现代电子计算 机的研制做出了开创性的贡献。包括图灵机理论在内的可计算性理论现在已成为整个 计算机科学的基础理论,是不可缺少的工具。数理逻辑的成果推进了计算机科学的发 展,同时,数理逻辑也随着计算机科学的发展得到广泛普及。①当前,逻辑研究正在 经历第二次转向一认知转向。逻辑研究与认知科学相结合起源于当今计算机科学发展 的需要。当前计算机科学发展进入了知识处理和智能模拟领域,各国科学家们正致力 于研究具有人类智能的第五代计算机,这种计算机能够模拟人的各种感知以应对外界 的变化。由于当代科学对人脑研究还是处于黑箱阶段,不能揭示人脑内部活动的全部 过程,因此,利用逻辑知识模拟其内部反应过程并以此做成应变系统是不可能的。然 而,尽管人们对人脑内部活动不了解,但却可以掌握它的外部反应。与此同时,一系 列尚待解决的新问题和急需研究的新领域也不断突现。人们在上述方向上已取得的成 果和未解决的问题已是逻辑学家所关注的热点,这一切暗示着逻辑学正在经历它诞生 以来的又一次重要的变化:逻辑学的认知转向。上述交叉学科将带动逻辑学和认知心 理学的发展,使它们为信息科学尤其是计算机科学的理论与应用提供方法。因而,说 明逻辑在此研究具有重要意义。②我们知道,计算机领域对于几个逻辑体系不同计算 机或软件系统也存在着互连和兼容的问题,我们不能保证所有的软件系统可以兼容, 如何进行协调?如何使其最大程度上兼容?如果不能兼容,软件系统可否自动予以调
您李夏妍、张敏强:“认知逻辑研究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第117-118 页。
•李夏妍、张敏强:“认知逻辑硏究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第118-119 页。
整?这些都是需要研究的问题。其实计算机逻辑语言并不多,大家在编写相关程序的 时候是可以考虑兼容性的,但是有许多逻辑语言是不完备的,用来开发出来的程序具 有许多漏洞,如果两种不同语言开发出来的软件可以兼容,并且能够减少运行中的漏 洞,提高运行的安全性,从逻辑语言相容的角度来考虑,从而提高编程效率。可以运 用逻辑技术深入研究利用逻辑系统兼容性研究,更便于程序员开发设计软件,节省大 量的人力、物力并且在后期的软件维护中,通过这些研究也便于改进软件。
此外,本文课题也是2013年中国逻辑学会学术研究项目立项名单中青年项目(本 人是主要参与者,排名第二);从应用的角度,交叉学科将带动逻辑学和其他学科的 发展,使它们为信息科学尤其是计算机科学的理论与应用提供方法。用到计算机软件 设计知识,又深深与当代逻辑发展和应用密切相连,这体现了学科间的交叉性和融合 性,同时无论是对于逻辑研究还是对于市场分析研究,智能软件开发方向主要研究以 认知逻辑、非形式逻辑、数理逻辑和人工智能的逻辑为工具,以人类知识表达为背景, 结合具体学科的知识表达和推理特点,建构智能化推理的模型,开发具有实用性的智 能软件,将人文社会科学的技术成果转化为生产力。
①通过此研究我们既要运用到数学建模方面知识,也要用到计算机软件设计知识, 又深深与当代逻辑发展和应用密切相连,这体现了学科间的交叉性和融合性,同时无 论是对于逻辑研究还是对于市场分析都具有非常重要的意义。本文从软件工程技术角 度入手,可以说此项研究贯穿了软件工程技术一系列的方面,因而具有一定的理论意 义。
二、国内外研究的现状
李未在《一个开放的逻辑系统中提到联合国教科文组织将逻辑学列为与数学、物 理学、化学、生命科学等并列的七个基础学科之一,其重要性不言而喻。②回顾它走 过的历程,展望未来,它将是充满活力的。林作徐、戴汝为在《纯悴理性批判与人工 智能》中提到计算机科学的发展使得人们有理由认为:对于任何一个知识领域,只要 严格地给出它的表达方式和推理方式,我们便可利用计算机解决它的一些问题。在这 一观点的支持下,20世纪中后期计算机科学的发展进入了知识处理和智能模拟领域。 ③国外一些学者提出的比如构造逻辑系统描述(高级)认知过程的特征;利用它们进行 知识表达与处理和研制新型软件,这已成为逻辑学研究的主流方向。另一方面,数理 逻辑尤其是Truign机理论的发展,启发人们用计算机隐喻来理解人类的信息加工过
。李夏妍、张敏强:“认知逻辑研究概观”,《首都师范大学学报(社会科学版)》2005年第5期,第119-120 页。
応李未:“一个开放的逻辑系统”,《中国科学》1992年第10期,第1104-1113页。
'林作軽、戴汝为:“纯粹理性批判与人工智能”,《计算机科学》1992年第5期,第1-6页。 程,这为用心理学实验技术研究人的推理提供了条件;在20世纪70年代,人们终于 有可能用实验手段来判定,人是否采用某些逻辑规则和模式进行推理,这使得人类第 ―次有能力运用科学的方法研究思维(高级认知过程)的形式与规律。从国外研究趋势 来看,冯棉在《逻辑科学,将充满活力》中展望中国逻辑科学未来的发展趋提到以下 几个研究领域将会在中国逻辑学充满活力:
1.认知逻辑:认知逻辑是现代逻辑学与哲学的认识论、认知心理学的交叉学科。 它是逻辑学富有创新性的发展方向之一,推动逻辑学研究向认知方向的转化。
2.自然语言逻辑:自然语言逻辑是逻辑学和现代语言学的交叉学科。
3.自动推理和机器证明:自动推理和机器证明是逻辑学和数学、计算机科学的 交叉学科,它试图借助计算机来实施推理和证明的自动化,使人们从复杂的、难以胜 任的逻辑推理中解放出来。
4.逻辑哲学:逻辑哲学是逻辑学和哲学的交叉学科,是现代逻辑与现代哲学相 互渗透、相互作用的产物。它从哲学的层面上对逻辑科学作整体的考察,关注逻辑的 本体论承诺、逻辑真理的性质、逻辑与其他科学的区别和联系。
通过上述研究,我们知道学科之间相互交叉渗透是当代科学发展的一个重要趋 势,学科交叉的形成与发展极大地推动了经济与社会的发展。®
从CNKI数据库的搜集的与“逻辑发展”相关的论文多达124篇,而以“逻辑系 统”为主题的论文共搜索到24篇,题目中直接出现“计算机软件工程与逻辑系统” 字样的期刊论文只有2篇。学术著作方面,其中比较有代表性的著作有任晓明、桂起 权主编主编的《计算机科学哲学研究:认知、计算与目的性的哲学思考》,对于逻辑 与计算机方面,相关著作有邹崇理《自然语言逻辑研究》;陆汝铃《人工智能(上)(下)》; 吴炳荣、王雨田《归纳逻辑与人工智能》;李友仁《软件工程与软件质量分析》;黄 锡滋《软件可靠性、安全性与质量保证》这几本书中对软件和逻辑做了一些介绍,就 逻辑这门学科本身来说,当逻辑被越来越多地用于形式化哲学、语言、人工智能、逻 辑编程和计算机等这些领域时,所需要的逻辑的种类是越来越复合的。从研究内容来 看,陈波在《从人工智能看当代逻辑学的发展》中指出近几年学术界对计算机中逻辑 应用与发展研究取得了一系列成果,自1990年举办首次金岳霖学术奖(逻辑学)评 奖活动中评出的12项获奖成果中,大多数属于现代逻辑的各个分支领域。20多年后 的今天,我国的逻辑科学更是发生了显著的变化:对外交流日益频繁,涌现出一大批 具有现代逻辑素养的学科带头人,更新了逻辑学的教学体系,发表了大量的现代逻辑 论著,有的学术成果已经达到了国际的先进水平。冯棉在《逻辑科学,将充满活力》 中提到学术研究的现代化。近年来,我国学者在现代逻辑的研究中成果丰硕,涉及现
C冯棉:“逻辑科学,将充满活力”,《社会科学报》2004年第4期,第5-9页。
代逻辑的各个领域。以下述三项成果最具有代表性:
1.北京大学哲学系周北海教授的论文《Grafted-Frame and Si-Completeness》。这 篇题为《嫁接框架与S1-完全性》的论文发表在国际权威的国际权威的《符号逻辑杂 志》上。S1是现代模态逻辑的奠基者C丄Lewis所建立的五个模态命题逻辑系统之一, 一直未能建构出来,这成了模态逻辑研究中的一个空白点。周北海教授的论文巧妙地 将形式语义中的模态框架和相干框架组合起来,构建了一种新型的框架一一嫁接框 架,然后用其证明了 S1的完全性。这篇论文于2000年荣获第二届金岳霖学术奖(逻 辑学)一等奖。
2.北京大学哲学系刘壮虎教授的有关“邻域语义学”研究的系列论文。邻域语 义学是一种新型的语义理论,最初用于模态命题逻辑。刘壮虎教授在《领域语义学和 模型完全性》、《直觉主义逻辑的完全性和不完全性》、《相干逻辑的邻域语义学》、
《Neigh-borhood Semant ics of Modal Predicate Logic^、《初基演算的邻域语义学》、 《邻域语义学与推演系统的完全性》等一系列论文中,提出了适合一般命题逻辑的邻 域语义学,对诸多现代逻辑分支作统一的处理,得出许多一般性的结果。也为不同逻 辑系统的分类和比较提供了基础,并有助于澄清某些重要的逻辑问题和逻辑哲学问 题。
3.中山大学逻辑和认知研究所鞠实儿教授的“基于幵放世界预设的逻辑”的系 列论文。鞠实儿教授在《基于开放世界假定的3-值命题演算系统》、《可能世界的封 闭性和否定联结词》、《基于开放世界预设的3-值逻辑》等系列论文中,提出了封闭 世界和开放世界的预设。这是第一个描述开放域的演绎逻辑系统,为开发基于开放世 界假定的各类逻辑系统提供一个平台。这些系列论文于2002年荣获教育部高等学校 人文社会科学研究优秀成果一等奖。
综上,近年来在国内、国外的逻辑研究领域中出现了一些新动向,即在普及逻辑 知识的教学领域从系统地传授传统逻辑知识(国内称之为普通逻辑)、数理逻辑的同 时,向教授包容多种推理方法的非形式逻辑转变;在科学研究应用领域中逻辑研究从 以数理逻辑为主的哲学逻辑扩展为与认知科学、计算机科学、语言科学相结合的应用 逻辑研究。
从统计结果来看,无论是以“计算机” “人工智能”或“逻辑学”为关键词检索, 都有数百条信息,由此可见,逻辑学与计算机之间的研究一直都是当今热门课题之一, 特别是人工智能方面的研究。当然,其中专门关于软件工程与逻辑学的研究,几乎没 有。诸多论述都是从某一具体学科视角出发而论或者从某个方面,也有把几种学科之 间结合起来的,但没有专门关于软件工程中逻辑学应用的研究。“尽管软件工程有着 许多不同的定义,在这里还是引用Fritz Bauer 1969年的基本定义:软件工程是建立 和使用合理的工程化原则来获得经济的软件,并且是在实现中是可靠有效的。”①, 通过软件工程的定义,软件工程所涉及到的知识点比较多和杂,因而,本文所研究也 是从一个视角入手,着重分析了逻辑学在计算机软件工程技术中的应用。
三、研究
本文运用联系和类比,分析和综合以及归纳演绎等研究方法从软件工程技术视角 下,结合具体的事例,从而具体阐述逻辑学在软件工程中如何应用以及其功能。研究 的内容包括以下方面:
绪论:逻辑学特别是数理逻辑与计算机有密切相关。逻辑学可以看成是一门工具 性的学科,当然逻辑学与语言学也有很多联系。本文选取的是计算机软件工程技术中 的一些逻辑的应用,阐述了这两个学科之间的交叉与影响。特别是随着对人工智能的 进一步研究,交叉学科之间的研究显得尤为重要。绪论描述了在这一前提下确定了此 文的研充方向,阐释了论文在选题时候的背景及意义,并且,简单叙述了与该课题相 关的研究历史及现状。最后在整体上确立了论文基本结构。
第一章,软件工程技术中的软件部分生命周期逻辑的应用:对软件定义阶段逻辑 的应用相关概念进行了释义,特别是对内涵和外延的研究和应用。并且通过对其在定 义阶段具体的应用进行了表述,最后,又结合了领域建模逻辑的应用对逻辑学中概念 的理解进一步加强。
第二章,软件开发阶段逻辑的应用:本章分别对软件开发各个阶段即需求分析、 软件设计(规范描述)、代码生成、软件测试、软件维护这五个阶段入手说明来说明 逻辑学在这些阶段所应用。结合逻辑学相关理论进行了对比、总结、说明。并在此基 础上结合一些具体事例进一步加强。
第三章,软件项目管理中逻辑的应用:首先,指出软件开发团队中逻辑的应用, 为了进一步说明逻辑学中的一些方法在软件工程其他技术方面的应用,通过对抽象到 具体、分析和说明、归纳和演绎这三个方面进行阐述,结合具体事例比较、分析并运 用了上述方法。
总结:宏观的总结了一下全文,并对论文中一些没有细化的方面的不足做了说明 和展望,对交叉学科之间的相互作用有了进一步认识,并对后期一些学科之间的联系 和学习做了展望。胡飞、武胜君、杜承烈等:《软件工程基础》,北京:高等教育出版社,2008年,第7-8页。
第一章软件工程技术中的软件部分生命周期逻辑的应用
对于软件工程技术而言,如何提高软件在各个阶段的工作效率至关重要,而对于 软件的描述,软件的管理以及软件的文档等方面的研究,也是软件工程技术研究的主 要内容之一。从方法、工具、过程来看,也即我们可以从软件工程的三要素来展开研 究。我们通过逻辑学中的类比法,可以把软件工程的各个生存周期,看成是人的生命 周期。人首先从婴儿-幼儿时候开始,而软件也一样,首先从定义开始,在此阶段我 们会涉及到问题的定义,可行性分析等,如何对一款软件进行需求分析并对其定义, 在后期软件开发和维护中非常关键;其次,人经历了从儿童-少年-中年,这个阶段可 以看成是软件开发的阶段,在此阶段我们依旧要学会从需求分析入手,然后到概念设 计,随后是详细的设计,此外还要通过编写代码,进行测试,最后是对软件进行发布; 在这样一系列的软件过程中,我们不难发现,无论设计哪款软件,首先都需要从问题 的确认和范围的角度入手,这时候,我们首先应该分析一下市场的需求,也即:开始 需求分析。在得出需求分析结果的同时,我们才能够进一步的通过一些方法来辅助我 们获得想要的实验数据,以此来对这个软件进行可行性和有效性的分析,关于可行性 和有效性的分析我们能够结合逻辑学中的可行性和有效性的分析来理解。下面将具体 阐述:我们知道在逻辑学中检验一个真值函项模式的有效性和一致性的时候,我们通 常是对真值函项式进行真值分析,在真值分析的时候,如果每种情况下,得出的结果 都是真的,那么这个时候我们就认为它是有效的或说是一致性的;如果在每种情况下, 得出的结果都是假的,那么这个时候我们就认为它是不一致的。其次,我们对有效性 的证明的时候,当遇到一种情况是假的,那么我们对有效性的证明就可以停止。
综上,我们也可以把逻辑学中对有效性或一致性的检验方法运用到需求分析中, 我们在需求分析的时候,如果提出的每个步骤都符合用户需求,那么我们可以认为这 个分析是正确的。反之,如果我们对每个步骤都不符合用户的需求,那么我们则认为 这个分析是错误的。当然,如果在需求分析的时候,如果出现一种情况是不符合的, 这就可以继续完善,不一定要放弃这个方案。这也是与逻辑学中对真值函项判断的有 所不同的。
一、软件定义阶段逻辑的应用
在软件定义阶段,主要有以下三个方面:首先是问题定义,其次可行性分析,最 后是立项或签订合同。我们知道一个典型的范围描述有以下几点:
1、初始需求清单;
客户范围约束;
开发者范围约束。
我们知道在设计某个软件的时候,我们不可避免的需要考虑它的市场价值,因而 软件的经济性和有效性也一直是我们需要考虑的问题。这时候我们可以选用一些简单 的,容易实现的一种方案来实现。由此可见,对于软件的开发者而言,在软件的这样 一个过程中,需要明确的知道软件需要做什么以及不需要做什么,这样才能在设计软 件的时候知道出发点以及目标,而不是盲目的追求功能的实现和运行,不考虑有些功 能的必要性和有效性。
所以在初期设计出一个合理精确地范围文档在软件开发过程中是非常重要的。如 果一开始所设计出的文档,语义不清,表达内容模棱两可,这就会造成不必要的麻烦。 例如:当某医院需要一个医药管理软件,这款软件的部分功能是病人也能查询到医药 的价格,但是不能查看库存或者盘点药品等功能。而软件开发者在设计的时候由于一 开始对该医院所需求的软件定义不明确,或者是因为该医院在表述该软件功能的时候 对这款软件的实现表述不明确。最终导致的结果是:设计出来的医药管理软件,病人 根据他们个人信息登录进去也能查看到该医院医药的库存等方面的信息。这种由于一 开始的表述不精确,给双方都造成了麻烦。下面我们先通过了解逻辑学中如何对概念 进行概括和限制,再通过对比,知识的迁移运用到软件定义阶段。
(一)内涵和外延
在逻辑学中,我们在对概念进行描述的时候,会用到概括和限制这两种方法,同 样这样的两种方法也适用于软件工程需求分析阶段文档的描述。我们首先要先了解概 念的概括和限制的具体用法,这样才能准确的把握概念的内涵和外延。如何对一个概 念的内涵或外延进行增加或缩小呢?这是接下去我们要研究的问题。
我们常说要有正确的逻辑思维,而正确的逻辑思维就需要我们对概念有所了解, 也即需要概念明确,我们在概念明确的基础上,才能准确的把握概念的内涵和外延。 那什么是概念的内涵呢?在逻辑学中,对其定义是反映对象本质属性的概念。对于限 制而言,字面上理解是缩小其范围。那么在逻辑学中如何理解呢?逻辑学中有两种概 念:种概念和属概念。我们把表示范围大的概念称为属概念,把另一个表示范围小的 概念称为种概念。而逻辑学中对于限制的定义,首先需要判断我们所需限制的概念是 否具有种属关系。也就是说范围小的概念和范围大的概念之间需要存在着种属关系。 简言之我们的限制是把范围大的概念也即属概念,通过限制变成范围小的概念即种概 念。也即限制是通过增加内涵,缩小外延,从属概念得到其种概念的逻辑方法。上述, 我们知道内涵是揭示概念本质的,那么对于概念的外延,我们用什么来揭示呢?此时, 逻辑学中我们把它称为划分。此外,我们知道限制是由某个概念的属概念得到种概念
的这样一个方法,那么如果这个过程反过来看,就得到逻辑学中的另一个定义,即: 概括。当我们需要扩大某个概念的外延的时候,我们可以运用概括。这样这个概念的 内涵也相应减少了。下面我们可以通过几个例子来具体区分一下以上几种情况。如;
“学校”到“中学”,这个例子中我们对“学校”进行了限制,从而使得其更具体化 了。但是根据限制应用条件可知,我们在使用时候,一个要注意这两个概念之间的关 系,如果不具备上述条件,我们使用限制就是错误的。例如:“城市”限制为“农村” 这就是错误的,因为“城市”和“农村”这两个概念并不具备种属关系,两者是并列 关系。“麻雀”能概括为“鸟”,不能概括为“哺乳动物”,从抽象的角度来考察:
“鸟”是“麻雀”的抽象,而“哺乳动物”却不是“麻雀”的抽象。通过以上的例子, 我们在运用的时候一定要判断好你所要运用的对象是不是具备种属关系,如果不具备 就不能乱用,否则就容易造成错误。
既然种属关系在应用时候如此重要,那么,我们就需要对它进一步的认识和理解。 在概念外延间关系中,对于相容的关系我们又把其分为全同关系、属种关系和交叉关 系。我们主要看属种关系,概念S、P有属种关系,是指所有的S是P,且有S不是P 如“学生”和“大学生”有属种关系。属概念:外延较大;种概念:外延较小。我们 又可以把属概念称为上位概念,而把种概念称为下位概念。同时,概念S、P有属种 关系,则P、S有种属关系,反之也一样。概念S、P有属种关系,也称S真包含P, 或P真包含于S。对不相容关系,不相容概念有一个确定的属概念,称为论域。概念 的不相容,分为矛盾关系和对立关系两种。对矛盾关系而言,S和P不相容,但是S 和P的外延和等于其论域M,如“白虎”和“非白虎”就是矛盾关系;对立关系,S 和P不相容,但S和P的外延之和小于其论域M,如“白虎”和“黄虎”就是对立关 系。
(二)定义阶段具体的应用
通过上述逻辑知识,我们可以把它应用到需求分析中,在对软件进行范围描述的 时候我们,当我们把一个描述对象的定义定的过宽时,我们就可以对它加以限制;同 理,如果我们把它定义过窄的时候,同样我们也可以通过概括的方法把它进行扩大。 无论是限制还是概括一定要谨记上述的种属规则。下面将通过事例来说明它具体的应 用。当我们在设计一款管理软件时候,如果不对这款软件在使用时候人数加以限制, 就会导致服务器压力过大,并且当登陆人数过多的时候,容易造成程序“假死”现象 等。这时候,我们可以对其加以限制。例如,此款软件原来对人数没有限制,这时候 我们可以加以限制为:此款软件最多只能支持600个人同时在线,软件最多支持60 台终端收银机的联网工作,数据库必须在Oracle 8.0支持下才能运行,等等。①当两者 ©胡飞、武胜君、杜承烈、马春燕编著:《软件工程基础》,北京高等教育出版社,2008年,第17页。
8 没有种属关系,我们在运用的时候就会出现错误,如软件设计中需要设计一款录入软 件,他们在对其进行范围描述是管理软件,而管理软件和录入软件之间不存在种属关 系,这两款软件概念间是交叉关系,录入软件中有管理软件,而管理软件中也有录入 软件。这两款软件如果用S和P表示,就能表述为有的管理软件是录入软件即有的S 是P,且有的管理软件不是录入软件即有的S不是P。所以,在问题描述时候不能混 淆概念,否则容易导致不必要的错误。因而,我们进行前期分析的时候分清概念之间 的种属关系非常重要。接着我们通过分析流程来看:首先,我们在对问题的确认和范 围研究时,会对范围加以约束,主要分两个方面加以约束:其一是开发者范围的约束, 如何理解这点呢?我们知道软件的开发人员,在设计软件的时候,会在头脑中形成多 种方案,但是往往由于思考的过多,设计的时候渗入过多自己主观的想法,容易把一 个简单的问题复杂化,这样不仅浪费了大量的时间,也达不到用户所需要的设计效果。 由此可见,对软件开发者进行范围约束是必不可少的。
其二是客户范围的约束,对于软件设计者而言,设计的软件肯定需要满足用户的 需求,但是用户对软件设计以及代码编写很显然并不了解,他们不懂得有时候他们提 出的需求,实际上在已有的知识基础之上,并不能实现起来。如果此时,不对客户范 围进行约束,后期设计出来的软件如果与客户所需求的软件不匹配,就会导致客户的 不满,给双方造成不必要的矛盾。因此,前期对客户范围进行约束,很有必要。那么, 我们该如何对这两种需求进行约束呢?依旧可以运用到上述的限制和概括的方法。
在这个流程中首先是范围描述初期,根据初始化需求清单,在这个阶段,客户会 把对软件的全部功能罗列在一起。这样就会有一个典型的功能汇总。在这个汇总中, 我们可以运用限制或者概括的方法对各种汇总的对象进行划分或归类,这样会使得描 述更加清晰,比如,某个软件功能中需要支持交通银行、建设银行、浦发银行、农业 银行付款,可以概括成支持银行卡支付,而不需要一一罗列出来,显得多余。同时使 用时注意概念间的种属关系,如果两个概念不具有种属关系,那么我们就不能运用概 括的方法把这个概念和那个概念混为一谈。比如:当我们在亚马逊网站上购物的时候, 通常会有2个以上的购物付款选项,最常见的两种是货到付款和在线支付。而上述事 例中的那些银行卡支付方式,很显然是属于网上支付的一种,这时候我们可以把这些 付款方式归为一类。而货到付款这类当然不能归到这类中。通过上述事例,我们可以 知道,在对软件的需求进行描述的时候,我们可以通过逻辑学中的一些方法对这些需 求描述进行简化或者扩大,这样不仅提高了软件需求规格说明的准确性,也增加了描 述的有效性。这样得出的需求规格说明书更符合我们要求,给客户和软件开发者都提 供了方便。
二、领域建模逻辑的应用
在逻辑学中,任何概念都可以看成“类概念”,可以说概念是思维的形式,承载 着相应的思维内容,同时理性认识的基本形式也即概念。概念与语词或词组有一定关 系。逻辑学中有以下几类概念:第一种肯定概念和否定概念,任何事情都是相对而言, 这两个概念也一样,它们是根据概念所反映的对象是否具有某种属性来区分。其中肯 定概念又称为正概念,而否定概念又称为负概念;第二种是普通概念和单独概念,其 中单独概念的外延分子=1,是指1个对象,即独一无二的事物、专名或摹状物,而普 通概念则是外延分子>=2,也指一类对象、形容词或动词等。从这两类对象而看,它 们是根据反映对象数目不同来划分的。第三种是集合概念和非集合概念,我们把反映 集合体的概念称为集合概念,反之,不反映集合体的概念则称为非集合概念。我们把 由两个或两个以上的个体经组合构成的统一整体称为集合体。综上,可以看岀上述三 种概念的分类是根据每个不同概念的内涵或外延在形式上的共同点进行划分的,因而 概念的内涵或外延也反映出概念的本质。它们的两个特点分别从量和质两个方面来说 明概念。外延从字面上理解,就说明了概念所适用的范围,而内涵则代表着这个概念 所特有的属性。在计算机软件工程中的领域建模就可以运用到上述知识,领域建模是 为了过渡到类图建模的,通过分析它,更好的帮助我们了解领域建模。在领域建模中 有个问题域,这个问题域是研究的是相关事物或概念对象。我们通常会运用图形来表 示问题域里对象静态模型。
其中在领域模型中,关于它的描述主要有以下几点:概念类、概念类的属性以及 概念之间的关联。而关于它的表达也是从三个方面入手:符合、内涵、外延。首先从 符合来讲,就是把领域类中的图片或单词称为符合;而内涵则是对领域类的定义,和 上述逻辑学中内涵有共同点,其中此时的外延就是对领域类定义的一组事例。举个例 子:对于某销售场景的领域建模而言,其中包括概念符合有Sale、date和time,概念 的内涵为一次销售是购买交易事件,其有一个时间和日期,而概念的外延可以是是 Sale-1、Sale-2、Sale-3。由此可见,逻辑学中的概念在领域建模中也有应用,我们学 会对概念外延的划分,能够帮助我们更好的理解领域建模中的概念的外延,而内涵我 们也能利用前面所了解到的种属关系,进行限制或者概括,这样能够更好的帮助我们 来理解领域建模的内涵,此处就不举例子一一说明。