软件工程方法论
软件工程中的软件测试策略与方法论

软件工程中的软件测试策略与方法论软件测试是软件开发过程中不可或缺的一环,它的目标是发现和纠正潜在的软件缺陷,以确保软件的质量和稳定性。
然而,在软件工程中,如何选择合适的测试策略和方法论,以及如何有效地进行测试,都是非常重要的问题。
本文将介绍几种常见的软件测试策略和方法论,并分析它们的优缺点。
一、白盒测试白盒测试是一种基于代码内部结构的测试方法,它通过检查程序的内部逻辑和数据流来验证软件的功能和正确性。
白盒测试可以帮助测试人员深入了解软件的内部结构,并揭示隐藏的错误和缺陷。
其主要方法包括语句覆盖、分支覆盖、路径覆盖等。
白盒测试的优点是可以发现细粒度的错误,并提供代码覆盖率的度量,有助于提高软件的稳定性和可靠性。
然而,白盒测试需要测试人员具备良好的编程和调试能力,并且需要了解软件的内部实现细节。
此外,由于白盒测试主要关注程序代码的正确性,而忽略了系统整体的功能和用户需求,因此可能会遗漏一些潜在的缺陷。
二、黑盒测试黑盒测试是一种基于软件功能和用户需求的测试方法,它从外部对软件进行测试,而不需要了解其内部实现细节。
黑盒测试通过设计测试用例来检查软件的输入、输出和功能是否符合预期,以验证软件的正确性和健壮性。
黑盒测试的优点是可以覆盖广泛的功能和用户场景,从而更好地满足用户的需求。
同时,黑盒测试不需要了解软件的内部实现细节,因此对测试人员的技术要求相对较低。
然而,黑盒测试只能检验软件功能的正确性,而无法发现程序内部的错误和缺陷。
因此,在真实的软件开发过程中,通常需要将黑盒测试与其他测试方法相结合使用。
三、灰盒测试灰盒测试是白盒测试和黑盒测试的结合,它既关注软件内部的结构和逻辑,又考虑软件的功能和用户需求。
灰盒测试通过设计测试用例,结合对软件内部结构的了解,来验证软件的正确性和稳定性。
灰盒测试的优点是综合了白盒测试和黑盒测试的优势,既能发现细粒度的错误,又能满足用户的需求。
然而,灰盒测试需要测试人员具备一定的编程和调试能力,并且需要花费较多的时间和精力来设计和执行测试用例。
软件工程方法

软件工程方法软件工程方法是指在软件开发过程中,采用一定的规范、流程和技术手段来管理和控制软件项目的方法论。
它涉及到软件开发的各个阶段,包括需求分析、设计、编码、测试、部署和维护等环节。
在当今信息化社会,软件已经成为各行各业不可或缺的重要组成部分,而软件工程方法的应用,可以有效提高软件开发的质量和效率,降低项目风险,保证项目的顺利进行。
首先,需求分析是软件工程方法中至关重要的一环。
在软件开发的初期阶段,开发团队需要与客户充分沟通,了解客户的需求和期望,然后将这些需求转化为可执行的任务,明确项目的范围和目标。
在这一阶段,需求工程师需要收集、整理、分析和确认需求,编写需求规格说明书,明确软件的功能和性能要求,为后续的设计和开发工作奠定基础。
其次,设计阶段是软件工程方法中的关键环节。
在需求分析的基础上,设计师需要制定合理的软件架构和模块化设计,确定软件的整体结构和各个模块之间的关系,绘制详细的设计文档和流程图,为后续的编码和测试工作提供指导。
良好的设计能够提高软件的可维护性和可扩展性,减少后期的修改和调整工作,提高软件的稳定性和性能。
接着,编码阶段是软件工程方法中的实施环节。
在设计文档的指导下,开发人员需要按照设计要求,编写高质量的代码,采用规范的编码风格和技术标准,确保代码的可读性和可维护性。
同时,开发团队需要进行代码审查和单元测试,及时发现和修复潜在的问题,保证软件的质量和稳定性。
此外,测试阶段是软件工程方法中不可或缺的一部分。
测试工程师需要根据需求规格说明书和设计文档,制定详细的测试计划和用例,对软件进行功能测试、性能测试、安全测试等多方面的测试工作,发现和解决软件中存在的缺陷和问题,保证软件的质量和稳定性。
最后,部署和维护阶段是软件工程方法中的最后环节。
在软件开发完成后,需要进行软件的部署和上线工作,确保软件能够正常运行并满足客户的需求。
同时,需要建立健全的软件维护体系,及时响应客户的反馈和需求,修复软件中存在的问题,不断优化和完善软件,保持软件的竞争力和持续发展。
软件工程中的软件开发流程与方法论

