软件工程 订阅
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。 展开全文
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率 。
信息
外文名
Software Engineering
简    称
SE
类    别
学科
中文名
软件工程
相关专业
通信工程、计算机科学与技术
软件工程定义内涵
软件工程一直以来都缺乏一个统一的定义,很多学者、组织机构都 分别给出了自己认可的定义: [1]  BarryBoehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。IEEE:在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究FritzBauer:在NATO会议上给出的定义:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。《计算机科学技术百科全书》:软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。比较认可的一种定义认为:软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。ISO 9000对软件工程过程的定义是:软件工程过程是输入转化为输出的一组彼此相关的资源和活动。 [2]  其它定义:1.运行时,能够提供所要求功能和性能的指令或计算机程序集合。2.程序能够满意地处理信息的数据结构。3.描述程序功能需求以及程序如何操作和使用所要求的文档。以开发语言作为描述语言,可以认为:软件=程序+数据+文档。 [2]  一、软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括以下四个方面:1、P(Plan)——软件规格说明。规定软件的功能及其运行时的限制。2、D(DO)——软件开发。开发出满足规格说明的软件。3、C(Check)——软件确认。确认开发的软件能够满足用户的需求。4、A(Action)——软件演进。软件在运行过程中不断改进以满足客户新的需求。二、从软件开发的观点看,它就是使用适当的资源(包括人员,软硬件资源,时间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为输出(最终符合用户需求的软件产品)。三个阶段:定义阶段:可行性研究初步项目计划、需求分析;开发阶段:概要设计、详细设计、实现、测试;运行和维护阶段:运行、维护、废弃原则:1、抽象;2、信息隐蔽;3、模块化;4、局部化;5、确定性;6,一致性;7、完备性;8、可验证性
收起全文
精华内容
下载资源
问答
  • 软件工程
    万次阅读 多人点赞
    2021-04-13 12:37:49

    谁能告诉我这科的理论在哪可以实用呀?搞不懂,只能收藏一下包不挂科

    知识点总结

    第一章:

    软件工程定义

    1968年10月,Fritz Bauer 首次提出了“软件工程”的概念,并将“软件工程”定义为:为了经济地获得能够在实际机器上有效运行的可靠软件,而建立并使用的一系列工程化原则。

    1993年IEEE对软件工程的定义:软件工程是将系统化的、规范化的、可度量的途径应用于软件的开发、运行和维护的过程,即将工程化应用于软件的方法的研究。

    软件工程原则:

    抽象与自顶向下,逐层细化  信息隐蔽和数据封装 模块化 局部化 确定性 一致性和标准化 完备性和可验证性

    瀑布模型:

    开发活动的特征:(1)以上一项活动方产生的工作对象为输入(2)利用这一输入,实施本项活动应完成的内容(3)给出该项活动的工作结果,作为输出传给下一项活动(4)对实施该项活动的工作结果进行评审,若其工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工

    瀑布模型的优点:

    (1)可强迫开发人员采用规范化的方法

    (2)严格地规定了每个阶段必须提交的文档

    瀑布模型的缺点

    (1)由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况(2)瀑布模型只适用于项目开始时需求已确定的情况。总地来说,瀑布模型是一种应付需求变化能力较弱的开发模型,因此,很多在该模型基础上开发出来的软件产品不能够真正满足用户需求

    第二章:

    可行性研究的过程:

    1. 复查系统规模和目标

    复查系统定义,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束

    1. 研究目前正在使用的系统

    现有的系统是信息的重要来源。若一个软件是对旧系统的改造,那开发新系统时,要充分了解老系统存在的问题,需要增加的功能,新系统实际上是老系统的部分功能加上一些新增功能形成的系统

    1. 导出新系统的高层逻辑模型
    2. 重新定义问题

    新系统的逻辑模型实质上表达了分析员对系统必须做什么的看法,得到新系统的高层逻辑模型之后,可能会发现前面问题定义的范畴过大,分析员还要和用户一起再复查问题定义,对问题进行重新定义和修正。

    1. 导出和评价供选择的解法

    分析员应该从系统逻辑模型出发,研究问题的几个组成部分,细化各功能点,导出若干个较高层次的物理解法供比较和选择

    1. 推荐行动方针
    2. 草拟开发计划

    任务分解 进度规划 财务预算 风险分析及对策

    1. 书写文档提交复查

    第三章:

    一.软件需求的定义:

    以清晰、简单、一致且无二义性的方式,描述用户对目标软件系统在功能、行为、性能、设计约束等方面的期望,是在开发过程中对软件系统的约束。

    二.需求分析的任务

    1. 业务需求:是客户对于软件系统的高层次目标要求,定义了项目的远景和范围
    2. 用户需求:从用户角度描述软件系统的功能需求与非功能需求,通常只涉及系统的外部行为。
    3. 功能需求:功能需求描述软件系统应该提供的功能或务,通常涉及用户或其他外部系统与目标系统之间的交互,不考虑目标系统内部的实现细节
    4. 非功能需求:非功能需求即性能需求,反映了客户对软件系统质量和性能的额外要求
    5. 约束条件: 约束条件是软件系统设计和实现时必须满足的限制条件
    6. 业务规则: 业务规则是对某些功能的可执行性成内部执行速制的一些限定条件
    7. 外部接口需求:    外部接口需求是描述目标系统与外部环境之间的交互接口
    8. 数据定义:当用户描达一个数据项或一个复杂的业务数据结构的格式或缺省值时,正在进行数据定义

    第四章:

    启发规则

    启发规则是软件结构设计优化准则,软件概要设计的任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计原理设计软件,利用启发规则优化软件结构。

    1.改进软件结构提高模块独立性2.模块规模适中3.适当控制深度、宽度、扇出、扇入

    4.模块的作用域应该在控制域之内5.力争降低模块接口的复杂程度

    6.设计单入口单出口的模块7.模块功能可预测

    第五章:

    详细设计的过程

    软作详细设计是软件工程的重要阶段,在详细设计过程中,细化了高层的体系结构设计,将软件结构中的主要部件划分为能独立编码、编译和测试的软件单元,并进行软件单元的设计,同时确定了软件单元和单元之间的外部接口。

    一.详细设计的基本任务

    1. 算法设计:用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来
    2. 数据结构设计:对于需求分析,概要设计确定的概念性的数据类型进行确切的定义
    3. 物理设计: 对数据库进行物理设计,即确定数据库的物理结构
    4. 其他设计

    a.代码设计:为了提高数据的输入、分类、存储及检索等操作的效率,对数据库中的某些数据项的值要进行代码设计b.输入/输出格式设计c.人机对话设计

    1. 编写详细设计说明书  6 . 评审:对处理过程的算法和数据库的物理结构要进行评审

    .详细设计方法:

    1. 自顶向下,逐步求精  2.具有单入、单出的控制结构 3. 五种控制结构:顺序结构,选择,先判断型循环结构,后断型循环结构,多选择分支结构

    第七章:

    一.测试用例设计:

    白盒测试是对软件的过程细节做细致的检查。这一方法把测试对象看作 个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与期望的状态一致。

    覆盖标准

    1. 语句覆盖

    含义:就是选择足够多的测试用例,运行被测程序,使得程序中每条语句至少执行一次。

    1. 判定覆盖

    含义:又称为分支覆盖,在设计测试用例,针对程序中具有分支结构的部分,为了测试所有的可能结果,需要将每个分支都至少执行一次,查看相应的语句执行情况和结果

    (1)a=2,b=0,x=4,覆盖RACBDE

    (2)a=3,b=1,x=1覆盖 RABE

    1. 条件覆盖

    条件覆盖是指设计测试用例时,除了保证每条语句执行一次,还要使判定表达式的每个条件的各种可能取值都至少执行一次,为了实现条件覆盖,保证各种可能的条件都取值,即保证

    第一个判断有以下取值:a>1,a<=1,b=0,b≠0

    第二个判断有以下取值:a=2,a≠2,x>1,x<=1

    选择两组测试用例:

    (1)a=2,b=2,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE

    (2)a=1,b=0,x=0(满足a<=1,b=0,a≠2,x<=1的条件),执行路径为RABE

    1. 判定/条件覆盖

    单独使用判定覆盖和条件覆盖测试结果都不够全面, 若将两种覆盖结合,就会相互补充,判定/条件覆盖就是设计足够多的测试用例,使得每个判定表达式中的每个条件都取到各种可能的值,并且使每个判断语句的所有判断结果至少出现一次。

    (1)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径RACBDE

    (2)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径RABE

    1. 条件组合覆盖

    条件组合覆盖就是设计足够多的测试用例,使得每个判定表达式中条件取值的各种组合都至少出现一次。根据每个判定表达式情况,列出如下条件组合

    (1)a>1,b=0,A表达式为真;(2)a>1,b≠0,A表达式为假;(3)a<=1,b=0,A表达式为假

    (4)a<=1,b≠0,A表达式为假;(5)a=2,x>1,B表达式为真(6)a=2,x<=1,B表达式为真;

    (7)a≠2,x>1,B表达式为真;(8)a≠2,x<=1,B表达式为假。

    选择以下四组测试用例

    选择条件a=2,b=0,x=2,(1)、(5)组合,执行路径 RACBDE

    选择条件a=2,b=1,x=1,(2)、(6)组合,执行路径 RABDE

    选择条件a=1,b=0,x=2,(3)、(7)组合,执行路径 RABDE

    选择条件a=1,b=1,x=1,(4)、(8)组合,执行路径 RABE

    1. 路径覆盖

    就是选取足够多的用例,保证程序的所有路径都至少执行一次,如果存在环形结构,也要保证此环的所有路径都至少执行一次。

    (1)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径为RABE

    (2)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径为 RACBDE

    (3)a=2,b=1,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE;

    (4)a=3,b=0,x=1(满足a>1,b=0,a≠2,x<=1的条件),执行路径为 RACBE

    二.测试的步骤:

    1. 单元测试

    a.单元测试的主要任务

    单元测试针对每个模块,主要解决五个方面的问题:(1)模块接口(2)局部数据结构(3)路径测试 (4)过界条件 (5)出错处理

    b.单元测试的执行过程

    1. 集成测试

    a.非增式集成测试方法 b. 增式集成测试方法

    1. 确认测试

    确认测试的标准  配置审查的内容  Alpha Beta 测试  

    1. 系统测试

    方法:恢复测试方法   安全测试方法  强度  性能

    第八章:

    一.软件维护的概念

    软件维护是指在软件运行或维护阶段对软件产品所进行的修改,这些修改可能是改

    正软件中的错误,也可能是增加新的功能以适应新的需求,但是一般不包括软件系统结

    构上的重大改变。根据软件维护的不同原因,软件维护可以分成四种类型

    (1)改正性维护

    在软件交付使用后,由于开发时测试得不彻底或不完全,在运行阶段会暴露一些开

    发时未能测试出来的错误,为了识别和纠正软件错误,改正软件性能上的缺陷,避免实

    施中的错误使用,应当进行的诊断和改正错误的过程,这就是改正性维护

    (2)适应性维护

    随着计算机技术的飞速发展和更新换代,软件系统所需的外部环境或数据环境可能

    会更新和升级,如操作系统或数据库系统的更换等。为了使软件系统适应这种变化,需

    要对软件进行相应的修改,这种维护活动称为适应性维护

    (3)完善性维护

    在软件的使用过程中,用户往往会对软件提出新的功能与性能要求,为了满足这些

    要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件

    的可维护性,这种情况下进行的维护活动叫作完善性维护,完善性维护不一定是救火

    式的紧急维修,而可以是有计划的一种再开发活动

    4)预防性地护

    这类维护是为了提高软件的可维护性,可靠性等,为以后进一步改进软件打下良好

    的基础的维护活动,具体来讲,就是采用先进的软件工程方法对需要维护的软件或软件中的某一部分重新设计、编码和测试的活动。

    二.软件维护的特点

    1.软件维护受开发过程影响大

    2.软件维护困难多

    3.软件维护成本高

    三.软件维护的步骤

    软件维护工作包括建立维护组织、报告与评估维护申请、实施维护流程等步骤。

    在影响分析和版本规划的过程中,不同的维护类型需要采用不同的维护策略

    (1)改正性维护:首先应该评价软件错误的严重程度,对于十分严重的错误,维护

    员应该立即实施维护对于一般性的错误,维护人员可以将有关的维护工作与其他开发

    任务一起进行现划。在有些情况下,有的错误非常严重,以致不得不临时放弃正常的维

    护控制工作程序,既不对修改可能带来的副作用作出评价,也不对文档作相应的更新,而

    是立即进行代码的修改。这是一种救火式的改正性维护,只有在非常紧急的情况下才使

    用,这种维护在全部维护中只占很小的比例。应当说明的是,救火式不是取消,只是推迟

    了维护所需要的控制和评价。一旦危机取消,这些控制和评价活动必须进行,以确保当

    前的修改不会增加更为重要的问题

    (2)适应性维护:首先确定软件维护的优先顺序,再与其他开发任务一起进行规划

    (3)定善性维护,根据商业的需求和软件的发展,有些完善性维护可能不会被接受。对于被接受的维护中请,应该确定其优先次序井现划其开发工作

    第九章

    质量保证

    产品的生命,不论生产何种产品,质量都是极端重要的。软件产品开发周期长,耗费巨大的人力和物力,更必须特别注意保证质量。

    软件质量:概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。

    软件质量因素的定义:

    正确性:系统满足规格说明和用户目标的程度,即,在预定环境下能正确地完成预期功能的程度

    建壮性:在硬件发生故障、输人的数据无效或操作错误等意外环境下,系统能做出适当响应的程度

    完整性(安全性):对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度

    效率:为了完成预定的功能,系统需要的计算资源的多少

    可用性:系统在完成预定应该完成的功能时令人满意的程度

    风险:按预定的成本和进度把系统开发出来,并且为用户所满意的概率

    可理解性:理解和使用该系统的容易程度

    可维修性:诊断和改正在运行现场发现的错误所需要的工作量的大小

    灵活性(适应性):修改或改进正在运行的系统需要的工作量的多少

    可测试性:软件容易测试的程度

    可移植性:把程序从一种硬件配置和(或)软件系统环境转移到另一种配置和环境时,需要的工作量多少,有一种定量度量的方法是:用原来程序设计和调试的成本除移植时需用的费用

    可再用性:在其他应用中该程序可以被再次使用的程度(或范围)

    互运行性:把该系统和另一个系统结合起来需要的工作量的多少

    软件质量保证的措施主要有:基于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。

    复审主要用来保证在编码之前各阶段产生的文档的质量;基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的最后一道防线;程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致

    技术复审的必要性:

    正式技术复审的显著优点是,能够较早发现软件错误,从而可防止错误被传播到软件过程的后续阶段。

    正式技术复审是软件质量保证措施的一种,包括走查和审查等具体方法。走查的步骤比审查少,而且没有审查正规。

    走查主要有下述两种方式。

    (1) 参与者驱动法。参与者按照事先准备好的列表,提出他们不理解的术语和认为不正确的术语。文档编写组的代表必须回答每个质疑,要么承认确实有错误,要么对质疑做出解释。

    (2) 文档驱动法。文档编写者向走查组成员仔细解释文档。走查组成员在此过程中不时针对事先准备好的问题或解释过程中发现的问题提出质疑。这种方法可能比第一种方法更有效,往往能检测出更多错误。经验表明,使用文档驱动法时许多错误是由文档讲解者自己发现的。

    审查步骤:

    (1) 综述。由负责编写文档的一名成员向审查组综述该文档。在综述会结束时把文档分发给每位与会者。

    (2) 准备。评审员仔细阅读文档。最好列出在审查中发现的错误的类型,并按发生频率把错误类型分级,以辅助审查工作。这些列表有助于评审员们把注意力集中到最常发生错误的区域。

    (3) 审查。评审组仔细走查整个文档。和走查一样,这一步的目的也是发现文档中的错误,而不是改正它们。通常每次审查会不超过90分钟。审查组组长应该在一天之内写出一份关于审查的报告。

    (4) 返工。文档的作者负责解决在审查报告中列出的所有错误及问题。

    (5) 跟踪。组长必须确保所提出的每个问题都得到了圆满的解决(要么修正了文档,要么澄清了被误认为是错误的条目)。必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。

    程序正确性证明:

    测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。

     

     

    软件工程一测

     

    1. 软件工程三要素:______________、_________________、_________________
    2. 获取愿景的三部曲:
    3. 愿景_______(是/否)功能。
    4. 愿景必须指出__________
    5. 迭代与增量的定义
    6. UML静态图包括(4个)
    7. UML动态图包括(5个)
    8. 为什么使用UML语言
    9. ______________是软件成功的基础。

     

     

    答案:

    1. 工具(系统)、方法(技能)、开发过程(框架)
    2. 第一步:找到软件项目的“老大”;第二步:得到“老大”对项目的期望(愿景);第三步:描述出愿景的度量指标。
    3. 度量指标
    4. 迭代是反复求精,增量是逐块建造
    5. 类图、对象图、组件图、部署图
    6. 时序图、协作图、状态图、活动图、用例图
    7. 主要用于交流,有利于清晰,有利于精确
    8. 需求

     

     

    软件工程二测

     

    1. 在项目失败的因素中,与      相关的比例最高。
    2.       是解决需求噩梦的手段。
    3. 简要分析项目开发过程中,公司老板、中层经理、一线员工的需求分别有什么特点。
    4. ICONIX过程从把需求文档变成可运作的代码过程只需四步,需要使用哪四张UML图?
    5. 若某公司设有公司老总、市场总监与财务总监,实现强化客户管理功能、提升财务效率功能、优化公司资源功能的三种软件,“老大”分别是谁?

     

    答案:

    1.需求

    2.需求工程

    3.公司老板:企业战略、开源节流(定于愿景)

      中层经理:简化管理、优化流程(业务建模)

      一线员工:工作简单(用例分析)

    4.用例图、序列图、类图、健壮性图

    5.强化客户管理:市场总监

      提升财务效率:财务总监

      优化公司资源:公司老总

     

     

     

    软件过程三测

     

    1. 业务建模序列图阶段要注意什么?
    2. 业务序列图中,alt表示(           ),loop表示(              ),opt表示(         );
    3. Alt和opt在使用的时候有什么区别?
    4. 业务序列图中,消息的名字表示什么?
    5. 业务序列图中,消息的方向表示什么?
    6. 把(        )看作特殊的业务实体。
    7. 业务建模结果复核目的有两点,分别是什么?

     

     

     

     

    答案:

    1. 本阶段不要考虑要实现什么系统
    2. 分支,循环,可选分支
    3. Alt表示分支,是需要条件的;opt表示可选分支,没有条件,有选择性。
    4. 代表责任和目的
    5. 责任委托,不是数据流动
    6. 时间
    7. 一是完善业务建模成果,寻找是否有遗漏或错误的地方进行修正,如果问题明显,就需要迭代回去继续做业务建模工作;

    二是关键干系人在信息和意见上达成一致,并共同签字确认,作为下一阶段启动的标志。

     

     

     

     

     

     

    软件工程四测

     

    1. 业务建模要求我们把视角从_______,以达到清晰准确地“诊断”,对症“开方”

    答案:软件系统转向客户组织,站在客户角度看问题

    2、业务建模三步骤:

    1、___________2、____________3、____________

    答案:

    1. 明确我们为谁服务(选定愿景要改进的组织)。
    2. 要改进的组织是什么现状(业务用例图、现状业务序列图)。
    3. 我们如何改进(改进业务序列图)。

    3、了解组织现状:

       (1)从外部看:组织是____的集合,用业务用例图来建模

       (2)从内部看:组织是____的集合

    答案:价值、系统

    4、业务用例图帮助我们从______了解组织的______。

    答案:高层次 、业务构成

    5、业务执行者是在业务组织之外,与其交互,享受其价值的_______

    答案:人或组织

    6、业务用例是业务组织为业务执行者提供的______.

    答案:价值

    7、业务序列图帮助我们从______了解组织的______。

    答案:细节上、 业务流程

    8、业务序列图详细描述________、_______、________之间如何交互,以完成某个业务用例的实现流程

    答案:业务执行者、业务工人、业务实体

    9、举个简单的例子并识别其中的业务对象:业务执行者、业务工人、业务实体

    答案:自由发挥

    10、我们如何改进(改进业务序列图)

    答案:了解业务组织现状的目的——发现流程中的改进点:

    • 信息自动流转
    • 封装复杂业务逻辑
    • 职责转移
    • 访问和操作业务对象

    其他……

     

    软件过程五测

    1. 域建模_____不等于_____(等于或不等于)数据模型
    2. ___用例分析________前做域建模
    3. 需求分析的主流分析方法有___原型法____、______用例法_______
    4. 绘制系统用例图的步骤

    1. 确定系统边界

    2. 识别系统执行者

    3. 识别系统用例

    4. 确定用例间的关系

    1. 怎样区别主执行者和辅执行者

      主执行者:

    1.用例发起者;

    2.用例为其实现有价值的目标;

    辅执行者:

    1.用例支持者;

    2.用例的完成需要与其交互,得到其支持

    1. 如何找到执行者

      谁使用该系统?

    • 谁改变系统的数据?

    • 谁从系统获取信息?

    • 谁负责维护、管理并保持系统正常运行?

    • 系统需要应付哪些硬件设备?

    • 系统需要和那些外部系统交互?

    • 谁对系统运行产生的结果感兴趣?

    • 有没有自动发生的事件?

    1. 系统用例是执行者通过系统____达到某个目标______
    2. 用例的关系____泛化____、_____包含_______、______扩展__________
    3. 先发现执行者还是先发现用例?为什么?

       执行者比用例明显。

    • 执行者的个数远比用例的个数少。

    • 找到一个执行者,就可以找到一堆用例。

    • 执行者是系统外部人物的代表,所以当然是要先找到执行者,才能够从执行者的角度去寻找用例。

    1. 用例命名的三个条件是什么?

     用例名称必须是动宾短语。

    • 采用域建模中的名词术语。

    • 慎用弱动词弱名词——会掩盖真正的业务

    1. 用例_____不等于______功能,用例____不等于______步骤

     

    软件过程六测

    1. 每个用例必须对应有___愿景目标______
    2. 用例描述的基本组成__干系人利益_____________、_____基本路径____________、________扩展路径_______、_______业务规则_______________
    3. _________用例_______是干系人利益的平衡点。
    4. 基本路径的书写要求。

      以主动语态、“名词-动词-名词”格式来书写。

      主语只能是执行者或系统。

    1. 基本路径与扩展路径是否要分开。

      要

     

    更多相关内容
  • 软件工程

    万次阅读 多人点赞 2021-01-24 17:13:02
    软件工程——原理、方法与应用(学习笔记)

    软件工程

    一、绪论

    1.软件的定义

    软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档的完整集合。软件=程序+文档+数据

    • 程序是按事先设计的功能和性能要求执行的指令序列;
    • 数据是使程序能正常操纵信息的数据结构,具体来说包括使系统初始运行所必须的数据如数据库和表的结构及初始的数据,系统运行中所需要的各种代码表、各种标志等。
    • 文档是与程序开发,维护和使用有关的图文材料(是有关于管理、开发、用户、维护人员使用的文档)

    2.软件技术面临的问题

    • 规模,复杂性,生产率

    3.软件危机

    介绍:

    • 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做软件危机

    表现:

    • 对软件开发成本和进度的估计常常很不准确;
    • 用户对“已完成的”软件系统不满意的现象经常发生;
    • 软件产品的质量往往靠不住;
    • 软件常常是不可维护的;
    • 软件通常没有适当的文档资料;
    • 软件成本在计算机系统总成本中所占的比例逐年上升;
    • 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

    原因: 内在原因:复杂性

    • 软件开发无计划性,项目没有被很好地理解;计划不周,最终导致进度拖延,经费预算上升。
    • 软件需求不充分,开发的软件不能满足用户的需求。
    • 软件开发过程无规范,没有充分的文档资料。
    • 软件可靠性缺少度量的标准,质量无法保证。
    • 软件难以维护,易升级。

    解决方法:

    • 组织管理——工程项目管理方法
    • 技术措施——软件开发技术与方法、软件工具
    • 工程化的原理和方法组织软件开发是软件开发中的问题的一个主要出路。

    在这里插入图片描述

    4.软件工程

    定义:

    • 软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件和有关技术及管理方法。
    • 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。(IEEE定义)
    • 软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。

    三要素:

    • 方法、过程、工具

    中心思想:

    • 把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。

    基本原理:

    • 确保软件产品质量和开发效率的原理的最小集合。

    5.软件开发方法

    • 个性化方法->结构化方法->面向对象方法->软件复用

    6.三种编程范式

    • 过程式编程范型:程序=数据结构+算法
    • 面向对象编程范型:程序=对象+消息
    • 基于构件技术的编程范型:程序=构件+架构

    7.三代软件工程

    传统软件工程

    • 结构化分析->结构化设计->面向过程的编码->软件测试

    面向对象软件工程

    • 面向对象基本概念:对象+类+继承+消息通信
    • OO分析与对象抽取->对象详细设计->面向对象的编码和测试

    基于构件的软件工程

    • 领域分析和测试计划定制->领域设计->建立可复用构件库->查找并集成构件

    二、软件生存周期与软件过程

    1.软件生存周期

    • 一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。
    • 软件生存周期被划分为计划、开发、运行三个时期。
    • 由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。

    2.典型的软件生存周期

    • 计划->需求分析->软件分析->软件设计->编码(测试)

      ->软件测试->运行维护

    在这里插入图片描述
    需求分析:(准确回答,系统必须做什么)

    • 提交:软件需求说明书/系统功能说明书/初步的系统用户手册

    软件设计:(回答怎么做的问题)概要设计、详细设计

    • 提交:设计说明书(软件结构图)

    程序编写:(具体实现)

    • 提交:源程序清单

    软件测试:(挑错)单元测试、组装测试 有效性测试

    • 提交:测试报告文档(测试计划、测试用例、测试结果)

    运行维护:改正性维护、适应性维护、完善性维护

    3.软件过程

    围绕软件开发所进行的一系列活动
    软件生存周期中的阶段和软件过程中的活动是基本一致的。

    (1) 传统的软件过程:瀑布模型、快速原型模型

    瀑布模型

    • 基于软件生存周期的线性开发模型

    强调软件文档:

    • 每一个阶段必须完成规定的文档
    • 每一个阶段都要复审完成的文档

    特点:

    • 阶段间的顺序性和依赖性、推迟实现的观点、质量保证的观点

    顺序性:

    • 前一阶段的工作完成后才能执行下一阶段的任务

    依赖性:

    • 前一阶段的输出文档是下一阶段的输入文档

    存在问题:

    • 不适合需求模糊的系统,开发初始阶段很难彻底弄清软件需求

    需求定义与分析->总体设计->详细设计->编码->测试->使用维护

    在这里插入图片描述

    快速原型模型

    特点:

    • “逼真”的原型可以使用户迅速作出反馈
    • 循环回溯和迭代:非线性模型
    • 使用快速开发工具

    种类:

    • 渐进型:对原型补充和修改获得最终系统
    • 抛弃型:原型废弃不用

    应防止的倾向:

    • 舍不得抛弃,从而影响软件质量
      在这里插入图片描述

    (2) 软件演化模型(采用渐增式或迭代式的开发方法):增量模型、螺旋模型、构件集成模型

    增量模型

    定义:

    • 把软件看作一系列相互联系的增量,每次迭代完成一个增量。

    增量:

    • 小而可用的软件
    • 第一个增量通常是软件的核心

    特点:

    • 在前面增量的基础上开发后面的增量
    • 每个增量的开发可用瀑布或快速原型模型
    • 每个增量开发的顺序性和总体的迭代性相结合
    • 有利于控制技术风险
      在这里插入图片描述

    螺旋模型

    特点:

    • 瀑布模型(顺序性、边开发边复审)+快速原型(迭代性)
    • 风险分析->发现、控制风险

    一个螺旋式周期:

    • 计划:确定目标,选择方案,选定完成目标的策略
    • 风险分析:从风险角度分析该策略
    • 开发:启动一个开发活动
    • 评审:评价前一步的结果,计划下一轮的工作
      在这里插入图片描述

    迭代和瀑布的区别:

    • 迭代和瀑布的最大的差别就在于风险的暴露时间上。
    • 瀑布模型的特点(文档是主体),很多问题再最后才会暴露出来。
    • 迭代模型的特点,根据风险列表选择要在迭代中开发新的增量内容,每次迭代完成时都会生成一个经过测试的可执行文件,可核实是否降低了目标风险。

    构件集成模型

    构件:

    • 在某个领域中具有通用性,可以复用的软件部件
    • 将可以复用的构件存储起来,形成构件库

    特点:

    • 面向对象
    • 基于构件库
    • 融合螺旋模型特征
    • 支持软件开发的迭代方法
    • 软件复用
      在这里插入图片描述

    (3) 形式化方法模型(基于程序变换和验证技术的软件开发):转换模型,净室模型

    转换模型

    开发过程:

    • 确定形式化需求规格说明书
    • 进行自动的程序变换
    • 针对形式化开发记录进行测试

    特点:

    • 形式化软件开发方法
    • 形式化需求规格说明
    • 变换技术
    • 程序自动生成技术
    • 确保正确
      在这里插入图片描述

    净室模型

    净室思想:

    • 在分析和设计阶段消除错误
    • 在“洁净”状态下实现软件制作

    形式化:

    • 盒结构表示分析和设计
    • 正确性验证

    增量模型:

    • ·把软件看成一系列的增量

    在这里插入图片描述

    (4) 软件过程模型的特点汇总

    瀑布模型:

    • 线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发

    快速原型:

    • 用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发

    增量模型:

    • 每次迭代完成一个增量,可用于OO开发。适合容易分块的大型软件开发

    螺旋模型:

    • 典型迭代模型,重视风险分析,可用于OO开发。适合具有不确定性大型软件开发

    构件集成模型:

    • 软件开发与构件开发平行进行,适用于领域工程、行业的中型软件开发

    转换模型:

    • 形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持

    净室模型:

    • 形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。

    (5) 统一过程和敏捷过程

    统一过程(RUP)

    • 描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动。
    • 基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”

    RUP将软件开发分为四个阶段:

    • 初始阶段:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确定业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。

    制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品;

    • 细化阶段:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确定技术实现的可行性和系统架构的稳定性。提交结果包括系统架构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。

    制品:补充需求分析、软件架构描述、可执行的架构原型

    • 构建阶段:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增量式开发一个可以交付用户的软件产品。

    制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。

    • 提交(迁移)阶段:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。

    每个阶段又分为若干次迭代,每次迭代有一个核心工作流,都会经历需求、分析、设计、实现和测试等活动。

    在这里插入图片描述

    • 9个核心工作流,分为6个核心过程工作流和3个核心支持流。
    • 核心过程工作流:商业建模、需求、分析和设计、实现、测试、部署
    • 核心支持流:配置和变更管理、项目管理、环境

    敏捷过程

    • 一种以人为核心、迭代、循序渐进的开发方法,其软件开发过程称为“敏捷过程”

    敏捷过程价值观:

    • 个人和交互胜过过程和工具
    • 可以运行的软件胜过面面俱到的文档
    • 客户合作胜过合同谈判
    • 响应变化胜过遵循计划

    极限过程

    • 一种轻量级的、敏捷的软件开发方法
    • 4个价值观:交流、简单、反馈、勇气
    • 4个方面改善:加强交流、从简单做起、寻求反馈、用于实事求是
    • 12个核心实践:完整团队、计划对策、测试、简单设计、结对编程、小软件版本、设计改进、持续集成、代码共有、编码标准、系统比喻、可持续的速度

    (6) 软件可行性研究

    目的:

    • 研究项目是否可能实现和值得进行
    • 回答Why to do

    研究的内容:

    • 经济可行性
    • 运行可行性
    • 技术可行性
    • 法律可行性

    可行性研究的步骤:

    • 对当前系统进行调查和研究
    • 弄清当前系统
    • 导出新系统逻辑模型
    • 导出新系统的解决方案
    • 设计不同的解决方案
    • 提出推荐的方案
    • 本项目的开发价值
    • 推荐这个方案的理由
    • 编写可行性认证报告
    • 系统概述
    • 可行性分析
    • 结论意见

    (7) 软件风险分析

    风险识别:

    • 项目风险
    • 技术风险
    • 商业风险

    风险预测:

    • 风险发生的可能性
    • 风险发生后的后果
    • 风险的驾驭和监控

    三、结构化分析与设计

    1. 结构化分析与设计

    • SP(结构化程序设计)->SD(结构化设计)->SA(结构化分析)
    • 讨论传统软件工程的系统开发技术,重点放在基于瀑布模型的结构化分析与设计和模块设计上,但不涉及同为传统软件工程的快速原型开发等内容。

    2. SA与SD的流程

    • 结构化分析(工具:DFD数据流图、PSPEC加工策略)
      –>分析模型(分层DFD图)+SRS软件需求规格说明书)
    • 结构化设计(工具:SC图)映射–>初始设计模型(初始SC图)
    • 初始设计模型(初始SC图)优化–>最终设计模型(最终SC图)

    3. 基本任务与指导思想

    结构化分析:

    • 建立分析模型
    • 编写需求说明

    结构化设计:

    • 软件设计=总体设计+详细设计
    • SC图需要分两步完成:初始SC图、最终SC图

    细化与分解:

    • 逐步细化,细化的本质就是分解

    4. SA模型的组成与描述

    SA模型的描述工具:

    • DFD、PSPEC,这是早期SA模型的基本组成部分;
    • CFD、CSPEC和STD是早期SA模型的扩展成分,适应实时软件的建模需要;
    • ER图,适用于描述具有复杂数据结构的软件数据模型。
      在这里插入图片描述
      备注:
    • DFD数据流图、PSPEC加工规格说明/加工策略、STD状态转换图、DD数据字典、CSPEC控制规格说明

    数据流图(DFD)

    • 数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换,描述对数据流进行变换的功能和子功能
      在这里插入图片描述

    组成符号:

    • 圆框代表加工
    • 箭头代表数据的流向,数据名称总是标在箭头的边上
    • 方框表示数据的源点和终点
    • 双杠(或单杠)表示数据文件或数据库
    • 文件与加工之间用带箭头的直线连接,单向表示只读或只写,双向表示又读又写

    数据字典(DD)

    • 数据字典的任务:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。
    • 对软件中的每个数据规定一个定义条目

    ①数据流:

    数据流名: 发票
    别 名: 购书发票
    组 成: 学号+姓名+{书号+单价+数量+总价} +书费合计
    备 注:

    ②数据文件
    ③数据项

    数据流图与数据字典共同构成系统的逻辑模型

    加工说明(PSPEC)

    • 对数据流图中出现的每个加工/处理的功能描述
    • 主要工具:结构化语言,判定树或判定表
      在这里插入图片描述

    5. SD模型的组成与描述

    • 包含数据设计、接口设计、过程设计、体系结构设计
    • 体系结构设计是用来确定软件结构的,其描述工具是结构图,简称SC图
    • 过程设计主要指模块内部的详细设计
      在这里插入图片描述

    SC图组成符号和模块调用关系的标识:

    • 矩形框表示模块,带箭头的连线表示模块间的调用,并在调用线的两旁标出传入和传出模块的数据流
      简单调用、选择调用、循环调用:
      在这里插入图片描述
      例:在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B,当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。
      在这里插入图片描述
    • 程序的系统结构图
      在这里插入图片描述

    6. 结构化系统分析

    结构化分析的基本步骤:

    • 自顶向下对系统进行功能分解,画出分层DFD图
    • 由后向前定义系统的数据和加工,编制DD和PSPEC
    • 最终写出SRS

    (1)画分层数据流图:(自顶向下,逐步细化)

    好处:便于实现,便于使用

    通常把整个系统当作一个大的加工标明系统的输入与输出,以及数据的源点与终点(统称为“外部项”)

    • 顶层DFD:
      在这里插入图片描述

    • 第二层DFD:
      在这里插入图片描述

    • 第三层DFD:
      在这里插入图片描述

    • 采购子系统:
      在这里插入图片描述

    (2)确定数据定义与加工策略(从数据的终点开始)

    • 数据定义DD
    • 加工策略PSPEC
    • 需求规格说明书SRS

    (3)需求分析的复审

    7. 结构化系统设计

    SD概述

    面向数据流设计和面向数据设计

    • 面向数据流:数据流是考虑一切问题的出发点
    • 面向数据:以数据结构作为分析与设计的基础

    结构化设计的描述工具:SC图

    从分析模型导出设计模型
    在这里插入图片描述

    • 分析模型:数据对象描述、数据流图DFD、数据字典DD、实体联系图ER图、加工规格说明书PSPEC、状态转换图STD、控制规格说明CSPEC

    • 设计模型:过程设计、接口设计、体系设计、数据设计 由分析模型导出设计模型: 过程设计可以由PSPEC,CSPEC、STD导出;

    • 接口设计可以由DFD导出; 体系结构设计可以由DFD导出; 数据设计可以由E-R、DD导出。

    数据流图的类型——变换型、事务型

    变换(transform)型结构:

    • 传入路径
    • 变换中心
    • 传出路径
      在这里插入图片描述

    事务(transaction)型结构:

    • 一条接受路径
    • 一个事务中心
    • 若干条动作路径
      在这里插入图片描述

    同时存在变换型结构和事务型结构:
    在这里插入图片描述

    SD方法

    在这里插入图片描述

    结构化软件设计方法——变换映射,事务映射

    • 变换映射是软件系统结构设计的主要方法。一般一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换映射为主,事务映射为辅的方式进行软件结构设计。

    变换映射:

    • 划分DFD图的边界;
    • 建立初始SC图的框架;
    • 分解SC图的各个分支
      在这里插入图片描述
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 深度:5层;宽度(广度):7层;
    • 注意:必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计;在设计下层模块时,应考虑模块的耦合和内聚问题;使用“黑箱”技术,先把这个模块的所有下层模块定义成“黑箱”,不考虑其内部结构和实现;一个模块的直接下属模块一般在五个左右,如果直接下属模块超过10个,可设立中间层次。

    事务映射:

    • 在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径)
    • 画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块
    • 分解和细化接受分支和发送分支,完成初始的SC图
      在这里插入图片描述
      在这里插入图片描述

    扇入扇出

    在这里插入图片描述

    • 煎饼型不可取,应增加中间层减少扇出,实现塔型结构
    • 设计良好的软件通常具有瓮型结构,两头小,中间打,在低层模块使用了较多高扇入的共享模块

    优化结构设计的指导原则

    对模块划分的指导原则

    • 提高内聚,降低耦合
    • 简化模块接口
    • 少用全局性数据和控制型信息

    保持高扇入/低扇出的原则

    • 扇入高则上级模块多,能够增加模块的利用率
    • 扇出低则表示下级模块少,可以减少模块调用和控制的复杂度

    8. 模块设计

    • 模块设计是传统软件工程的重要组成部分,其性质属于详细设计。

    目的:

    • 为SC图中的每个模块确定算法和数据结构,用选定的表达工具给出清晰的描述

    主要任务

    • 编写软件的“模块设计说明书”

    原则与方法:

    • 清晰第一的设计风格
    • 结构化的控制结构
    • 仅用这三种控制结构(顺序、选择、循环)来构成程序
    • 每个控制结构只应有一个入口和一个出口
    • 逐步细化的实现方法

    详细设计中常用的表达工具

    • 流程图、N-S图、伪代码、PDL语言
      在这里插入图片描述

    四、面向对象与UML

    1. 面向对象概述

    (1) 类和对象的关系

    对象:代表客观世界中实际或抽象的事物

    • 客观世界是由各种对象组成的
    • 数据以及在其上的操作的封装体

    类:一组相似的对象的共性抽象

    • 类是一组客观对象的抽象
    • 实现抽象数据类型的工具

    类与对象的关系

    • 抽象与具体的关系
    • 组成类的每个对象都是该类的实例
    • 实例是类的具体事物
    • 类是各个实例的综合抽象

    (2) 面向对象的基本特征

    • 抽象、封装、继承、多态

    (3) 面向对象开发的优点

    • 可复用性、可扩展性、可维护性

    2. UML(统一建模语言)简介

    • 通用的可视化的建模语言
    • 目前在软件工程里主要用于系统分析与系统设计
    • 软件生存周期:RUP(统一过程)
    • 软件建模方式:可视化的语言
    • 软件文档规范:文档由UML建模工具自动产生
    • 软件人员分工:岗位界面逐渐趋向模糊

    静态图:

    • 类图:类以及类之间的相互关系
    • 对象图:对象以及对象之间相互关系

    实现图:

    • 构件图:构件及其相互依赖关系
    • 部署图:构件在各节点上的部署

    交互图:

    • 时序图:强调时间顺序的交互图
    • 协作图:强调对象协作的交互图

    行为图:

    • 状态图:类所经历的各种状态
    • 活动图:对工作流建模

    用例图:

    • 用例图:需求捕获,测试依据

    (1) UML的模型元素

    表示模型中的某个概念

    • 类、对象、构件、用例、结点、接口、包、注释

    表示模型元素之间的关系

    • 关联、泛化、依赖、实现、聚集、组合

    在这里插入图片描述

    (2) UML的元模型结构

    • 元元模型层、元模型层、模型层、用户模型层
      在这里插入图片描述

    (3) UML的组成

    ①图

    静态图

    • 用例图
    • 静态图:类图、对象图
    • 实现图:构件图、部署图

    动态图

    • 行为图:状态图、活动图
    • 交互图:时序图、协作图

    ②视图

    • 用例视图(用例图 [活动图] )
      从用户角度看到的系统应有的外部功能
    • 逻辑视图(静态:类图,对象图;动态:状态图,时序图,协作图,活动图)
      描述系统的静态结构和对象间的动态协作关系
    • 进程视图(状态图、时序图、协作图、活动图、构件图、部署图)
      展示系统的动态行为及其并发性
    • 构件视图(构件图)
      展示系统实现的结构和行为特征
    • 部署视图(部署图)
      显示系统的实现环境和构件被部署到物理结构中的映射

    ③模型元素

    ④通用机制

    (4) UML的特点

    • 统一标准
    • 面向对象
    • 表达功能强大、可视化
    • 独立于过程
    • 易掌握、易用

    (5) UML五类九种图的符号体系

    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3. UML主要内容

    • 静态建模机制、动态建模机制

    (1) 静态建模

    静态建模包括

    • 用例图、类图、对象图

    用例模型

    • 使用用例图表示
    • 从最终用户的角度描述系统功能

    类和对象模型

    • 类图和对象图表示

    1) 用例图与用例模型

    用例图的组成符号
    在这里插入图片描述

    用例之间的关系
    ①扩展关系

    • 根据指定的条件,一个用例中有可能加入另一个用例的动作;
      如果一个用例明显地混合了两种或者两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样可能会使描述更加清晰。扩展用例为基用例添加新的行为,可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。
      <extend>是扩展关系的构造型,箭头指向基本用例。

      在这里插入图片描述
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述

    ②包含关系

    • 一个用例的行为包含另一个用例的行为
      当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。
      <include>是包含关系的构造型,箭头指向抽象用例。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    包含关系和扩展关系的联系和区别:

    • 联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。
    • 区别:扩展关系中基本用例的基本流执行时,扩展用例不一定执行,即扩展用例只有在基本用例满足某种条件的时候才会执行。
      包含关系中基本用例的基本流执行时,包含用例一定会执行。

    例:
    现有一医院病房监护系统,病症监视器安置在每个病房,将病人的病症信号实时传送到中央监视系统进行分析处理。在中心值班室里,值班护士使用中央监视系统对病员的情况进行监控,根据医生的要求随时打印病人的病情报告,定期更新病历,当病症出现异常时,系统会立即自动报警, 并实时打印病人的病情报告,立及更新病历。
    要求根据现场情景,对医院病房监护系统进行需求分析, 建立系统的用例模型。

    简单的需求分析说明
    系统名称:医院病房监护系统
    根据分析系统主要实现以下功能:
      1、病症监视器可以将采集到的病症信号(组合),格式化后实时的传送到中央监护系统。
      2、中央监护系统将病人的病症信号开解后与标准的病症信号库里的病症信号的正常值进行比较,当病症出现异常时系统自动报警。
      3、当病症信号异常时,系统自动更新病历并打印病情报告。
      4、值班护士可以查看病情报告并进行打印。
      5、医生可以查看病情报告,要求打印病情报告,也可以查看或要求打印病历。
      6、系统定期自动更新病历。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    2) 类图Class Diagram

    在这里插入图片描述

    类图表示类间关系:

    关联关系(Association)
    • 类之间存在的语义上的关系
    • 普通关联、递归关联、多重关联等
      在这里插入图片描述

    二元关联:

    • 表示为在两个类之间用一条直线连接,直线上可写上关联名
      在这里插入图片描述
    • 关联的两端可加上重数,表示该类有多少个对象可与对方的一个对象关联
      在这里插入图片描述
    • 允许一个类与自身关联
      在这里插入图片描述

    多元关联:

    • 三个或三个以上的类之间可以互相关联
      在这里插入图片描述
      在这里插入图片描述

    受限关联:

    • 用于一对多或多对多的关联,限定符用来区分关联”多”端的对象集合,它指明了在关联“多”端的某个特殊对象
      在这里插入图片描述
    聚集关系(Aggregation)
    • 特殊的关联:表示类之间具有整体与部分的关系
    • 特征是“部分”对象可以是多个任意“整体”对象的一部分,“部分”可以参与到多个“整体”中,部分可以脱离整体。

    在这里插入图片描述

    组合关系(Composition)
    • 特殊的聚集:整体强烈拥有部分
    • 在组合中,“整体”强烈拥有“部分”,“部分”与“整体”共存。如果“整体”不存在了,“部分”也会随之消失。“整体”的重数必须是0或1,“部分”的重数可以是任意的。
      在这里插入图片描述
    泛化关系(Generalization)
    • 又称继承
    • 普通泛化,限制泛化

    此处的一般元素可视作父类,特殊元素视作子类。

    • 一般元素所具有的关联、属性和操作,特殊元素也都隐含性地拥有;
    • 特殊元素应包含额外信息;
    • 允许使用特殊元素实例的地方,也应能使用一般元素。
      在这里插入图片描述
    实现关系
    • 实现关系将一个模型元素(如类)连接到另一个模型元素(如接口),后者是行为的规约,而不是结构,前者必须至少支持(通过集成或直接声明)后者的所有操作,可以认为前者是后者的实现。
      在这里插入图片描述
    依赖关系(Dependency)
    • 对一个类/对象的修改会影响另一个类/对象

    例如,某个类中使用另一个类的对象作为操作中的参数,一个类存取作为全局对象的另一个类的对象,或一个类的对象是另一个类的类操作中的局部变量等,都表示这两个类之间有依赖关系。
    class Boss{
    void do(Staff s){
    s.do();
    }
    }
    在这里插入图片描述
    约束与派生:

    • 约束与派生机制能应用于任何模型元素
    • 用花括号括起放在模型元素旁边
    • 典型的属性约束是该属性的取值范围
    • 派生属性可由其它属性通过某种方式计算得到,通常在派生属性前面加一个“/”表示
    • 关联关系可以被约束,也可以被派生
      在这里插入图片描述

    包图

    • 描述系统的分层结构
      在这里插入图片描述

    3) 对象图Object Diagram

    • 对象图是类图的实例。

    在这里插入图片描述

    (2) 动态建模

    • 消息
      在这里插入图片描述
    • 状态图
      状态图描述对象的所有可能状态及事件发生时状态的转移条件
      在这里插入图片描述
    • 状态图之间发送消息
      在这里插入图片描述
    • 时序图(元素:对象、对象生命线、消息)
      时序图用来描述对象之间的动态交互,着重体现对象间消息传递的时间顺序。它以垂直轴表示时间,水平轴表示不同的对象。对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的。对象间的通信在对象的生命线间通过消息符号来表示,消息的箭头指明消息的类型。
      在这里插入图片描述在这里插入图片描述
    • 协作图(元素有对象、链接和消息流)
      协作图描述了对象间的动态协作关系,但它强调消息发生和接收的对象的结构组织(及连接关系)(协作对象之间的交互和链接)
      在这里插入图片描述
      在这里插入图片描述

    (3) 物理架构建模

    • 逻辑架构和物理架构
    • 构件图:显示软件构件直接的依赖关系。一般来说,软件构件就是一个实际文件,可以是源代码文件、二进制代码文件和可执行文件。构件图可以用来表现编译、链接或执行时构件之间的依赖关系。
      在这里插入图片描述
    • 部署图:描述系统硬件的物理拓扑结构以及在此结构上执行的软件。部署图可以显示计算节点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含对的逻辑单元(对象、类)等。
      在这里插入图片描述

    五、需求工程与需求分析

    1. 软件需求工程

    软件需求的定义

    一个软件系统必须遵循的条件或具备的能力

    • 系统的外部行为——解决用户的问题
    • 系统的内部特性——满足了文档的要求

    软件需求三个层次

    • 业务需求——从业务的角度评估
    • 用户需求——从用户使用的角度描述软件必须完成的任务
    • 功能需求——开发人员必须实现的功能

    软件需求的特性

    软件质量准则“FURPS”

    • 功能性
    • 可用性(易用性)
    • 可靠性(平均无故障时间、精确度等)
    • 性能(响应时间、吞吐量等)
    • 可支持性(与系统相关的特性要求)
    • 设计约束

    软件需求工程

    • 一门应用有效的技术和方法、合适的工具和符号,来确定、管理和描述目标系统及其外部行为特征的学科。

    2. 需求分析与建模

    需求分析的步骤(迭代):

    • 需求获取、需求建模、需求描述(编写SRS)、需求验证
    • 需求获取的目的是让开发人员通过各种方式充分和用户交流,全面、准确地了解系统需求;
    • 建立需求模型是需求分析的核心,它通过各种图形及符合,可视化地从各个侧面描述系统需求;(结构化方法(包括数据流、数据字典、加工规格说明)和面向对象方法(面向对象方法包括用例模型、补充规约和术语表))
    • 需求描述即编写需求规格说明书,它以各方共同认可的文档形式表述,是软件设计和系统验收的可靠依据;
    • 需求验证用来检验以上各步的工作成果。

    需求分析是一个迭代的过程

    3. 需求获取的常用方法

    常规的需求获取方法:

    • 联合分析小组
    • 用户代表、领域专家和系统分析员
    • 客户访谈
    • 充分准备,寻找共同语言
    • 循序渐进、逐步逼近
    • 问题分析与确认
    • 多个来回

    用快速原型法获取需求

    • 利用各种分析技术和方法,生成一个简化的需求规格说明;
    • 对需求规格说明进行必要的检查和修改后,确定原型的软件结构、用户界面和数据结构等;
    • 在现有的工具和环境的帮助下快速生成可运行的软件原型并进行测试、改进;
    • 将原型提交给用户评估并征求用户的修改意见;
    • 重复上述过程,直到原型得到用户的认可。

    4. 需求模型

    需求模型概述

    • 结构化需求模型
    • 面向对象需求模型

    面向对象的需求建模

    • 画用例图

    • 写用例规约

    • 描述补充规约

    • 编写术语表

    结构化需求模型
    在这里插入图片描述

    • 该模型主要由3部分组成,即:包括数据流图和加工规格说明的功能模型;主要由数据字典和E-R图等组成的数据模型;由状态转换图、控制流图和控制规格说明等组成的行为模型。

    面向对象需求模型
    在这里插入图片描述

    • 面向对象需求模型由3个部分组成:用例模型、补充规约和术语表,其中用例模型又包括用例图和用例规约

    用例建模

    确定参与者

    • 存在与系统外部、与系统交互的人、硬件、其他系统

    确定用例

    • 考察每个参与者与系统的交互和需要系统提供的服务

    绘制和检查用例图

    • 按UML标准画用例图
    • 检查用例图

    细化每个用例的用例规约

    内容包括:

    • 简要说明:简要介绍该用例的作用和目的

    • 事件流:包括基本流和备选流,表示出所有可能的活动及流程
      基本流:指该用例最正常的一种场景
      备选流:用于描述用例执行过程中的异常或偶尔发生的情况。
      它和基本流合起来,能够覆盖该用例所有可能发生的场景。
      包含元素:
      1、起点:该备选流从事件流的那一步开始
      2、条件:在什么条件下会触发该备选流
      3、动作:系统在该备选流下会采取哪些动作
      4、恢复:该备选流结束之后,该用例应如何继续执行

    • 特殊需求: 描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统和开发工具等)

    • 前置条件和后置条件
      前置条件是执行用例之前必须存在的系统状态,后置条件是用例执行完毕后系统可能处于的一组状态。

    用例模型的检查

    • 功能需求的完备性
    • 模型是否易于理解
    • 是否存在不一致性
    • 避免二义性语义

    5. 软件需求描述

    软件需求规格说明书

    • 引言
    • 信息描述
    • 功能描述
    • 行为描述
    • 质量保证
    • 接口描述
    • 其他

    6. 需求管理

    需求管理的流程

    需求确认

    • 需求评审
    • 需求承诺

    需求跟踪

    需求变更控制

    • 需求变更利弊
    • 需求变更流程

    在这里插入图片描述

    六、 面向对象分析

    1. 软件分析概述

    软件需求和软件分析

    • 软件需求:用户角度,注重软件外在表现
    • 软件分析:开发者角度,注重软件内部逻辑结构

    2. 面向对象软件分析

    (1) OOA的主要任务

    • 理解用户需求
    • 进行分析,提取类和对象,并结合分析进行建模。其基本步骤是:标识类,定义属性和方法;刻画类的层次;表示对象以及对象与对象之间的关系;为对象的行为建模。这些步骤反复进行,直至完成建模。

    (2) OOA的模型

    • 处于OOA模型核心的是以用例模型为主体的需求模型,抽取和定义OOA模型的3种子模型:
    • 类/对象模型,描述系统所涉及的全部类和对象,每一类/对象都可通过属性、操作和协作者来进一步描述;
    • 对象-关系模型,描述对象之间的静态关系,同时定义了系统中对象间所有重要的信息路径,也可以具体到对象的属性、操作和协作者;
    • 对象-行为模型,描述了系统的动态行为,即在特定的状态下对象间如何协作来响应外界的事件。
      在这里插入图片描述

    (3) OOA的优点

    • ①同时加强了对问题域和软件系统的理解
    • ②改进包括用户在内的与软件分析有关的各类人员之间的交流
    • ③对需求的变化具有较强的适应性
    • ④很好地支持软件复用
    • ⑤确保从需求模型到设计模型的一致性

    (4) 分析模型的特点

    • 全面覆盖软件的功能需求
    • 分析模型与软件的实现无关
    • 分析模型的表述方法与所采用的分析技术有关

    (5) OOA的共同特征

    共同特征

    • 类和类层次的表示
    • 建立对象-关系模型
    • 建立对象-行为模型

    (6) OOA的建模步骤

    • 需求理解
    • 定义类和对象
    • 标识对象的属性和操作
    • 标识类的结构和层次
    • 建立对象-关系模型
    • 建立对象-行为模型
    • 评审OOA模型
      在这里插入图片描述

    面向对象开发的全过程是OOA,OOD,OOP和OOT的迭代过程。

    • 面向对象分析(OOA)是一种从问题空间中提取类和对象来进行分析的方法,用于建立一个与具体实现无关的面向对象分析模型;
    • 面向对象设计(OOD)则从问题空间转移到解空间,在分析模型的基础上考虑实现细节,形成面向对象的设计模型;
    • 面向对象编程(OOP)则用于将设计模型转换成实现模型,可获得源代码和相应的可执行代码;
    • 面向对象测试(OOT)则通过运行可执行代码来检测程序存在的问题。

    3. 面向对象分析建模

    (1) 识别与确定分析类

    边界类<<boundary>>

    • 用户界面
    • 系统接口
    • 硬件接口
    • 负责和用户进行交互的界面即用户界面

    控制类<<control>>

    • 封装用例所特有的控制行为
    • 负责实体类和边界类之间的交互

    实体类<<entity>>

    • 系统存储的信息及其相关行为
    • 主要负责数据和业务逻辑
      在这里插入图片描述
      为每对参与者/用例确定一个边界类
      在这里插入图片描述
      为每个用例设置一个控制类
      在这里插入图片描述
      确定相关的各个实体(包括属性与方法)
      在这里插入图片描述

    (2) 建立对象-行为模型

    时序图(以选课用例中创建课表事件流的时序图)
    在这里插入图片描述
    协作图(以选课用例为例创建课表事件流的协作图)
    在这里插入图片描述

    (3) 建立对象-关系模型

    分析类的属性:

    • 分析类本身具有的信息

    分析类的关联:

    • 通过关联可以找到其他分析类,链与关联的对应关系

    分析类图:表现分析类及其关系

    • 描述用例的分析类图称为参与类图(VOPC)
    • 每个用例可对应一张完整的参与类图,参与类图可以显示类的实例之间的数量关系。
      在这里插入图片描述
    • 100个用例->100个VOPC类图(每个类图有3个类)->全类图(<=300)个类

    分析类的合并:

    • 每个分析类都代表一个明确定义的概念,具有不相重叠的职责。一个类可以参与不同数量的用例,因此就整个系统而言,需要合并分析类,把具有相似行为的类合并为一个。每当更新了一个类,就要更新或补充用例规约,必要时还有更新原始的需求。
      在这里插入图片描述
      控制类(很少合并)
      实体类(基本都合并)
      边界类(部分合并)

    • 软件分析将软件需求阶段产生的需求模型转变为软件分析模型。分析模型其实就是从软件开发者的角度,在静态组成结构和动态行为两个方面来描述的待开发的软件系统。

    • 面向对象分析利用面向对象的技术来分析问题、建立问题域的静态模型和动态模型,并用UML等工具来表示这一需求对应的类对象模型、对象–关系模型和对象–行为模型等,从而完成对问题域建模,形成面向对象的分析模型。

    • 软件分析通常从用例分析开始,建立系统需求的静态结构模型和动态行为模型。

    七、 面向对象设计

    1. 软件设计的目标

    • 设计的目标,是细化解决方案的可视化设计模型,确保设计模型最终能平滑地过渡到程序代码。关键是构造解决问题的方案,并在决定实施细节的基础上获得该方案的设计模型。

    2. 设计模型和分析模型

    • 分析模型强调的是软件“应该做什么”,并不给出解决问题的方案,也不涉及具体的技术和平台。

    • 设计模式要回答“该怎么做”的问题,而且要提供解决问题的全部方案,包括软件如何实现、如何适应特定的实施环境等。

    • 分析=内容;设计=方式

    分析VS设计

    分析

    • 关注问题的理解
    • 理想化设计
    • 行为
    • 系统结构
    • 功能需求
    • 一个小的模型

    设计

    • 关注解决方案的理解
    • 操作和属性
    • 性能
    • 接近实际的代码
    • 对象的生命周期
    • 非功能需求
    • 一个大的模型

    3. 软件设计的概念及基本原则

    • 模块与构件、抽象与细化、信息隐藏、软件复用

    4. 软件设计的任务

    把分析阶段产生的分析模型转换为用适当手段表示的软件设计模型;

    软件设计一般包括数据设计、体系结构设计、过程设计、接口设计

    • 数据设计将分析阶段创建的信息模型转变成实现软件所需的数据结构;
    • 体系结构设计定义软件主要组成部件之间的关系;
    • 接口设计描述软件内部、软件和接口系统直接以及软件与人直接是如何通信的(包括数据流和控制流);
    • 过程设计将软件体系结构的组成部件转变为对软件组件的过程性描述

    数据和过程被封装为类/对象的属性和操作;接口被封装成对象间的消息;体系结构的设计则表现为系统的技术基础设计和具有控制流程的对象间的协作

    5. 模块化设计

    • 分解
    • 模块独立性
    • 自顶向下
    • 自底向上
    • 模块是一个拥有明确定义的输入、输出和特性的程序实体。模块的所有输入都是事先功能必不可少的,所有输出都有动作产生。
    • 在软件的体系结构中,模块是可组合、分解和更换的单元。

    模块的基本属性:

    • 接口:指模块的输入与输出;
    • 功能:指模块实现什么功能;
    • 逻辑:描述内部如何实现要求的功能即所需的数据。

    模块化设计

    • 目的是按照规定的原则把大型软件划分为一个较小的、相对独立但相互关联的模块。
    • 依据:开发一个大而复杂的软件系统,将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本,提高软件生产率,这就是模块化的依据。

    模块的独立性

    • 模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。

    模块独立的含义

    • 模块完成独立的功能
    • 符合信息隐蔽和信息局部化的原则
    • 模块间关联和依赖程度尽量小

    模块独立程度可由两个定性标准度量:内聚、耦合

    • 内聚:指模块内部各个成分之间的联系,也称为块内联系或模块强度;
    • 耦合:指一个模块与其他模块间的联系,也称为块间联系。
    • 模块的独立性愈高,则块内联系越强,块间联系越弱。

    内聚

    内聚是从功能的角度对模块内部聚合能力的量度,按照由弱到强的顺序,内聚可分为7类,从小到大内聚强度逐步增强
    1)低内聚:
    ①偶然性内聚 ②逻辑性内聚 ③时间性内聚
    2) 中内聚
    ①过程性内聚 ②通信性内聚
    3) 高内聚
    ①顺序性内聚 ②功能性内聚

    • 偶然性内聚:当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为偶然性内聚或巧合内聚模块,是内聚程度最低的模块。
    • 逻辑内聚:把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。
      例:由参数决定执行读操作还是写操作:
      在这里插入图片描述
    • 时间内聚:又称经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。
      例如初始化模块和终止模块,系统结束模块、紧急故障处理模块等均是时间性内聚模块。
    • 过程内聚:一个模块中包含的一组任务必须按照某一特定的次序执行时,就称为过程性模块。
    • 通信内聚:模块内部的各个成分都使用同一种输入数据,或者产生同一个输出数据。
    • 顺序性内聚:模块中的各组成成分是顺序执行的。通常情况下,上一个处理框的输出就是下一个处理框的输入。
    • 功能性内聚:一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。是内聚性最强的模块。

    耦合

    耦合性是程序结构中各个模块之间相互关联的度量,它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。
    在这里插入图片描述

    • 非直接耦合:两个模块之间没有直接关系,模块独立性最强
    • 数据耦合:一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数),属松散耦合。
      在这里插入图片描述

    在这里插入图片描述

    • 特征耦合(标记耦合)
      两个模块通过传递数据结构,(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在特征耦合。
      在这里插入图片描述
    • 控制耦合 如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
      在这里插入图片描述
      去除模块间控制耦合的方法:
      将被调用模块内的判定上移到调用模块中进行;
      被调用模块分解成若干单一功能模块
      在这里插入图片描述
    • 外部耦合 一组模块均与同一外部环境关联(例如, I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。
      外部偶合必不可少,但这种模块数目应尽量少
    • 公共环境耦合
      在这里插入图片描述
    • 内容耦合 耦合最强。如果一个模块可以直接调用另一模块中的数据,或者允许一个模块直接转移到另一个模块中去,就称内容耦合。
      在这里插入图片描述

    耦合是影响软件复杂程度的一个重要因素,应该采取下述设计原则:

    • 尽量使用数据耦合,少用控制耦合和特征耦合;
    • 限制公共环境耦合的范围,完全不用内容耦合

    内聚和耦合关系密切,与其他模块直接强耦合的模块意味着弱内聚,强内聚模块意味着与其它模块间松散耦合。

    设计目标:高内聚、低耦合

    • 耦合、内聚与模块独立性关系:
    • 耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度,但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。

    6. 面向对象设计建模

    面向对象设计模型:

    • 系统架构层(系统架构层描述了整个系统的总体结构)
    • 类和对象层(包含类层次信息,同时包含了每个对象的设计表示)
    • 消息层(对象间的消息模型,建立了系统的内部和外部接口)
    • 责任层(每个对象的所有属性和操作的数据结构和算法)
      在这里插入图片描述

    面向对象设计的任务

    • 系统架构设计
    • 系统元素设计

    模式的应用

    • 模式是解决某一类问题的方法论,也是对通用问题的通用解决方案;
    • 软件模式可以分为架构模式、设计模式和习惯用法三种

    7. 子系统VS包

    子系统:

    • 提供行为
    • 完全封装实现细节
    • 容易替换

    包:

    • 不提供行为
    • 不完全封装实现细节
    • 难以替换

    子系统的主要用途:子系统可以将系统划分成独立的部分,将被实现为独立的构件,这些构件在保持结构不变的情况下,可以

    • 独立地开发和部署
    • 适应变更,而不影响其他系统

    子系统也可用于

    • 将系统划分成若干单元
    • 表示设计中的既存产品或外部系统

    八、 编码与测试

    1、软件测试

    • 动态查找程序代码中的各类错误和问题的过程。
    • 软件测试是一个与项目开发并行的过程,按照新的观点,测试活动应分布于需求、分析、设计、编码、测试和验收等各个阶段。它是软件开发时期最繁重的任务,也是保证软件可靠性的最主要手段。

    测试与纠错

    测试:

    • 目的:发现程序的错误;
    • 任务:通过在计算机上执行程序,暴露程序中潜在的错误

    纠错:

    • 目的:定位和纠正错误
    • 任务:消除软件故障,保证程序的可靠运行

    测试用例:一次执行需要的测试数据。
    测试用例={测试数据+预期结果}({}表示重复)
    测试结果={测试数据+预期结果+实际结果}

    每一个测试用例产生一个相应的测试结果,如果它与期望结果不相符合,便说明程序中存在错误,需要通过纠错来改正。

    选择测试用例的目标:是用尽可能少的测试数据,达到尽可能大的程序覆盖面,发现尽可能多的软件错误和问题。

    测试的特性

    • 挑剔性、复杂性、不彻底性、经济性
    • 穷举测试:让被测程序在一切可能的输入情况下全部执行一遍。
    • 选择测试:选择一些典型的、有代表性的测试用例进行有限的测试。

    测试的种类

    • 静态分析(程序不执行):
      静态分析器分析(自动方式) 代码评审(人工方式):代码会审、走查、办公室检查
    • 动态测试(程序执行):
      黑盒测试(测试程序功能)、白盒测试(测试程序结构)

    黑盒测试(功能测试)

    等价分类法

    • 所谓等价分类,就是把输入数据的可能值划分为若干等价类,使每类中的任何一个测试用例,都能代表同一等价类中的其他测试用例。
    • 注意:
      一是划分等价类不仅要考虑代表有效输入值的有效等价类,还需考虑代表无效输入值的无效等价类;
      二是每一无效等价类至少要用一个测试用例,不然就可能漏掉某一类错误,但允许若干有效等价类合用同一个测试用例,以便进一步减少测试的次数。

    例:某公司公开招工,规定报名者年龄应在16周岁至35周岁之间(到2008年3月止)。若出生年月不在上述范围内,将拒绝接受,并显示“年龄不合格”等出错信息。试用等价分类法设计对这一程序功能的测试用例。

    测试等价类表:

    输入数据有效等价类无效等价类
    出生年月①6位有效数字②少于6位 ③多于6位 ④存在除数字以外的其他字符
    对应数值⑤197302~199203之间⑥小于197302 ⑦大于199203
    月份对应数值⑧1~12之间⑨小于1 ⑩大于12

    测试用例:

    测试数据期望结果测试范围
    198808输入有效① ⑤ ⑧
    1988输入无效
    1988008输入无效
    1988AA输入无效
    197201年龄不合格
    199304年龄不合格
    198800输入无效
    198822输入无效

    边界值分析法

    • 在数组容量、循环次数以及输入数据域输出数据的边界值附近程序出错的概率往往较大。采用边界值分析法,就是要这样来选择测试用例,使得被测程序能在边界值及其附近运行,从而更有效地暴露程序中隐藏的错误。
    • 所谓边界值分析,就是要把测试的重点放在各个等价类的边界上,选取刚好等于,刚好小于,刚好大于边界值的数据为测试数据,并据此设计出相应的测试用例。
      在这里插入图片描述

    比较:

    • ①等价分类法的测试数据是在各个等价类允许的值域内任意选取的,而边界类分析的测试数据必须在边界值附近选取;
    • ②一般的说,用边界值分析法设计的测试用例比等价分类法的代表性更广,发现错误的能力也更强。

    错误猜测法

    • 所谓猜错,就是猜测被测程序在哪些地方容易出错,然后针对可能的薄弱环节来设计测试用例。

    因果图法

    • 是一种简化了的逻辑图,当被测程序具有多种输入条件,程序的输出又依赖于输入条件的各种组合时,用因果图直观地表明输入条件和输出动作之间的因果关系,能帮助测试人员把注意力集中到与程序功能有关的那些输入组合上,比采用等价分类法有更高明的测试效率。

    白盒测试

    • 白盒测试以程序的结构为依据,所以又称为结构测试早期的白盒测试把注意咯放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度,称为逻辑覆盖测试;
    • 用程序图代替流程图来设计测试用例,称为路径测试。

    逻辑覆盖测试的5种标准
    发现错误的能力由弱到强

    • 语句覆盖:每条语句至少执行一次 A与B为true
    • 判定覆盖:每一判定的每个分支至少执行一次 A与B为true,A与B为false
    • 条件覆盖:每一判定中的每个条件,分别按“真”“假”至少各执行一次
      A=true,B=true,A=fasle,B=false
    • 判定/条件覆盖:同时满足判定覆盖和条件覆盖的要求 A与B=true,A与B=false,A=true,B=true,A=false,B=false
    • 条件组合覆盖:求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次 A=true与B=true,A=true与B=false,A=false与B=true,A=false与B=false

    语句覆盖发现错误的能力最弱,一般不单独采用

    判定覆盖与条件覆盖的差别在于:前者把判定看成一个整体,后者则着眼于其中的一个条件。当一个判定只含一个条件时,判定覆盖也就是条件覆盖。但如果一个判定含有一个以上的条件(称其为复合条件)

    采用判定覆盖有可能出现漏洞:盘定制有些条件得到测试,另一些条件却被忽略。判定/条件覆盖解决了条件覆盖的不足之处。条件组合覆盖在5种覆盖中发现错误的能力最强。

    路径测试法

    着眼于程序的执行路径,程序图是考察测试路径的有用工具。

    • 顺序执行的多个结点,在程序图中可以合并画成一个结点。
    • 含有复合条件的判定框,应先将其分解成几个简单条件判定框,然后再画程序图

    程序图关心的是程序中的判定框,而不是顺序执行部分的细节。

    路径测试的特征

    对程序图中每一条可能的程序执行路径至少测试一次,如果程序中含有循环(在程序图中表现为环),则每个循环至少执行一次。

    ①满足结构测试的最低要求。语句覆盖(点覆盖)加判定覆盖(边覆盖)是对白盒测试的最低要求,同时满足这两种标准的覆盖称为完全覆盖。

    ②有利于安排循环测试。对单循环结构的路径测试包括:

    • 零次循环,即不执行循环体,直接从循环入口跳到出口;
    • 一次循环,循环体仅执行一次,主要检查在循环初始化中可能存在的错误;
    • 典型次数的循环
    • 最大值次循环,如果循环次数存在最大值,应按此最大值进行循环,需要时还可增加比最大值次数少一次或多一次的循环测试

    选择测试路径的原则

    • ①选择具有功能含义的路径
    • ②尽量用短路径代替长路径
    • ③从上一条测试路径到下一条测试路径,应尽量减少变动的部分(包括变动的边和结点)
    • ④由简入繁,如果可能,应先考虑不含循环的测试路径,然后补充对循环的测试;
    • ⑤除非不得已(如为了要覆盖某条边),不要选取没有明显功能含义的复杂路径。

    2、多模块程序的测试策略

    测试的层次:
    单元测试、集成测试、高级测试(确认测试、系统测试)

    单元测试(编码阶段,以白盒(结构)测试为主)

    • 单元测试是层次测试的第一步,也是整个测试的基础。在编码阶段完成。单元一般以模块或子程序为单位,故又称模块测试。
    • 目的:通过对象模块的静态分析与动态测试,使其代码达到模块说明书的需求。
    • 静态分析与动态测试的重点,均应放在模块内部的重要执行路径、出错处理路径和局部数据结构,也要重视模块的对外接口。

    集成测试(测试阶段,以黑盒(功能)测试为主)

    • 集成测试是一个逐步组装的过程,它从一个单元开始,逐一地添加新的单元,边添加边测试边纠错,直至最终将所有单元集成为一个系统。
    • 除进行新的测试项目外,还需重复先前已经进行过的测试,也称为回归测试。回归测试可用于防止因软件组装改变而导致新的不协调,出现不可预料的错误。
    • 目的:将经过单元测试的模块逐步组装成具有良好一致性的完整的程序 集成测试的策略:可以分为自顶向下、由底向上以及两头逼近的混合方式。

    确认测试(测试阶段,以黑盒(功能)测试为主)

    确认测试是对整个程序的测试,用于确认组装完毕的程序确能满足需求规格说明书(SRS)的要求。

    • ①有效性测试(黑盒测试)和配置复审
    • ②验收测试(由用户进行)
    • ③a与β测试
      -a测试是在一个受控的环境下,由用户在开发者的指导下进行的测试,由开发者负责记录错误和使用中出现的问题。
      β测试是由最终用户在自己的场所进行的,开发者通常不会在场,也不能控制应用的环境。所有在β测试中遇到的问题均由用户记录,并定期把报告给开发者。

    系统测试(安装与验收阶段,以黑盒(功能)测试为主)

    • 系统测试是在验收阶段进行。
    • 目的是检查把确认测试合格的软件安装到系统以后,能否与系统的其余部分协调进行,并且实现SRS的要求。

    九、软件维护

    软件维护的种类:

    • 完善性维护、适应性维护、纠错性维护、预防性维护

    软件的可维护性:

    • 是衡量维护容易程度的一种软件属性。定性的说,可维护性取决于软件的可理解性、可修改性与可测试性,三者一起构成软件的质量属性。

    软件维护的副作用:因修改而引起副作用

    • 修改编码的副作用;
    • 修改数据的副作用;
    • 修改文档的副作用
    展开全文
  • 软件工程-毕设答辩PPT

    2018-02-13 14:50:51
    软件工程 毕设 答辩 PPT 基于微信公众平台开发的答辩PPT
  • 软件工程导论—软件与软件工程

    千次阅读 多人点赞 2020-05-02 12:47:35
    文章目录1. 软件与软件危机1.1.... 软件工程学2.1. 软件工程学的概念2.2. 软件工程项目的基本目标2.3. 软件工程的八项原则2.4. 软件工程的本质特征2.5. 软件工程的七条基本原理3. 软件工程方法学3.1. 软件工程方法...

    1. 软件与软件危机

    1.1. 软件的概念和特点

    软件是计算机系统中与硬件相互依存的另一部分,它是包括程序数据及其相关文档的完整集合。

    其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。

    与之相似的是,在1983年IEEE组织对软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据

    比软件定义更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。

    软件有以下七个特点:

    1. 软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性;
    2. 软件的生产与硬件不同,它没有明显的制造过程;
    3. 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。但就目前的软件工程环境应用而言,在不更新升级的情况下软件的平均寿命大约为5年,如果一个软件5年内没有任何更新,那么它将面临淘汰;
    4. 软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性;
    5. 软件的开发至今尚未完全摆脱手工艺的开发方式;
    6. 软件本身是复杂的,这种复杂性可能来自它所反映的实际问题的复杂性,例如相当多的软件工作涉及到社会因素,复杂性也可能来自程序逻辑结构的复杂性;
    7. 软件成本相当昂贵
      在这里插入图片描述

    1.2. 软件规模的分类与发展阶段

    软件的分类并没有一个绝对的标准,但一般情况下都会用软件规模来对软件进行分类,如下表:

    类别参加人员数研制期限产品规模(源程序行数)
    微型11~4周0.5K
    小型11~6月1K~2K
    中型2~51~ 2年5K~50K
    大型5~202~3年50K~ 100K
    甚大型100~10004~5年1M
    极大型2000~50005~10年1M~10M

    软件发展的四个时期及其特点

    1. 程序设计的原始时期(1950~1950年代末),这时既没有汇编语言也没有高级语言,程序员只能用机器指令编写程序;
    2. 基本软件期(1950年代末~1960年代末),出现了汇编语言,并逐渐普及。随着高级语言的发展,编译技术也有较大的发展;
    3. 程序设计方法时代(1960 年代末~1970年代中期) 。 这一时期,与硬件费用下降相反,软件开发费急剧上升。于是人们提出了结构式程序设计和模块化程序设计等程序设计方法,设法降低软件的开发费用;
    4. 软件工程时期(1970年代中期~现在)。软件开发技术不再仅仅是程序设计技术,而是包括了与软件开发的各个阶段,如需求分析、设计、编码、单元测试、综合测试、使用和维护及其整体有关的各种管理技术。
    特点\时期基本软件期程序设计方法时代软件工程时期
    软件所指程序程序及说明书程序、文档、数据
    主要程序设计语言汇编及机器语言高级语言软件语言
    软件工作范围程序编写设计、编码和测试软件周期
    软件使用者程序设计者本人少数用户市场用户
    软件开发组织个人开发小组开发小组及大中型软件开发机构
    软件规模小型中小型大中小型
    决定质量的因素个人编程技术小组技术水平技术水平及管理水平
    开发技术和手段子程序和程序库结构化程序设计数据库,开发工具,开发环境,
    工程化开发方法,标准和规范,
    网络及分布式开发面向对象技术及软件复用
    维护责任者程序设计者开发小组专职维护人员
    硬件特征价格高、存储容量小、工作可靠性差速度、容量及工作可靠性有明显提高向超高速,大容量,微型化及网络化方向发展
    软件特征完全不受重视软件技术的发展不能清足需要,出现软件危机开发技术有进步,但未获突破性进展,价格高未完全摆脱软件危机

    1.3. 软件危机

    1968年在西德Garmish召开的国际软件工程会议上正式提出软件危机的概念:计算机软件的开发和维护过程所遇到的一系列严重问题。

    1.3.1. 软件危机的表现

    软件危机一般表现在以下五个大方面:

    1. 对软件开发成本和进度的估算很不准确。 实际成本比估计成本有可能高出一个数量级,实际进度比预期进度拖延几个月甚至几年的现象并不罕见。软件开发人员常常在对用户要求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序;另外软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子学技术的进步和生产自动化程度不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本随着通货膨胀以及软件规模和数量的不断扩大而持续土升。美国在1985年软件成本大约已占计算机系统总成本的90%。
    2. 软件产品不符合用户的实际需要。 通常情况下用户也不知道自己想要什么,导致开发时常常出现产品与预期不匹配的现象,实际上当前的软件技术已经十分发达,搞明白了需求基本上都能通过技术实现,如下图是软件技术与需求之前的增长关系:
      在这里插入图片描述
    3. 软件产品质量不可靠。 软件可靠性和质量保证的确切的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,这些都导致软件产品发生质量问题;计算机软件不仅仅是程序,还应该有三整套文档资料。这些文档资料应该是在软件开发过程中产生出来的,而且应该是"最新式的"(即和程序代码完全一致的)。软件开发组织的管理人员可以使用这些文档资料作为“里程碑”,来管理和评价软件开发工程的进展状况:软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档:资料更是必不可少的。
    4. 缺少软件文档,大型软件系统经常失败。 缺乏方法指导和工具支持导致很多程序中的错误是非常难改正的,甚至一旦换了一个新的硬件环境就不能正常运行,也不能根据用户的需要在原有程序中增加一些新的功能。"可重用的软件"还是一个没有完全做到的、正在努力追求的目标,人们仍然在重复开发类似的或基本类似的软件
    5. 软件开发效率不高,与计算机应用的迅速发展不匹配。 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件产品"供不应求"的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。
    1.3.2. 软件危机产生的原因

    客观原因:软件本身特点,例如逻辑部件复杂、规模庞大等等。

    在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件,在运行过程中不会因为使用时间过长而被"用坏",如果运行中发现了错误很可能是遇到了一个在开发时期引入的,在测试阶段没能检测出来的错误。

    软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。

    主观原因:程序员不正确的开发方法,忽视需求分析,并且错误地认为软件开发等于程序编写,轻视软件维护。

    主观上的错误认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。目前相当多的软件专业人员对软件开发和维护还有不少其他的糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。

    对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。另一方面还必须认识到程序只是完整的软件产品的一个组成部分,一个软件产品必须由一个完整的配置组成,主要包括程序、文档和数据等成分,他们缺一不可。

    软件问题要尽早解决
    作好软件定义时期的工作,是降低软件,成本提高软件质量的关键。在实际的软件开发中,在软件开发的不同阶段进行修改需要付出的代价是很不相同的,大约如下图所示,它表示了错误发现的越晚,付出的代价越高。
    在这里插入图片描述
    因此可以说,轻视维护是一个巨大的错误。统计数据表明,实际上用于软件维护的费用占软件总费用的55%~70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。

    软件危机案例:
    IBMOS/360操作系统被认为是一个典型的案例,到现在为止,它仍然被使用在360系列主机中。这个经历了数十年,极度复杂的软件项目甚至产生了一套不包括在原始设计方案之中的工作系统。

    IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付,在交付使用后的系统中仍发现大量(2000个以上)的错误,造成无法估计的安全隐患。

    1.3.3. 软件危机如何解决

    实际上就目前的手段而言,软件工程只能解决主观上造成软件危机的原因,对于软件本身特点,例如逻辑部件复杂、规模庞大等客观原因,软件工程是无能为力的。

    主观危机的解决途径主要有两条:1、组织管理。2、技术措施

    组织管理可以采用工程项目管理方法;

    技术措施上提升软件开发技术与方法,灵活运用软件工具。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。并且应该开发和使用更好的软件工具,在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。

    为了消除软件危机,首先应该对计算机软件有一个正确的认识,首当其冲的就是彻底消除"软件就是程序"的错误 观念,要明确一个软件必须由一个完整的配置组成,是程序、数据及相关文档的完整集合。

    2. 软件工程学

    2.1. 软件工程学的概念

    软件工程学是在1968年,北约计算机科学会议上由Fritz Bauer提出的,他给出的软件工程学的定义为:用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。其中包含了三个要素:方法、工具、过程

    软件工程学的中心思想是把软件当作一种工业产品,要求采用工程化的原理与方法对软件进行计划、开发和维护。因此可以说,软件工程学是一门指导计算机软件开发和维护的工程学科,它包含了开发技术和工程管理两方面。

    2.2. 软件工程项目的基本目标

    软件工程的目的是为了实现按预期的进度和经费完成软件生产计划,提高软件的生产率和可靠性。

    具体来说就是要达到以下几个主要的目标:

    1. 付出较低的开发成本;
    2. 达到要求的软件功能;
    3. 取得较好的软件性能;
    4. 开发的软件易于移植;
    5. 需要较低的维护费用;
    6. 能按时完成开发工作,及时交付使用。

    但是软件工程的各个目标是不可能全部满足的,下图表示了软件工程目标之间的关系,可见,软件工程的最终目标只能是实现一个均衡的系统。
    在这里插入图片描述

    2.3. 软件工程的八项原则

    1. 抽象
      抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象,自顶向下、逐层分解的办法控制软件开发过程的复杂性。例如,软件瀑布模型、结构化分析方法、结构化设计方法,以及面向对象建模技术等都体现了抽象的原则。
    2. 封装(信息隐蔽)
      将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。使用者只能通过模块接口访问模块中封装的数据。
    3. 模块化
      模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义。如C语言程序中的函数过程,C++语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。
    4. 局部化
      要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于加强模块的独立性,控制解的复杂性。
    5. 确定性
      软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间在交流时不会产生误解、
      遗漏,保证整个开发工作协调致。
    6. 一致性
      整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。
    7. 完备性
      软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。
    8. 可验证性
      开发大型的软件系统需要对系统自顶向下逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。

    2.4. 软件工程的本质特征

    软件工程关注于大型程序的构造
    "大"与"小"的分界线并不十分清晰。通常把一个人在较短时间内写出的程序称为小型程序,而把多人合作用时半年以上才写出的程序称为大型程序。

    软件工程的中心课题是控制复杂性
    软件所解决的问题十分复杂,通常不得不把问题分解,使得分解出的每个部分是可理解的,而且各部分之间保持简单的通信关系。用这种方法并不能降低问题的整体复杂性,但是却可使它变成可以管理的。

    软件经常变化
    绝大多数软件都模拟了现实世界的某一部分。现实世界在不断变化,软件为了不被很快淘汰,必须随着所模拟的现实世界一起变化。因此,在软件系统交付使用后仍然需要耗费成本,而且在开发过程中必须考虑软件将来可能的变化。

    开发软件的效率非常重要
    目前,社会对新应用系统的需求超过了人力资源所能提供的限度,软件供不应求的现象日益严重。因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具。

    和谐地合作是开发软件的关键
    软件处理的问题十分庞大,必须多人协同工作才能解决这类问题。为了有效地合作,必须明确地规定每个人的责任和相互通信的方法。纪律是成功地完成软件开发项目的一个关键。

    软件必须有效地支持它的用户
    开发软件的目的是支持用户的工作。软件提供的功能应该能有效地协助用户完成他们的工作。

    有效地支持用户意味着必须仔细地研究用户,以确定适当的功能需求、可用性要求及其他质量要求(例如,可靠
    性、响应时间等)。有效地支持用户还意味着,软件开发不仅应该提交软件产品,而且应该写出用户手册和培训材料。

    在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人
    软件工程师是诸如Java程序设计、软件体系结构、测试或统一建模语言(UML)等方面的专家,他们通常并不是图书馆管理、航空控制或银行事务等领域的专家,但是他们却不得不为这些领域开发应用系统。缺乏应用领域的相关知识,是软件开发项目出现问题的常见原因。

    有时候,软件开发者通过访谈、阅读书面文件等方法了解到用户组织的“正式”工作流程,然后用软件实现这个工作流程。但是,决定软件系统成功与否的关键问题是,用户组织是否真正遵守这个工作流程

    2.5. 软件工程的七条基本原理

    著名的软件工程专家B.W.Boehm综合学者们的意见,于1983年在一篇论文中提出了软件工程的七条基本原理。这七条原理是确保软件产品质量和开发效率的原理的最小集合。

    这七条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理。同时这七条原理又是相当完备的,虽然不能用数学方法严格证明它们是一个完备的集合,但是可以证明在此之前已经提出的一百多条软件工程原理都可以由这七条原理的任意组合蕴含或派生。

    七条基本原理:

    1. 用分阶段的生命周期计划严格管理
      经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的。因此应该把软件生命周期划分成若千个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划;一般来说软件的生命周期分为定义阶段、可行性研究阶段、需求分析阶段、程序设计阶段、编码阶段、测试阶段、运行维护阶段。
    2. 坚持进行阶段评审
      软件的质量保证工作不能等到编码阶段结束之后再进行,这样说至少有两个理由:
      第一,大部分错误是在编码之前造成的,根据统计,设计错误占软件错误的63%,编码错误仅占37%;
      第二,错误发现与改正得越晚,所需付出的代价也越高;
      因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。
    3. 实行严格的产品控制
      在软件开发过程中改变需求是难免的,只能依靠科学的产品控制技术来顺应这种要求。也就是说,当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。
      所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分。基准配置管理也称为变动控制,指的是一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。绝对不能谁想修改软件,就随意进行修改。
    4. 采用现代程序设计技术
      从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术,并进一步研究各种先进的软件开发与维护技术。实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。
    5. 结果应能清楚地审查
      软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限来规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。
    6. 开发小组的人员应该少而精
      软件开发小组的组成人员的素质应该好,而人数则不宜过多。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。
      此外,随着开发小组人员数目的增加,因为交流情况讨论问题而造成的通信开销也急剧增加。当开发小组人员数为N时,可能的通信路径有N(N-1)/2条,可见随着大数N的增大,通信开销将急剧增加。
    7. 承认不断改进软件工程实践的必要性
      遵循上述六条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但是,仅有上述6条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第7条基本原理。按照这条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。

    3. 软件工程方法学

    3.1. 软件工程方法学的概念

    软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。通常把在软件生命周期全过程中使用的整套技术方法的集合称为方法学(Methodology),也称为范型(Paradigm)。

    软件工程方法学包含3个要素:

    1. 方法,是完成软件开发的各项任务的技术方法,回答"怎样做"的问题;
      在这里插入图片描述
    2. 工具,是为运用方法而提供的自动的或半自动的软件工程支撑环境;
      在这里插入图片描述
    3. 过程,是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

    3.2. 传统软件工程与面向对象软件工程

    3.2.1. 传统软件工程与面向对象软件工程的对比

    目前使用得最广泛的软件工程方法学有传统方法学(面向数据流/结构化方法学)面向对象方法学。他们分别代表了两种程序设计方法:即结构化程序设计(程序=数据结构+算法) 和 面向对象程序设计(程序=对象+请求消息)

    两种方法学的软件开发流程如下所示:
    传统软件工程:软件分析→总体设计→详细设计→面向过程的编码→测试。会有一个清楚的流程体系。
    面向对象软件工程:软件分析与对象抽取→对象详细设计→面向对象的编码→测试。

    3.2.2. 传统软件工程的生命周期

    所谓软件生命周期,软件从产生、发展到成熟,直至衰亡为止的整个过程。

    它由八个小阶段组成:

    国标《计算机软件开发规范》将软件生存周期分为可行性研究与计划、需求分析、总体设计、详细设计、实现(编码和单元测试)、集成测试、确认测试、使用和维护共八个小阶段

    这八个小阶段又可以分为三个时期:

    1. 计划时期。问题定义、可行性分析
      问题定义阶段必须回答的关键问题是"要解决的问题是什么?"如果不知道问题是什么就试图解决这个问题,显然是盲目的。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。
      可行性研究阶段的关键是明确要解决问题,找出行得通解决方法,并且给出粗略的计划。系统分析员需要从经济、技术、社会(操作)等方面对软件项目进行可行性分析。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。可行性研究的结果是使用部门负责人作出是否继续进行这项工程的决定的重要依据。可行性研究以后的那些阶段将需要投入更多的人力物力。及时终止不值得投资的工程项目,可以避免更大的浪费。
    2. 开发时期。需求分析、软件设计(总体设计、详细设计)、编码、测试(单元测试和集成测试)
      需求分析阶段需要确定目标系统的任务目标以及必须具备哪些功能。系统分析员必须和用户密切配合,充分交流信息以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示在需求分析阶段确定的系统逻辑模型是以后设计和实现系统的基础。这个阶段的一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为需求《规格说明书》。
      总体设计阶段应该明确用什么方法去实现目标系统。首先,应该根据需求分析阶段的结果设计出实现目标系统的多种可选的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。软件工程师在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。制定出实现最佳方案的详细计划。一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系,最终完成总体设计后需要记录在文档中,这份文档称为《总体设计说明书》。
      详细设计阶段的任务就是把实现目标系统的方法具体化。详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构,最终形成一份《详细规格说明》,这种规格说明应该包含必要的细节,程序员可以根据这些细节写出实际的程序代码。
      编码和单元测试阶段的关键任务是写出正确的、容易理解、容易维护的程序模块。程序员应该根据目标系统的性质和实际环境,选取适当的程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试(调试)编写出的每一个模块。
      集成测试阶段的关键任务是通过各种类型的测试(及相立的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。所谓集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试;所谓验收测试则是按照规格说明书的规定,由用户对目标系统进行验收。必要时还可以再通过现场测试或平行运行等方法对目标系统进一步测试检验,集成测试和验收测试结束后应该形成文档《测试报告》,里面应当写明测试计划、测试方案和结果。
    3. 运行时期。软件维护
      软件维护阶段是要通过各种必要的维护活动使系统持久地满足用户的需要"。通常有四类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化,例如Windows迁移到Linux;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。每一项维护活动都实质上是经历了一次压缩和简化了的软件定义和开发的全过程。

    实际从事软件开发工作时,软件规模、类型、开发环境及技术方法等因素会影响到阶段划分,及各阶段的执行顺序,形成不同生存周期模型,又称过程模型。也就是说以上的三个时期所包含的阶段不一定非要按照国标来进行,应当按照实际情况灵活安排软件周期。

    4. 软件开发模型

    软件开发模型实际上是软件工程三要素中"过程"要素的展开,下面介绍几种经典的软件开发模型

    4.1. 传统开发模型

    4.1.1. 瀑布模型(waterfall model)

    瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的文档驱动的过程模型。如下图所示为传统的瀑布模型

    在这里插入图片描述
    瀑布模型区别与其他模型最大的特点有三个:

    1. 阶段间具有顺序性和依赖性
      (1)必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
      (2)前一阶段的输出文档就是后一阶段的输入文档。因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
    2. 推迟实现
      对于规模较大的软件项目来说,往往实现(编码和测试)开始得越早最终完成开发工作所需要的时间反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往带来灾难性后果瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,清楚地区分逻辑设计与物!理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想
    3. 质量保证
      软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:
      (1)每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务;
      (2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。

    传统的瀑布模型过于理想化了,事实.上,人在工作过程中不可能不犯错误。实际的瀑布模型是带"反馈环"的,如下图所示。
    在这里插入图片描述
    实际的瀑布模型当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来继续完成后面阶段的任务。

    4.1.2. 快速原型模型(rapid prototype model)

    快速原型模型是低成本的,进行循环需求分析的一个快速开发模型。它的基本结构如图所示。
    在这里插入图片描述
    原型是值快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集,然后在用户的不断使用中探明用户需求,不断对原型进行改进,最终完成需求分析。

    因此它的两个最大的优点就是:

    1. 原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。
    2. 开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。

    4.2. 演化开发模型

    4.2.1. 增量模型(incremental model)

    增量模型也称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和
    测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。开发流程如下图所示
    在这里插入图片描述
    下图是每一个增量构建的实现过程图:
    在这里插入图片描述

    增量模型能在较短时间内向用户提交可完成部分工作的产品。逐步增加产品功能可以使用户有较充裕的时间学
    习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

    但是它也是有缺陷的,增量模型面临的最大困难就是必须保证在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

    4.2.2. 螺旋模型(spiral model)

    螺旋模型的基本思想是,使用原型及其他方法来尽量隆低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。从本质上来讲,螺旋模型就是一个加入了风险分析的快速原型模型。

    螺旋模型的主要优势在于,它是风险驱动的。它的开发过程如图所示:
    在这里插入图片描述

    一个螺旋式周期包括下面4个完整步骤:

    1. 确定目标,选择方案,选定完成目标的策略
    2. 从风险角度分析该策略
    3. 启动一个开发阶段
    4. 评价前一步的结果,并计划下一轮的工作

    4.3. 面向对象开发模型

    4.3.1. 构件集成模型(component integration model)

    构建集成模型是一个典型的面向对象开发模型,它的一个典例就是各种开发IDE,例如Visual Studio,可以查找加载各种构建。

    构建集成模型有着以下五个特点:面向对象、基于构件库、融合螺旋模型特征、支持软件开发的迭代方法、软件重用

    在这里插入图片描述

    展开全文
  • 软件工程期末考试题库(超全)

    万次阅读 多人点赞 2020-12-18 18:25:49
    软件工程期末考试题库 选择题 具有风险分析的软件生命周期模型是(  C   )。 A.瀑布模型      B.喷泉模型  C.螺旋模型        D.增量模型 软件工程的基本要素包括方法、工具和( A )。 ...

    软件工程期末考试题库

    选择题

    1. 具有风险分析的软件生命周期模型是(  C   )。

    A.瀑布模型      B.喷泉模型  C.螺旋模型        D.增量模型

    1. 软件工程的基本要素包括方法、工具和( A )。

    A. 过程        B. 软件系统   C. 硬件环境         D. 人员

    1. 软件的复杂性是( A ),它引起人员通信困难、开发费用超支、开发时间超时等问题。

    A. 固有的         B. 人为的   C. 可消除的         D. 不可降低的

    1. 在结构化分析方法中,( C )表达系统内部数据运动的图形化技术。

    A. 数据字典         B. 实体关系图   C. 数据流图         D. 状态转换图

    1. “软件危机” 是指(  C  )。

    A.计算机病毒的出现      B.利用计算机进行经济犯罪活动

    C.软件开发和维护中出现的一系列问题 D.人们过分迷恋计算机系统

    1. 随着软硬件环境变化而修改软件的过程是(  B  )。

    A.校正性维护       B.适应性维护     C.完善性维护       D.预防性维护

    1. 需求分析中开发人员要从用户那里了解( A )。

    A.软件做什么       B.用户使用界面   C.输入的信息       D.软件的规模

    1. 软件详细设计的主要任务是确定每个模块的(  A  )。

    A.算法和使用的数据结构     B.外部接口     C.功能         D.编程

    1. 为了提高模块的独立性,模块内部最好是(  C  )。//外部耦合,功能内聚

    A.逻辑内聚       B.时间内聚     C.功能内聚       D.通信内聚

    1. 一个模块的(  C  )太大一般是因为缺乏中间层次,应当适当增加中间层次的控制模块。

    A.深度         B. 宽度  C. 扇出         D. 扇入

    1. 模块的内聚性最高的是(  D  )。

    A.逻辑内聚       B.时间内聚  C. 偶然内聚       D.功能内聚

    1. 需求分析是(  A  )。

    A. 软件开发工作的基础     B. 软件生存周期的开始

    C. 由系统分析员单独完成的    D. 由用户自己单独完成的

    1. 在白盒测试技术测试用例的设计中,(  B  )是最强的覆盖标准。

    A.语句覆盖       B.路径覆盖  C. 条件组合覆盖      D.判定覆盖

    1. 软件维护时,对测试阶段未发现的错误进行测试、诊断、定位、纠错,直至修改的回归测试过程称( A )。 A. 改正性维护      B. 适应性维护   C. 完善性维护             D. 预防性维护

    2. ( C ) 是把对象的属性和操作结合在一起,构成一个独立的对象,其内部信息对外界是隐蔽的,外界只能通过有限的接口与对象发生联系。

    A. 多态性         B. 继承   C. 封装        D. 消息

    1. 对象实现了数据和操作的结合,使数据和操作( C )于对象的统一体中。

    A.结合    B.隐藏   C.封装   D.抽象

    1. 面向对象的开发方法中,(  C  )将是面向对象技术领域内占主导地位的标准建模语言。

    A.Booch方法  B.Coad方法  C.UML语言  D.OMT方法

    1. ( A )意味着一个操作在不同的类中可以有不同的实现方式。

    A.多态性  B.多继承   C.类的可复用  D.信息隐藏

    1. 单元测试的测试用例主要根据(  D  )的结果来设计。

    A.需求分析      B.源程序   C.概要设计  D.详细设计

    1. 软件测试是为了( B )而执行程序的过程。

    A. 纠正错误    B. 发现错误  C. 避免错误        D. 证明正确

    21.类构件的重用方式有多态重用、继承重用和( A )

    A.实例重用       B.重载重用    C. 代码重用           D. 方法重用

    1. 支持面向对象技术的软件生存周期模型是(  A  )。

    A.喷泉模型       B.螺旋模型    C.增量模型          D.瀑布模型

    1. 在白盒测试技术测试用例的设计中,(  A  )是最弱的覆盖标准。

    A.语句覆盖       B.路径覆盖    C.条件组合覆盖      D.判定覆盖

    1. 下面哪些测试方法属于白盒测试(  A E   )。//BCD是黑盒测试

    A、基本路径测试  B、等价类划分  C、边界值分析  D、错误推测  E、逻辑覆盖测试

    1. 瀑布模型把软件生命周期划分为八个阶段:问题的定义、可行性研究、软件需求分析、系统总体设计、详细设计、编码、测试和运行、维护。八个阶段又可归纳为三个大的阶段:计划阶段、开发阶段和( C )。

    A、详细计划  B、可行性分析 C、运行阶段  D、测试与排错

    1. 从结构化的瀑布模型看,在它的生命周期中的八个阶段中,下面的几个选项中哪个环节出错,对软件的影响最大( C )。

    A、详细设计阶段  B、概要设计阶段 C、需求分析阶段  D、测试和运行阶段

    1. 在结构化的瀑布模型中,哪一个阶段定义的标准将成为软件测试中的系统测试阶段的目标( A )。

    A、需求分析阶段  B、详细设计阶段 C、概要设计阶段  D、可行性研究阶段

    1. 软件工程的出现主要是由于( C )。

    A.程序设计方法学的影响  B.其它工程科学的影响 C. 软件危机的出现  D.计算机的发展

    1. 软件工程方法学的目的是:使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( C )

    A、硬件环境     B、软件开发的环境 C、软件开发工具和软件开发的环境  D、开发人员的素质

    1. 软件开发常使用的两种基本方法是结构化和原型化方法,在实际的应用中,它们之间的关系表现为 ( B )

    A、相互排斥  B、相互补充 C、独立使用  D、交替使用

    1. UML是软件开发中的一个重要工具,它主要应用于哪种软件开发方法( C )

    A、基于瀑布模型的结构化方法  B、基于需求动态定义的原型化方法

    C、基于对象的面向对象的方法  D、基于数据的数据流开发方法

    1. 软件测试基本方法中,下列 ( D ) 不用测试实例。

    A). 白盒测试法 B). 动态测试法 C). 黑盒测试法 D). 静态测试法

    1. 结构化分析方法是一种预先严格定义需求的方法,它在实施时强调的是分析对象的( B )

    A、控制流  B、数据流  C、程序流  D、指令流

    1. 软件开发的结构化生命周期方法将软件生命周期划分成( A )

    A、 计划阶段、开发阶段、运行阶段  B、 计划阶段、编程阶段、测试阶段

    C、 总体设计、详细设计、编程调试  D、需求分析、功能定义、系统设计

    1. 可行性研究主要从以下几个方面进行研究:( A )

    A) 技术可行性,经济可行性,操作可行性 B) 技术可行性,经济可行性,系统可行性

    C) 经济可行性,系统可行性,操作可行性 D) 经济可行性,系统可行性,时间可行性

    1. 耦合是对软件不同模块之间互连程度的度量。各种耦合按从强到弱排列如下: ( C )

    A) 内容耦合,控制耦合,数据耦合,公共环境耦合。 B) 内容耦合,控制耦合,公共环境耦合,数据耦合。

    C) 内容耦合,公共环境耦合,控制耦合,数据耦合。 D) 控制耦合,内容耦合,数据耦合,公共环境耦合。

    1. 可行性分析研究的目的( B )

    A 争取项目 B 项目值得开发否 C 开发项目 D 规划项目

    1. 数据字典是用来定义( D )中的各个成分的具体含义

    A 流程图 B 功能结构图 C 系统结构图 D 数据流图

    1. 程序的三种基本控制结构的共同特点是( C )

    A 只能用来描述简单程序 B 不能嵌套使用 C 单入口,单出口 D 仅用于自动控制系统

    1. 为高质量的开发软件项目,在软件结构设计时,必须遵循( A )原则

    A 信息隐蔽 B 质量控制 C 程序优化 D 数据共享

    1. 黑盒测试在设计测试用例时,主要研究( A )

    A 需求规格说明于概要设计说明 B 详细设计说明 C 项目开发计划 D 概要设计说明与详细设计说明

    1. 通过 ( B ) 可以完成数据流图的细化。

    A). 结构分解 B). 功能分解 C). 数据分解 D). 系统分解

    1. 程序流程图 (PDF) 中的箭头代表的是 ( B )

    A). 数据流 B). 控制流 C). 调用关系 D). 组成关系

    1. 软件定义期问题定义阶段涉及的人员有 ( D )

    A). 用户、使用部门负责人 B). 软件开发人员、用户、使用部门负责人

    C). 系统分析员、软件开发人员 D). 系统分析员、软件开发人员、用户、使用部门负责人

    1. ( C )应考虑对模块相联和资源共享问题进行描述和制约。

    A). 系统设计 B). 详细设计 C). 接口控制 D). 结构化编辑工具

    1. 业界存在三种需求分析方法:面向功能分析、面向对象分析和 B 。

    A.面向算法分析 B.面向数据分析 C.面向程序分析 D.面向硬件分析

    1. 软件可维护性的特性中相互矛盾的是 C 。

    A.可修改性和可理解性 B.可测试性和可理解性 C.效率和可修改性 D.可理解性和可读性

    1. 软件测试方法中的 D 属于静态测试方法。

    A. 黑盒法 B.路径覆盖 C.错误推测 D.人工检测

    1. 结构化分析方法采用的基本手段是 A

    A. 分解与抽象 B.分解与综合 C.归纳与推导 D.试探与回溯

    1. 可行性研究要进行一次(D)需求分析。

    A.深入的 B.详尽的 C.彻底的 D.简化的、压缩了的

    1. 可维护性的特性中相互促进的是(A)

    A.可理解性和可测试性  B.效率和可移植性 C.效率和可修改性   D.效率和结构好

    1. (D)是以提高软件质量为目的的技术活动。

    A.技术创新  B.测试  C.技术创造  D.技术评审

    1. 软件测试可能发现软件中的( B ),但不能证明软件 ( )。

    A.所有错误,没有错误 B.错误,没有错误 C.逻辑错误,没有错误 D. 设计错误,没有错误

    1. 以下不属于软件维护困难表现的是 ©。

    A.读懂别人的程序是困难的。
    B.文档的不一致性。
    C.源程序及相关文档的错误或丢失。
    D.软件开发和软件维护在人员和时间上的差异。E. 软件维护不是一项吸引人的工作。

    1. 软件设计一般分为总体设计和详细设计,它们之间的关系是 (A)。

    A.全局和局部 B.抽象和具体 C.总体和层次 D.功能和结构

    1. 一组语句在程序多处出现,为了节省空间,把这些语句放在一个模块中,该模块的内聚度是( C )的。

    A.逻辑性 B.瞬时性 C.偶然性 D.通信性

    1. 在一个课程注册系统中,定义了类 CourseSchedule 和类 Course , 并在类 CourseSchedule 中定义了方法 add (c:Course) 和方法 remove (c:Course),则类 CourseSchedule 和类 Course 之间的关系是( C )。

    A.泛化关系 B.组合关系 C.依赖关系 D.包含关系

    1. 软件策划的上游是( A ),下游是( B )

    A)需求分析 B)软件设计 C)软件测试 D)可行性分析

    1. 概要设计的结果是提供一份 ( A )。

    A). 模块说明书 B). 框图 C). 程序 D). 数据流图

    1. 面向数据流软件设计方法一般是把数据流图中的数据流化分为 (B) 两种流,再将数据流图映射为软件结构。

    A). 数据流与事务流 B). 交换流和事务流
    C). 信息流与控制流 D). 交换流和数据流

    填空题

    1. 一般来说,可以从 一致性完整性__、现实性____和有效性___四个方面验证软件需求的正确性。

    2. IPO图是 _输入、处理和输出图 _ 的简称,它是美国IBM公司发展完善起来的一种图形工具。

    3. 系统流程图是描述__物理模型__的传统工具,用图形符号表达了系统中各种元素之间的__信息流动_____情况。

    4. 数据流图中的箭头表示数据流,椭圆或圆形表示数据处理,矩形表示数据的源点/终点

    5. 集成测试的方法主要有 渐增式和非渐增式

    6. 软件生命周期一般可分为**问题定义、可行性研究、需求分析、设计编码、测试、运行与维护**阶段。

    7. 可行性研究主要集中在以下四个方面**经济可行性**、技术可行性__、__法律可行性___和抉择。

    8. 在结构化设计中,HIPO图应用在总体设计阶段,由IPO图和_层次图_两部分组成。

    9. 实施精化设计的目标是基于模块的“高内聚低耦合”的原则,提高模块的_独立性

    10. 按软件的功能进行划分,软件可以划分为 系统软件支撑软件应用软件

    11. 单元测试一般以**白盒**测试为主,__黑盒__测试为辅。

    12. 面向对象的数据存储管理模式分为__文件__、关系数据库面向对象数据库三种。

    13. 通用体系结构模式有:分层模式、管道与过滤器模式和黑板模式

    14. 成本效益分析的目的是从( 经济 )角度评价开发一个项目是否可行。

    15. 自顶向下结合的渐增式测试法,在组合模块时有两种组合策略:深度优先策略和 ( 宽度优先策略  ) 。

    16. 汇编语言是面向( 机器 ) 的,可以完成高级语言无法完成的特殊功能,如与外部设备之间的一些接口工作。

    17. 详细设计的任务是确定每个模块的内部特性,即模块的算法、( 使用的数据 )。

    18. 所有软件维护申请报告要按规定方式提出,该报告也称(  软件问题  )报告。

    19. 有两类维护技术:在开发阶段使用来减少错误、提高软件可维护性的面向维护的技术;在维护阶段用来提高维护的效率和质量的( 维护支援 )技术。

    20. 科学工程计算需要大量的标准库函数,以便处理复杂的数值计算,可供选择的语言有:( FORTRAN语言)、PASCAL语言、C语言和PL/1语言。

    21. 用户界面的 可使用性 是用户界面设计最重要的也是最基本的目标

    22. 数据流图数据字典 共同构成系统的逻辑模型

    23. 软件测试的方法有 分析方法非分析方法(即黑盒法)

    24. 成本估计方法主要有 自底向上估计自顶向下估计算法模型估计三种类型

    25. 常见的软件概要设计方法有三大类:以数据流图为基础构造模块结构的 结构化设计方法 ,以数据结构为基础构造模块的 Jackson方法 ,以对象、类、继承和通信为基础的 面向对象设计方法

    26. 实用的白盒测试覆盖技术有 4 种:语句覆盖、条件覆盖、分支 (或判定) 覆盖和组合覆盖。

    27. 传统软件维护一般分为 4 大类,分别是纠错性维护适应性维护完善性维护和预防性维护

    28. 在 V 测试模型中,编码结束后,首先作单元测试,然后是集成测试系统测试和验收测试

    29. 传统软件维护一般分为 4 大类,分别是纠错性维护适应性维护完善性维护和预防性维护

    30. 需求建模的基本方法包括抽象、分解与多视点分析 3 种。

    31. 用例之间的关系主要有三种:包含(include)、扩展(extend)和继承。

    32. 用于表示分析模型的 UML 图形机制主要是类图、活动图、交互图与状态图。

    33. 软件设计基本原则包括抽象与逐步求精、强内聚及松耦合、信息隐藏及关注点分离。

    34. 内聚性有 6 种类型 偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、功能内聚。

    35. 一般而言,在面向对象建模过程中,人们最常用的是建立系统的用例图、类图和顺序图。

    36. 常用的软件开发方法有结构化方法、面向对象方法和形式化开发方法

    37. 内聚性 是模块独立性的衡量标准之一,它是指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。

    38. 在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、 判定树

    39. 结构化语言是介于自然语言和形式语言之间的一种半形式语言

    40. 软件概要设计的主要任务就是软件体系结构的设计

    判断题

    1. 向滞后的项目中增加人手会使得项目更加滞后。(T)

    2. 过程描述语言可以用于描述软件的系统结构。(F)

    3. 按照瀑布模型开发软件的一条指导思想是清楚地区分逻辑设计与物理设计,以便尽早开始程序的物理实现。( F )

    4. 只有质量差的软件产品才需要维护。( F )

    5. 层次图用来描述软件的层次结构。层次图中的一个矩形框代表一个模块,方框间的连线表示模块的组成关系。在层次图中除最顶层的方框之外,给每个方框都加编号,即成为带有编号的层次图。( F )

    6. 建立动态模型的第一步,是编写典型交互行为的脚本。( T )

    7. 软件错误可能出现在开发过程的早期,越早修改越好。(T)

    8. 软件模块的耦合是越低越好。( T )

    9. 一个好的测试用例在于能发现至今未发现的错误。(  T  )

    10. 面向对象设计的结果只能采用面向对象语言来实现( F )

    11. 一个成功的项目唯一提交的就是运行程序。( F  )

    12. 用例之间的关系有3种。(  T  )

    13. 面向对象设计准则也要遵循弱耦合的原则,但是继承耦合则应该提高,紧密地继承耦合与高度的一般-特殊内聚是一致的。 ( T )

    14. 软件工作的考虑范围主要是程序设计和实现。( F   )

    15. 环形复杂度定量度量程序的逻辑复杂度,可以用这个公式来计算环形复杂度:流图G的环形复杂度V(G) = N– E + 2。(改成E-N+2)( F )

    16. 等价类划分方法将所有可能的输入数据划分成若干部分,然后从每一部分中选取少数有代表性的数据作为测试用例。( T )

    17. 在进行总体(改成概要)设计时应加强模块间的联系。(    F   )

    18. 系统结构图是精确表达程序结构的图形表示法。因此,有时也可以将系统结构图当作系统流程图使用。( T )

    19. 建立动态模型的第一步,是编写典型交互行为的脚本。(   T    )

    20. 在程序调试时,找出错误的位置和性质比改正该错误更难。(   F   )

    21. 如果通过软件测试没有发现错误,则说明软件是正确的。(  F    )

    22. 快速原型模型可以有效地适应用户需求的动态变化。(  T   )

    23. 模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。( T )

    24. 集成测试主要由用户来完成。(    F   )

    25. 面向对象 = 对象 + 类 + 继承 + 消息传递。(    T   )

    26. 面向对象的分析是面向计算机系统建立软件系统的对象模型。(  F  )

    27. 软件的开发与运行经常受到硬件的限制和制约。( T )

    28. 模块内的高内聚往往意味着模块间的松耦合。( T )

    29. Jackson图只能表达程序结构,不能表达数据结构。( F )

    30. 软件测试的目的是为了无一遗漏的找出所有的错误。( F )

    31. 软件的质量好坏主要由验收人员负责,其他开发人员不必关心。( F )

    32. 判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。( T )

    33. 应该尽量使用机器语言编写代码,提高程序运行效率,而减少高级语言的使用。( F )

    34. UML只能应用于软件系统模型的建立。( F )

    35. 容错就是每个程序采用两种不同的算法编写。( F )

    简答题

    1. 简述软件设计的过程。

    软件设计是把许多事物和问题抽象起来,并且抽象它们不同层次和角度,是将需求转变为软件陈述的过程,是迭代的过程。

    软件设计,要根据需求规格说明书,对整个设计过程进行计划,然后实施具体的设计过程,即“先整体,再局部”,也是不断迭代和精化的过程。

    然后需要对生成的设计规格说明书进行评审,启动 质量评价的标准,若未通过评审,需重新修改设计,直至评审通过,确定最后定型的过程本身。进入后续阶段,完成软件设计过程。

    1. 简述结构化程序设计方法的基本特点。

    1)尽可能少用goto语句的程序设计方法。

    2)每个代码块都单入单出。

    3)使用控制结构:顺序、选择和循环。

    4) 自顶向下逐步求精。

    1. 衡量模块独立性的两个定性标准是什么?这两个标准的定义分别是什么?在我们的软件设计中,关于模块独立性我们追求的目标是什么?

    衡量模块独立性的两个定性标准是内聚和耦合(2分)。

    耦合是指对一个软件结构内不同模块彼此之间互相依赖(连接)的紧密程度;而内聚则标志一个模块内部各个元素彼此结合的紧密程度(2分)。

    在我们的软件设计中,关于模块独立性我们追求的目标是紧密内聚松散耦合(1分)。

    1. 什么是黑盒测试法?

    黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程(2分)。

    它只检查程序功能是否能按照规格说明书的规定正常使用(1分),

    程序是否能适当地接收输入数据(1分),

    产生正确地输出信息(1分)。

    1. 如何选择程序设计语言的工程特性

    1.系统用户的要求

    2.可以使用的编译程序

    3.可以得到的软件工具

    4.工程规模

    5.程序员的知识

    6.软件可移植性的要求

    7.软件的应用领域

    1. 简述面向对象的4个要点的含义。

    面向对象的4个要点是:对象分解、数据专有、继承、封装性。(1分)

    1)对象分解:认为客观世界是由各种对象组成的。  (1分)

    2)数据专有,方法共享:把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。 (1分)

    3)继承:按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。(1分)

    4)封装性:对象彼此之间仅能通过传递消息互相联系。(1分)

    1. 软件维护的过程

    在软件开发完成交付用户使用后,为了保证软件在一个相当长的时期能够正常运行,就需要对软件进行维护。 软件维护的过程:

    (1) 确认维护要求。(1分)

    (2) 对于改正性维护申请,评价错误的严重性。对于严重的错误,立即安排人员,分析问题原因,进行"救火"性的紧急维护;对于不严重的错误,根据任务情况和轻重缓急进行统一安排。(2分)

    (3) 对于适应性和完善性维护申请,需要确定申请的优先级,然后安排维护工作。并不是所有的完善性维护申请都必须承担,需要考虑商业需要、现有资源、未来发展方向等进行决定。(2分)

    1. 软件维护的目的和主要任务是什么?维护的类型有哪些?

    软件维护是软件生命周期中最后一个、持续时间最长的阶段。

    主要任务是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件。

    目的是提高软件的可靠性、可用性,延长软件的寿命。

    维护的类型有:改正性(错误)、适应性(环境)、完善性(功能)、预防性(新产品)

    1. 什么是耦合?模块的耦合包括哪些类型?

    耦合是对一个软件结构内不同模块之间互连程度的度量。

    模块的耦合包括以下几种类型:数据耦合,控制耦合,特征耦合,公共环境耦合,内容   耦合,标记耦合,无耦合/非直接耦合

    1. 什么是内聚?模块的内聚包括哪些类型?

    内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展

    模块的内聚包括以下几种类型:低内聚 — 偶然内聚,逻辑内聚,时间内聚  中内聚 — 过程内聚,通信内聚; 高内聚 — 顺序内聚,功能内聚

    1. 什么是编码风格?为什么要强调编码风格?

    编码风格包括以下内容:程序内部良好的文档(注释)、数据说明、语句构造、输入输出和效率保障等。

    因为编码风格对软件的可读性、可维护性、可靠性、可用性很重要,所以要强调编码风格。

    1. 什么是软件危机?软件危机的表现是什么?其产生的原因是什么?

    软件发展的第二阶段末期,由于计算机硬件技术的进步,计算机运行速度、容量、可靠性有显著的提高,生产成本显著下降,这为计算机的广泛应用创造了条件。一些复杂的,大型的软件开发项目提出来了,但是,软件开发技术的进步一直未能满足发展的需要。在软件开发中遇到的问题找不到解决方法,使问题积累起来,形成了尖锐的矛盾,因此导致了软件危机。

    软件危机表现在以下四个方面:(钱与时间,要求,维护性,可靠性)

    • (1)经费预算经常突破,完成时间一再拖延。
    • (2)开发的软件不能满足用户要求
    • (3)开发的软件维护性差
    • (4)开发的软件可靠性差

    造成软件危机的原因:(规模和结构,管理,经费,技术,工具)

    • (1)软件的规模越来越大,结构越来越复杂
    • (2)软件开发管理困难而复杂
    • (3)软件开发的经费不断增加
    • (4)软件开发技术落后
    • (5)生产方式落后开发工具落后,生产率提高缓慢
    1. 软件生存周期包括哪些活动?

    答:软件生存周期的活动包括:可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动。

    1. 请说明 “三个模型” 的定义,以及三者之间的关系。

    功能模型是描述系统能做什么,即对系统的功能、性能、接口和界面进行定义。
    业务模型是描述系统在何时、何地、由何角色、按什么业务规则去做,以及做的步骤或流程,即对系统的操作流程进行定义。
    数据模型是描述系统工作前的数据来自何处,工作中的数据存什么地方,工作后的数据放到何处,以及这些数据之间的关联,即对系统的数据结构进行定义。
    功能模型和业务模型是在需求分析时建模,是两个基本点。数据模型是一个中心,在设计时建模。功能模型和业务模型给数据模型提供数据与维护数据,数据模型支持功能模型和业务模型的正常运行。通常,数据模型建模用 Power Designer,ER win 或 Oracle Designer 工具实现;功能模型用功能点列表(或用况图)表示;业务模型用自然语言加上流程图(或顺序图)表示。

    1. “面向对象实现” 的目标是什么?

    答:“面向对象实现” 的目标是:按照《详细设计说明书》中对数据结构、算法分析和模块实现等方面的设计说明,用面向对象的语言,将这些部件组装起来,分别实现各模块的功能,从而实现目标系统的功能、性能、接口、界面等要求。

    1. 软件工程的定义
    • (1)将系统的、规范的、可量化的方法应用于软件的开发、运行和维护的过程;
    • (2)及上述方法的研究。

    画图题

    1.已知有一段代码实现了 “输出ABC三个数中的最大值”,要求完成下列问题:

    (1)画出代码的流程图(4分)

    (2)根据该程序流程图画出该程序的流图;(4分)

    (3)计算该流图的环形复杂度;(4分)

    在这里插入图片描述
    在这里插入图片描述

    ​ (3) 环形复杂度

    ​ V(G) = 区域数 = 边数 - 节点数 + 2 = 判定点 + 1 = 4

    2.某“调整工资”处理模块接受一个“职称”的变量,根据职称的不同(助教,讲师,副教授,教授)作不同的处理,其中若是助教还必须输入工龄,只有工龄超过两年才能调整工资。请用等价类划分法设计测试用例。
    在这里插入图片描述
    在这里插入图片描述

    3.银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址 (或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码 (可选) 等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
    用数据流图描绘本系统的功能,要求绘出数据处理、数据存储、数据流和相关角色。
    在这里插入图片描述

    展开全文
  • 软件工程期末试题及答案(史上最全)

    万次阅读 多人点赞 2021-07-15 15:39:15
    软件工程期末试题及答案 1.开发瀑布模型中的软件定义时期各个阶段依次是:( B) A) 可行性研究,问题定义,需求分析。 B) 问题定义,可行性研究,需求分析。 C) 可行性研究,需求分析,问题定义。 D) 以上顺序都...
  • 软件工程--概述

    千次阅读 多人点赞 2020-11-11 21:04:38
    软件的概念及特点 概念 软件是计算机中与硬件相互依存的部分,其是程序、数据、相关文档的集合。 程序:按事先设计的功能和性能要求执行的指令序列 数据:使程序能正确处理信息的数据结构 文档:与程序开发、维护、...
  • 软件工程】简答题汇总

    万次阅读 2021-12-14 17:19:51
    软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
  • 软件工程期末大作业——《软件工程

    千次阅读 多人点赞 2021-05-30 11:01:51
    在写软件工程期末大作业过程中,emmmmm,熬夜,掉头发,visio图,word,pdf,… 大半夜三点多,大作业即将截止日期,我还在敲键盘,打字,画图(只是,忍不住吐槽一下下,宣泄劳累和疲惫;但是看完 “老婆” 的照片...
  • 软件工程导论复习知识点

    千次阅读 多人点赞 2021-06-27 16:44:02
    这是我在准备软件工程基础考试时根据考点整理的一份知识点汇总。
  • 软件工程期末复习(一小时通过考试,全是重点)

    万次阅读 多人点赞 2021-11-30 19:14:52
    第一章、软件工程概述 软件生命周期: 软件过程: 瀑布模型(文档驱动) 快速原型模型(用户需求驱动) 螺旋模型(风险驱动) 敏捷过程与极限编程 第二章、可行性研究 第三章、需求分析 第五章、总体设计 ...
  • 软件工程导论题型大总结】画图题总结

    千次阅读 多人点赞 2022-03-10 13:44:12
    文章目录一:概要(各章图形及对应符号)(1)传统软件工程部分A:可行性研究①:系统流程图②:数据流图(DFD)③:数据字典②:需求分析③:总体设计④:详细设计(2)面向对象部分二:着重考察画法的图(1)数据...
  • 软件工程复试面试问题总结(一)

    千次阅读 2022-03-14 15:35:56
    极限编程(简称XP)是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。 “Extreme”(极限)是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想...
  • 软件工程大题题库

    千次阅读 2021-01-05 11:29:36
    文章目录第一章 软件工程概述1 软件的特点2 计算机软件与硬件相比有什么特点3 为什么说软件工程的发展在一定程度上解决了软件危机的各种弊端?4 简述软件工程的基本原则5. 软件工程的研究内容6. 软件工程的三要素7. ...
  • 软件工程知识点总结

    千次阅读 2021-11-16 18:20:04
    1.软件的本质 1.1 软件是什么: 软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序操作的文档 1.2 软件的特点 软件是设计开发的,而不是传统意义上生产制造的 软件不会“磨损” 虽然整个工业...
  • 高级软件工程习题

    万次阅读 2020-12-10 14:23:50
    (8) 软件工程过程 软件工程过程关注软件过程的定义、实现、评估、测量、管理、变更、改进,以及过程和产品的度量。 (9) 软件工程工具和方法 软件工具分为:需求工具、设计工具、构造工具、测试工具、维护工具、...
  • 软件工程的经典书籍有哪些?

    千次阅读 2021-09-23 14:52:55
    小编推荐几本软件工程方向的几本经典书。 1、解构领域驱动设计 本书全面阐释了领域驱动设计(domain-driven design,DDD)的知识体系,内容覆盖领域驱动设计的主要模式与主流方法,并在此基础上提出“领域驱动...
  • 软件工程毕业论文答辩PPT模板

    千次下载 热门讨论 2013-05-30 16:32:18
    软件工程答辩PPT模板,使用所有软件工程相关专业
  • 软件工程之知识架构

    千次阅读 2021-11-16 10:38:51
    文章目录软件工程知识架构全景图软件工程的知识结构如何学习软件工程?学习软件工程参考书目 软件工程知识架构全景图 由图可见,“质量焦点”在最底层,这不难理解软件工程是为了应对软件危机诞生的学科,其目标...
  • 1.下面哪项不属于软件工程方法学的要素(B) A、方法 B、模型 C、工具 D、过程 (知识点)软件工程三要素:方法、工具、过程 2.面向对象方法学具有(D)个要点。 A、1 B、2 C、3 D、4 (知识点)面向对象要点:对象...
  • 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 本章目录: 系列索引:《软件工程与实践》第三版 软件工程课程知识梳理 本章目录: 本章重难点: 1.1 软件工程的发展 1.1.1 软件危机概述 1.1.2 ...
  • 软件工程导论--软件工程概述

    万次阅读 多人点赞 2019-09-26 17:41:23
    1 软件软件危机 1.1 软件的特性 软件是一种逻辑实体,而非具体的物理...  软件产品一般分为两类:通用软件产品(如数据库软件、文字处理软件、绘图软件工程管理工具…)和定制软件产品(如电子设备的控制软...
  • 软件工程经典教程之[1]软件工程概述PPT

    千次下载 热门讨论 2014-10-13 22:30:15
    1.0 计算机基础 1.1 软件的概念 1.2 软件危机 1.3 软件工程 1.4 软件生命周期 1.5 软件开发过程模型 1.6 软件开发方法简述
  • 软件工程发展史

    千次阅读 2021-03-05 16:30:01
    2010年-2020年软件工程发展史世界软件工程发展史引言:特点:1、全球化:2、模块化:3、开发化:软件工程的新发展:中国软件工程发展史引言:发展现状:成绩:问题:发展趋势: 世界软件工程发展史 引言: 软件工程...
  • 软件工程》知识点复习总结

    千次阅读 多人点赞 2021-06-25 11:24:02
    一、软件及软件工程 1. 软件的本质 计算机软件 指计算机系统中的程序、数据及其相关文档 三要素: 程序:按照特定顺序组织的计算机数据和指令的集合。 数据:使程序能正常执行的数据结构 文档:为了便于理解程序所需...
  • 软件工程-软件测试

    千次阅读 2021-10-06 20:34:46
    概念 由于软件开发的各个阶段均包含了大量的人的创造性劳动,不可避免地会引入错误,尤其是大型、复杂的软件系统。 软件测试是在软件投入运行之前,对软件的需求分析、设计规格说明和编码的最后复审。 原则 软件测试...
  • 软件工程——理论与实践(第二版)课后习题整理

    千次阅读 多人点赞 2021-11-23 17:30:08
    A.20 世纪50年代提出了软件工程的概念 B.20世纪60年代提出了软件工程的概念 C.20 世纪70年代出现了客户机/服务器技术 D.20 世纪80年代软件工程学科达到成熟 (2)软件危机的主要原因是( D)。 A.软件工具落后 B.软件...
  • 软件工程简答题

    万次阅读 2022-01-09 10:35:28
    1. 什么是软件工程软件工程的目标是什么? 答:软件工程是①将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件开发和管理之中,②对①中所选方法的研究。 目标: 1 合理...
  • 软件工程实验报告:图书管理系统

    万次阅读 多人点赞 2021-03-02 16:23:19
    软件工程课程设计是学习软件工程课程后所进行的实践环节,目的是培养学生用工程化的思想和标准文档化的思想进行软件开发。本次课程设计通过开发一个小型实用的软件系统,亲身体验软件生命周期中的各个环节,以加深对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,137,152
精华内容 454,860
关键字:

软件工程

友情链接: pythonAI五子棋.rar