软件工程期末复习集.docx

上传人:b****0 文档编号:9430551 上传时间:2023-05-19 格式:DOCX 页数:24 大小:128.78KB
下载 相关 举报
软件工程期末复习集.docx_第1页
第1页 / 共24页
软件工程期末复习集.docx_第2页
第2页 / 共24页
软件工程期末复习集.docx_第3页
第3页 / 共24页
软件工程期末复习集.docx_第4页
第4页 / 共24页
软件工程期末复习集.docx_第5页
第5页 / 共24页
软件工程期末复习集.docx_第6页
第6页 / 共24页
软件工程期末复习集.docx_第7页
第7页 / 共24页
软件工程期末复习集.docx_第8页
第8页 / 共24页
软件工程期末复习集.docx_第9页
第9页 / 共24页
软件工程期末复习集.docx_第10页
第10页 / 共24页
软件工程期末复习集.docx_第11页
第11页 / 共24页
软件工程期末复习集.docx_第12页
第12页 / 共24页
软件工程期末复习集.docx_第13页
第13页 / 共24页
软件工程期末复习集.docx_第14页
第14页 / 共24页
软件工程期末复习集.docx_第15页
第15页 / 共24页
软件工程期末复习集.docx_第16页
第16页 / 共24页
软件工程期末复习集.docx_第17页
第17页 / 共24页
软件工程期末复习集.docx_第18页
第18页 / 共24页
软件工程期末复习集.docx_第19页
第19页 / 共24页
软件工程期末复习集.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

软件工程期末复习集.docx

《软件工程期末复习集.docx》由会员分享,可在线阅读,更多相关《软件工程期末复习集.docx(24页珍藏版)》请在冰点文库上搜索。

软件工程期末复习集.docx

软件工程期末复习集

详细设计

详细设计就是要在总体设计阶段成果的基础上,考虑如何实现定义的软件系统,直到对系统中的每个模块给出足够详细的过程描述。

结构化程序设计技术是进行详细设计的逻辑基础。

它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。

结构化程序设计的三种基本控制结构是顺序、选择、循环。

详细设计的工具有程序流程图、盒图、PAD图、判定表、判定树和PDL语言等。

程序复杂性度量

程序复杂性主要指模块内程序的复杂性。

它直接关联到软件开发费用的多少、开发周期的长短和软件内部潜伏错误的多少等。

1)代码行度量法

度量程序的复杂性,最简单的方法就是统计程序的源代码行数。

该方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数作为程序复杂性的度量。

Lipow及其他研究者得出一个结论:

对于少于100个语句的小程序,源代码行数与出错率是线性相关的。

随着程序的增大,出错率以非线性方式增长。

2)McCabe度量法

McCabe度量法是一种基于程序控制流的复杂性度量方法。

McCabe定义的程序复杂性度量值又称环路复杂性,它是基于程序图中环路的个数。

如果把程序流程图中每个处理符号都退化成一个结点,原来联结不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。

计算有向图G的环路复杂性的公式:

其中,V(G)是有向图G中的环路个数,m是图G中有向弧个数,n是图G中结点个数。

详细设计说明书

1.引言

2.总体设计。

软件结构

3.程序描述。

逐个模块描述其功能、性能、输入、输出、算法等

例题

软件详细设计工具可分为3类,即图形工具、设计语言和表格工具。

图形工具中,(A)简单而应用广泛。

(B)表示法中,每个处理过程用一个盒子表示,盒子可以嵌套。

(C)可以纵横延伸,图形的空间效果好。

(D)是一种设计和描述程序的语言,它是一种面向(E)的语言。

供选答案:

A-C:

①NS图②流程图③HIPO图④PAD图

D:

①C②PDL③PROLOG④Pascal

E:

①人②机器③数据结构④对象

答案:

A.②B.①C.④D.②E.①

