软件工程期末资料
第一章
1.软件是计算机系统中与硬件相互依存的另一部分,软件包括程序、数据及其相关文档的完整集合。程序:按事先设计的功能和性能要求执行的指令序列。数据:是程序能够正确地处理信息的数据结构;文档:与程序开发、维护和使用有关的图文资料。
2.软件的分类,系统软件(操作系统,数据库管理系统,设备驱动程序,通信和网络处理程序)应用软件(商业数据处理软件,工程与科学计算软件,计算机辅助设计/制造软件,人工智能,CAD,系统仿真)支撑软件(设计分析编码)可复用软件。
3.软件工程是开发运行维护和修复软件的系统方法(IEEE)
4.软件工程是应用计算机科学理论和技术异界工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义开发发布维护的工程或进行研究的学科。
5.运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要在较短的周期、较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产。
6.软件质量衡量标准:功能性、可靠性、可使用行、效率、可维护性和可移植性。 软件生存期大体可分为如下几个阶段:软件定义,软件开发,运行维护。
7.软件生存期模型:是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。
8.区分瀑布模型、原型模型、增量模型、螺旋模型等
9.统一过程的四个阶段:初始、细化、构造、移交
第二章
1.软件工程的三要素:方法、工具和过程方法:为建造软件提供的技术上的解决方法。包括沟通、需求分析、设计建模、编程、测试和支持。工具:为方法的运行提供自动的或半自动的软件支撑环境。如CASE。过程:为了额获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
2.软件开发的三种方法;传统开发方法,面向对象开发方法,形式化开发方法
第三章
1.需求获取的任务,以深入浅出,流程为主线原则:1发现和分析问题,并分析问题的原因/结果关系2与用户进行各种方式的交流,并使用调用研究方法收集信息3按照三个成分即数据、过程和接口观察问题的不同侧面4将获取的需求文档化、形式有用例、决策表、决策树等
2.获取需求的途径:1与用户进行交流2现有产品或竞争产品的描述文档3系统需求规格说明4当前系统的问题报告和改进要求5市场调查和用户问卷调查6观察用户如何工作
3.软件需求分析阶段的任务:需求获。取需求分析。需求定义。需求验证。
4.结构化分析模型以数据字典为核心。数据流图DFD,描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换功能,用于功能建模;实体关系图ER描述数据对象和他们之间的关系,用于数据建模;状态迁移图STD用于描述系统对胃部时间如何响应动作,用于行为建模。
5.加工规格说明:决策树,决策表
第四章
软件设计的原则:1分而治之,模块化:将整个软件划分为独立命名且可以独立访问的模块,不同的模块通常具有不同的功能或职责。每个模块可独立地开发、测试、最后组装成完整的软件。2模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而与软件系统中其他模块的接口是简单的。模块间的耦合:模块之间的紧密程度。 内聚:模块内部各个元素之间的紧密程度。“低耦合,高内聚”3提高抽象层次、抽象:抽取共性,忽略事物的细部特征4复用性设计。复用是指同一事物不做修改或稍作修改就可以多次重复使
用。尽量使用已有的构件(包括开发环境提供的及以往开发类似的系统时创建的);如果确实需要创建新的构件,则在设计时考虑应该考虑将来的可复用使用性5灵活性设计。保证软件灵活性设计的关键是抽象。 耦合的分类:数据耦合(参数耦合),控制耦合,外部耦合(共用耦合),内容耦合 伪代码,流程图,盒图间的转换。(区分控制流图)
第五章
1.程序设计语言的性能,软件工程学的观点,性能要求:1详细设计应能直接容易地翻译成代码程序2源程序应具有可移植性3编译程序应具有较高的效率4尽可能地应用代码生成的自动工具5可维护性
2.科学与工程计算领域(FORTRAN,C,C++)商业领域(COBOL,JAVA,SQl)系统程序设计和实时应用(Ada,C++)人工智能(Lisp,Prolog)
3.伪代码与可执行程序间的转换
第六章
1.软件测试是根据软件开发各个阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。
2.设计测试的目的是想以最少的时间和人力系统地找出程序的各种错误和缺陷。
3.测试:1测试是程序的执行过程,其目的是在于发现错误;2一个好的测试用例在于能发现至今尚未发现的错误;3一个成功的测试是发现了至今尚未发现的错误的测试
4.测试的原则:1应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。2测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。3程序应避免检查自己的程序。4在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。5充分注意测试中的群集现象。6严格执行测试计划,排除测试的随意性。7应当对每一个测试结果作全面检查。8妥善保存测试计划,测试用例,出错统计和最终分析报告,为未来实施的维护提供方便。
5.黑盒测试:已知产品的功能设计规格,可以通过测试证明每个实现了的功能是否符合要求。 等价类划分,边界值分析。
6.白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。 逻辑覆盖。基本路径测试:绘制程序控制流图,复杂性计算=E-N+2 黑盒测试 白盒测试 优点 ①适用于各阶段测试 ②从产品功能角度测试 ③容易入手生成测试数 据 ①可构成测试数据使特定程 序部分得到测试 ②有一定的充分性度量手段 ③可或较多工具支持 缺点 ①某些代码得不到测试 ②如果规格说明有误,则无法发现③不易进行充分性测试 ①不易生成测试数据(通常) ②无法对未实现规格说明的部分进行测试 ③工作量大,通常只用于单元测试,有应用局限 性质 是一种确认技术,回答“我们 在构造一个正确 的系统吗” 是一种验证技术,回答“我们在正 确地构造一个系统吗?”
7.软件测试的策略:单元测试(模块接口,路径,边界,错误处理),组装测试(一次性,增殖性)确认测试(α和β)系统测试(区分功能,回归,可靠性,强度,性能的不同)
8.人工测试:桌面检查、代码评审、走查
9.有一种观点认为,软件测试的目的是在于证明开发出得软件没有缺陷。这种观点能够接受吗?为什么?答:观点不正确,不能够接受。软件测试的目的是发现软件错误而非证明软件正确。软件测试只能说明软件中存在错误。通过软件测试的能够说明软件的功能和性能与需求说明相符合,此外实施测试收集到的测试结果数据为可靠性分析提供了依据,但不能证明软件没有缺陷。
10.比较α测试与β测试,说明其异同.α测试是由用户在开发环境下进行的测试,也可以是公司内部的用户在模拟的实际操作环境下进行的测试. α测试的目的是评价软件产品的FLURSH(即功能、局域化、可使用性、可靠性、性能和支持),其尤其注重产品的界面和特色。β测试:是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者不在测试现场。 β测试主要衡量产品的FLURPS,着重产品的支持性、包括文档、客户培训和支持产品生产能力。
第七章
1.UML:事物(结构(类接口协作用例主动类构件节点),行为(交互,状态机)分组(注解)注释(注解))关系(以来,泛化,关联,实现)图(类用例交互状态活动实现)
2.UML中有哪几种图?每种图的作用是什么?UML定义了6种类型的图:用例图、类图、交互图、状态图、活动图和实现图。用例图描述的是参与者所理解的系统功能。用例图用于需求分析阶段。类图表示了类(及其接口)、类的内部结构以及与其他类的联系。交互图是为用例、用例组或局部用例开发的。有顺序图和协作图。状态图描述一个特定对象的所有可能的状态以及引起状态转换的事件。活动图用来描述交互的方式,它描述采取何种动作,动作的结果是什么(动作状态改变),何时发生(动作序列),以及在何处发生(泳道)。实现图分为构件图和部署图。构件图:描述软件构件及构件之间的依赖关系,显示代码的静态结构。部署图:描述处理器、设备和连接,它显示系统硬件的物理拓扑结构及在此结构上执行的第八章第八章第八章第八章 1.面向对象分析需要建立的
3个模型是什么?三个模型为:功能模型(用例模型)、交互模型(动态模型)和对象模型(静态模型) 。功能模型指明了系统应该“做什么”;由用例图和场景描述表示。交互模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;由状态图和顺序图表示。静态模型则定义了做事情的实体。用类图和对象图表示。 2.复杂问题对象模型应该由下述5个层次组成:主题层(范畴层).类-对象层.结构层.属性层.服务层 3.区分实体类、边界类、控制类
4.在UML中动态模型的描述工具有顺序图、协作图和状态图。
第九章
1.软件系统中,模式分类:1体系结构模式。体系结构模式表达了软件系统的基本结构组织形式或者解决方案,包括了一组预定义的子系统,规定了这些子系统的责任,同时还提供了用于组织和管理这些子系统的规则和向导。2设计模式。设计模式为软件系统的子系统、构件或者构件之间的关系提供了一个精炼的解决方案,描述了在特定的环境下,用于解决通用软件设计问题的构件以及这些构件相互通信时的各种结构。3惯用法。惯用法是与编程语言相关的低级模式,描述如何实现构件的某些功能,或者利用编程语言的特性来实现构件内部要素之间的通信功能。
2.典型的体系结构风格:数据流风格.调用返回风格.仓库风格
第十章
1.面向对象设计的准则1模块化2.抽象3.信息隐藏4.弱耦合5.强内聚6.重用性
2.典型的面向对象设计模型在逻辑上由哪些部分组成?对每一部分进行设计时所包含的主要内容是什么?典型的面向对象设计模型在逻辑上由:问题域部分、人机交互部分、任务管理部分、数据管理部分组成。(1)问题域部分,设计构造一组为底层应用建立模型的类和对象,细化分析结果;(2)人机交互部分,设计一组有关类接口视图的用户模型的类和对象,设计用户界面;(3)任务管理部分,确定系统资源的分配,设计用于系统中类的行为控制的对象/类;(4)数据管理部分,确定持久对象的存储,将对象转换成数据库记录或表格;
3.优化对象设计模型:1增加冗余关联以提高访问率2调整查询次序3保留派生属性
第十一章
1.软件维护包含哪些类型?这些类型的维护是什么情况下实施的?其中哪一类型的实施工作量最大?软件维护类型有:改正性维护、适应性维护、完善性维护、预防性维护。1改正性维护:运行过程中发现错误时。2适应性维护:环境发生变化时。3完善性维护:在使用软件的过程中,用户往往提出增加新功能或修改已有功能的建议,或提出一般性的改进意见时。4预防性维护:为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础时。其中完善性维护的实施工作量最大。
2.什么是程序修改的副作用?如何控制程序修改的副作用?程序修改的副作用:因修改软件而造成的错误或其他不希望发生的情况。包含修改代码,修改数据,修改文档的副作用 控制程序修改的副作用:按模块把修改分组;自顶向下地安排被修改模块的顺序;每次修改一个模块对于每个修改了的模块,在安排修改下一个模块之前,要确定这个修改的副作用。
3.软件维护性:当对软件实施各种类型的维护而进行修改时,软件产品可被修改的能力。
4.软件的可维护性定义:维护人员理解、改正、改动或改进这个软件的难易程度。
第十二章
1.提高软件产品质量和软件项目生产率的主要因素:人员、技术与设备、过程。 过程要素:(1)输入:过程客体的初始状态或初始条件。(2)输出:过程客体的最终状态或过程结果。(3)活动或进一步被分解的任务或作业,常常是一组活动或相关任务。(4)资源:过程活动所需的支持条件。如人员、设备设施、技术及相关的耗费。(5)测量与验证:实施测量与验证是为了使过程的上述的4个要素符合要求。(6)过程目标:过程的活动应以增值为目标,也只有明确了过程活动的目标,才能使过程活动室有意义的。
2.软件过程成熟度的定义?软件过程成熟度(software process maturity):一个特定软件过程得到清晰的定义、管理、测量、控制以及有效的程度。
3.CMMI分级表示和连续表示
第十三章
1.软件项目管理涉及的几个方面:人员(people)产品(product)过程(process)项目(project 2.软件开发成本估算 专家判定– Delphi方法 COCOMO模型 3.软件风险:在软件工程过程中可能出现的那些影响软件目标实现或是可能造成重大损失的事件称为软件风险。 4.策略:回避风险;转移风险;承受风险 5.风险评估:风险识别;风险分析;风险排序 6.风险控制:风险管理策划;风险化解;风险监控