软件工程40题.docx
- 文档编号:25977439
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:17
- 大小:40.46KB
软件工程40题.docx
《软件工程40题.docx》由会员分享,可在线阅读,更多相关《软件工程40题.docx(17页珍藏版)》请在冰豆网上搜索。
软件工程40题
软件工程40题
1.什么是软件危机?
产生原因是什么?
软件开发技术的进步未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因:
⑴软件规模越来越大,结构越来越复杂。
⑵软件开发管理困难而复杂。
⑶软件包开发费用不断增加。
⑷软件开发技术落后。
⑸生产方式落后,仍采用手工方式。
⑹开发工具落后,生产率提高缓慢。
2.什么是软件工程?
它目标和内容是什么?
软件工程就是用科学的知识程和技术原理来定义,开发,维护软件的一门学科。
软件工程目标:
付出较低开发成本;达到要求的功能;取得较好的性能;开发的软件易于移植;只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
软件工程内容:
研究内容包括开发技术和开发管理两个方面。
开发技术主要研究:
软件开发方法,开发过程,开发工具和环境。
开发管理主要研究:
软件管理学,软件经济学,软件心理学。
3.什么是软件生存周期?
它有哪几个活动?
软件生存周期:
一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括:
可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护。
4.什么是软件生存周期模型?
有哪些主要模型?
生存周期模型:
描述软件开发过程中各种活动如何执行的模型。
对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
主要有:
瀑布模型,增量模型,螺旋模型,喷泉模型,基于知识的模型,变换模型。
5.什么是软件开发方法?
有哪些主要方法?
使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。
通过使用成功的软件开发方法,在规定的投资和时间内,开发出符合用户需求的高质量的软件。
软件开发方法是克服软件危机的重要方面之一,对软件工程及软件包产业的发展起了不可估量的作用。
主要有:
结构化方法,JACKSON方法,面向对象开发方法等。
6.可行性研究的任务是什么?
可行研究的任务:
首先需要进行概要的分析研究,初步确定项目的规模,目标,约束和限制。
分析员再进行简要的需求分析,抽象出项目的逻辑结构,建立逻辑模型。
从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的解决方法,对每种解决方法都要研究它的可行性。
主要从三个方面考虑:
⑴.技术可行性:
一般要考虑的情况包括开发的风险即设计出的系统能否达到要求的功能和性能;资源的有效性;相关技术的发展是否支持;
⑵.经济可行性:
进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资。
⑶.社会可行性:
要开发的项目是否存在任何侵权问题,运行方式在用户组织内是否可行,现有管理制度﹑人员素质﹑操作方式是否可行。
7.可行性研究有哪些步骤?
⑴.确定项目规模和目标;
⑵.研究正在运行的系统;收集﹑研究﹑分析现有系统的文档资料,实地考察系统访问有关人员,然后描绘现有系统的高层系统流程图。
⑶.建立新系统的高层逻辑模型;使用数据流图和数据字典描述数据在系统中的流动和处理情况。
⑷.导出和评价各种方案;导出若干较高层次的物理解决方法,根据技术可行性﹑经济可行性﹑社会可行性进行评估,得到可行的解决方法。
⑸.推荐可行方案;进行成本~效益分析,决定该项目是否值得开发,若值得开发那么解决方案是什么,并且说明该方案可行的原因和理由。
⑹.编写可行性研究报告;将上述可行性过程的结果写成相应文档,即可行性研究报告。
8.项目开发计划有哪些内容?
⑴.项目概述:
说明项目的各项主要工作;说明软件的功能﹑性能;为完成项目应具有的条件;用户及合同承包者承担的工作完成的期限及其他条件限制;应交付的程序名称;所使用的语言及程储形式;应交付的文档。
⑵.实施计划:
说明任务的划分,各任务责任人,项目开发进度,项目的预算,各阶段的费用支出,各阶段应完成的任务,用图表说明每项任务的开始和完成时间。
⑶.人员组织及分工:
所需人员类型﹑数量﹑组成结构。
⑷.交付期限:
最后完工日期。
9.什么是需求分析?
需求分析阶段的基本任务是什么?
需求分析:
开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。
基本任务:
⑴问题识别:
双方确定对问题的综合需求,这些需求包括功能需求,性能需求,环境需求,用户界面需求。
⑵分析与综合,导出软件的逻辑模型
⑶编写文档:
包括编写"需求规格说明书","初步用户使用手册","确认测试计划","修改完善软件开发计划"
10.什么是结构分析方法?
该方法使用什么描述工具?
结构化分析:
简称SA,面向数据流进行数据分析的方法。
采用自顶向下逐层分解的分析策略。
顶层抽象地描述整个系统,底层具体地画出系统工程的每个细节。
中间层则是从抽象到具体的过渡。
使用数据流图,数据字典,作为描述工具,使用结构化语言,判定表,判定树描述加工逻辑。
11.什么是数据流图?
其作用是什么?
其中的基本符号各表示什么含义?
12.简述SA方法的优缺点。
SA方法是软件需求分析中公认的,有成效的,技术成熟,使用广泛的一种结构化分析方法。
较适用于开发数据处理类型软件的需求分析。
利用图形等半形式化工具表达需求,简明,易读,也易于使用。
但也存在一些弱点,表现如下:
⑴SA方法仅是一个静态模型,没有反映处理的顺序,即控制流程。
⑵SA方法使用DFD在分析与描述"数据要求"方面是有局限的,只有与数据库技术中的实体联系图(ER图)结合起来,才能较完整地描述用户对系统的需求。
⑶DFD不适合描述人机界面系统的要求,一些人机交互较频繁的软件系统。
⑷SA方法要与形式化方法结合起来,才能更精确地描述软件需求。
⑸要借助需求分析工具,提高需求分析的质量及效率。
13.什么是软件概要设计?
该阶段的基本任务是什么?
把一个软件需求转换为软件表示时,首先设计出软件总的体系结构。
称为概要设计或结构设计。
基本任务:
⑴设计软件系统结构,具体为:
采用某种设计方法,将一个复杂的系统按功能划分为模块。
确定每个模块的功能。
确定模块之间的调用关系。
确定模块之间的接口(模块之间传递的信息)
评价模块的结构质量
⑵进行数据结构及数据库的设计
⑶编写概要设计的文档
主要内容有:
概要设计说明书,数据库说明书(DBMS的简介,概念模型,逻辑设计,结果)用户手册,修订测试计划(测试的策略﹑方法﹑步骤)
⑷评审:
是否完整地实现了规定的功能﹑性能要求。
设计方案是否可行。
关键的处理及内部接口定义的正确性,有效性,各部分的一致性。
14.软件设计的基本原理包括哪些内容?
⑴模块化:
模块是软件的组成部分,是具有独立功能且可命名的一段程序,所有模块组成
整体,可以满足问题的要求。
模块化即按照一定的原则,将软件划分成若干个模块,每个模块完成一个特定的功能,然后把这些模块按照某种方法组装成一个软件系统。
(可降低复杂度、减少工作量)
模块具有以下几种特性:
接口:
模块的输入输出。
功能:
指模块实现什么功能。
逻辑:
描述模块内部如何实现要求及所需的数据。
状态:
该模块的运行环境,模块间调用与被调用关系。
⑵抽象:
认识复杂现象过程所使用权的工具,只考虑事物本质的共同特性,忽略细节和其它因素。
通过抽象确定组成软件的过程实体。
⑶信息隐蔽:
将模块实现自身功能的细节与数据"隐蔽"起来。
模块间仅交换为完成系统功能所必须的信息。
⑷模块独立性:
每个模块只完成系统要求的独立的子功能。
15.衡量模块独立性的两个标准是什么?
各表示什么含义?
内聚和耦合
内聚:
又称为块内联系,指模块内部各成分之间相互关联的程度,以高内聚为设计目标。
耦合:
也称块间联系,模块之间相互联系程度的度量,联系越紧密,耦合性越强,独立性越差,以低耦合为设计目标。
16.什么是软件结构?
简述软件结构设计的优化准则。
⑴改进软件结构,提高模块独立性首先设计出软件初始结构,评价该结构,通过模块分解或合并,力求降低耦合提高内聚。
⑵模块的规模应该适中
⑶模块结构的深度、宽度、扇出和扇入应适中
深度:
软件结构中控制的层数
宽度:
软件结构中同一层次上最大模块总数
扇入:
某一模块有多少直接调用它的上级模块数目(越大越好)
扇出:
一个模块直接控制(调用)下级模块的数目。
(越少越好,3,4个为宜,不超过9个,
"顶层扇出较高,中间扇出较少,底层模块高扇入多"
⑷一个模块的作用域(范围),应处在这个模块的控制域(范围)之内
模块的作用域:
受该模块内一个判定影响的所有模块的集合
模块的控制域:
这个模块本身以及所有直接或间接从属于它的模块的集合
17.什么是模块的影响范围?
什么是软件的控制范围?
它们之间应建立什么关系?
模块的影响范围(作用域):
受该模块内一个判定影响的所有模块的集合
模块的控制范围(控制域):
这个模块本身以及所有直接或间接从属于它的模块的集合
一个模块的影响范围(作用域),应处在这个模块的模块的控制范围(控制域)内。
18.试述"变换分析"﹑"事务分析"设计步骤。
变换分析设计步骤:
⑴确定变换中心,逻辑输入和输出。
⑵设计软件结构的顶层和第一层--变换结构:
顶层的功能是完成所有模块的控制(名称应是系统名,以体现完成整个系统功能)
第一层至少有三种功能模块:
输入﹑输出和变换模块
⑶设计中﹑下层模块,对第一层的模块自顶向下分解。
输入模块由两部分组成:
接收数据﹑转换成调用模块所需信息。
输出模块由两部分组成:
将数据转换成下属模块所需的形式﹑发送数据
变换模块:
对每个基本加工建立一功能模块
⑷设计的优化:
输入部分求精,每个物理输入设置专门模块,以体现系统的外部接口。
其它输入模块与转换数据模块都很简单时,可将它们合并。
输出部分求精:
每个物理输出设置专门模块,其它也可适当合并。
变换部分求精:
根据设计准则,对模块适当合并。
事务分析的设计步骤:
⑴确定事务中心和加工路径
⑵设计顶层(事务机构)和第一层顶层模块有两个功能:
接收数据和根据事务类型调动相应处理模块。
⑶中下层模块的设计﹑优化工作与变换结构相同。
事务型软件结构包括两部分:
接收分支发送分支出通常包括一调度模块,当事务类型不多时,可与主模块合并。
19.请将下图的DFD转换为软件结构图。
(注:
图中⊕表示或者)
解:
我们可以看出主图是变换型DFD,而子图是事务型DFD。
根据结构设计的方法,得到的结构图如下:
20.详细设计的基本任务是什么,有哪几种描述方法?
详细设计的基本任务包括:
1、为每个模块进行详细的算法设计
2、为模块内的数据结构进行设计
3、对数据库进行物理设计
4、其他设计
5、编写详细设计说明书
6、评审
详细设计的描述方法有图形、表格和语言,其中图形常用结构化程序流程图、盒图和PAD(问题分析图)为描述工具,语言常用过程设计语言(PDL)来作为工具。
21.结构化程序设计的基本要点是什么?
答:
主要有三个:
(1)采用自顶向下、逐步求精的程序设计方法
(2)使用三种基本控制结构构造程序。
任何程序都可以由顺序、选择、重复(循环)三种基本控制结构构造,这三种基本结构的共同点是单入口、单出口。
(3)主程序员组的组织形式。
22.在项目开发时选择程序设计语言通常考虑哪些因素?
通常要考虑的因素有:
项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性以及软件开发人员的知识等。
23.什么是白盒测试法?
有哪些覆盖标准?
试对他们的检错能力进行比较?
白盒法测试法把测试对象看作一个打开的盒子,测试人员须了解程序内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
白盒法有下列几种覆盖标准:
语句覆盖
判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
路径覆盖
从上到下的覆盖标准其检错能力也从弱到强,其中条件组合发现错误的能力较强,凡满足其标准的测试用例,也必然满足前四种覆盖标准。
在实际的逻辑测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例来达到路径覆盖的测试标准。
24.什么是黑盒测试法?
采用黑盒技术测试用例有哪几种方法?
这些方法各有什么特点?
黑盒测试法把被测试对象看成是一相黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。
采用黑盒技术测试用例的方法有:
等价类的划分、边界值分析、错误推测和因果图。
等价类的划分,是将输入数据按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。
这样就把漫无边迹的随机测试改为有针对性的等价类测试,用少量有代表性的例子代替大量测试目的相同的例子,能有效地提高测试效率。
但这个方法的缺点是没有注意选择某些高效的、能够发现更多错误的测试用例。
边界值分析法一般与等价类划分结合起来。
但它不是从一个等价类中任选一个例子做代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于和刚刚小于边界值的测试数据。
(边界情况是指输入等价类和输入等价类边界上的情况。
)这种方法可以查出更多的错误,因为在程序中往往在处理边界情况时易发生错误。
错误推测法是在测试程序时,人们根据经验或直觉推测程序中可能存在的错误,从而有针对性地编写检查这些错误的测试用例。
因果图能够有效地检测输入条件的各种组合可能会引起的错误。
它的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
这几种方法都不能提供一组完整的测试用例,在实际测试中应把各种方法结合起来使用。
综合策略:
就是联合使用上述几种测试方法,尽可能多地发现程序中的错误。
25.软件测试要经过哪些步骤?
这些测试与软件开发各阶段之间有什么关系?
软件测试要经过的步骤是:
单元测试→集成测试→确认测试→系统测试。
单元测试对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。
该阶段涉及编码和详细设计文档。
集成测试是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。
确认测试主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。
系统测试是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。
以确定软件是否可以支付使用。
26.单元测试有哪些内容?
测试中采用什么方法?
单元测试主要针对模块的以下五个基本特征进行测试:
(1)模块接口
(2)局部数据结构
(3)重要的执行路径
(4)错误处理
(5)边界条件
测试的方法是为被测试模块编写驱动模块和桩模块来实现被测试单元的可运行。
通过驱动模块来模拟被测试模块的上级调用模块,以上级模块调用被测模块的格式驱动被测模块,接收被测模块的测试结构并输出。
桩模块则用来代替被测试模块所调用的模块。
它的作用是返回被测模块所需的信息。
27.什么是集成测试?
非渐增式测试与渐增式测试有什么区别?
渐增式测试如何组装模块?
集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行的测试。
非渐增式测试是指首先对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行的测试。
而渐增式测试就是逐个把未经测试的模块组装到已经过测试的模块上去进行集成测试,每加入一个新模块进行一次集成测试,重复此过程直到程序组装完毕。
渐增式测试有两种不同的组装方法:
自顶向下和自底向上结合。
两者区别是:
(1)非渐增式方法把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。
而渐增式测试往往把单元测试和集成测试合在一起,同时完成。
(2)非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量少。
(3)渐增式可以较早地发现接口之间的错误,非渐增式最后组装时才发现。
(4)渐增式有利于排错,发生错误往往和最近新加入的模块有关,而非渐增式发现接口错误推迟到最后,很难判断是哪一部分接口出错。
(5)渐增式比较彻底,已测试的模块和新的模块再测试。
(6)渐增式点用时间较多,但非渐增式所需更多的驱动模块和桩模块也占用一些时间。
(7)非渐增式开始可并行测试所有模块,能充分利用人力,对测试大型软件很有意义。
28.什么是确认测试?
该阶段有哪些工作?
确认测试又称有效性测试。
它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。
因而需求说明是确认测试的基础。
确认测试阶段有两项工作:
进行确认测试与软件配置审查。
29.软件维护有哪些内容?
(1)校正性维护。
在软件交付使用后,一些隐含的错误在某些特定的使用环境下会暴露出来。
为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护。
(2)适应性维护。
为了使应用软件适应计算机硬件、软件环境及数据环境的不断发生的变化而修改软件的过程称为适应性维护。
(3)完善性维护。
为增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。
(4)预防性维护。
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。
30.软件维护的特点是什么?
主要体现在三个方面:
(1)非结构化维护和结构化维护。
软件的开发过程对软件的维护有很大的影响。
若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。
若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。
(2)维护的困难性。
软件维护的困难性是由于软件需求分析和开发方法的缺陷。
软件生存周期中的开发阶段没有严格而又科学的管理和规划,就会引起软件运行时的维护困难。
(3)软件维护的费用。
软件维护的费用在总费用中的比重是在不断增加的,这是软件维护有形的代价。
另外还有无形的代价,即要占有更多的资源。
软件维护费用增加的占有原因是软件维护的生产率非常低。
31.软件维护的副作用有哪些?
答:
维护的副作用有以下三种:
(1)编码副作用。
在使用程序设计语言修改源代码时可能引入的错误。
(2)数据副作用。
在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致软件错误。
数据副作用是修改软件信息结构导致的结果。
但它可以通过详细的设计文档加以控制。
(3)文档副作用。
如果对可执行软件的修改没有反映在文档中,就会产生文档副作用。
32.什么是软件可维护性?
可维护性度量的特性是什么?
答:
软件可维护性的定义:
软件能够被理解、校正、适应及增强功能的容易程度。
软件的可维护性可用以下七个质量特性来衡量,即可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
33.快速原型模型有几种,各有什么特点?
快速原形模型根据原型的不同作用,有三类原型模型:
(1)探索型原型:
把原型用于开发的需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。
它主要针对开发目标模糊,用户与开发者对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。
(2)实验型原型:
主要用于设计阶段,考核实现方安是否合适,能否实现。
对于一个大型系统,若对设计方案心中没有把握时,可通过这种原型的开发来证实设计方案的正确性。
(3)演化型原型:
它将原型思想扩展到软件开发的全过程,就是及早向用户提交一个原型系统,在得到用户认可后,将原型系统不断扩充演化为最终的软件系统。
34.快速原型的开发步骤是什么?
快速原型的开发步骤是:
(1)快速分析:
在分析人员与用户的配合下,迅速确定系统基本需求并开始构造原型。
(2)构造原型:
在快速分析的基础上,根据基本需求说明尽快实现一个可运行的系统。
(3)运行原型:
通过运行快速原型,发现问题,消除误解,达到开发者也用户的充分协调。
(4)评价原型:
在运行的基础上,评价原型的特性,分析运行效果是否满足用户的需求,提出全面的修改意见。
(5)修改:
根据评价原型的活动结果进行修改,修改过程代替初始的快速分析,从而实现原型开发的循环过程。
用户与开发者在这种循环过程中不断接近系统的最终要求。
上述步骤在软件工具的支持下往往是互相交融在一起的,而不再象瀑布模型那样严格的阶段划分,线性推进。
35.说明对象、类、类结构、消息的基本概念。
(1)对象:
对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
对象包括有形实体、作用、事件、性能说明等类型。
对象具有状态和行为。
一个对象用数据值来描述它的状态,对象的操作则用于改变状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
对象内的数据具有自己的操作,从而可灵活地专门描述对象的独特行为,具有较强的独立性和自治性,其内部状态不受或很少受外界的影响,具有很好的模块化特点。
为软件重用奠定了坚实的基础。
(2)类:
具有相同或相似性质的对象的抽象就是类。
因此,对象的抽象就是类,类的具体化就是对象,也可以说类的实例是对象。
(3)类结构:
类与类之间的结构关系,包括一般-具体结构关系和整体-部分结构关系。
一般-具体关系结构称为分类结构,也可以说是"或"关系或"isa"关系,类的这种层次结构可用来描述现实世界中的一般化的抽象关系,通常越在上层的类越具有一般性和共性,越在下层的类越具体、越细化。
整体-部分结构称为组装结构,它们之间的关系是一种"与"关系,或者是"hasa"关系。
类的这种层次关系可用来描述现实世界中的类的组成的抽象关系。
上层的类具有整体性,下层的类具有成员性。
在类的层次结构中,通常上层的类称为父类或超类,下层类称为子类。
(4)消息:
对象之间进行通信的构造叫做消息。
在对旬的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
接收消息的对象经过解释,然后给予响应。
这种通信机制称为消息传递。
发送一条消息的格式是"对象名.方法名(参数)"。
36.说明面向对象的特征和要素。
面向对象的特征是:
(1)对象唯一性。
每个对象都有自身唯一的标识,在对象生存期中,其标识不变,不同的对象不能有不同的标识。
(2)分类性。
是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
(3)继承性。
是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
(4)多态性。
是指相同的操作或函数过程可以作用于多种类型的对象上并获得不同的结果。
面向对象的要素是:
(1)抽象。
(2)封装性(信息隐蔽)
(3)共享性。
37.如何成为优秀的软件人才?
38.结合课程设计,谈谈软件开发过程的各个阶段的工作任务?
39.结合课程设计,谈谈团队精神。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 40