[2001年统考]下面是两个程序流程图,试分别用N-S图和PAD图表示之,并计算它们的McCabe复杂性度量。

答案:

PAD图略

McCabe复杂性度量都为3。

(7-6+2)

下图是使用BASIC语言编写的一个打印A、B、C三数中最小者的程序流程图。

其中出现了6个GOTO语句,1个向前,5个向后,程序可读性很差。

if(A

if(B

100printC;

goto140;

110printB;

goto140;

120if(A

goto100;

130printA;

140

试利用基本控制结构,将程序中的GOTO语句消去。

使用if-then-else结构化构造,则上述程序段可改成如下形式:

if(A

printA

elseif(A>=BandB

printB

else

printC

编码

所谓编码就是把软件设计的结果翻译成计算机可以“理解”的形式—用某种程序设计语言书写的程序。

按照软件工程的方法论,程序的质量基本上由设计的质量决定。

但是,编码使用的语言,特别是写程序的风格和途径也对程序质量有相当大的影响。

程序设计语言的分类、选择

大量实践表明,高级程序设计语言较汇编语言有很多优点。

程序设计风格包括四个方面:

源程序文档化、数据说明、语句结构和输入/输出方法

例题

从下列叙述中选出5条符合程序设计风格指导原则的叙述。

①嵌套的重数应加以限制

②尽量多使用临时变量

③不滥用语言特色

④不用可以省略的括号

⑤使用有意义的变量名

⑥应尽可能把程序编得短些

⑦把常见的局部优化工作留给编译程序去做

⑧注解越少越好

⑨程序的格式应有助于读者理解程序

⑩应尽可能多用GOTO语句

答案:

①、③、⑤、⑦、⑨是正确的

从下列关于模块化程序设计的叙述中选出5条正确的叙述。

①程序设计比较方便,但比较难以维护

②便于由多个人分工编制大型程序

③软件的功能便于扩充

④程序易于理解,也便于排错

⑤在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数

⑥模块之间的接口叫做数据文件

⑦只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块

⑧模块间的单向调用关系叫做模块的层次结构

⑨模块越小,模块化的优点越明显。

一般来说,模块的大小都在10行以下

答案:

②、③、④、⑦、⑧是正确的

测试

软件测试的目的就是软件投入生产性运行之前,尽可能多地发现软件中的错误。

目前软件测试仍然是保证软件质量的关键步骤。

软件测试在软件生命周期中横跨两个阶段:

编码和测试。

GrenfordJ.Myers就软件测试目的提出以下观点:

1)测试是程序的执行过程,目的在于发现错误。

2)一个好的测试用例在于能发现至今未发现的错误

3)一个成功的测试是发现了至今未发现的错误的测试

软件测试的原则

1)应当尽早地不断地进行软件测试

2)测试用例应由测试输入数据和与之相对应的预期输出结果这两部分组成

3)程序员应避免检查自己的程序

4)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件

5)充分注意测试中的群集现象

6)严格执行测试计划,排除测试的随意性

7)应当对每个测试结果做全面检查

8)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便

常分单元测试/模块测试,集成测试,确认测试和系统测试。

关系重大的还可做平行运行。

设计测试方案是测试阶段的关键技术问题,基本目标是选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。

动态测试两个基本方法

黑盒测试/功能测试

等价类划分

边界值分析

错误推测法

因果图法

白盒测试/结构测试

语句覆盖:

使得每一可执行语句至少执行一次

判定覆盖:

使得程序中每个判断的取真分支和取假分支至少执行一次

条件覆盖:

使得程序中每个判断的每个条件的可能取值至少执行一次

判定-条件覆盖:

使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次

条件组合覆盖:

使得每个判断的所有可能的条件取值组合至少执行一次

路径覆盖:

覆盖程序中所有可能的路径

设计测试方案的实用策略是,用黑盒法设计基本的测试方案,再用白盒法补充一些必要的测试方案。