软件工程中的软件开发流程与方法论在软件工程领域中,软件开发流程与方法论是确保项目成功的关键要素。
软件开发流程是指软件项目从开始到最终交付的整个生命周期,而软件开发方法论是指在开发流程中所采用的具体方法和技术。
本文将探讨软件工程中的软件开发流程与方法论,以帮助读者更好地理解和应用于实际项目中。
一、需求分析阶段需求分析是软件开发流程的起点,也是最重要的一步。
在这一阶段,开发人员与客户紧密合作,详细了解客户的需求和期望。
通过与客户的沟通和交流,开发团队能够准确捕捉到用户需求,并确保在后续的开发过程中不偏离客户期望。
在需求分析阶段,开发团队通常会采用用户故事、用例模型等方法来描述和理解用户需求。
通过这些技术手段,开发人员能够明确了解到用户的具体操作步骤、功能需求以及非功能性需求等,为后续的设计和实现提供了基础。
二、设计阶段在需求分析阶段完成后,接下来是设计阶段。
设计阶段是根据用户需求和系统约束条件,以系统化的方式定义软件的体系结构、组件和接口设计。
设计阶段的目标是通过合理的设计来满足用户需求,并确保软件的可扩展性、可维护性和可重用性。
常见的软件设计方法包括面向对象设计、结构化设计和数据流程图设计等。
面向对象设计是目前较为流行的设计方法,采用类与对象的概念,将软件系统分解为若干个相互协作的对象。
结构化设计则采用模块与流程的划分,通过自顶向下、逐步细化的方式来定义系统的结构和功能。
三、编码与测试阶段设计阶段完成后,就进入了编码和测试阶段。
在软件开发方法论中,编码和测试是紧密结合的,它们相互促进,形成了一个迭代的过程。
编码阶段是将设计文档转化为可执行的代码的过程。
开发人员根据设计要求编写代码,并保证代码的质量和可读性。
编码时应充分考虑代码的可维护性和扩展性,以便后续的维护和升级。
测试阶段是验证软件的正确性和可靠性的过程。
测试可以分为单元测试、集成测试和系统测试等不同的层次。
单元测试是对单个模块进行测试,集成测试是对各个模块的集成进行测试,系统测试是对整个系统进行测试。
软件工程方法论

软件工程方法论软件工程是一种以工程化的方式来开发和维护软件系统的学科。
在软件工程领域,方法论是指按照特定的理论和实践原则,组织和管理软件开发过程的方法和技术。
在本文中,我们将探讨软件工程方法论的定义、重要性以及一些常见的软件工程方法。
一、软件工程方法论的定义软件工程方法论是指在软件开发过程中使用的一系列方法、技术和工具。
它们是根据软件工程领域的最佳实践和经验总结而得出的,可以帮助开发团队高效地进行软件开发、测试和维护。
软件工程方法论包括需求分析、设计、编码、测试、集成和发布等多个环节,以确保软件系统的质量和效率。
二、软件工程方法论的重要性软件工程方法论对于提高软件开发的效率和质量至关重要。
它可以帮助开发团队在整个开发生命周期中规范各个阶段的工作流程,减少错误和风险,并且提高软件系统的可维护性和可扩展性。
软件工程方法论还能够提供标准化的开发过程和文档,使开发团队能够更好地协作和沟通。
三、常见的软件工程方法1. 瀑布模型:瀑布模型是软件开发生命周期的经典方法之一。
它的特点是各个阶段依次进行,每个阶段的输出作为下一个阶段的输入。
瀑布模型适用于需求明确、稳定的项目,但对于需求变化频繁的项目可能不适用。
2. 敏捷开发:敏捷开发是一种迭代、增量的开发方法。
它强调团队的协作和快速响应客户的需求变化。
敏捷开发包括多种方法,如Scrum、XP等。
敏捷开发适合需求变化频繁或项目规模较小的项目。
3. 原型开发:原型开发是一种通过迅速构建初步的原型来验证系统需求、设计和功能的方法。
它可以帮助开发团队更好地理解用户需求,并及早发现和解决问题。
原型开发适用于需求不确定或创新性较强的项目。
4. DevOps:DevOps是一种将开发和运维紧密结合的开发方法,旨在实现快速、可靠的软件交付。
DevOps强调自动化测试、持续集成和持续交付,以快速响应需求变化和提高软件质量。
四、结语软件工程方法论对于软件开发项目的成功至关重要。
不同的项目可以选择适合自己的开发方法,以提高效率和质量。
软件工程的基本原理与方法论

