级爱恩学院软件工程期末复习知识点小结andy cao.docx
- 文档编号:8703688
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:646.53KB
级爱恩学院软件工程期末复习知识点小结andy cao.docx
《级爱恩学院软件工程期末复习知识点小结andy cao.docx》由会员分享,可在线阅读,更多相关《级爱恩学院软件工程期末复习知识点小结andy cao.docx(22页珍藏版)》请在冰豆网上搜索。
级爱恩学院软件工程期末复习知识点小结andycao
第一部分:
选择题知识点小结
1,软件,软件危机,软件工程的定义
P3软件是依附在硬件上面的程序、数据和文档的集合,是指挥控制计算机系统(包括硬件和软件)工作的神经中枢。
通常,软件有以下定义:
软件=程序+数据+文档
软件文档分为开发文档和管理文档两大类。
开发文档主要由项目组书写,用于指导软件开发与维护;管理文档主要由软件工程管理部门书写,用于指导软件管理和决策。
软件工程规定:
文档必须指挥程序,而决不允许程序指挥文档;文档与程序必须保持高度一致,而决不允许程序脱离开文档。
P4软件工程来源于软件危机,即先有软件危机,后有软件工程。
所谓软件危机,就是在软件开发和维护过程中所遇到一系列难以控制的问题,包括软件开发的成本增大、进度延期、维护困难和质量得不到保障。
软件工程是研究软件开发和软件管理的一门工程学科。
这里,一是强调开发,二是强调管理,三是强调工程,四是强调学科。
2,可行性研究目的及几个方面:
P53
可行性分析是立项的前提,立项是可行性分析的后果。
立项和合同的区别:
立项有两个分析1.投资2.经济效应;合同只有一个分析经济分析。
3,画分层DFD图的基本原则P128
数据守恒 所谓数据守恒是指加工的输入输出数据流是否匹配,即每一个加工既有输入数据流又有输出数据流。
或者说一个加工至少有一个输入数据流,一个输出数据流。
加工分解的原则 自然性:
概念上合理、清晰;
均匀性:
理想的分解是将一个问题分解成大小均匀的几个部分;
分解度:
一般每一个加工每次分解最多不要超过7个子加工,分解应分解到基本加工为止。
子图与父图的“平衡” 父图中某个加工的输入输出数据流应该同相应的子图的输入输出相同(相对应),分层数据流图的这种特点称为子图与父图“平衡”。
合理使用文件当文件作为某些加工之间的交界面时,文件必须画出来,一旦文件作为数据流图中的一个独立成份画出来了,那么他同其他成份之间的联系也应同时表达出来。
画分层DFD图的方法:
“先全局后局部,先整体后细节,先抽象后具体”
通常可将这种分层的DFD图,分为顶层、中间层、底层。
具体步骤:
1。
先确定系统范围,画出顶层的DFD图。
2。
逐层分解顶层DFD图,获得若干中间层DFD图。
3。
画出底层的DFD图。
顶层图说明了系统的边界,即系统的输入和输出数据流,顶层图只有一张。
底层图由一些不能再分解的加工组成,这些加工都已足够简单,称为基本加工。
在顶层和底层之间的是中间层。
中间层的数据流图描述了某个加工的分解,而它的组成部分又要进一步分解。
画各层DFD图时,“由外向内”。
4,软件设计原理p121
1)设计方法概论:
软件设计的输入是《需求规格说明书》,输出是《概要设计说明书》和《详细设计说明书》。
概要设计:
概要设计,一是要覆盖《需求规格说明书》的全部内容,二是要作为指导详细设计的依据。
概要设计注重于宏观上和框架上的设计,它是软件系统的总体结构设计、全局数据库(包括数据结构)设计、外部接口设计、功能部件分配设计、部件之间的接口设计。
概要设计又称为架构设计。
详细设计,一是要覆盖《概要设计说明书》的全部内容,二是要作为指导程序设计的依据。
详细设计注重于微观上和框架内的设计,它是各子系统的公用部件实现设计、专用模块实现设计、存储过程实现设计、触发器实现设计、外部接口实现设计、部门角色授权设计、其他详细设计等。
在设计之前要确定命名规范。
包括系统命名规范,模块命名规范,构件命名规范,变量命名规范,以及表名、字段名、索引名、视图名、存储过程名的命名规范等。
软件设计时,一方面要善于将需求规格说明书中的冗余去掉,将公用功能提炼出来,并将它设计为构件,标准化后加入到公司构件库中。
另一方面,还要尽量调用公司构件库中已有的构件。
按照“五个面向理论”,概要设计主要方法是面向数据,详细设计和程序设计主要方法是面向对象。
所有的详细设计都是面向模块(部件/构件)的,不是面向组织结构或部门单位的。
一个组织或单位,根据角色的不同授权,可以挂上不同的模块或部件。
2)软件设计原理
原理1:
抽象
(1)控制抽象:
面向过程设计,通过控制抽象(控制流程和接口),对软件进行分解,达到降低软件复杂度的目的。
面向对象设计,通过数据抽象和控制抽象,实现使数据和控制溶为一体,构成一个完整的对象。
(2)过程抽象:
将数据处理抽象成函数或方法,获得最终的执行结果,而不必去关心它们的内部实现细节。
(3)数据抽象:
在数据库建模和面向对象建模时,使用数据抽象,设计出数据库的表及字段,或设计出类及类的属性。
原理2:
分解
(1)在架构设计中,将软件系统分解为子系统和模块;
(2)在详细设计中,将子系统和模块分解成类和接口。
原理3:
低耦合高内聚
原理4:
封装:
封装是将信息隐藏在一个实体中,使其内部细节对外部不可见。
封装是实现“低耦合高内聚”的技术手段之一。
要进行正确的封装,必须遵守下列原则:
(1).实体间相互隐藏内部实现;
(2).尽量减少全局的共享数据。
原理5:
接口和实现分离
3)详细设计的任务与步骤1.基本任务:
回答的关键问题:
“怎样具体地实现这个系统”。
主要任务是设计出程序的“蓝图”,供程序员日后根据这个蓝图编写出实际的程序代码。
2.基本步骤a.确定模块如何实现b.编写详细设计说明书c.制定单元测试计划d.评审详细设计
4)面向对象详细设计
软件系统的架构设计完成后,利用UML的描述工具:
类图、顺序图、状态图、部件图、部署图,分别将架构中的部件(组件/构件)进行实现设计,直到可以编程为止;在实现设计中,对类的属性定义、类的方法算法、接口说明、接口实现、类之间的关系、对象与消息之间的关系、实体之间的状态转换,均要详细说清楚。
5,耦合性和内聚性p123
模块的独立程度的两个标准:
(内聚和耦合)。
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。
内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要。
1).耦合(衡量不同模块间互相依赖的程度)
耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度。
(下面顺序是弱到强)
(1)非直接耦合
(2)数据耦合(或参数传递耦合),属于低级别耦合。
例如,模块间通过参数传递或数据结构来访问(3)标记耦合(4)控制耦合,属于中级别耦合。
例如,操作系统中的进程调度程序,通过就绪进程的优生级来调度。
那么调度程序与进程之间的耦合,就是控制耦合。
(5)外部耦合(或共用耦合),它属于高级别耦合。
例如,模块间共享全局变量,或共同访问全局数据区中的数据项,就是共用耦合。
(6)当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合;(7)内容耦合,它属于最高级别耦合。
例如,一个模块利用分支或跳转技术,转入到另一个模块中去执行,就是内容耦合。
耦合可发生在软件设计、软件编程之中。
2)内聚性.内聚(标志一个模块内各个元素彼此结合的紧密程度)
内聚有如下7类(下面顺序是弱到强):
(1)如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。
(2)逻辑内聚(3)如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。
(4)过程内聚(5)通信内聚(6)信息内聚(7)如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
功能内聚是最高程度的内聚。
6,软件需求分析的目的,重点,任务以及工具p56
7,软件维护的定义,分类以及可维护性的四条性质p179
所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
其基本任务是保证软件在一个相当长的时期能够正常运行。
用于维护工作的劳动可以分成生产性活动(例如,分析评价,修改设计和编写程序代码等)和非生产性活动(例如,理解程序代码的功能,解释数据结构、接口特点和性能限度等)。
(1)在程序使用期间,用户必然会发现程序错误,把诊断和改正错误的维护称为改正性维护。
(2)为了和变化了的环境适当地配合而进行的修改软件的活动,是适应性维护。
(3)在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,称为完善性维护。
(4)为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时,称为预防性维护(例如千年虫)。
与软件维护有关的绝大多数问题,都可归因于软件定义和软件开发的方法有缺点。
下面列出和软件维护有关的部分问题:
(1)理解别人写的程序通常非常困难。
(2)需要维护的软件往往没有合格的文档,或者文档资料显著不足。
(3)当要求对软件进行维护时,往往原来写程序的人已经不在附近了。
(4)绝大多数软件在设计时没有考虑将来的修改。
(5)软件维护不是一项吸引人的工作。
形成这种观念很大程度上是因为维护工作经常遭受挫折。
维护是软件生命周期的最后一个阶段,也是持续时间最长代价最大的一个阶段。
软件工程学的主要目的就是提高软件的可维护性,降低维护的代价。
可以把软件的可维护性定性地定义为:
维护人员理解、改正、改动或改进这个软件的难易程度。
在前面的章节中曾经多次强调,提高可维护性是支配软件工程方法学所有步骤的关键目标。
决定软件可维护性的因素主要有下述5个:
1.可理解性2.可测试性3.可修改性4.可移植性5.可重用性软件生命周期每个阶段的工作都和软件可维护性有密切关系。
因此,在软件生命周期的每个阶段都必须充分考虑维护问题。
8,软件生命周期的定义以及几种模型的优缺点p33
软件的生存周期与选择的开发模型有关,不同的开发模型,对应不同的生存周期。
常用的4种软件开发模型:
瀑布模型、增量模型、迭代模型和原型模型,以及开发模型。
特点
选择条件
优缺点
瀑布模型
(文档驱动的模型)
阶段间具有顺序性和依赖性
质量保证的观点
不是任何软件都可以采用瀑布模型的,选择瀑布模型,必须满足下列条件:
(1)在开发时间内需求没有变化或很少变化。
(2)分析设计人员对该应用领域很熟悉,包括对目标、环境很熟悉。
(3)用户使用环境很稳定。
(4)用户除提出需求以外,不参与开发。
瀑布模型有许多优点:
(1)可强迫开发人员采用规范的方法(例如,结构化技术);
(2)严格地规定了每个阶段必须提交的文档;
(3)要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
模型的缺点:
可维护性差,表现在
(1)由于逆转性很差,所以返工会造成重大损失。
(2)由于文档驱动,错误的传递,会采取发散扩大的方式。
增量模型
(任务或功能模块驱动)
(1)任务或功能模块驱动,可以分阶段提交产品;
(2)有多个任务单,这些多个任务单的集合,构成项目的一个总任务书(总用户需求报告)。
选择模型的条件:
(1)在开发过程中,客户接受分阶段交付。
(2)开发人员对应用领域不熟悉,难以一步到位。
(3)工期过紧的中等或高风险项目。
(4)用户可参与到整个软件开发过程中。
模型的缺点:
---若软件系统的组装和拆卸性不强,
---或开发人员全局把握水平不高(没有数据库设计专家进行系统集成),
都不宜采用这种模型。
原型模型
(原型驱动)
模型的缺点:
因为事先有一个展示性的产品原型,所以在一定程度上,不利于开发人员的创新。
9,几种软件工程方法的定义,优缺点以及地位p11
软件工程中软件开发方法的集合,称为软件工程方法论。
1)面向过程方法:
习惯上称为传统软件工程开发方法,或结构化方法,来自于面向过程的程序设计语言,如汇编语言、C语言。
面向过程方法包括面向过程需求分析、面向过程设计、面向过程编程、面向过程测试、面向过程维护、面向过程管理。
也可以说,它包括结构化分析、结构化设计、结构化编程、结构化测试、结构化维护。
面向过程的方法,有时又称面向功能的方法,即面向功能分析、面向功能设计、面向功能编程、面向功能测试、面向功能维护。
由此可见,面向过程方法、面向功能方法、结构化方法,三者是同一个意思。
面向过程方法,设计时强调模块化的思想,采用“自顶向下,逐步求精”的技术对系统进行划分,分解和抽象是它的两个基本手段。
面向过程方法编程时采用单入口单出口的控制结构,并且只包含顺序、选择和循环三种结构,目标之一是使程序的控制流程线性化,即程序的动态执行顺序符合静态书写结构。
▪面向过程方法的优点是:
以处理流程为基础,简单实用。
▪面向过程方法的缺点是:
只注重过程化信息,因而忽略信息的层面关系以及相互联系。
它企图使用简单的时序过程方法(顺序、分支、循环三种结构),来描述关系复杂(随机)的信息世界,因而对于关系复杂的信息系统来说,其描述能力不强,最后可能导致软件设计、开发和维护陷入困难。
2)面向对象方法:
称为现代软件工程开发方法。
该方法包括面向对象需求分析、面向对象设计、面向对象编程、面向对象测试、面向对象维护、面向对象管理。
面向对象方法是一种运用对象、类、消息传递、继承、封装、聚合、多态性等概念来构造软件系统的软件开发方法。
面向对象方法的特点是将现实世界的事物(问题域)直接映射到对象。
分析设计时由对象抽象出类(Class),程序运行时由类还原到对象(Object)。
面向对象方法,来源于二十世纪八十代年开始流行的面向对象的程序设计语言,例如Java,C++等。
面向对象方法的基本特点是:
将对象的属性和方法封装起来,形成信息系统的基本执行单位,再利用对象的继承特征,由基本执行单位派生出其他执行单位,从而产生许多新的对象。
众多的离散对象通过事件或消息连接起来,就形成了软件系统。
业界流传的面向方面的方法、面向主体的方法和面向架构的方法,都是面向对象方法的具体应用案例。
▪面向对象方法的优点是:
能描述无穷的信息世界,同时易于维护。
▪面向对象方法的缺点是:
对于习惯于面向过程方法的人,他们较难掌握。
3)面向元数据方法,就是在软件需求分析、设计、实现、测试、维护过程中,均以元数据为中心的软件工程方法。
元数据(meta-data)是关于数据的数据,组织数据的数据,管理数据的数据。
这里的元数据,是泛指一切组织数据的数据,例如类的名称、属性和方法,实体的名称、属性和关联,数据库中的表名、字段名、主键、外键、索引、视图,数据结构中存储数据的框架等等。
▪面向元数据方法的优点是:
通俗易懂,特别适合信息系统中数据层上的设计与实现。
▪面向元数据方法的缺点是:
只能实现二维表格,不能实现窗口界面。
4)形式化方法
10.P13“五个面向”实践论是指“面向流程分析、面向元数据设计、面向对象实现、面向功能测试、面向过程管理”。
“五个面向”实践论,它综合了软件工程方法论中各种开发方法的优点,去掉了各种开发方法的缺点,它是人们在软件开发实践中经验的结晶,是软件工程方法论在软件工程实践中的具体运用。
▪因为类的实例化就是对象,所以面向对象实现,实质上是面向类实现。
▪面向对象方法的软件分析师与程序员时刻要牢记:
分析设计时由对象抽象出类,程序运行时由类还原到对象。
▪面向功能测试的方法就是黑盒子测试方法。
11总体设计经验规则
1.改进软件结构提高模块独立性
2.模块规模应该适中
3.深度、宽度、扇出和扇入都应适当
4.模块的作用域应该在控制域之内
5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7.模块功能应该可以预测
总体设计过程通常由两个主要阶段组成:
(1)系统设计阶段,确定系统的具体实现方案;
Ø设想供选择的方案
Ø选取合理的方案
Ø推荐最佳方案
(2)结构设计阶段,确定软件结构。
Ø功能分解
Ø设计软件结构
Ø设计数据结构
第二部分:
数字字典
建立数据字典是为了对数据流程图上各个元素作出详细的定义和说明。
数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行描述,从而形成一个完整的说明。
数据字典的内容包括以下六个方面:
数据项,数据结构,数据流,数据存储,处理逻辑和外部实体。
●数据项又称数据元素,是数据的最小单位。
在数据库中数据项指数据表中每条记录的每个字段。
描述不可再分解的数据单位,包括:
编号。
名称。
简述。
数据类型。
长度(精度)。
取值范围及缺省值。
计量单位
●数据结构数据结构的描述重点是数据之间的组合关系,即说明这个数据结构包括哪些成份;
一个数据结构可以包括若干个数据元素或(和)数据结构;
三种特殊的数据成分:
任选项:
可有也可以没有;必选项:
必须有;重复项:
多次出项的数据项。
●数据流通过数据流的来源、去处、组成等属性说明。
给出DFD中某个数据流的定义,通常包括:
数据流标数据流来源数据流去向数据流的数据组成流动属性描述:
频率、数据量
●数据存储只描述数据的逻辑存储结构。
给出DFD中某个数据存储的定义,通常包括:
数据存储名字数据存储描述数据存储组成数据存储方式关键码存取频率和数据量安全性要求(用户存取权限)
●处理逻辑仅定义对数据流程中最底层处理逻辑加以说明。
处理类条目即数据处理描述,也称为小说明。
描述实现处理的策略而不是实现处理的细节。
小说明可认为是DD的组成部分。
也可在DD中定义只说明每个处理的组成(每个处理分解成多少小处理),而在小说明中详细描述它的处理逻辑。
处理条目描述的内容:
处理逻辑(简述)描述基本处理如何把输入数据流变化为输出数据流的处理步骤,不涉及具体处理方法。
执行条件输入输出优先级执行频率出错处理对策
●外部实体外部实体编号、名称、简述及有关数据流的输入与输出。
应用举例
(1)
某订货系统功能说明如下:
假设某一企业采购部门每天需要一张订货报表,报表按材料编号排序,报表中列出所有需要再次订货的材料。
对于每种需要再次订货的材料应列出下列数据:
材料编号、名称、订货数量、目前价格(或参考价格)、主要供应单位、第二供应单位等。
材料入库或出库称为事务,通过放在仓库的CRT终端把事务报告给订货系统。
当某种材料的库存数量少于库存量临界值时就应该再次订货。
1.约定的描述方法
定义式中使用的符号:
操作符含义描述限制重复次数:
=定义为
+与(顺序结构)
{...}重复(循环结构)
〔..|..〕或(选择结构)
(...)任选
m..n界域
例1,北京某高校可用的电话号码由以下几类:
校内电话号码由4位数字组成,第1位数字不是零;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0),
请用定义数据字典的方法,定义上述的电话号码。
电话号码=[校内电话号码|校外电话号码]校内电话号码=非零数字+3位数字//后面继续定义
校外电话号码=[本市号码|外地号码]本市号码=数字零+8位数字
外地号码=数字零+3位数字+8位数字非零数字=[1|2|3|4|5|6|7|8|9]
数字零=03位数字=3{数字}3//3至3个数字
8位数字=非零数字+7位数字7位数字=7{数字}7
数字=[0|1|2|3|4|5|6|7|8|9]
练习:
某旅馆的电话服务如下:
可以拨分机号和外线号码。
分机号是从7201至7299。
外线号码先拨9,然后是市话号码或长话号码。
长话号码是以区号和市话号码组成。
区号是从100到300中任意的数字串。
市话号码是以局号和分局号组成。
局号可以是455,466,888,552中任意一个号码。
分局号是任意长度为4的数字串。
要求:
写出在数据字典中电话号码的数据条目的定义(即组成)。
第三部分:
三种表达工具的比较表达处理逻辑的工具
1)表达处理逻辑的工具
如果对处理功能的说明采用自然语言来描述,则常常会出现许多意义不明确的现象:
(1)界限不明确。
(2)逻辑条件的次序不明确。
(3)意义模糊的形容词或副词。
采用适当的表达工具来描述数据流程图中的处理功能;一般采用结构式语言、判断树和判断表三种工具。
结构式语言:
结构式语言是一种介于自然语言和程序设计语言之间的一种语言,它采用了结构化程序设计思想,只使用三种基本的逻辑结构:
顺序结构、判断结构和循环结构。
结构式语言使用的语句只允许有以下三类:
(1)简单的祈使句。
(2)判断句(3)循环语句
2)三种表达工具的比较
(1)从工具的难易程度讲,决策树最容易,而决策表难度较高。
(2)对于逻辑验证,决策表最好,而决策树较差。
(3)对于直观表达逻辑结构,决策树最好,而决策表最差。
(4)作为程序设计说明,结构化语言最好,决策树最差。
(5)对于机器可读性,结构化语言最好,决策树最差。
(6)对于可修改性,结构化语言最好,而决策表的可修改性是最低。
综上所述,可以得出的结论:
对于一个不太复杂的判断逻辑即条件只有2-3个,条件组合及行动在10-15个之间,使用决策树最好。
对于一个复杂的判断逻辑(条件多,组合多,相应的动作也多),使用决策表最好。
对于一个处理逻辑既包含了一般的顺序执行动作,又包含了判断或循环逻辑,则使用结构化语言最好。
判定表:
描述多条件、多目标动作的形式化工具判定表结构:
条件组合
操作执行
例题:
某单位对一部分职工重新分配工作,分配原则是:
“如果年龄不满18岁,文化程度是小学,则脱产学习;文化程度是中学,则当电工。
如果年龄满18岁但不满40岁,文化程度是小学或中学,若是男性,则当钳工;若是女性,则当车工;文化程度是大学,则当技术员。
如果年龄满40岁及其以上,文化程度是小学或中学,则当材料员;文化程度是大学,则当技术员。
”
第四部分:
软件测试的基本概念(下接第七部分)
1软件测试的定义
软件测试是为了发现错误而执行程序的过程。
软件测试是在软件投入运行前,对软件需求分析、设计规格说明书和编码进行的最终复审,是保证软件质量的关键步骤。
2软件测试的目的和原则
软件测试的目的:
测试是程序的执行过程,目的在于发现错误;
一个好的测试用例在于能发现至今未发现的错误;
一个成功的测试是发现了至今未发现的错误的测试。
软件测试的原则:
应当尽早规划和不断地进行软件测试。
测试用例设计应包括测试输入数据和与之对应的预期输出结果这两部分。
程序员应避免检查自己的程序
在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
严格执行测试计划,排除测试的随意性。
应当对每一个测试结果做全面检查。
妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
测试应有一个终止的标准。
3软件测试的对象及信息流
软件测试应贯穿于软件定义与开发的整个期间。
因此软件测试的对象不仅包括源程序,还包括需求规格说明书、概要设计说明书、详细设计规格说明都应成为软件测试的对象。
软件开发在每个环节都需要进行确认和验证工作以保证它的正确性。
确认与验证工作都属于软件测试。
在软件测试过程需要有三类输入:
◆软件配置:
包括软件需求规格说明、软件设计规格说明、源代码等;
◆测试配置:
包括测试计划、测试用例、测试驱动程序等;
◆
测试工具:
测试工具为测试的实施提供某种服务。
测试信息流如图所示。
4.黑盒测试包括:
1等价类划分法
2边界值分析法3错误推测法4因果图法5功能图
5.软件的测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 级爱恩学院软件工程期末复习知识点小结andy cao 级爱恩 学院 软件工程 期末 复习 知识点 小结 andy
![提示](https://static.bdocx.com/images/bang_tan.gif)