应该认识到,软件测试不仅仅指利用计算机进行的测试,还包括人工进行的测试(例如,代码审查)。

两种测试途径各有优缺点,互相补充,缺一不可。

因果图方法最终生成的就是判定表。

它适合于检查程序输入条件的各种组合情况。

a.

例题

[2000年统考]设要对一个自动饮料售货机软件进行黑盒测试。

该软件的规格说明如下:

有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。

若投入1元5角硬币,按下“橙汁”、“啤酒”或“红茶”按钮,相应的饮料就送出来。

若投入的是2元硬币,在送出饮料的同时退还5角硬币。

1)(5分)试利用因果图法,建立该软件的因果图;

2)(5分)设计测试该软件的全部测试用例。

因果图(加入了两个中间结点11和12。

11表示已投币,12表示已按钮)

测试用例

1

2

3

4

5

6

7

8

9

10

11

输入

投入1元5角硬币

(1)

1

1

1

1

0

0

0

0

0

0

0

投入2元硬币

(2)

0

0

0

0

1

1

1

1

0

0

0

按”橙汁”按钮

(3)

1

0

0

0

1

0

0

0

1

0

0

按”啤酒”按钮

(4)

0

1

0

0

0

1

0

0

0

1

0

按”红茶”按钮

(5)

0

0

1

0

0

0

1

0

0

0

1

中间结点

已投币

(11)

1

1

1

1

1

1

1

1

0

0

0

已按钮

(12)

1

1

1

0

1

1

1

0

1

1

1

输出

退还5角硬币

(21)

0

0

0

0

1

1

1

0

0

0

0

送出橙汁饮料

(22)

1

0

0

0

1

0

0

0

0

0

0

送出啤酒饮料

(23)

0

1

0

0

0

1

0

0

0

0

0

送出红茶饮料

(24)

0

0

1

0

0

0

1

0

0

0

0

软件测试是软件质量保证的主要手段之一,测试的费用已超过(A)的30%以上。

因此,提高测试的有效性十分重要。

“高产”的测试是指(B)。

根据国家标准GB8566-88《计算机软件开发规范》的规定,软件的开发和维护划分为8个阶段,其中,单元测试是在(C)阶段完成的,集成测试的计划是在(D)阶段制定的,确认测试的计划是在(E)阶段制定的。

供选择的答案:

A:

①软件开发费用②软件维护费用

③软件开发和维护费用④软件研制费用

⑤软件生存期全部

B:

①用适量的测试用例运行程序,证明被测程序正确无误

②用适量的测试用例运行程序,证明被测程序符合相应的要求

③用少量的测试用例运行程序,发现被测程序尽可能多的错误

④用少量的测试用例运行程序,纠正被测程序尽可能多的错误

C-E:

①可行性研究和计划②需求分析

③概要设计④详细设计

⑤实现⑥集成测试

⑦确认测试⑧使用和维护

答案:

A.①B.③C.⑤D.③E.②

集成测试也叫做(A)或(B)。

通常,在(C)的基础上,将所有模块按照设计要求组装成系统。

子系统的集成测试特别称为(D),它所作的工作是要找出子系统和系统需求规格说明之间的(E)。

需要考虑的问题是在把各个模块连接起来的时候,穿越模块接口的数据是否会(F);一个模块的功能是否会对另一个模块的功能产生不利的影响;各个(G)组合起来,能否达到预期要求的(H);(I)是否有问题;单个模块的误差累积起来是否会放大。

供选择的答案:

A-D:

①单元测试②部件测试③组装测试

④系统测试⑤确认测试⑥联合测试

E-I:

①子功能②丢失③父功能

④局部数据结构⑤全局数据结构⑥不一致

⑦一致

答案:

A.③B.⑥C.①D.②E.⑥F.②G.①H.③I.⑤

软件测试方法可分为黑盒测试和白盒测试两种。