软件工程的基本原理与方法论软件工程是一门涉及软件开发、维护和管理的学科,它的目标是提高软件的质量、效率和可靠性。
在实践中,软件工程有一套基本的原理和方法论,这些原理和方法论对软件工程师的工作至关重要。
一、需求分析和规划在软件工程中,需求分析是最重要的步骤之一。
它需要软件工程师与用户或者客户进行深入的沟通和了解,以便明确软件系统的需求和目标。
在需求分析过程中,软件工程师需要学会运用各种工具和技术,例如用例图、数据流程图、需求文档等,来定义、记录和验证需求。
二、系统设计与架构软件系统的设计与架构是软件工程的核心内容之一。
它涉及到如何将需求转化为具体的系统设计方案,并构建系统的结构和组件。
在系统设计过程中,软件工程师需要运用结构化设计、面向对象设计等方法,选择合适的设计模式和架构风格,以确保系统的可扩展性、可维护性和可重用性。
三、编码与实现编码与实现是软件工程中最直接的活动之一。
在这个阶段,软件工程师将设计好的系统转化为可执行的代码。
为了确保代码的质量和可读性,软件工程师需要遵循良好的编码规范和代码管理原则,使用合适的编程语言和开发工具,并进行代码审查和测试。
四、测试与验证软件测试是软件工程中至关重要的环节。
它旨在发现和纠正系统中的错误和缺陷,以提高软件的可靠性和稳定性。
软件工程师需要学会制定测试策略和测试计划,编写测试用例和测试脚本,运用各种测试技术和工具,如单元测试、集成测试、性能测试等,来验证系统的正确性和性能。
五、部署与维护软件部署与维护是软件工程的最后一环节。
一旦软件系统开发完成,它需要被部署到现实环境中,供用户使用。
在部署过程中,软件工程师需要学会进行软件发布和配置管理,协调系统的安装和运行。
此外,软件工程师还需要进行系统的维护和更新,及时修复bug和漏洞,提供技术支持和用户培训。
六、团队协作与项目管理在软件工程中,团队协作和项目管理是非常重要的。
软件工程师通常会与其他人员一起合作完成项目,因此需要良好的沟通和协作能力。
软件工程的开发方法论与实践技巧

软件工程的开发方法论与实践技巧简介随着信息技术的飞速发展,软件已经成为现代社会发展的重要支柱,因此软件开发的成功与否将直接关系到企业的生存与发展。
软件工程的开发方法论和实践技巧是软件开发的核心,本文旨在介绍软件工程的开发方法论和实践技巧,以便开发人员能够快速掌握软件开发的要点,提高软件质量和效率。
一、软件开发流程模型软件开发流程模型是软件工程的开发方法论中最重要的内容之一,它指导着软件开发流程的整个过程。
常见的软件开发流程模型包括瀑布模型、迭代模型、敏捷模型等。
1、瀑布模型瀑布模型是最早应用于软件开发中的开发模型,其开发流程包括需求分析、设计、编码、测试和维护等阶段。
该模型适用于需求比较明确的开发项目,但对于需求不明确、变化较快的开发项目不适用。
2、迭代模型迭代模型是在瀑布模型基础上进一步发展,该模型在每个阶段后增加了迭代环节,能够更好地适应需求变化较大的开发项目。
3、敏捷模型敏捷模型是一种应对需求不明确的开发模型,其特点是注重人员互动和响应变化,通过快速开发迭代的方式来掌握需求,减少风险。
该模型适用于小团队开发、需求变化较大的项目。
二、开发工具和技术1、版本管理工具版本管理是软件开发过程中最常见的问题之一,版本管理工具可以帮助开发人员实现版本控制和开发过程的监控和管理。
常见的版本管理工具包括Git、SVN等。
2、自动化工具自动化工具可以提高软件开发的效率和质量,比如持续集成工具Jenkins、自动化测试工具Selenium等。
3、UMLUML是一种面向对象的建模语言,在软件开发中起着重要的作用。
通过UML可以描述软件的结构、行为和交互等,以便开发人员更好地理解和设计软件系统。
三、编码规范和测试方法1、编码规范编码规范是软件开发过程中的重要环节之一,它包括程序风格、注释、命名规则、异常处理等规范,能够提高代码的可读性、可维护性和质量。
常见的编码规范包括Google Code Style、Sun Code Style等。
软件工程方法论

软件工程方法论随着科技的发展和普及,软件在我们的日常生活中扮演着越来越重要的角色。
无论是手机应用、电子商务平台还是智能设备,我们都离不开软件的支持。
然而,软件开发的过程却并不简单,为了确保开发出高质量的软件,软件工程方法论应运而生。
软件工程方法论是一套规范化的软件开发方法,旨在提高软件开发过程的效率和质量。
它包含了一系列的实践和原则,涵盖需求分析、设计、开发、测试和维护等阶段。
首先,需求分析是软件开发的重要环节。
在这个阶段,开发团队与客户密切合作,明确客户的需求和期望。
通过与客户的交流和沟通,开发团队可以准确捕捉到软件的功能需求,并将其转化为开发所需的规范和文档。
接下来是设计阶段。
在这个阶段,开发团队将需求转化为软件的架构和设计。
他们定义系统的操作流程、数据结构和模块化组件等。
设计的目标是保持软件的简洁性、可维护性和可扩展性,以确保软件的稳定性和性能。
开发阶段是将设计的理念转化为具体的代码实现。
开发团队利用各类开发工具和编程语言,按照规范进行编码。
在开发过程中,团队成员之间需要进行良好的协作和沟通,以确保代码的质量和一致性。
测试阶段是确保软件质量的关键环节。
测试团队负责验证软件的功能是否符合需求,并进行性能、安全性、稳定性等方面的测试。
他们使用各类技术手段和工具,如单元测试、集成测试和系统测试,以发现和修复软件中的潜在问题。
最后是软件的维护阶段。
在软件交付给客户后,需要定期进行维护工作,确保软件的正常运行。
这包括修复报告的缺陷和错误,更新软件的功能和性能,处理用户的反馈和需求变更等。
维护阶段的目标是保证软件的稳定性和可靠性,提升用户体验。
除了以上几个阶段,软件工程方法论还注重于项目管理和质量控制。
项目管理涉及资源的分配、进度的控制和团队的协调等,以保证项目的顺利进行。
质量控制则着重于规范和标准的制定,以确保软件的质量和符合相关标准。
总的来说,软件工程方法论是一套能够帮助开发团队高效开发高质量软件的方法和实践。
软件工程的基本理论与方法