黑盒测试法是通过分析程序的(A)来设计测试用例的方法。

除了测试程序外,它还适用于对(B)阶段的软件文档进行测试。

白盒测试法是根据程序的(C)来设计测试用例的方法。

除了测试程序外,它也适用于对(D)阶段的软件文档进行测试。

白盒法测试程序时常按照给定的覆盖条件选取测试用例。

(E)覆盖比(F)严格,它使得每个判定的每条分支至少经历一次。

(G)覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。

(H)覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径。

单元测试一般以(I)为主,测试的依据是(J)。

供选择的答案:

A、C:

①应用范围②内部逻辑③功能④输入数据

B、D:

①编码②软件详细设计③软件总体设计④需求分析

E、F、G、H:

①语句②判定③条件④判定/条件⑤多重条件⑥路径

I:

①白盒法②黑盒法

J:

①模块功能规格说明②系统模块结构图③系统需求规格说明

答案:

A.③B.④C.②D.②E.②F.①G.④H.⑤I.①J.①

从下列关于程序设计风格和软件测试的叙述中,选出5条正确的叙述

①用黑盒法测试时,测试用例是根据程序内部逻辑设计的。

②尽量用公共过程或子程序去代替重复的代码段。

③测试是为了验证该软件已正确地实现了用户的要求。

④对于连锁型分支结构,若有n个判定语句,则有2n条路径。

⑤尽量采用复合的条件测试,以避免嵌套的分支结构。

⑥GOTO语句概念简单,使用方便。

在某些情况下,保留GOTO语句反能使写出的程序更加简洁。

⑦发现错误多的程序模块,残留在模块中的错误也多。

⑧黑盒测试方法中最有效的是因果图法。

⑨在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。

⑩程序效率的提高主要应通过选择高效的算法来实现。

答案:

④、⑤、⑥、⑦、⑩

调试

软件调试是在进行了成功的测试之后才开始的工作。

调试活动由两部分组成:

1)确定程序中可疑错误的确切性质和位置

2)对程序(设计、编码)进行修改,排除这个错误

几种主要的调试方法:

强行排错

回溯法排错

归纳法排错

演绎法排错

测试和调试是软件测试阶段的两个关系极端密切的过程,它们通常交替进行。

测试中的可靠性分析

在软件开发的过程中,利用测试的统计数据,估算软件的可靠性以控制软件的质量是至关重要的。

推测错误的产生频度

估算错误产生频度的一种方法是估算平均失效等待时间MTTF(MeanTimeToFailure)。

MTTF估算公式(Shooman模型)是:

其中,K是一个经验常数,美国一些统计数字表明,K的典型值是200;ET是测试之前程序中原有的故障总数;IT是程序长度(机器指令条数或简单汇编语句条数);t是测试(包括排错)的时间;EC(t)是在0-t期间内检出并排除的故障总数。

公式的基本假定是:

1)、单位(程序)长度中的故障数ET/IT近似为常数,它不因测试与排错而改变。

统计数字表明,通常ET/IT值的变化范围在0.5*10-2—2*10-2之间。

2)、故障检出率正比于程序中残留故障数,而MTTF与程序中残留故障数成正比。

3)、故障不可能完全检出,但一经检出立即得到改正。

可靠性累积曲线公式

例题

对一个长度为100,000条指令的程序进行测试,记录下来的数据如下:

.测试开始,发现错误个数为0;

.经过160小时的测试,累计改正100个错误,此时,MTTF=0.4小时;

.又经过160小时的测试,累计改正300个错误,此时,MTTF=2小时。

1)估计程序中固有的错误总数。

2)为使MTTF达到10小时,必须测试和调试这个程序多长时间?

3)给出MTTF与测试时间t之间的函数关系

由Shooman公式

其中,

=105,

1=0.4,

1=160,n1=100,

2=2,

2=320,n2=300

1)解得程序中固有的错误总数

=350,此外,K=1000。

2)设MTTF=10,有

解得x=340(即为使MTTF达到10小时,需要改正340个错误)。

由可靠性累积曲线

,得

解得K1=0.01。

代入

得t=(ln(35))/0.01=356h

因此求得为使MTTF=10,测试和调试该程序需要时间约为356小时。

3)MTTF与测试时间t之间的函数关系:

因为

,则

代入Shooman公式:

维护

所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

软件工程学的主要目的就是提高软件的可维护性,降低维护的代价。

软件可维护性,是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度。

软件的可理解性、可测试性和可修改性是决定软件可维护性的基本因素。

软件维护通常包括四类活动:

1)为了纠正使用过程中暴露出来的错误而进行的改正性维护;

2)为了适应外部环境的变化而进行的适应性维护;

3)为了改进原有的软件而进行的完善性维护;

4)为了改进将来的可维护性和可靠性而进行的预防性维护。

在软件维护中,影响维护工作量的程序特性有以下6种:

a.系统大小

b.程序设计语言

c.系统年龄

d.数据库技术的应用

e.先进的软件开发技术

f.其他

维护有三种副作用:

文档、代码、数据。

软件维护工作流程

1、确认维护要求

2、由维护组织管理员确认维护类型

可理解性:

表明人们通过阅读源代码和相关文档,了解程序及其如何运行的容易程度。

可靠性:

表明一个程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率。

可测试性:

表明论证程序正确性的容易程度。

可修改性:

表明程序容易修改的程度。

可移植性:

表明程序转移到一个新的计算环境的可能性的大小,或者它表明程序可以容易地、有效地在各种各样的计算环境中运行的容易程度。

效率:

表明一个程序能执行预定功能而又不浪费机器资源的程度。

可使用性:

从用户观点出发,把可使用性定义为程序方便、实用及易于使用的程度。

各阶段结束标准

计划阶段

问题定义

关于规模和目标的报告书

可行性研究

可行性论证报告(系统的高层逻辑模型)

开发阶段

需求分析

需求规格说明书(系统的逻辑模型)

概要设计

概要设计说明书(系统层次图或结构图)

详细设计

详细设计说明书(各模块内部详细算法)

编码

源程序清单,单元测试方案与结果

测试

综合测试方案和结果

实施阶段

维护

完整准确的维护记录

软件管理

成本估算

代码行技术

功能点技术

效益估计

系统效益包括经济效益和社会效益两部分。

货币的时间价值、纯收入、投资回收期、投资回收率

进度安排

进度安排是软件项目管理中的一项重要内容。

管理复杂的工程项目非常困难,最好的办法是把它分解成一系列比较容易管理的子任务。

但是分解后又容易只注意对各个子任务的管理,以致忽略了对工程总体情况的了解和管理。

因此需要有某种工具既支持把项目分解成较小的子任务,又能帮助管理人员保持对工程总体情况的洞悉和管理。

1、甘特图

Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具,它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有三个主要缺点:

1.不能显式地描绘各项作业彼此间的依赖关系;

2.进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;

3.计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费

当把一个工程项目分解成许多小任务,并且它们彼此间的依赖关系又比较复杂时,仅仅用Gantt图作为安排进度的工具是不够的,不仅难于作出既节省资源又保证进度的计划,而且还容易发生差错。

2、工程网络

工程网络是制订进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间。

此外,它还显式地描绘各个作业彼此间的依赖关系。

因此,工程网络是系统分析和系统设计的强有力的工具。

涉及的几个概念:

机动时间、关键路径

在制定进度计划时仔细考虑和利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。

人员组织

管理软件开发通常采用层次结构。

一般来说,程序设计小组的规模应该较小,视工程规模以2-8人为宜。

主程序员组用经验多、技术好、能力强的程序员作为主程序员。

同时,利用人和计算机在事务性工作方面给主程序员提供充分支持,而且所有通信都通过一两个人进行。