软件工程的基本理论与方法软件工程是一门涉及计算机科学、数学和工程学的跨学科领域,它主要研究的是软件的开发、维护和管理。
随着计算机技术的快速发展,软件工程也在不断地发展和完善。
本文将着重从基本理论和方法两个方面介绍软件工程的发展情况。
一、软件工程的基本理论1、软件开发生命周期软件开发生命周期是软件工程中最基本的理论之一,它是描述软件开发过程中各个阶段的生命周期。
软件开发生命周期通常被分为五个阶段:计划阶段、需求分析阶段、设计阶段、编码阶段和测试阶段。
这五个阶段彼此关联和依赖,每一个阶段完成后都需要进行验证和确认,以确保软件质量的稳定和良好。
2、软件质量软件质量是衡量软件是否具有可靠性、耐用性、可维护性、可用性等方面的能力的基本量化指标。
准确地衡量软件质量通常需要根据一系列的因素来考虑,比如软件的性能、稳定性、界面友好性等。
3、代码风格代码风格是指程序代码的书写规范,它主要包括代码的缩进、变量命名规范、代码注释等多个方面。
好的代码风格不仅能够提高代码的可读性和可维护性,而且还能够提高代码开发的效率和精确度。
4、面向对象编程面向对象编程是程序设计中的一种方法论,它将现实世界中的事物看作是对象。
这种编程方式能够提高代码的复用性、可扩展性和可维护性,因此受到了广泛的认可和应用。
二、软件工程方法1、面向对象方法面向对象方法主要是以对象为中心,将数据和方法组织成为一个整体。
在这种方法中,数据和方法是紧密相连的,对象内的方法(也称类方法)可以访问其他对象的数据,从而解决了程序设计中的许多问题。
2、正式方法正式方法是软件工程中的一种强制性的方法,它主要是一种数学化的方法,用于分析、设计和验证软件。
这种方法虽然复杂,但是能够提供高质量、高可靠性的软件。
3、自底向上方法自底向上方法通常用于软件模块的编写和开发。
这种方法是先定义好子程序,然后在将子程序组合成更大的程序。
这种方法适合于比较大型的项目,因为它可以将一个复杂的问题分解为独立的、易于管理的子问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注:考生属哪种类别请划“√”(博士、在校硕士、工程硕士、师资硕士、同等学力、研究生班)辽宁工程技术大学研究生考试试卷考试时间:年月日考试科目:考生姓名:评卷人:考试分数:注意事项1、考前研究生将上述项目填写清楚2、字迹要清楚,保持卷面清洁3、试题、试卷一齐交监考老师4、教师将试题、试卷、成绩单,一起送研究生学院;专业课报所在院、1、科学技术方法论到软件工程方法论科学技术哲学属于哲学的重要分支学科,主要研究自然界的一般规律,科学技术活动的基本方法,科学技术及其发展中的哲学问题,科学技术与社会的相互作用等内容。
科学技术哲学的历史悠久,中国古代和古希腊时代的思想家就开始研究自然哲学方面的问题,随着科学技术的发展,科学技术方法论的研究开始出现。
在科学技术对科学影响日益明显的现代,科学技术与社会关系成为科学技术哲学研究的重点,科技哲学研究也日益受到重视。
马克思主义对科技哲学的发展有重要的贡献。
1.1、方法方法是指人们为了达到某种目的,所遵循的程序、途径或所使用的方式、手段以及技巧的总和。
而对于我们计算机专业人员而言,在程序设计的过程中,方法就是一种算法或者完成某一功能的函数。
1.2、方法论方法论指的是以方法作为研究对象,系统地研究方法的性质、条件、作用和发生发展的规律。
刘院长讲课过程中,使我印象最为深刻的就是,强调定义的重要性。
老师课上所举出的例子是我们高中时期接触到的,本科期间又在高等数学中再次出现的概念,y=2x的导数dy/dx为什么是2。
所有人都知道答案,但是为什么是2,只知道使用公式得出结果就可以了吗?正确的解答应该使用导数的定义,x的增量Δx在点x0的邻域内,lim_{Δx→0} [2(x0+Δx)-2x0]/Δx=2,极限存在且等于2(当然,这里),所以其导数是2。
其实导数应用在很多领域,包括我的研究方向,机器学习中的梯度下降算法,还有神经网络中反向传播误差过程中的链式求导法则,如果研究者对于基本的导数定义都没有熟练掌握,怎么会精通研究领域中的方法,更何谈改进创新呢。
1.3、科学技术方法论科学技术方法论就是指人们有计划、有目的地认识自然、探索未知、变革自然的手段和方式的理论体系。
总的来说,在本科和研究生阶段学校所开设的课程都是相关专业、相关研究方向的知识理论体系,我们学习的过程应该是在掌握了理论知识的基础上,将所学到的内容运用于实践,然后将实践后的经验总结成理论,不断反复的过程。
1.4、软件工程方法论软件工程方法论指的是,在软件开发的过程中,必须遵循的普遍行为和规则。
软件工程方法论指导下的科研过程,分为如下五个步骤。
1)选题。
选题即问题定义,是科研的第一步,也是最关键的一步,极大地体现出论文的新颖程度,在此阶段需要查阅大量资料,深入了解国内外研究现状。
2)获取科学事实。
对应于软件开发周期,我认为是可行性分析和总体设计阶段。
对于我们数据挖掘方向的研究人员,应该包括收集数据集,以及对硬件环境,比如考虑选择多大内存的电脑,是否需要集群并行处理等。
3)思维加工。
此阶段需要对所提出的理论、公式进行推导和证明,并初步试验,详细设计到选用什么数据结构。
4)验证。
对应于软件测试,需要大量实验,完成黑盒、白盒测试等一系列测试。
5)建立理论体系。
如果实验结果得到了成功,就可以总结经验,完成论文。
总之,科学研究的过程与软件开发的过程相类似,都是可以定量表示,定性分析的。
2、学科交叉与融合对软件工程方法的影响当今,几乎所有研究领域都会或多或少地用到数学知识,因为数学应用的普遍性,所以不会有人说其所研究的领域与数学专业是交叉学科。
虽然数学考试中的成绩不高,但我从小热爱数学,也是由于我参加了全国数学建模比赛,最近在看司守奎老师的《数学建模算法与程序》。
刘院长在讲课过程中提到过运载火箭为什么是三级火箭,这个问题是航空航天领域的研究者的专业问题,但也可以作为常识进行了解,司守奎老师的那本书的第十三章《微分方程建模》中,就有对运载火箭所建立的数学模型,还有完整的公式推导,最后分析原因,得出结论,其中需要考虑速度、质量以及经济等因素。
我的研究领域还包括自然语言处理,自然语言处理,就是一个交叉学科,既包括统计学,也包括语言语音学等。
总之,学科交叉与融合对软件工程方法必然会有积极地影响,科研的突破点往往是学科之间的交汇点、交叉点,并由此产生软件工程专业更多的研究方向。
3、软件与服务系统服务科学已经深入到社会生活的各个方面,融合了计算机科学、软件科学、运筹学、产业经济学、管理科学等诸多学科。
从软件角度研究服务系统的整体框架和知识体系,包括软件与服务系统概述、服务构件开发方法、服务战略、服务系统设计、服务创新、服务外包、服务系统的软件设计与实现、服务系统管理、服务系统中的IT管理和服务系统案例分析等。
4、记忆、知识、语言与人工智能4.1、从一个悲剧故事谈起黛博拉(Deborah)轻轻地推开房门,探头往里看。
克莱夫(Clive)发现进来的是妻子,脸上露出无限的喜悦。
他直奔门前,高喊「太好了」,并张开双臂紧紧地抱住黛博拉。
克莱夫一边和黛博拉亲吻,一边说「你来了,真让我吃惊」。
接着两人又开始拥抱,好像分别已久。
坐下来后,黛博拉用温柔的眼光看着克莱夫说「其实我今天早上也来过」,克莱夫摇摇头反驳道「不可能,这是我今天第一次见到你。
」这样的场景每天都在黛博拉和克莱夫之间重复上演。
克莱夫·韦尔林(Clive Wearing)是英国的一位音乐家。
他四十多岁的时候突然患上了病毒性脑炎,这是一种死亡率很高的疾病。
幸运的是他活了下来,不幸的是疾病给他留下了失忆症(amnesia)。
过去发生的很多事情已不能记起,但他还认识妻子,却不认识女儿。
更严重的是他对当前发生的事情不能记忆到脑子里,几分钟后就会完全忘记。
他的行动没有任何问题,语言和思维似乎也正常,可以饮食、行走、说话、写字,甚至弹琴、唱歌,看上去和正常人一样。
但他就是长期记忆(long term memory)出了问题。
他感受到的世界和大家是一样的,但转过头去,刚发生的一切就会从脑海中消失,他所拥有的只是「瞬间到瞬间的意识」,没有过去可以联系,也没有未来可以展望。
克莱夫·韦尔林用自己不幸的经历为我们揭示了长期记忆对我们的智能,乃至我们的人生的重要意义。
4.2、记忆与智能人脑的记忆模型由中央处理器、寄存器、短期记忆和长期记忆组成。
视觉、听觉等传感器从外界得到输入,存放到寄存器中,在寄存器停留1~5 秒。
如果人的注意力关注这些内容,就会将它们转移到短期记忆,在短期记忆停留30 秒左右。
如果人有意将这些内容记住,就会将它们转移到长期记忆,半永久地留存在长期记忆里。
人们需要这些内容的时候,就从长期记忆中进行检索,并将它们转移到短期记忆,进行处理。
长期记忆的内容既有信息,也有知识。
简单地说,信息表示的是世界的事实,知识表示的是人们对世界的理解,两者之间并不一定有明确的界线。
人在长期记忆里存储信息和知识时,新的内容和已有的内容联系到一起,规模不断增大,这就是长期记忆的特点。
大脑中,负责向长期记忆读写的是边缘系统中的海马体(hippocampus)。
克莱夫·韦尔林患失忆症,是因为海马体受到了损伤。
长期记忆实际上存在于大脑皮层(cerebral cortex)。
在大脑皮层,记忆意味着改变脑细胞之间的链接,构建新的链路,形成新的网络模式。
我们可以认为,现在的人工智能系统是没有长期记忆的。
无论是阿尔法狗,还是自动驾驶汽车,都是重复使用已经学习好的模型或者已经被人工定义好的模型,不具备不断获取信息和知识,并把新的信息与知识加入到系统中的机制。
假设人工智能系统也有意识的话,那么其所感受到的世界和克莱夫·韦尔林是一样的,那就是,只有瞬间到瞬间的意识。
那么,意识是什么?这是当今科学的最大疑团之一,众说纷纭,莫衷一是。
日裔美国物理学家加莱道雄(Michio Kaku)给出了他的定义。
如果一个系统与外部环境(包括生物、非生物、空间、时间)互动过程中,其内部状态随着环境的变化而变化,那么这个系统就拥有「意识」。
按照这个定义,温度计、花儿是有意识的系统,人工智能系统也是有意识的。
拥有意识的当前的人工系智能系统缺少的是长期记忆。
具有长期记忆将使人工智能系统演进到一个更高的阶段。
这应该是人工智能今后发展的方向。
4.3、智能问答系统未来人工智能技术不断发展,预计将会出现智能性的问答系统,系统包括语言处理模块、短期记忆、长期记忆、中央处理模块。
有大量的结构化的、非结构化的信息和知识作为输入,也有大量的问答语对作为训练数据。
系统能够自动获取信息与知识,掌握语言理解与生成能力,将信息和知识处理存储到长期记忆,理解用户用自然语言提的问题,利用记忆的信息与知识给出正确的答案。
在某种意义上,现在已经存在这种系统的原型,例如,互联网搜索引擎就可以看作是其简化版。
但是要真正构建人类的智能信息助手,还有许多难关要攻克,有许多课题要解决。
知识问答的本质问题是:(1)语义分析,即将输入的自然语言的表示映射到内部的语义表示;(2)知识表示,即将输入的信息知识转换为内部的语义表示。
最大的挑战来自语言的多义性和多样性,以及知识的模糊性。
语言具有多义性(ambiguity),也就是说一个表达可以表示不同的意思。
下面是语言学家查尔斯·菲尔默(Charles Fillmore)给出的例子。
英语单词climb,其基本语义是四肢用力沿着一条轨迹向上移动,表示「向上爬」的意思。
所以如果用climb 造句,大家一般会给出这样的句子「The boy climbed the tree」(男孩爬上了树)。
但是climb 一词的语义会向不同方向扩展,可以说「Prices are climbing day by day」(物价每日飙升),这里climb 就没有了四肢用力移动的意思。
也可以说「He climbed out of a sleeping bag」(他从睡袋中爬出),这里climb 就没有了向上移动的意思。
语言的词汇都具有如下性质:有一个核心的语义,对应一些典型说法,可以由一些特征表示。
但部分特征可以缺失,形成新的语义,产生新的说法。
语言中,除了词汇的多义性,还有句法的多义性。
同时语言也具有多样性(variability),也就是说多个表达可以表示同一个意思。
比如,「地球和太阳的距离」,「地球离太阳有多远?」,「太阳和地球相隔有多少公里?」等,都是同义表达。
人们的知识,特别是常识,具有模糊性(fuzziness)。
下面是人工智能研究的先驱者特里·维诺格拉特(Terry Winograd)给出的例子。
英文中,bachelor 是指未婚成年男性,即单身的意思。
看似是一个明确的概念,但是当我们判断现实中的具体情况时,就会发现我们对这个概念的认识是模糊的,比如,未婚父亲是否是bachelor?假结婚的男子是否是bachelor?过着花花公子生活的高中生是否是bachelor?大家并没有一致的意见。