软件项目的开发实践表明,软件开发各个阶段所需要的技术人员类型、层次和数量是不同的。

软件项目的计划与分析阶段只需要少数人,主要是系统分析员、从事软件系统论证和概要设计的软件高级工程师和项目高级管理人员。

概要设计时增加一部分高级程序员,详细设计时,要增加软件工程师和程序员,在编码和测试阶段还要增加程序员、软件测试员。

到测试阶段结束时,软件项目开发人员的数量达到顶峰。

软件运行初期,参加软件维护的人员比较多,过早解散软件开发人员会给软件维护带来意想不到的困难。

软件运行一段时间后,由于软件开发人员参与改正性维护,软件出错率会很快衰减,这时软件开发人员可以逐步撤出。

如果系统不做适应性或完善性维护,需要留守的维护人员就不多了。

软件配置管理

Babich曾说过:

“协调软件开发使得混乱减到最小的技术叫做配置管理。

配置管理是一种标识、组织和控制修改的技术,目的是使错误达到最小并最有效地提高生产率。

软件配置管理(SCM,SoftwareConfigurationManagement)应用于整个软件生存期。

因为变更在任何时刻都可能发生,因此,软件配置管理活动的目标就是为了标识变更、控制变更、确保变更更正确地实现,并向其他相关的人报告变更。

基线是软件生存期中各开发阶段末尾的特定点,又称里程碑。

由正式的技术评审而得到的软件配置协议和软件配置的正式文本组成基线。

它的作用是把各阶段工作的划分更加明确化,使连续的工作在这些点上断开,以便检验和肯定阶段成果。

CMM(CapabilityMaturityModel)软件机构能力成熟度模型

五个级别:

初始级、可重复级、已定义级、已管理级、已优化级

软件复用

对建立软件目标系统而言,所谓复用(reuse),就是利用某些已开发的、对建立新软件系统有用的软件元素来生成新系统。

这里所说的软件元素可以包括需求规格说明、设计过程、设计规格说明、程序代码、测试用例、度量等。

对于新的软件开发项目而言,这些元素或者是构成新软件系统的构件,或者能在软件开发过程中发挥某种作用。

通常,将这些软件元素称为可复用构件。

面向对象的软件工程

面向对象=对象+类+继承+通信

对象可以定义为系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。

三个主要特点:

自治性、封装性、通信性。

属性一般只能通过执行对象的操作来改变。

操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。

而所谓的消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。

把具有相同特征和行为的对象归结在一起就形成了类。

类是某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。

属于某个类的对象叫做该类的实例。

如果某几个类之间具有共性的部分(信息结构和行为),将其抽取出来放在一个一般类中,而将各个类的特有的部分放在特殊类中分别描述,则可建立起特殊类对一般类的继承。

继承是软件开发中重用概念的核心,另外便于模块修改,同时继承可使模块简化,导致模块比较小容易理解。

Coad与Yourdon的方法(Object-orientedAnalysisandDesign,OOAD):

分为OOA和OOD。

1.OOA

1)形式地说明所面对的应用问题,最终成为软件系统基本构成的对象,还有系统所必须遵从的,由应用环境所决定的规则和约束。

2)明确地规定构成系统的对象如何协同合作,完成指定的功能。

OOA要建立分析模型,有五个层次:

类和对象层、属性层、服务层、结构层、主题层。

允许两种结构:

整体-部分,通用-特殊。

通过OOA建立的系统模型是以概念为中心的,因此称为概念模型。

这样的模型由一组相关的类组成。

构造和评审OOA概念模型的顺序由5个层次组成,即类和对象层、属性层、服务层、结构层、主题层。

这5个层次不是构成软件系统的层次,而是分析过程中的层次也可以说是问题的不同侧面。

每个层次的工作都为系统的规格说明增加了一个组成部分。

当5个层次的工作全部

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2