作者:不详 来源:北京自考热线 http://www.csai.cn 2005年10月9日
1、可行性研究的任务是什么?
首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。然后,分析员进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决方法,对每种解决方法都要研究它的可行性,可从以下三个方面分析研究每种解决方法的可行性。㈠技术可行性:对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。㈡经济可行性:进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。㈢社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
2、什么是模块的影响范围?什么是模块的控制范围?他们之间应该建立什么关系?
一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。如果再设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。
3、非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?
非渐增式测试与渐增式测试的测试方法有以下区别:㈠非渐增式测试方法把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。而渐增式测试往往把单元测试与集成测试和在一起,同时完成。㈡非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量较少。㈢渐增式可以较早的发现接口之间的错误,非渐增式最后组装是才发现。㈣渐增式有利于排错,发生错误往往和最近加进来的模块有关,而非渐增式发现接口错误推迟到最后,很难判断是哪一部分接口出错。㈤渐增式比较彻底,已测试的模块和新的模块再测试。㈥渐增式占用的时间较多,但非渐增式须更多的驱动模块、桩模块也占用一些时间。㈦非渐增式开始可并行测试所有模块,能充分利用人力,对测试大型软件很有意义。渐增式测试有以下两种不同的组装模块的方法:㈠自顶向下组合。该方法只需编写桩模块,其步骤是从顶层模块开始,沿被测程序的软件结构图的控制路径逐步向下测试,从而把各个模块都结合起来,它又有两种组合策略:①深度有先策略:先从软件结构中选择一条主控制路径,把该路径上的模块一个个结合进来进行测试,以便完成一个特定的子功能,接着再结合其它需要优先考虑的路径。②宽度有先策略:逐层结合直接下属的所有模块。㈡自低向上结合。该方法仅需编写驱动模块。其步骤为:①把底层模块组合成实现一个个特定子功能的族。②为每一个族编写一个驱动模块,以协调测试用例的输入和测试结果的输出。③对模块族进行测试。④按软件结构图依次向上扩展,用实际模块替换驱动模块,形成一个个更大的族。⑤重复②至④步,直至软件系统全部测试完毕。
4、软件质量与软件质量保证的含义是什么?
从实际应用来说,软件质量定义为:㈠与所确定的功能和性能需求的一致性。㈡与所成文的开发标准一致性。㈢与所有专业开发的软件所期望的隐含特性的一致性。软件质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。5、软件工程标准化的意义是什么?都有哪些软件工程标准?积极推进软件工程标准化,其道理是显而易见的。仅就一个软件开发项目来说,有许多层次,不同分工的人员相互配合,在开发项目的各个部分以及各开发阶段之间也都存在许多联系和衔接问题。如何把这些错综复杂的关系协调好,需要有一系列统一的约束和规定。在软件开发项目取得阶段成果或最后完成是时,需要进行阶段评价和验收测试。投入运行的软件,其维护工作中遇到问题又与开发工作者有着密切的关系。软件的管理工作则渗透到软件生存期的每一个环节。所有这些都要要求提供统一的行动规范和衡量准则,使得各种工作都有章可循。软件工程的标准主要有以下三个:㈠FIPS135是美国国家标准局发布的《软件文档管理指南》㈡NSAC
——39是美国核子安全分析中心发布的《安全参数显示系统的验证与确认》。㈢ISO5807是国际标准化组织公布(现已成为中国的国家标准)的《信息处理—数据流程图、程序流程图、程序网络图和系统资源图的文件编制符号及约定》。
5、需求分析阶段的基本任务是什么?
需求分析阶段的基本任务是要准确的定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:㈠问题识别。双方确定对问题的综合需求,这些需求包括:功能需求、性能需求、环境需求、用户界面需求,另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求。㈡分析与综合,导出软件的逻辑模型。分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。这里也包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成份,并用图文结合的形式,建立起新系统的逻辑模型。㈢编写文档。编写“需求规格说明书”、编写初步用户使用手册、编写确认测试计划、修改完善软件开发计划。
6、采用黑盒技术设计测试用例有哪几种方法?这些方法各有什么特点?
㈠等价类划分。
等价类划分是将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其它值的测试。
㈡边界值分析。
该方法是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的情况,根据这些情况选择测试用例。
㈢错误推测。
错误推测法没有确定的步骤,凭检验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。
㈣因果图。
因果图能有效的检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
7、说明动态建模的过程。
㈠准备脚本。
动态分析从寻找事件开始,然后确定各对象的可能事件的顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。
㈡确定事件。
确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作。
㈢准备事件跟踪表。
把脚本表示成一个事件跟踪表,对象为表中的列,给每一个对象分配一个独立的列。
㈣构造状态图。
对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。
8、软件生产经历了几个阶段?各有何特征?
软件生产至今已经历了三个阶段:㈠程序设计时代(1946-1956):这个阶段的生产方式是个体手工劳动,使用的工具实际其语言、汇编语言。开发方法是追求编程技巧,追求程序运行效率。硬件特征是价格贵、存储容量小,运行可靠性差。软件特征是只有程序、程序设计概念,不重视程序设计方法。㈡程序系统时代(1956-1968):这个阶段的生产方式是作坊式的小集团合作生产,生产工具是高级语言,开发方法仍就靠个人技巧,但开始提出结构化方法。硬件特征是速度、容量、工作可靠性有明显提高。软件特征是程序员数量猛增,但开发技术没有新的突破,开发人员的素质和落后的开发技术不适应规模大、结构复杂的软件开发,导致软件危机的产生。㈢软件工程时代(1968至今):这个阶段的生产方式是工程化的生产,使用数据库、开发工具、开发环境、网络、分布式、面向对象技术来开发软件。硬件特征是向超高速、大容量、微型化以及网络化方向发展。软件特征是开发技术有很大进步,但是未能获得突破性进展,软件价格不断上升,没有完全摆脱软件危机。5、简述Gantt图的功能及不足。Gantt图常用水平线段来描述把任务分解成子任务,以及每个子任务的进度安排,动态反映软件开发进度情况,该图可以:表示任务分解成子任务情况;表示每个任务的开始时间和完成时间,线段的长度表示子任务完成所需要的时间;表示子任务之间的并行和串行关系。Gantt图只能表示任务之间的并行与串行的关系,难以反映多个任务之间存在的复杂关系,不能直观表示任务之间相互依赖制约关系,以及哪些任务是关键字任务等信息,因此仅仅用Gantt图作为进度的安排是不够的。6、什么是数据字典?其作用是什么?它有哪些条目?数据字典(简称DD)是用来定义数据流图中的各个成分的具体含义的,它以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。他和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分。数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的,因此也像普通字典一样,要把所有条目按一定的次序排列起来,以便查阅。数据字典有以下四类条目:数据流、数据项、数据存储、基本加工。数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。7、调试的目的是什么?调试有哪些技术手段?调试的目的是确定错误的原因和位置,并改正错误,因此调试也成为纠错。调试技术主要有:简单的调试方法,主要有在程序中插入打印语句、运行部分程序等;归纳法调试,他从测试结果发现的线索(错误迹象、征兆)入手、分析他们之间的联系,导处错误原因的假设,然后再证明或否定这个假设;演绎法调试,该方法列出所有可能的错误原因的假设,然后利用测试数据排除不适当的假设,最后再测试数据验证余下的假设确实是出错的原因;回溯法调试,该方法从程序产生错误的地方出发,人工沿程序的逻辑路径反向搜索,直到找到错误的原因为止。
9、 如何做好软件质量保证工作?
软件质量保证工作是软件工程管理的重要内容,软件质量保证应做好以下几个方面的工作:<1>采用技术手段和工具。质量保证活动要贯彻开发过程始终,必须从采用技术手段和工具,尤其是使用软件开发环境来进行软件开发。<2>组织正式技术评审,在软件开发的第一个阶段结束时,都要组织正式的技术评审。国家标准要求单位必须采用审查、文档评审、设计评审、审计和测试等具体手段来保证质量。<3>加强软件测试。软件测试是质量保证的重要手段,因为测试可发现软件可发现软件中大多数潜在错误。<4>推选软件工程规范(标准)。用户可以自己指定软件工程规范(标准),但标准一旦确认就应贯彻执行。<5>对软件的变更进行控制。软件的修改和变更常常会引起潜伏的错误,因此必须严格控制软件的修改和变更。<6>对软件质量进行度量。即对软件质量进行跟踪,及时记录和报告软件质量情况。
10、什么是数据流图?其作用是什么?
其中的基本符号各表示什么含义?数据流图简称DFD,是SA方法中用于表示系统逻辑模型的一种工具。它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图有四种基本图形符号:“→”箭头表示数据流;“○”圆或椭圆表述加工;“=”双杠表示数据存储;“”方框表示数据的源点或终点。
11、可行性研究的任务是什么?
首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。然后,分析员进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决方法,对每种解决方法都要研究它的可行性,可从以下三个方面分析研究每种解决方法的可行性。㈠技术可行性:对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。㈡经济可行性:进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。㈢社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
12、什么是模块的影响范围?什么是模块的控制范围?他们之间应该建立什么关系?
一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。如果再设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。
13、非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?
非渐增式测试与渐增式测试的测试方法有以下区别:㈠非渐增式测试方法把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。而渐增式测试往往把单元测试与集成测试和在一起,同时完成。㈡非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量较少。㈢渐增式可以较早的发现接口之间的错误,非渐增式最后组装是才发现。㈣渐增式有利于排错,发生错误往往和最近加进来的模块有关,而非渐增式发现接口错误推迟到最后,很难判断是哪一部分接口出错。㈤渐增式比较彻底,已测试的模块和新的模块再测试。㈥渐增式占用的时间较多,但非渐增式须更多的驱动模块、桩模块也占用一些时间。㈦非渐增式开始可并行测试所有模块,能充分利用人力,对测试大型软件很有意义。渐增式测试有以下两种不同的组装模块的方法:㈠自顶向下组合。该方法只需编写桩模块,其步骤是从顶层模块开始,沿被测程序的软件结构图的控制路径逐步向下测试,从而把各个模块都结合起来,它又有两种组合策略:①深度有先策略:先从软件结构中选择一条主控制路径,把该路径上的模块一个个结合进来进行测试,以便完成一个特定的子功能,接着再结合其它需要优先考虑的路径。②宽度有先策略:逐层结合直接下属的所有模块。㈡自低向上结合。该方法仅需编写驱动模块。其步骤为:①把底层模块组合成实现一个个特定子功能的族。②为每一个族编写一个驱动模块,以协调测试用例的输入和测试结果的输出。③对模块族进行测试。④按软件结构图依次向上扩展,用实际模块替换驱动模块,形成一个个更大的族。⑤重复②至④步,直至软件系统全部测试完毕。
14、软件质量与软件质量保证的含义是什么?
从实际应用来说,软件质量定义为:㈠与所确定的功能和性能需求的一致性。㈡与所成文的开发标准一致性。㈢与所有专业开发的软件所期望的隐含特性的一致性。软件质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。5、软件工程标准化的意义是什么?都有哪些软件工程标准?积极推进软件工程标准化,其道理是显而易见的。仅就一个软件开发项目来说,有许多层次,不同分工的人员相互配合,在开发项目的各个部分以及各开发阶段之间也都存在许多联系和衔接问题。如何把这些错综复杂的关系协调好,需要有一系列统一的约束和规定。在软件开发项目取得阶段成果或最后完成是时,需要进行阶段评价和验收测试。投入运行的软件,其维护工作中遇到问题又与开发工作者有着密切的关系。软件的管理工作则渗透到软件生存期的每一个环节。所有这些都要要求提供统一的行动规范和衡量准则,使得各种工作都有章可循。软件工程的标准主要有以下三个:㈠FIPS135是美国国家标准局发布的《软件文档管理指南》㈡NSAC
——39是美国核子安全分析中心发布的《安全参数显示系统的验证与确认》。㈢ISO5807是国际标准化组织公布(现已成为中国的国家标准)的《信息处理—数据流程图、程序流程图、程序网络图和系统资源图的文件编制符号及约定》。
15、需求分析阶段的基本任务是什么?
需求分析阶段的基本任务是要准确的定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:㈠问题识别。双方确定对问题的综合需求,这些需求包括:功能需求、性能需求、环境需求、用户界面需求,另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求。㈡分析与综合,导出软件的逻辑模型。分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。这里也包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成份,并用图文结合的形式,建立起新系统的逻辑模型。㈢编写文档。编写“需求规格说明书”、编写初步用户使用手册、编写确认测试计划、修改完善软件开发计划。
16、采用黑盒技术设计测试用例有哪几种方法?这些方法各有什么特点?
㈠等价类划分。等价类划分是将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其它值的测试。㈡边界值分析。该方法是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的情况,根据这些情况选择测试用例。㈢错误推测。错误推测法没有确定的步骤,凭检验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。㈣因果图。因果图能有效的检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
17、说明动态建模的过程。
㈠准备脚本。动态分析从寻找事件开始,然后确定各对象的可能事件的顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。㈡确定事件。确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作。㈢准备事件跟踪表。把脚本表示成一个事件跟踪表,对象为表中的列,给每一个对象分配一个独立的列。㈣构造状态图。对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。
18、软件生产经历了几个阶段?各有何特征?
软件生产至今已经历了三个阶段:㈠程序设计时代(1946-1956):这个阶段的生产方式是个体手工劳动,使用的工具实际其语言、汇编语言。开发方法是追求编程技巧,追求程序运行效率。硬件特征是价格贵、存储容量小,运行可靠性差。软件特征是只有程序、程序设计概念,不重视程序设计方法。㈡程序系统时代(1956-1968):这个阶段的生产方式是作坊式的小集团合作生产,生产工具是高级语言,开发方法仍就靠个人技巧,但开始提出结构化方法。硬件特征是速度、容量、工作可靠性有明显提高。软件特征是程序员数量猛增,但开发技术没有新的突破,开发人员的素质和落后的开发技术不适应规模大、结构复杂的软件开发,导致软件危机的产生。㈢软件工程时代(1968至今):这个阶段的生产方式是工程化的生产,使用数据库、开发工具、开发环境、网络、分布式、面向对象技术来开发软件。硬件特征是向超高速、大容量、微型化以及网络化方向发展。软件特征是开发技术有很大进步,但是未能获得突破性进展,软件价格不断上升,没有完全摆脱软件危机。5、简述Gantt图的功能及不足。Gantt图常用水平线段来描述把任务分解成子任务,以及每个子任务的进度安排,动态反映软件开发进度情况,该图可以:表示任务分解成子任务情况;表示每个任务的开始时间和完成时间,线段的长度表示子任务完成所需要的时间;表示子任务之间的并行和串行关系。Gantt图只能表示任务之间的并行与串行的关系,难以反映多个任务之间存在的复杂关系,不能直观表示任务之间相互依赖制约关系,以及哪些任务是关键字任务等信息,因此仅仅用Gantt图作为进度的安排是不够的。6、什么是数据字典?其作用是什么?它有哪些条目?数据字典(简称DD)是用来定义数据流图中的各个成分的具体含义的,它以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。他和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分。数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的,因此也像普通字典一样,要把所有条目按一定的次序排列起来,以便查阅。数据字典有以下四类条目:数据流、数据项、数据存储、基本加工。数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。7、调试的目的是什么?调试有哪些技术手段?调试的目的是确定错误的原因和位置,并改正错误,因此调试也成为纠错。调试技术主要有:简单的调试方法,主要有在程序中插入打印语句、运行部分程序等;归纳法调试,他从测试结果发现的线索(错误迹象、征兆)入手、分析他们之间的联系,导处错误原因的假设,然后再证明或否定这个假设;演绎法调试,该方法列出所有可能的错误原因的假设,然后利用测试数据排除不适当的假设,最后再测试数据验证余下的假设确实是出错的原因;回溯法调试,该方法从程序产生错误的地方出发,人工沿程序的逻辑路径反向搜索,直到找到错误的原因为止。
19、 如何做好软件质量保证工作?
软件质量保证工作是软件工程管理的重要内容,软件质量保证应做好以下几个方面的工作:<1>采用技术手段和工具。质量保证活动要贯彻开发过程始终,必须从采用技术手段和工具,尤其是使用软件开发环境来进行软件开发。<2>组织正式技术评审,在软件开发的第一个阶段结束时,都要组织正式的技术评审。国家标准要求单位必须采用审查、文档评审、设计评审、审计和测试等具体手段来保证质量。<3>加强软件测试。软件测试是质量保证的重要手段,因为测试可发现软件可发现软件中大多数潜在错误。<4>推选软件工程规范(标准)。用户可以自己指定软件工程规范(标准),但标准一旦确认就应贯彻执行。<5>对软件的变更进行控制。软件的修改和变更常常会引起潜伏的错误,因此必须严格控制软件的修改和变更。<6>对软件质量进行度量。即对软件质量进行跟踪,及时记录和报告软件质量情况。
20、什么是数据流图?其作用是什么?
其中的基本符号各表示什么含义?数据流图简称DFD,是SA方法中用于表示系统逻辑模型的一种工具。它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图有四种基本图形符号:“→”箭头表示数据流;“○”圆或椭圆表述加工;“=”双杠表示数据存储;“”方框表示数据的源点或终点。
21、 什么是确认测试?该阶段有哪些工作?
确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。确认测试阶段有两项工作,进行确认测试与软件配置审查。<1>确认测试一般是在模拟环境中运用黑盒测试方法,由专门测试人员和用户参加的测试。<2>软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如果发现遗漏和错误,应补充和改正,同时要编排好目录,为以后的软件维护工作奠定基础。
22、详细设计的基本任务是什么?有哪几种描述方法?
详细设计是软件设计的第二阶段,其基本任务有:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计,即确定数据库的物理结构;其它设计,根据软件系统类型,还可能要进行代码设计、输入/输出格式设计、人机对话设计;编写详细设计说明书;评审。详细描述处理过程常用三种工具:图形、表格和语言。如结构化程序流程图、盒图和问题分析图。IPO图也是详细设计的主要工具之一。表格工具如判定表可作为详细设计中描述逻辑条件复杂的算法。过程设计语言(PDL)是一种用于描述模块算法设计和处理细节的语言工具。5、什么是软件危机?其产生的原因是什么?当软件开发技术的进步不能跟上硬件技术的进步,未能满足发展的要求,致软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。主要表现为:<1>经费预算经常突破,完成时间一再拖延;<2>开发的软件不能满足用户要求;<3>开发的软件可维护性差;<4>开发的软件可靠性差。造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。共产生原因主要有以下几方面:<1>软件的规模越来越大,结构越来越复杂;<2>软件开发管理困难而复杂;<3>软件开发费用不断增加;<4>软件开发技术落后;<5>生产方式落后;<6>开发工具落后,生产率提高缓慢。6、CASE工作台有哪些分类?一个CASE工作台是一组工具集,支持像设计、实现或测试等特定的软件开发阶段。工作台工具能通过共享文件、共享仓库或共享数据结构来集成。它能支持大多数的软件过程活动。工作台有:<1>程序设计工作台;<2>分析和设计工作台;<3>测试工作台;<4>交叉开发工作台;<5>配置管理(CM)工作台;<6>文档工作台<7>项目管理工作台。7、IDEF0方法有什么特点?<1>采用方框和箭头等简单的图形符号描述系统的活动和数据流,描述活动所受到的约束条件及实现机制。从侧面清楚的反映了系统的功能。故IDEF0图宜全为正式文档。<2>采用严格的自顶向下、逐层分解的方式建立系统功能模型。顶层确定系统范围,采用抽象原则,然后有控制的逐步展开有关活动的细节,符合SA方法的分析策略。同时,IDEF0规定每张图至少有3个、最多有6个方框,上界6保证采用层次性描述复杂问题的可理解性,下界3保证分解有意义。
23、软件维护的特点是什么?
主要体现在三个方面:<1>非结构化维护和结构化维护。软件的开发过程对软件的维护有很大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。<2>维护的困难性。软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而有科学的管理和规划,就会引起软件运行时的维护困难。<3>软件维护的费用。软件维护的费用在总费用中的比重是在不断增加的,这是软件维护有形的代价。另外还有无形的代价,即要占用更多的资源。软件维护费用增加的主要原因是软件维护的生产率非常低。
24、什么是CASE?CASE工具有哪些分类?
CASE是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发。从学术研究角度讲,CASE是多年来在软件开发管理、软件开发方法、软件开发环境和软件工具等方面研究和发展的产物。CASE把软件开发技术、软件工具和软件开发方法集成到一个统一而一致的框架中,并且吸引了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和许多其它计算机领域的原理和技术。因而,CASE领域是一个应用集成和综合的领域。从产业角度讲,CASE是种类繁多的软件开发和系统集成的产品及软件工具的集合。CASE分类:<1>CASE技术种类CASE系统所涉及到的技术有两类:一类是支持软件开发过程本身的技术;另一类是支持软件开发过程管理的技术。从CASE系统产生方式来看,还有一种特殊的CASE技术,即元——CASE技术。他是生成CASE系统的生成器所采用的技术。该生成器可用来创建支持软件开发过程活动及过程管理的CASE系统。<2>CASE工具的分类对CASE工具分类的标准可分为:①功能。功能是对软件进行分类的最常用的标准。②支持的过程。根据支持的过程,工具可分为设计工具、编程工具、维护工具等。③支持的范围。根据支持的范围,可分为窄支持、较宽支持和一般支持工具。窄支持指支持过程中特定的任务,较宽支持是指支持特定过程阶段;一般支持是指支持覆盖软件过程的全部阶段或大多数阶段。1993年,Fuggetta根据CASE系统对软件过程的支持范围,提出CASE系统可分为三类:①支持单个过程任务的工具。工具可能是通用的,或者也可能归组到工作台。②工作台支持某一过程所有活动或某些活动。他们一般以或多或少的集成度组成工具集。③环境支持软件过程所有活动或至少大部分。他们一般包括几个不同的工作台,将这些工作台以某种方式集成起来。
25、 说明容错软件的定义与容错的一般方法。
归纳容错软件的定义,有以下四种:⑴规定功能的软件,在一定程序上对自身错误的作用(软件错误)具有屏蔽能力,则称此软件为具有容错功能的软件。⑵规定功能的软件,在一定程序上能从错误状态自动恢复到正常状态,则称之为容错软件。⑶规定功能的软件,在因错误而发生错误时,仍然能在一定程度上完成预期的功能,则把该软件称为容错软件。⑷规定功能的软件,在一定程度上具有容错能力,则称之为容错软件。实现容错技术的主要手段是冗余,通常冗余技术分为四类。⑴结构冗余。结构冗余是通常用的冗余技术。按其工作方式,它分为静态、动态和混合冗余三种。⑵信息冗余。为检查或纠正信息在运算或传输中的错误须外加一部分信息,这种现象称为信息冗余。⑶时间冗余。是指以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。⑷冗余附加技术。是指为实现上述冗余技术所需的资源和技术。包括程序、指令、数据、存放和调动他们的空间和通道等。
26、软件概要设计阶段的基本任务是什么?
⑴设计软件系统结构(简称软件结构),具体为:①采用某种设计方法,将一个复杂的系统按功能划分成模块。②确定每个模块的功能。③确定模块之间的调用关系。④确定模块之间的接口,即模块之间传递的信息。⑤评价模块结构的质量。⑵数据结构及数据库设计,汉数据结构的设计及数据库的设计。⑶编写概要设计文档。主要有:概要设计说明书;数据库设计说明书;用户手册;修订测试计划。⑷评审。5、快速原型模型有几种?各有何特点?根据原型的不同作用,有三类原型模型:⑴探索型原型。这种类型的原型模型是把原型用于开发的需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发着对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。⑵实验型原型。这种原型主要用于设计阶段,考核实现方案是否合适,能否实现,对于一个大型系统,若对设计方案心中没有把握时,可通过这种原型来证实设计方案的正确性。⑶演化型原型。这种原型主要用于及早向用户提交一个原型系统,该原型系统或者包含系统的框或者包含系统的主要功能。在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统,它将原型的思路扩展到软件开发的全过程。
27、在划分软件生存周期阶段时,应遵循的基本原则是什么?
软件生存周期的各个阶段有不同的划分。软件规模、种类、开发方式、开发环境以及开发使用方法都影响软件生存周期的划分。在划分软件生存周期阶段时,应遵循的一条基本原则是各阶段的任务应尽可能相对独立,同一阶段各项目任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件项目开发的组织管理。
28、请说明软件文档的作用?
软件开发项目生存期各阶段都包含哪些文档?软件文档的作用是:提高软件开发过程的能见度;提高开发效率;作为开发人员阶段工作成果和结束标志;记录开发过程的有关信息便于使用与维护;提供软件运行、维护和培训有关资料;便于用户了解软件功能、性能。软件开发项目生存期各阶段应包括得文档以及与各类人员的关系如下:可行性研究报告、项目开发计划、软件需求说明书、数据要求说明书、测试计划、概要设计说明书、详细设计说明书、用户手册、操作手册、测试分析报告、开发进度月报、项目开发总结、程序维护手册(维护修改建议)。
29、软件开发成本估算方法有哪几种?
<1>自顶向下估算方法。估算人员参照以前完成的项目所耗费的总成本(或总工作量),来推算将要开发的软件的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配,这样方法称为自顶向下的估算方法。<2>自底向上估算方法。自底向上估算方法是将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。<3>差别估算方法。差别估算是将开发项目与一个或多个已完成的类似项目进行比较,找出与某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出开发项目的总成本。<4>专家估算法。依靠一个或多个专家对要求的项目做出估算。<5>类推估算法。<6>算式估算法。
30、简述SA方法的优缺点?
结构化分析方法是软件需求分析中公认的、有成效的、技术成熟、使用广泛的一种方法,它较适合于开发数据处理类型软件的需求分析。该方法利用图形等半形式化工具表达需求,简明、易读,也易于使用,为后一阶段的设计、测试、评价提供了有利的条件。但SA方法也存在有不足之处:⑴传统的SA方法主要用于数据处理方面的问题,主要工具DFD体现了系统“做什么”的功能,但它仅是一个静态模型,没有反映处理的顺序,即控制流程。因此,不适合描述实时控制系统。⑵SA方法使用DFD在分析与描述“数据要求”方面是有限的,DFD应与数据库技术中的实体联系图(ER图)结合起来。⑶DFD不是和描述人机界面系统的需求。SA方法则对这一部分用自然语言作补充,对这类系统可采取其它的分析方法。⑷为了更精确地描述软件需求,提高软件系统的可靠性、安全性,也便于实现自动化,SA方法可与形式化方法结合起来。5、什么是软件工程?它的目标和内容是什么?软件工程是一种用科学知识和技术原理来定义、开发、维护软件的一门学科。软件工程是一门工程性学科,目的是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:付出较低的开发成本,达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。软件工程研究的主要内容是软件开发技术和软件开发管理两方面,在软件开发技术中,主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,主要研究软件管理学、软件经济学、软件心理学等。6、简述容错系统的设计过程?容错系统的设计过程包括以下设计步骤:⑴安设计任务要求进行常规设计,尽量保证设计的正确。⑵对可能出现的错误分类,确定实现容错的范围。⑶按照成本—效益最优原则,选用某种冗余手段来实现对各类错误的屏蔽。⑷分析或验证上述冗余结构的容错效果。如果效果没有达到预期的程度,则应重新进行冗余结构设计。如此重复,直到有一个满意的结果为止。7、渐增模型有几种?各有何特点?渐增模型是瀑布模型的变种,它有两类:⑴增量构造模型。它在瀑布模型基础上,对一些阶段进行整体开发,对另一些阶段进行增量开发。也就是说在前面的开发阶段按瀑布模型进行整体开发,后面的开发阶段按增量方式开发。⑵演化提交模型。它在瀑布模型基础上,所有阶段都进行增量开发,也就是说不仅是增量开发,也是增量提交。8、试述系统开发的生命周期。系统开发是管理信息系统建设中最重要的一个阶段,从项目开发开始到结束的整个过程,称为系统开发的生命周期。系统开发的生命周期一般分为以下阶段:⑴系统分析。这一阶段的主要任务是明确用户的信息需求,提出新系统的逻辑方案。需要进行的工作有系统的初步调查,可行性研究,现行系统的详细调查及新系统逻辑模型的提出等。⑵系统设计。这一阶段的主要任务是根据新系统的逻辑方案进行软、硬件系统的设计,其中包括总体结构设计、输出设计、输入设计、处理过程设计、数据存储设计和计算机系统方案的选择等。⑶系统实施。这一阶段将设计的系统付诸实施,主要工作有软件的程序编制与软件包的购置、计算机与通讯设备的购置、系统的安装、调试与测试、新旧系统的转换等。
31、如何控制因修改而引起的副作用?
为了控制因修改而引起的副作用,要做到:⑴按模块把修改分组;⑵自顶向下的安排被修改模块的顺序;⑶每次修改一个模块;⑷对每个修改了的模块,在安排修改下一个模块之前要确定这个修改的副作用,可使用交叉引用表、存储映像表、执行流程跟踪等。
32、什么是基本加工?
描述表达基本加工逻辑功能的结构化工具的特点?数据流图中所有不进一步分解的加工,称为基本加工。描述表达基本加工逻辑功能的结构化工具主要有:⑴自然语言的文字叙述。⑵结构化语言。⑶决策树。⑷决策表。⑸数学公式。⑹上述各工具的联合使用。其特点如下所述:⑴自然语言语义丰富,语法灵活,可描述十分广泛而复杂的问题,表达人们丰富的感情和智慧。⑵结构化语言没有严格的语法规定,使用的词汇比形式化的计算机语言广泛,但使用的语句类型很少,结构规范,表达的内容清晰、准确、易理解,不易产生歧义。⑶决策树清晰的表达了在什么情况下应采取什么策略,不易产生逻辑上的混乱。是描述基本加工的逻辑功能的有效工具。⑷决策表将比较复杂的决策问题简洁、明确、一目了然的描述出来。它是描述条件比较多的决策问题的有效工具。
33、开放式工作台有什么优点?
⑴易将某个工具加入到开放式工作台中,还可以用新的工具取代已有的工具。⑵可以由一个配置管理系统来管理由工具输出的文件。⑶能不断增强工作台的功能,不断发展工作台。⑷工作台不依赖于某个供应商,而能从不同销售商处购买工具。如果一个工具开发商不提供支持了,最多影响该工作台的一部分工具,其余的工具还可以继续使用。
34、增量模型的基本思想是什么?
为了克服瀑布模型的局限性,使开发过程具有一定的灵活性和可修改性,于是产生了增量模型。它是在瀑布模型的基础上加以修改而形成的。增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早的产生工作软件。增量模型是在项目的开发过程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,以一定的时间间隔开发部分工作软件;增量提交是指在项目开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。增量开发和增量提交可以同时使用,也可以单独使用。5、对软件开发环境的基本要求有哪些?⑴软件开发环境应是高度集成的一体化的系统。⑵软件开发环境应具有高度的通用性。⑶软件开发环境应易于定制、裁剪或扩充以符合用户要求,即软件开发环境应具有高度的适应性和灵活性。⑷软件开发环境不但可应用性要好,而且是易使用的、经济高效的系统。⑸软件开发环境应有辅助开发向半自动开发和自动开发逐步过渡的系统。6、项目开发计划有哪些内容?项目开发计划是一个管理性的文档,它的主要内容如下:⑴项目概述:说明项目的各项主要工作;说明软件的功能、性能;为完成项目应具备的条件;用户及合同承包者承担的工作、完成期限及其它条件限制;应交付的程序名称,所使用的语言及存储形式;应交付的文档。⑵实施计划:说明任务的划分,各项任务的责任人;说明项目开发进度,按阶段应完成的任务,用图表说明每项任务的开始时间和完成时间;说明项目的预算,各阶段的费用支出预算。⑶人员组织及分工:说明开发该项目所需人员的类型、组成结构、数量等。⑷交付期限:说明项目最后完工交付的日期。7、软件设计的基本原理包括哪些内容?模块化。是指解决一个复杂问题时自顶向下逐层把软件系统化分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化是软件解决复杂问题所具备的手段。抽象。抽象是认识复杂现象过程中使用的思维工具即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其它因素。软件工程过程中的每一部都可以看作是对软件解决方法的抽象层次的一次细化。信息隐蔽。是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其它模块来说,是不能访问的。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。数据独立性。指每个模块只完成系统要求的独立的子功能,并且与其它模块的联系最少且接口简单。8、白盒测试法有哪些覆盖标准?试对他们的检错能力进行比较。白盒测试法的覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件的不到测试。条件覆盖对每一条件进行单独检查,一般情况它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但由于计算机系统软件实现方式的限制,实际上不一定达到条件覆盖的标准。条件组合覆盖发现错误能力较强,凡满足其标准的测试用例,也必须满足前四种覆盖标准。前五种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能会使程序某些路径没有执行到。路径覆盖根据各判定表达式取值的组合,使程序沿着不同的路径执行,查错能力强。但由于它是从各判定的整体组合出发设计测试用例的,可能使测试用例达不到条件组合覆盖的要求。
35、什么是确认测试?该阶段有哪些工作?
确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。确认测试阶段有两项工作,进行确认测试与软件配置审查。<1>确认测试一般是在模拟环境中运用黑盒测试方法,由专门测试人员和用户参加的测试。<2>软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如果发现遗漏和错误,应补充和改正,同时要编排好目录,为以后的软件维护工作奠定基础。
36、详细设计的基本任务是什么?有哪几种描述方法?
详细设计是软件设计的第二阶段,其基本任务有:为每个模块进行详细的算法设计;为模块内的数据结构进行设计;对数据库进行物理设计,即确定数据库的物理结构;其它设计,根据软件系统类型,还可能要进行代码设计、输入/输出格式设计、人机对话设计;编写详细设计说明书;评审。详细描述处理过程常用三种工具:图形、表格和语言。如结构化程序流程图、盒图和问题分析图。IPO图也是详细设计的主要工具之一。表格工具如判定表可作为详细设计中描述逻辑条件复杂的算法。过程设计语言(PDL)是一种用于描述模块算法设计和处理细节的语言工具。5、什么是软件危机?其产生的原因是什么?当软件开发技术的进步不能跟上硬件技术的进步,未能满足发展的要求,致软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。主要表现为:<1>经费预算经常突破,完成时间一再拖延;<2>开发的软件不能满足用户要求;<3>开发的软件可维护性差;<4>开发的软件可靠性差。造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。共产生原因主要有以下几方面:<1>软件的规模越来越大,结构越来越复杂;<2>软件开发管理困难而复杂;<3>软件开发费用不断增加;<4>软件开发技术落后;<5>生产方式落后;<6>开发工具落后,生产率提高缓慢。6、CASE工作台有哪些分类?一个CASE工作台是一组工具集,支持像设计、实现或测试等特定的软件开发阶段。工作台工具能通过共享文件、共享仓库或共享数据结构来集成。它能支持大多数的软件过程活动。工作台有:<1>程序设计工作台;<2>分析和设计工作台;<3>测试工作台;<4>交叉开发工作台;<5>配置管理(CM)工作台;<6>文档工作台<7>项目管理工作台。7、IDEF0方法有什么特点?<1>采用方框和箭头等简单的图形符号描述系统的活动和数据流,描述活动所受到的约束条件及实现机制。从侧面清楚的反映了系统的功能。故IDEF0图宜全为正式文档。<2>采用严格的自顶向下、逐层分解的方式建立系统功能模型。顶层确定系统范围,采用抽象原则,然后有控制的逐步展开有关活动的细节,符合SA方法的分析策略。同时,IDEF0规定每张图至少有3个、最多有6个方框,上界6保证采用层次性描述复杂问题的可理解性,下界3保证分解有意义。
37、软件维护的特点是什么?
主要体现在三个方面:<1>非结构化维护和结构化维护。软件的开发过程对软件的维护有很大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。<2>维护的困难性。软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而有科学的管理和规划,就会引起软件运行时的维护困难。<3>软件维护的费用。软件维护的费用在总费用中的比重是在不断增加的,这是软件维护有形的代价。另外还有无形的代价,即要占用更多的资源。软件维护费用增加的主要原因是软件维护的生产率非常低。
38、什么是CASE?CASE工具有哪些分类?
CASE是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发。从学术研究角度讲,CASE是多年来在软件开发管理、软件开发方法、软件开发环境和软件工具等方面研究和发展的产物。CASE把软件开发技术、软件工具和软件开发方法集成到一个统一而一致的框架中,并且吸引了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和许多其它计算机领域的原理和技术。因而,CASE领域是一个应用集成和综合的领域。从产业角度讲,CASE是种类繁多的软件开发和系统集成的产品及软件工具的集合。CASE分类:<1>CASE技术种类CASE系统所涉及到的技术有两类:一类是支持软件开发过程本身的技术;另一类是支持软件开发过程管理的技术。从CASE系统产生方式来看,还有一种特殊的CASE技术,即元——CASE技术。他是生成CASE系统的生成器所采用的技术。该生成器可用来创建支持软件开发过程活动及过程管理的CASE系统。<2>CASE工具的分类对CASE工具分类的标准可分为:①功能。功能是对软件进行分类的最常用的标准。②支持的过程。根据支持的过程,工具可分为设计工具、编程工具、维护工具等。③支持的范围。根据支持的范围,可分为窄支持、较宽支持和一般支持工具。窄支持指支持过程中特定的任务,较宽支持是指支持特定过程阶段;一般支持是指支持覆盖软件过程的全部阶段或大多数阶段。1993年,Fuggetta根据CASE系统对软件过程的支持范围,提出CASE系统可分为三类:①支持单个过程任务的工具。工具可能是通用的,或者也可能归组到工作台。②工作台支持某一过程所有活动或某些活动。他们一般以或多或少的集成度组成工具集。③环境支持软件过程所有活动或至少大部分。他们一般包括几个不同的工作台,将这些工作台以某种方式集成起来。
39、说明容错软件的定义与容错的一般方法。
归纳容错软件的定义,有以下四种:⑴规定功能的软件,在一定程序上对自身错误的作用(软件错误)具有屏蔽能力,则称此软件为具有容错功能的软件。⑵规定功能的软件,在一定程序上能从错误状态自动恢复到正常状态,则称之为容错软件。⑶规定功能的软件,在因错误而发生错误时,仍然能在一定程度上完成预期的功能,则把该软件称为容错软件。⑷规定功能的软件,在一定程度上具有容错能力,则称之为容错软件。实现容错技术的主要手段是冗余,通常冗余技术分为四类。⑴结构冗余。结构冗余是通常用的冗余技术。按其工作方式,它分为静态、动态和混合冗余三种。⑵信息冗余。为检查或纠正信息在运算或传输中的错误须外加一部分信息,这种现象称为信息冗余。⑶时间冗余。是指以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。⑷冗余附加技术。是指为实现上述冗余技术所需的资源和技术。包括程序、指令、数据、存放和调动他们的空间和通道等。
40、软件概要设计阶段的基本任务是什么?
⑴设计软件系统结构(简称软件结构),具体为:①采用某种设计方法,将一个复杂的系统按功能划分成模块。②确定每个模块的功能。③确定模块之间的调用关系。④确定模块之间的接口,即模块之间传递的信息。⑤评价模块结构的质量。⑵数据结构及数据库设计,汉数据结构的设计及数据库的设计。⑶编写概要设计文档。主要有:概要设计说明书;数据库设计说明书;用户手册;修订测试计划。⑷评审。5、快速原型模型有几种?各有何特点?根据原型的不同作用,有三类原型模型:⑴探索型原型。这种类型的原型模型是把原型用于开发的需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发着对项目都缺乏经验的情况,通过对原型的开发来明确用户的需求。⑵实验型原型。这种原型主要用于设计阶段,考核实现方案是否合适,能否实现,对于一个大型系统,若对设计方案心中没有把握时,可通过这种原型来证实设计方案的正确性。⑶演化型原型。这种原型主要用于及早向用户提交一个原型系统,该原型系统或者包含系统的框或者包含系统的主要功能。在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统,它将原型的思路扩展到软件开发的全过程。
41、在划分软件生存周期阶段时,应遵循的基本原则是什么?
软件生存周期的各个阶段有不同的划分。软件规模、种类、开发方式、开发环境以及开发使用方法都影响软件生存周期的划分。在划分软件生存周期阶段时,应遵循的一条基本原则是各阶段的任务应尽可能相对独立,同一阶段各项目任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件项目开发的组织管理。
42、请说明软件文档的作用?
软件开发项目生存期各阶段都包含哪些文档?软件文档的作用是:提高软件开发过程的能见度;提高开发效率;作为开发人员阶段工作成果和结束标志;记录开发过程的有关信息便于使用与维护;提供软件运行、维护和培训有关资料;便于用户了解软件功能、性能。软件开发项目生存期各阶段应包括得文档以及与各类人员的关系如下:可行性研究报告、项目开发计划、软件需求说明书、数据要求说明书、测试计划、概要设计说明书、详细设计说明书、用户手册、操作手册、测试分析报告、开发进度月报、项目开发总结、程序维护手册(维护修改建议)。
43、软件开发成本估算方法有哪几种?
<1>自顶向下估算方法。估算人员参照以前完成的项目所耗费的总成本(或总工作量),来推算将要开发的软件的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配,这样方法称为自顶向下的估算方法。<2>自底向上估算方法。自底向上估算方法是将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。<3>差别估算方法。差别估算是将开发项目与一个或多个已完成的类似项目进行比较,找出与某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出开发项目的总成本。<4>专家估算法。依靠一个或多个专家对要求的项目做出估算。<5>类推估算法。<6>算式估算法。
44、简述SA方法的优缺点?
结构化分析方法是软件需求分析中公认的、有成效的、技术成熟、使用广泛的一种方法,它较适合于开发数据处理类型软件的需求分析。该方法利用图形等半形式化工具表达需求,简明、易读,也易于使用,为后一阶段的设计、测试、评价提供了有利的条件。但SA方法也存在有不足之处:⑴传统的SA方法主要用于数据处理方面的问题,主要工具DFD体现了系统“做什么”的功能,但它仅是一个静态模型,没有反映处理的顺序,即控制流程。因此,不适合描述实时控制系统。⑵SA方法使用DFD在分析与描述“数据要求”方面是有限的,DFD应与数据库技术中的实体联系图(ER图)结合起来。⑶DFD不是和描述人机界面系统的需求。SA方法则对这一部分用自然语言作补充,对这类系统可采取其它的分析方法。⑷为了更精确地描述软件需求,提高软件系统的可靠性、安全性,也便于实现自动化,SA方法可与形式化方法结合起来。5、什么是软件工程?它的目标和内容是什么?软件工程是一种用科学知识和技术原理来定义、开发、维护软件的一门学科。软件工程是一门工程性学科,目的是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:付出较低的开发成本,达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。软件工程研究的主要内容是软件开发技术和软件开发管理两方面,在软件开发技术中,主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,主要研究软件管理学、软件经济学、软件心理学等。6、简述容错系统的设计过程?容错系统的设计过程包括以下设计步骤:⑴安设计任务要求进行常规设计,尽量保证设计的正确。⑵对可能出现的错误分类,确定实现容错的范围。⑶按照成本—效益最优原则,选用某种冗余手段来实现对各类错误的屏蔽。⑷分析或验证上述冗余结构的容错效果。如果效果没有达到预期的程度,则应重新进行冗余结构设计。如此重复,直到有一个满意的结果为止。7、渐增模型有几种?各有何特点?渐增模型是瀑布模型的变种,它有两类:⑴增量构造模型。它在瀑布模型基础上,对一些阶段进行整体开发,对另一些阶段进行增量开发。也就是说在前面的开发阶段按瀑布模型进行整体开发,后面的开发阶段按增量方式开发。⑵演化提交模型。它在瀑布模型基础上,所有阶段都进行增量开发,也就是说不仅是增量开发,也是增量提交。8、试述系统开发的生命周期。系统开发是管理信息系统建设中最重要的一个阶段,从项目开发开始到结束的整个过程,称为系统开发的生命周期。系统开发的生命周期一般分为以下阶段:⑴系统分析。这一阶段的主要任务是明确用户的信息需求,提出新系统的逻辑方案。需要进行的工作有系统的初步调查,可行性研究,现行系统的详细调查及新系统逻辑模型的提出等。⑵系统设计。这一阶段的主要任务是根据新系统的逻辑方案进行软、硬件系统的设计,其中包括总体结构设计、输出设计、输入设计、处理过程设计、数据存储设计和计算机系统方案的选择等。⑶系统实施。这一阶段将设计的系统付诸实施,主要工作有软件的程序编制与软件包的购置、计算机与通讯设备的购置、系统的安装、调试与测试、新旧系统的转换等。
45、如何控制因修改而引起的副作用?
为了控制因修改而引起的副作用,要做到:⑴按模块把修改分组;⑵自顶向下的安排被修改模块的顺序;⑶每次修改一个模块;⑷对每个修改了的模块,在安排修改下一个模块之前要确定这个修改的副作用,可使用交叉引用表、存储映像表、执行流程跟踪等。
46、什么是基本加工?
描述表达基本加工逻辑功能的结构化工具的特点?数据流图中所有不进一步分解的加工,称为基本加工。描述表达基本加工逻辑功能的结构化工具主要有:⑴自然语言的文字叙述。⑵结构化语言。⑶决策树。⑷决策表。⑸数学公式。⑹上述各工具的联合使用。其特点如下所述:⑴自然语言语义丰富,语法灵活,可描述十分广泛而复杂的问题,表达人们丰富的感情和智慧。⑵结构化语言没有严格的语法规定,使用的词汇比形式化的计算机语言广泛,但使用的语句类型很少,结构规范,表达的内容清晰、准确、易理解,不易产生歧义。⑶决策树清晰的表达了在什么情况下应采取什么策略,不易产生逻辑上的混乱。是描述基本加工的逻辑功能的有效工具。⑷决策表将比较复杂的决策问题简洁、明确、一目了然的描述出来。它是描述条件比较多的决策问题的有效工具。
47、开放式工作台有什么优点?
⑴易将某个工具加入到开放式工作台中,还可以用新的工具取代已有的工具。⑵可以由一个配置管理系统来管理由工具输出的文件。⑶能不断增强工作台的功能,不断发展工作台。⑷工作台不依赖于某个供应商,而能从不同销售商处购买工具。如果一个工具开发商不提供支持了,最多影响该工作台的一部分工具,其余的工具还可以继续使用。
48、增量模型的基本思想是什么?
为了克服瀑布模型的局限性,使开发过程具有一定的灵活性和可修改性,于是产生了增量模型。它是在瀑布模型的基础上加以修改而形成的。增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早的产生工作软件。增量模型是在项目的开发过程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,以一定的时间间隔开发部分工作软件;增量提交是指在项目开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。增量开发和增量提交可以同时使用,也可以单独使用。5、对软件开发环境的基本要求有哪些?⑴软件开发环境应是高度集成的一体化的系统。⑵软件开发环境应具有高度的通用性。⑶软件开发环境应易于定制、裁剪或扩充以符合用户要求,即软件开发环境应具有高度的适应性和灵活性。⑷软件开发环境不但可应用性要好,而且是易使用的、经济高效的系统。⑸软件开发环境应有辅助开发向半自动开发和自动开发逐步过渡的系统。6、项目开发计划有哪些内容?项目开发计划是一个管理性的文档,它的主要内容如下:⑴项目概述:说明项目的各项主要工作;说明软件的功能、性能;为完成项目应具备的条件;用户及合同承包者承担的工作、完成期限及其它条件限制;应交付的程序名称,所使用的语言及存储形式;应交付的文档。⑵实施计划:说明任务的划分,各项任务的责任人;说明项目开发进度,按阶段应完成的任务,用图表说明每项任务的开始时间和完成时间;说明项目的预算,各阶段的费用支出预算。⑶人员组织及分工:说明开发该项目所需人员的类型、组成结构、数量等。⑷交付期限:说明项目最后完工交付的日期。7、软件设计的基本原理包括哪些内容?模块化。是指解决一个复杂问题时自顶向下逐层把软件系统化分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。模块化是软件解决复杂问题所具备的手段。抽象。抽象是认识复杂现象过程中使用的思维工具即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其它因素。软件工程过程中的每一部都可以看作是对软件解决方法的抽象层次的一次细化。信息隐蔽。是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其它模块来说,是不能访问的。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。数据独立性。指每个模块只完成系统要求的独立的子功能,并且与其它模块的联系最少且接口简单。8、白盒测试法有哪些覆盖标准?试对他们的检错能力进行比较。白盒测试法的覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件的不到测试。条件覆盖对每一条件进行单独检查,一般情况它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但由于计算机系统软件实现方式的限制,实际上不一定达到条件覆盖的标准。条件组合覆盖发现错误能力较强,凡满足其标准的测试用例,也必须满足前四种覆盖标准。前五种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能会使程序某些路径没有执行到。路径覆盖根据各判定表达式取值的组合,使程序沿着不同的路径执行,查错能力强。但由于它是从各判定的整体组合出发设计测试用例的,可能使测试用例达不到条件组合覆盖的要求。
作者:不详 来源:北京自考热线 http://www.csai.cn 2005年10月8日
1、需求分析:需求分析是指开发人员要准确理解用户的需求,进行细致的调查分析,将用户非形式的需求陈述转化成完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程。
2、白盒法:该方法把测试对象看作一个打开的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检查内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。白盒法也不可能进行穷举测试。
3、黑盒法:该方法把被测试对象看成一个黑盒子,测试人员完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依照需求规格说明书,检查程序是否满足功能要求。因此,黑盒测试又称为功能测试或数据驱动测试。
4、渐增式测试:逐个把未经过测试的模块组装到已经过测试的模块上去,进行集成测试。每加入一个新模块进行一次集成测试,重复此过程直至程序组装完毕。
5、非渐增式测试:首先对每个模块分别进行单元测试,然后再把所有的模块按设计要求组装在一起进行测试。
6、可执行的规格说明:这是一种使要求说明过程自动化的技术,通过可执行的规格说明语言来描述预期的行为“做什么”,人们可以从直接观察中用规格说明语言来规定任何系统行为。
7、经济可行性:对组织的经济状况和投资能力进行分析,对系统建设,运行和维护费用进行估算,对系统建成后可能取得的社会及经济效益进行估计。
8、系统设计说明书:是从系统总体的角度出发对系统建设中各主要技术方面的设计进行说明,是系统设计阶段的产物,其着重点在于阐述系统设计的指导思想以及所采用的技术路线和方法,编写系统设计说明书将为后续的系统开发工作从技术和指导思想上提供必要的保证。
9、面向对象设计:是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。或者说,面向对象设计就是用面向对象观点建立求解域模型的过程。
10、结构化设计:面向数据流的设计是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,因此又称结构化设计(SD)。
11、结构化分析:是根据分解与抽象的原则,按照系统中数据处理的流程,用数据图来建立系统的功能模型,从而完成需求分析工作。
12、基于脚本的设计:此方法主要用于解决要求的验证问题。一个脚本将模拟在系统运行期间用户经历的事件,它提供了输入、处理、输出的屏蔽,以及有关对话的一个模型,开发者能够给用户显示一个系统的逼真视图。
13、IDEF方法:是美国空军在1981年针对集成化计算机辅助制造(简称ICAM)工程项目中用于进行复杂系统分析和设计的方法,是在结构化分析与设计技术的基础上提出来的。
14、JSP方法:定义了一组以数据结构为指导的映射过程,他根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适于详细设计阶段。
15、软件概要设计:进入了设计阶段,要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求,并将设计的结果反应在“设计规格说明书”文档中,所以软件设计是一个把软件需求转换为软件表示的过程,最初这种表示只是描述了软件的总的体系结构,称为软件的概要设计或结构设计。
16、信息隐蔽:指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其它模块来说,是不能访问的。
17、系统流程图:是描述物理系统的传统工具,它用图形符号来表示系统中的各个元素,例如人工处理、数据处理、数据库、文件、设备等。它表达了系统中各个元素之间的信息流动的情况。
18、集成测试:是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行的测试,故也称组装测试或联合测试。
19、附加策略:是将原型用于开发的全过程,原型由最基本的核心开始,逐步增加新的功能和新的需求,反复修改反复扩充,最后发展为用户满意的最终系统。
20、抛弃策略:是将原型用于开发过程的某一阶段,促使该阶段的开发结果更加完整、准确、一致、可靠,该阶段结束后,原型随之作废。
21、抽象:是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特征而暂不考虑它的细节,不考虑其它因素。
22、参数化抽象:所谓参数化抽象,它是指当描述类的规格说明时并不具体指定所要操作的数据类型,而是把数据类型作为参数。
23、静态测试:指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
24、原型:是指模拟某种产品的原型模型。软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特征。
25、事件:是指定时刻发生的某件事情。它是某事情发生的信号,它没有持续时间,它是一种相对性的快速事件。
26、动态冗余:动态冗余的主要方式是多种模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来顶替它并重新运行。这里须有检测、切换和恢复过程,故称其为动态冗余。
27、模块化:是指解决一个复杂问题是自顶向下逐层把软件系统划分成若干模块的过程,每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
28、JSP方法:定义了一组以数据结构为指导的映射过程,它根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适于详细设计阶段。
29、模型:是为了理解事务而对事物做出一种抽象,它忽略不必要的细节,它也是事物的一种抽象形式,一个规划,一个程式。
30、瀑布模型:是将软件生存各个活动规定为依线性顺序联接的若干阶段的模型。它包括可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。
31、增量模型:是在项目的开发工程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发过程中以一定的时间间隔开发部分工作软件;增量提交是指在开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应稳当。增量开发和增量提交可以同时使用,也可单独使用。
32、喷泉模型:是一种以用户需求为动力,以对对象作为驱动的模型,适合于面向对象的开发方法。他克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。系统某些部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。无间隙是指在分析、设计、实现等开发活动之间不存在明显的边界。
33、功能模型:描述了系统的所有计算,它表明一个计算如何从输入值得到输出值,他不考虑所计算的次序。功能模型说明对象模型中操作的涵义、动态模型中动作的意义以及对象模型中约束的意义。
34、动态模型:是与时间和变化有关的系统性质。该模型描述了系统的控制结构,他表示了瞬时的、行为化的系统控制性质。它关心的是系统的控制,操作的执行顺序。它从对象的事件和状态的角度出发,表现了对象的相互行为。
35、对象模型:表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。
36、货币的时间价值:通常利用银行的存款利息来表示货币的时间价值。设年利率为I,现存入p元,n年后得到本金和利息为F。若不计复利,则P元在n年后的价值为:F=P*(1+n*i)。反过来,若n年后能收入的本金和利息为F,则将来F元的现在价值(本金)P为:P=F/(1+n*i)。可用这个公式来计算将来收入的现在价值。这是效益分析的最基本公式。
37、类:具有相同或相似性质的对象的抽象就是类。
38、对象:是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。类的具体化就是对象,也可以说类的实例是对象。
39、多态性:指相同的操作或函数、过程可作用于多种类型的对象上并获得不同结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
40、风险分析:实际上就是贯穿在软件工程上的一系列风险管理步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监督,它能让人们主动“攻击”风险。
41、模块:模块在程序重视数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数、子程序等等。
42、JSD方法:主要以活动事件为中心,通过有一串活动顺序组合构成的进程,建立系统模型,最后实现该模型。
43、路径覆盖:指设计足够的测试用例,覆盖被测程序中所有可能的路径。
44、判定/条件覆盖:指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
45、条件组合覆盖:是指设计足够的测试用例,使的每个判定表达式中条件的各种可能的值的组合都至少出现一次,条件组合覆盖是比较强的覆盖标准。
46、条件覆盖:是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。满足条件覆盖并不一定满足判定覆盖。
47、原型模型:又称快速原型模型,它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。
48、软件工程环境:美国国防部在STARS计划中定义如下:“软件工程环境是一组方法、过程及计算机程序(计算机化的工具)的整体化构件,他支持从需求定义、程序生成知道维护的整个软件生存期”。
49、程序图:是退化的程序流程图。也就是说,把程序流程图中每个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫程序图。
1、可行性研究的目的是用最小的代价,在尽可能短的时间内,确定该项目是否能够开发。
2、程序设计时代的生产方式是个体手工,程序系统时代的生产方式是作坊式小团体,软件工程时代的生产方式是工程化。
3、喷泉模型是一种以需求分析为动力,以对象为驱动的模型。
4、需求分析阶段,分析人员要确定对问题的综合需求,其中最主要的是功能需求。
5、可行性研究需要从以下三个方面分析研究每种解决方法的可行性:技术可行性、经济可行性、社会可行性。
6、可行性研究的目的不是去开发一个软件项目,而是研究这个软件项目是否值得开发,其中的问题能否解决。
7、判定树较判定表直观易读,判定表进行逻辑验证较严格,能把所有的可能性全部都考虑到。可将两种工具结合起来,先用判定表做底稿,在此基础上产生判定树。
8、软件工具的发展特点是软件工具有单一工具向多个工具集成化方向发展。重视用户界面的设计,不断的采用新理论和新技术。软件工具的商品化推动了软件产业的发展,而软件产业的发展,又增加了对软件工具的需求,促进了软件工具的商品化进程。
9、环境集成主要有数据集成、界面集成、控制集成、平台集成、过程集成。
10、
可行性研究实质上是进行一项简化、压缩了的需求分析、设计过程。
11、
结构化方法有结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。
12、
投资回收期就是累计的经济效益等于最初的项目投资所需的时间。
13、
详细描述处理过程常用三种描述工具:图形、表格和语言。
14、
数据流图中,每个加工至少有一个输入流和一个输出流。
15、
结构化设计以数据流为基础映射成软件结构。
16、
当数据流图中某个加工的一组动作存在着多个条件复杂组合的判断时,使用判定表或判定树较好。
17、
由于运用原型的目的和方式不同,在使用原型时也采取不同的策略,有抛弃策略和附加策略。
18、有两类维护技术:在开发阶段是用来减少错误、提高软件可维护性面向维护的技术,在维护阶段用来提高维护的效率和质量的维护支援技术。
19、
软件开发中原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性。
20、 产品管理包括版本管理和配置管理。
21、
任何程序都可由顺序、选择、重复三种基本控制结构构造。
22、
测试用例应有输入数据和预期的输出数据两部分组成。这样便于对照检查。
23、
需求分析阶段产生的最重要的文档之一是需求规格说明书。
24、 项目开发计划是一个管理性文档。
25、
软件配置管理,简称SCM,软件配置项简称SCI。
26、
在算法描述工具中,PAD图可自动生成程序。由机器自动通过走树的办法生成相应的源代码,大大提高软件的生产率。
27、在CASE集成中,控制集成支持工作台或环境中一个工具对系统中其它工具的访问。过程集成是指CASE系统嵌入了关于过程活动、阶段、约束和支持这些活动所需的工具的知识。
28、
解决一个复杂问题,往往采取的策略是分解。
29、 效益分析有有形效益和无形效益两种。
30、
两个模块都是用同一张表,这种耦合称为公共耦合。
31、
一个模块把数值作为参数传送给另一个模块,这种耦合方式称为数据耦合。
32、
一个模块内部各程序段都在同一张表上操作,这个模块的内聚性称为通信内聚。
33、在SA方法的需求描述工具中,数据流图描述系统的分解,即描述系统有哪几部分组成,各部分之间有什么联系等等。数据字典定义了数据流图中每一个图形元素;结构化语言、判定表或判定树则详细描述数据流图中不能被再分解的每一个加工。
34、IDEF图是一种功能模型,表示系统功能的图形称为活动图形,连方框上的箭头有四种类型,他们分别是输入、输出、控制、机制。
35、软件项目计划是可行性研究阶段的结果产品。但由于可行性研究是在高层次进行系统分析,未能考虑软件系统开发的细节情节,因此软件项目计划一般在需求分析阶段完成后才定稿的。
36、信息隐蔽指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其它模块来说,是不能访问的。
37、
同一个类中的共享是指同一个类中的对象有着相同的数据结构和相同的行为特征。
38、
通过抽象,可以确定组成软件的过程实体。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。
39、
IPO图描述分层图中一个模块的输入、输出和处理内容。
40、
软件是一种逻辑产品,它与物质产品有很大区别。
41、 数据流图中的箭头表示数据流。
42、
软件测试时需要三类信息:软件配置、测试配置、测试工具。
43、
基于IDEF0图的设计也是结构化设计技术之一,它以系统的功能模型和信息结构为基础设计软件结构。
44、
系统流程图是描述物理模型的传统工具,用图形符号表示系统中各个元素,表达了系统中各种元素之间的信息流动情况。
45、
桩模块是用来代替被测试模块所调用的模块,它的作用是返回被测模块所需的信息。
46、
建立数据字典一般的两种形式是手工建立和利用计算机辅助建立并维护。
47、
汇编语言是面向机器的,可以完成高级语言无法满足要求的特殊功能,如与外部设备之间的一些接口操作。
48、黑盒测试是功能测试,因此设计测试用例时,需要研究需求规格说明书和概要设计说明书中有关程序功能或输入、输出之间的关系等信息,从而与测试后的结果进行分析比较。
49、在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。子类继承了多个父类的数据结构和方法,则称为多重继承。
50、
由于数据流是流动中的数据,所以必须有流向。除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
51、投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。项目的纯收入是指在整个生存周期之内的累计经济效益(折合成现在值)与投资之差。
52、
程序设计语言的简洁性是指人们必须记住的语言成分的数量。人们要掌握一种语言,需要记住的成分数量越多,简洁性越差。
53、
不同对象的同一属性可以具有相同或不同的属性值。
54、
软件开发划分的各阶段任务尽可能相对独立,同一阶段任务性质尽可能相同。
55、
瀑布模型是将生存周期各活动规定为线性顺序联接的若干阶段的模型。
56、
成本效益分析的目的是从经济角度评价开发一个软件项目是否可行。
57、
在需求分析阶段要进行以下几方面的工作:问题识别、分析与综合、导出软件的逻辑模型、编写文档。
58、
静态冗余常用的有:三模冗余TMR和多模冗余。
59、
McCabe质量度量模型,针对面向软件产品的运行、修正、转移。
60、程序设计语言的局部性是指语言的联想性。在编码过程中,由语句组合成模块,由模块组装成系统结构,并在组装过程中实现模块的高内聚,低耦合,使局部性得到加强。
61、
软件复杂性度量的参数主要有规模、难度、结构和职能度。
62、
项目开发计划的主要内容有:项目概述、实施计划、人员组织及分工、交付期限。
63、
可行性研究要在较高层次上以较抽象方式进行需求分析和设计。
64、
软件工程是一门综合性交叉学科,计算机科学着重于原理和理论,软件工程着重于建造软件系统。
65、
维护的副作用有编码副作用、数据副作用、文档副作用三种。
66、
若年利率为I,不计复利,P元在n年后的价值F=P*(1+n*i)
67、
软件结构是以模块为基础而组成的一种控制层次结构。
68、
软件设计阶段产生的最重要的文档之一是概要设计说明书。
69、独立路径是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,一条独立路径是至少包含有一条在其它独立路径中未有过的边的路径。
70、
各模块经过单元测试后,将各模块组装起来进行集成测试,以检查与设计相关的软件系统结构的有关问题。
71、
开发过程管理包括项目计划和控制和任务管理等。
72、
临时维护小组采用“同事复审”或“同行复审”等方法来提高维护工作的效率。
73、数据字典中的加工逻辑主要描述该加工做什么,即实现加工的策略,而不是实现加工的细节,它描述如何把输入数据流变换为输出数据流的加式规则。
74、
为了较完整的描述用户对系统的需求,DFD应与数据库中的ER图结合起来。
75、
纯收入是软件生存周期内累计经济效益与投资之差。
76、
反映软件结构的基本形态特征是深度、宽度、扇入和扇出。
77、
若年利率为I,不计复利,n年后能收入F元的现在价值p=F/(1+n*i)。
78、
在一个模块中,功能状态与接口反映模块的外部特性,逻辑反映它的内部特性。
79、 硬件与软件一起构成完整的计算机系统。
80、 SA方法中主要描述工具是DFD与DD。
81、
软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。
82、
结构化设计对数据流有两种分析方法,他们是变换分析设计和事务分析设计。
83、
数据字典中有四类条目:数据流、数据项、数据存储、加工。
84、常借用硬件可靠性的定量度量方法来度量软件的可靠性与可用性。常用指标有平均失效等待时间MTTF和平均失效间隔时间MTBF。
85、
Lisp是一种函数型语言,Prolog是一种逻辑性语言。
86、
Jackson结构图能对结构进行自顶向下分解,因此可以表示层次结构。
87、
变换模型是一种适合于形式化开发方法的模型,从软件需求形式化说明开始,经过一系列变换,最终得到系统的目标程序。
88、
软件开发环境的主要目标是提高软件开发的生产率,改善软件质量和降低软件成本。
89、
“软件”包含计算机程序及其说明程序的各种文档。
90、
开发过程依序包括需求分析、设计、编码、集成、软件安装和验收等活动。
91、
社会可行性研究包括合同、责任、侵权、用户组织的管理模式及规范,其他一些技术人员常常不了解的陷阱等。
92、
IDEF0方法中,将系统功能称为活动,将表示系统功能的图形称为活动图形。
93、
数据库的设计指数据存储文件的设计,主要进行的设计方面有:概念设计、逻辑设计、物理设计。
94、如果只有两个模块之间有公共数据环境,这种公共耦合有两种情况:一是一个模块只是给公共数据环境送数据,另一个模块是只从公共环境中去数据,这是比较松散的公共耦合;二是两个模块都往公共环境中送数据又从里面取数据,这是紧密的数据耦合。
95、Jackson方法是面向数据结构的设计方法。早期的Jackson方法用于开发模型较少的数据处理系统的设计,简称JSP。
96、
工程网络图只有一个开始点和一个终止点,开始点没有流入箭头,称为入度为零;终止点没有流出箭头,称为出度为零。
97、为了确保每个开发过程的质量,防止把软件差错传递到下一个过程,必须进行质量检验,检验的实施有实际运行检验(即白盒测试和黑盒测试)和鉴定两种形式。
一、判断题(每题2分,共30分)
1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析活动。(对)
2.数据字典是对数据流图中的数据流,加工、数据存储、数据的源和终点进行详细定义。(错)
3.JAVA语言编译器是一个CASE工具。(对)。
4.软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC
等)编写的程序,软件开发实际上就是编写程序代码。(错)
5.软件模块之间的耦合性越弱越发。(对)
6.数据库设计说明书是一个软件配置项(对)
7.在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是生成类的模板。(错)
8.过程描述语言可以用于描述软件的系统结构。(错)
9.如果通过软件测试没有发现错误,则说明软件是正确的。(错)
10.快速原型模型可以有效地适应用户需求的动态变化。(对)
11.模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。(对)
12.集成测试主要由用户来完成。(错)
13.确认测试计划应该在可行性研究阶段制定(错)
14.白盒测试无需考虑模块内部的执行过程和程序结构,只要了解模块的功能即可。(错)
15.软件概要设计包括软件系统结构设计以及数据结构和数据库设计。(对)
二。单选题(每题2分,共20分)
1.瀑布模型的关键不足在于(2)
(1)过于简单(2)不能适应需求的动态变更(3)过于灵活(4)各个阶段需要进行评审
2.在面向对象软件开发方法中,类与类之间主要有以下结构关系(1)
(1)继承和聚集(2)继承和一般(3)聚集和消息传递(4)继承和方法调用
3.以下哪一项不是软件危机的表现形式(3)
(1)成本高(2)生产率低(3)技术发展快(4)质量得不到保证
4.以下哪一项不是面向对象的特征(4)
(1)多态性(2)继承性(3)封装性(4)过程调用
5.面向对象模型主要由以下哪些模型组成(1)
(1)对象模型、动态模型、功能模型(2)对象模型、数据模型、功能模型(3)数据模型、动态模型、功能模型(4)对象模型、动态模型、数据模型
6.软件可行性研究一般不考虑(4)
(1)是否有足够的人员和相关的技术来支持系统开发(2)是否有足够的工具和相关的技术来支持系统开发(3)待开发软件是否有市场、经济上是否合算(4)待开发的软件是否会有质量问题
7.软件维护的副作用主要有以下哪几种(3)
(1)编码副作用、数据副作用、测试副作用(2)编码副作用、数据副作用、调试副作用(3)编码副作用、数据副作用、文档副作用(4)编码副作用、文档副作用、测试副作用
8.软件项目计划一般不包括以下哪项内容(4)
(1)培训计划(2)人员安排(3)进度安排(4)软件开发标准的选择和制定
9.以下哪一项不属于面向对象的软件开发方法(3)
(1)coad方法(2)booch方法(3)jackson方法(4)omt方法
10.以下哪种测试方法不属于白盒测试技术(2)
(1)基本路径测试(2)边界值分析测试(3)循环覆盖测试(4)逻辑覆盖测试
三。简答题(每题5分,共25分)
1.分析软件危机产生的主要原因有哪些?
答:导致软件危机的主要原因有:
(1)软件日益复杂和庞大(2)软件开发管理困难和复杂(3)软件开发技术落后(4)生产方式落后(5)开发工具落后(6)软件开发费用不断增加
1 个要点1分,只要答上5个要点得5分!
2.说明结构化程序设计的主要思想是什么?
答:(1)自顶向下、逐步求精的程序设计方法(2分)(2)使用3种基本控制结构、单入口、单出口来构造程序。(3分)
3.软件测试包括哪些步骤?说明这些步骤的测试对象是什么?
答:(1)单元测试,测试对象对单元模块(2分)(2)集成测试,测试对象为组装后的程序模块(2分)(3)确认测试,测试对象为可运行的目标软件系统(1分)
4.需求
分析与软件设计二个阶段任务的主要区别是什么?
答:需求分析定义软件的用户需求,即定义待开发软件能做什么(2.5分)
软件设计定义软件的实现细节以满足用户需求,即研究如何实现软件。(2.5分)
5.说明软件测试和调试的目的有何区别?
答:测试的目的是判断和发现软件是否有错误(2。5分)调试的目的是定位软件错误并纠正错误。(2.5分)
第四,五题略(共25分)
户籍录入员
1、录入各户成员基本信息
2、录入新生儿信息
3、修改迁入/迁出信息
户籍管理员
1、统计社区人员情况:总人数,其中:男性人数、女性人数
2、统计各职业人员情况(职业,人数),各年龄段人员情况(年
龄段,人数)
年龄段每10岁一个划分。
要求:
1、画出顶层图和0层图,给出顶层图数据字典
2、标识系统中的类,给出基本属性和操作
二、测试题
画出控制流程图,给出测试用例,要求达到100%分支覆盖。
程序是一个判闰年的题,有源代码和可执行文件。
++++++++++++++++++++++++++++++++++++++++++++++
(一)
校务管理系统
管理老师的家伙:录入老师情况(姓名.地址.所教课程)
老师缺科记
录(名字.时间.原因.课程)
管理学生的家伙:录入学生情况(姓名.所选课程.成绩)
教务主任:查询统计 1:教师情况 2: 学生总成绩 3:
学生平均成绩
1)用结构化方法画出系统顶层图、0层图,数据字典。
2)画出该系统的初始化模块结构图。
3)用面向对象法画出该系统有那些主要的类。
(二)
有关测试的题
一段程序求1-50之间的整数的级乘的和(例如:在提示输入0-50之间
的整数_ 时输入5即求1!+2!+3!+4!+5!的和)
要求设计测试用例.
注意事项:
用帐号登陆->试题在y盘的<考试>文件夹内->新建word文档(你所有
答题都写在这)->结果保存到z盘的以你的帐号命名的文件夹内.ok
了.
哦还有,把测试程序(在y盘的<考试>文件夹内)复制到z盘的以你的
帐号命名的文件夹内.这样在你打开命令提示符时,目录正好是z:\
帐号.你只需键入测试程序名(test1.exe)
(三) 在要建立的仓库管理系统中,入库员负责登记入库物品(
品名,数量,
单价,位置,审批,日期)中,包括查看库存中有
无这类物品。
出库员根据用户要求(品名,数量 ,审批人),查看有无所需物
品,
若有查看库存量是否满足,方可提货,并修改库存。
库房主任负责库房的日统计,月统计,并统计出入差额产生日报表
(品名,
数量,差额,库存余额)和月报表(数量,差额,库存
余额)。
1、用结构化分析,建立系统模型0层1层(包括数据字典)
2、初始模块结构图,
3、识别系统中有那些类。
(四)程序test4中,输入1800-2000年,判断是否为闰年。
测试用例分析,此程序有那些错误。
mian(){
int year,leap;
printf("输入年份:\n");
scanf("%d",&year);
if (year%4==0){
if (year%100==0){
if (year%400==0)
leap=1;
else
leap=0;
}
else leap=0;
}
if (leap==1)
printf("%d是",year);
else printf("%d 不是",year);
printf("闰年\n");
}
(五).图书馆有一个图书管理系统,店员每天登记图书信息(编
号、书名、数量等),并根据用户的需求查阅库存信息,若有用户
需要的图书,且数量足够,就取书给用户;否则让用户填写订购信
息,并录入缺货信息。每月打印报表交给经理。
(1) 画数据流图(只画到1层图),并给出数据字典
(2) 画出相应的软件结构图及程序流程图
(3) 画出其面向对象的对象模型,并指出所有的类
(六).运行给出的一段程序,设计测试用例。
(请问测试用例应该如何设计?使用何种格式?)
北京大学软件工程上机考试题(2001年10月)
内容:
题目:见软件工程书P221实验一,三
要求:对于结构化设计按瀑布型各阶段给出相应的文档:软件计划
,需求规格说明书,
其中:
1、项目计划:包括项目概要,实施计划及交付的
期限安排
2、需求规格说明书:依据题目给出的数据流图的
顶层、0层、1层(若有的话)及相应的数据字典
3、概要设计:依据需求规格说明书给出软件结构
图及个模块接口说明
4、详细设计说明书要求:对概要设计中的模块给出详细流程图
(PAD或伪码)和重要数据结构
5、测试计划:包括所测试日期安排,测试相应分析模型(对象模
型,动态模型,功能模型)
其中:
{
#对象模型
找出系统对象、类、类的结构(关联,一般--具体,整体--部分结
构)
确定类的忏悔,确定类的方法
给出对象模型图及数据字典(例题P146图10-21)
#动态模型
确定事件,建立事件跟踪表(只要建立一个即可)
根据事件跟踪表建立相应的状态图,例子见P147
10-22,P148 10
-24
#功能模型
根据系统建立响应的功能模型,证明输入与输出的关系,要求建立
顶层及层数据层图即可,见P149 10-26,10-27
}
注:
结构化测试:
#能根据题意给出正确的需求规格说明书
#结合题意,根据需求数据说明书给出相应的软件结构图
#详细设计说明书中的顶层嵊必须将软件结构图中的模块详细实现
流程及重要数据结构一一写明
#测试计划中测试用例的设计
*白盒设计:根据详细设计流程图分别设计一个逻辑覆盖、循环覆
盖和路径覆盖的测试用例即可。
*黑盒设计:按照等价类划分和边界值分别设计一个测试用例即可
面向对象测试
*能根据题意给出正确的对象模型、并能将系统中的主要的类及类
结构描述清楚
*结合题意,得出正确的动态模型(事件跟踪图及状态图)
*结合题意,给出正确的功能模型,建立正确的顶层及层数据图
安排:将此分析的文档生成电子版文档(用Microsoft
word)
——————————————————————————-——
————————————————
此上为要求,下面为题目和方法
方法:1、采用结构化方法 2、采用面向对象方法
题目:
开发一个单位的认识系统
功能:录入:存储人员基本信息:可进行简单查询和条件组合查询
;可按年龄、工资、职称进行统计;可打印出报表;可对人员基本
信息进行维护、备份和恢复;按照职称、工龄每年晋升相应的工资
,并将新的工资信息入库保存
+++++++++++++++++++++++++++++++++++++++++++++++++
《软件工程实验一》
下面是用PAD图描述对数组A进行排序的PAD图,用TC2.0编写
一程序,实现下面PAD图的算法。
《软件工程实验二》
按照软件工程中序设计风格的要求,编写一程序:求解一元二
次方程的根。
方程:AX2+BX+C=0
编程语言由考生任选。
《软件工程实验三》
按照软件工程中软件测试的方法,测试下面的C程序,并纠正
该软件中的明显和潜在错误。
程序:
/* 函数f1是实现n! */
#include "stdio.h"
main()
{
int n, result;
clrscr();
printf("\please input n:");
scanf("%d",&n);
result = f1(n);
printf("%d",result);
}
f1(int n)
{
if(n==0) return 0;
return n*f1(n-1);
}
《软件工程实验四》
按照模块化程序设计的准则,设计一程序,实现如下功能:
给定数组a[]={32,35,3,89,13,434,54,656,2}
1. 模块一:实现对数组a[]的排序。
2. 模块二:找出数组中最大的数。
3. 模块三:找出数组中所有的素数。
4. 模块四:计算数组各元素之和。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、实验题目:“家庭保安系统”的子系统设计
二、实验目的:通过本实验使学生熟悉和掌握一种软件开发工具,
能够设计一个简单的软件系统,并综合运用过去学习到的编程知识
实现一个软件的局部功能,为毕业设计打下基础。
三、任务和要求:
⑴根据“家庭保安系统”的需求的概要描述,模仿windows用
户界面设计完善的“家庭保安系统”用户界面。
⑵根据“家庭保安系统”的需求的概要描述,建立表达异常事件
信息的文件或数据库。
⑶编写根据模拟数据分析正常事件或异常事件类型,并将结论显
示在用户界面上。
四、“家庭保安系统”需求的概要描述
“家庭保安系统”是基于PC机的软件系统,用于处理处理各传
感器的信息,根据信息的类型来判定是否有异常事件如非法侵入、
煤气泄漏、火灾、水淹、停电和触电等的发生,如有异常事件发生
,则该软件系统能通过电话向监控中心报警。
++++++++++++++++++++++++++++++++++++++++++++++
2003年10月天津软件工程实践考核
一、按瀑布模型开发一个高等学校的人事管理系统。基本功能如下
:
录入:职员的基本信息(编号、姓名、性别、出生年月、所属部门
、专业、职称、工资、基本工资、津贴等)
修改:修改职员信息(职称升级[如讲师升级到教授]、增加工资处
理[如两年一次涨工资]等)
存储:对录入或修改的内容进行存储
统计:能按所属部门统计月总工资、月总津贴额
查询:例:输入职员编号后显示该职员的姓名、部门和职称;输入
部门后显示该部门的所有职员。
二、要求
(1) 用word编写个阶段的文档(80分)
1、 软件开发计划15分
2、
需求规格说明书25分[要求有DFD、数据字典、判定表、描述、
语言----图、表、文]
3、 系统概要设计(配有简要说明的程序流程图)10分
4、
主要模块的系统详细设计(配有简要说明的程序流程图)[画
一个部分的流程图即可]10分
5、
测试计划(画出被测试模块的主要流程图和测试用数据图例)
15分
(2)
用VB、VC、PB、VFP、ACCESS等程序设计语言或开发工具实
现上述设计20分
其中:
1. 建立相应环境使用的数据库5分
2.
运行程序能出现包含要求功能的界面10分[例如查询、保存]
3. 完成要求的查询功能和统计功能5分
所以操作结果(文档、数据库文件和程序文件或工程文件)存入A盘
2、输入一串整数,以相反次序输出
第1题我做的答案是这样的,第2题太简单就不用了。
// 有点未加判断,矩阵输出及拓扑排序
#include
#include
#include
#define MAX 100
typedef struct {
int arcs[MAX][MAX];
int vexnum;
}Mgraph;
void input(Mgraph *mgraph,int i,int *count1)
{
int a,b,c1=0;
for(int j=0;j for(int k=0;k mgraph->arcs[j][k]=0;
while(1){
printf("输入(i j),(-1 -1)结束:");
scanf("%d%d",&a,&b);
if(a==-1 && b==-1)
break;
else
{
mgraph->arcs[a][b]=1;continue;
}
}
for (int k=0;k int c=0;
for(int m=0;m if(mgraph->arcs[m][k]==1)
c++;
}
count1[k]=c;
}
printf("\n矩阵为:\n");
for(int l=0;l for(int m=0;m printf("%3d",mgraph->arcs[l][m]);
c1=c1+1;
if(c1==i){
printf("\n");
c1=0;
}
}
}
//拓扑排序
void topsort(Mgraph * mgraph,int i,int *count){
int a,b,c=0,s=-1;
for(a=0;a if(count[a]==0){
count[a]=s;
s=a;
}
}
while(s!=-1){
printf("V(%d) ",s);
c++;
a=s;
s=count[a];
for(b=0;b if(mgraph->arcs[a][b]){
count[b]--;
if (count[b]==0){
count[b]=s;
s=b;
}
}
}
}
}
void main(){
Mgraph mgraph;
int i;
printf("输入顶点个数:");
scanf("%d",&i);
int count1[MAX];
input(&mgraph,i,count1);
topsort(&mgraph,i,count1);
}
2.随机产生10个整数,利用冒泡法排序
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
int n[10];
void sort()
{
int i,j,w;
for(i=0;i<10;i++)
for(j=9;j>=i+1;j--)
if(n[j]<n[j-1])
{
w=n[j];
n[j]=n[j-1];
n[j-1]=w;
}
}
void main()
{
int x;
srand(0.001);
for(x=0;x<10;x++)
n[x]=rand();
for(x=0;x<10;x++)
printf("%d\n",n[x]);
sort();
for(x=0;x<10;x++)
printf("%d\n",n[x]);
}
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
typedef struct tnode{
char data;
struct tnode * left,* right;
}btree;
void inord (btree *p){
if (p!=NULL){
printf("%c\n",p->data);
inord(p->right);
inord(p->left);
}
};
void main(){
btree *p,*h,*f;
h=(btree *)malloc(sizeof(btree));
p=h;
p->data='A';
p->left=NULL;
p->right=NULL;
f=(btree*)malloc(sizeof(btree));
f->data='B';
f->left=NULL;
f->right=NULL;
p->left=f;
f=(btree*)malloc(sizeof(btree));
f->data='C';
f->left=NULL;
f->right=NULL;
p->right=f;
p=p->left;
f=(btree*)malloc(sizeof(btree));
f->data='D';
f->left=NULL;
f->right=NULL;
p->left=f;
f=(btree*)malloc(sizeof(btree));
f->data='E';
f->left=NULL;
f->right=NULL;
p->right=f;
p=h;
inord(p);
}
3.随机产生10个整数,利用直接插入排序方法对序列进行升序排列,并输出结果.
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
int n[11];
void sort()
{
int i,j;
for(i=2;i<=10;i++)
if(n[i]<n[i-1])
{
n[0]=n[i];
j=i-1;
do
{
n[j+1]=n[j];
j--;
}while(n[0]<n[j]);
n[j+1]=n[0];
}
}
void main()
{
int x;
srand(0.001);
for(x=1;x<=10;x++)
n[x]=rand();
n[x]=10-x;
for(x=1;x<=10;x++)
printf("%d\n",n[x]);
sort();
printf("\n");
for(x=1;x<=10;x++)
printf("%d\n",n[x]);
}
4
随机产生10个整数,利用直接选择排序方法对序列进行升序排列,并输出结果.
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
int n[10];
void sort()
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i;
for(j=i+1;j<10;j++)
if(n[j]<n[k])k=j;
temp=n[i];
n[i]=n[k];
n[k]=temp;
}
}
void main()
{
int x;
//srand(0.001);
for(x=0;x<10;x++)
// n[x]=rand();
n[x]=10-x;
for(x=0;x<10;x++)
printf("%d\n",n[x]);
sort();
for(x=0;x<10;x++)
printf("%d\n",n[x]);
}
5 已知二叉树如图1
,采用二叉链存储,在计算机中建立起该二叉树,并完成中序遍历,输出相应序列.
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
typedef struct tnode
{
char data;
struct tnode * left,* right;
}btree;
void inord(btree * p)
{
if(p!=NULL)
{
inord(p->left);
printf("%c",p->data);
inord(p->right);
}
}
void main()
{
int i;
btree * p,* h,* f,* f1;
h=(btree *)malloc(sizeof(btree));
p=h;
p->data='a';
p->left=NULL;
p->right=NULL;
f=(btree *)malloc(sizeof(btree));
f->data='b';
f->left=NULL;
f->right=NULL;
p->left=f;
f1->data='c';
f1->left=NULL;
f1->right=NULL;
p->right=f1;
p=p->left;
f=(btree *)malloc(sizeof(btree));
f->data='d';
f->left=NULL;
f->right=NULL;
p->left=f;
f=(btree *)malloc(sizeof(btree));
f->data='e';
f->left=NULL;
f->right=NULL;
p->right=f;
p=h;
inord(p);
}
6
已知二叉树如图1,采用二叉链存储,在计算机中建立起该二叉树,并完成前序遍历,输出相应序列.
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
typedef struct tnode
{
char data;
struct tnode * left,* right;
}btree;
void inord(btree * p)
{
if(p!=NULL)
{
printf("%c",p->data);
inord(p->left);
inord(p->right);
}
}
void main()
{
int i;
btree * p,* h,* f,* f1;
h=(btree *)malloc(sizeof(btree));
p=h;
p->data='a';
p->left=NULL;
p->right=NULL;
f=(btree *)malloc(sizeof(btree));
f->data='b';
f->left=NULL;
f->right=NULL;
p->left=f;
f1->data='c';
f1->left=NULL;
f1->right=NULL;
p->right=f1;
p=p->left;
f=(btree *)malloc(sizeof(btree));
f->data='d';
f->left=NULL;
f->right=NULL;
p->left=f;
f=(btree *)malloc(sizeof(btree));
f->data='e';
f->left=NULL;
f->right=NULL;
p->right=f;
p=h;
inord(p);
}
7
已知二叉树如图1,采用二叉链存储,在计算机中建立起该二叉树,并完成后序遍历,输出相应序列.
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
typedef struct tnode
{
char data;
struct tnode * left,* right;
}btree;
void inord(btree * p)
{
if(p!=NULL)
{
printf("%c",p->data);
inord(p->right);
inord(p->left);
}
}
void main()
{
int i;
btree * p,* h,* f,* f1,* f2;
h=(btree *)malloc(sizeof(btree));
p=h;
p->data='a';
p->left=NULL;
p->right=NULL;
f=(btree *)malloc(sizeof(btree));
f->data='b';
f->left=NULL;
f->right=NULL;
p->left=f;
f1->data='c';
f1->left=NULL;
f1->right=NULL;
p->right=f1;
p=p->left;
f=(btree *)malloc(sizeof(btree));
f->data='d';
f->left=NULL;
f->right=NULL;
p->left=f;
f=(btree *)malloc(sizeof(btree));
f->data='e';
f->left=NULL;
f->right=NULL;
p->right=f;
p=h;
inord(p);
}
8
已知无向图如图2,采用邻接表存储,在计算机中建立起存储结构,并写出先深搜索算法,输出相应序列.
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct pnode
{
int adjvex;
char info;
struct pnode * next;
}edgenode;
typedef struct vexnode
{
char data;
edgenode * link;
}adjlist[4];
void creagraph(adjlist g)
{
int i,j,k,n,e;
char list[4];
list[0]='a';
list[1]='b';
list[2]='c';
list[3]='d';
int t[5]={0,0,0,1,2};
int f[5]={1,2,3,3,3};
edgenode *p,*q;
n=4;//顶点数
e=5;//边数
for(i=0;i<n;i++)
{
g[i].data=list[i];
g[i].link=NULL;
}
j=0;
k=0;
for(i=0;i<e;i++)
{
p=(edgenode *)malloc(sizeof(edgenode));
q=(edgenode *)malloc(sizeof(edgenode));
p->adjvex=t[i];
p->info=g[p->adjvex].data;
q->adjvex=f[i];
q->info=g[q->adjvex].data;
p->next=g[q->adjvex].link;
g[q->adjvex].link=p;
q->next=g[p->adjvex].link;
g[p->adjvex].link=q;
}
}
void travgraph(adjlist g,int n)
{
int i;
edgenode *p;
printf("结果如下:\n");
for(i=0;i<n;i++)
{
printf("[%d,%c]=>",i,g[i].data);
p=g[i].link;
while(p!=NULL)
{
printf("(%d,%c)-->",p->adjvex,p->info);
p=p->next;
}
printf("^\n");
}
}
int visited[4];
void dfs(adjlist g,int n)
{
edgenode * p;
printf("顶点:%c",g[n].data);
visited[n]=1;
p=g[n].link;
while(p!=NULL)
{
if(visited[p->adjvex]==0)dfs(g,p->adjvex);
p=p->next;
}
}
void dfstra(adjlist g,int n)
{
int i;
for(i=0;i<n;i++)visited[i]=0;
for(i=0;i<n;i++)
if(visited[i]==0)
dfs(g,i);
}
void main()
{
adjlist g;
creagraph(g);
travgraph(g,4);
dfstra(g,4);
}
9
已知无向图如图2,采用邻接表存储,在计算机中建立起存储结构,并写出先广搜索算法,输出相应序列.
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct pnode
{
int adjvex;
char info;
struct pnode * next;
}edgenode;
typedef struct vexnode
{
char data;
edgenode * link;
}adjlist[4];
void creagraph(adjlist g)
{
int i,j,k,n,e;
char list[4];
list[0]='a';
list[1]='b';
list[2]='c';
list[3]='d';
int t[5]={0,0,0,1,2};
int f[5]={1,2,3,3,3};
edgenode *p,*q;
n=4;//顶点数
e=5;//边数
for(i=0;i<n;i++)
{
g[i].data=list[i];
g[i].link=NULL;
}
j=0;
k=0;
for(i=0;i<e;i++)
{
p=(edgenode *)malloc(sizeof(edgenode));
q=(edgenode *)malloc(sizeof(edgenode));
p->adjvex=t[i];
p->info=g[p->adjvex].data;
q->adjvex=f[i];
q->info=g[q->adjvex].data;
p->next=g[q->adjvex].link;
g[q->adjvex].link=p;
q->next=g[p->adjvex].link;
g[p->adjvex].link=q;
}
}
void travgraph(adjlist g,int n)
{
int i;
edgenode *p;
printf("结果如下:\n");
for(i=0;i<n;i++)
{
printf("[%d,%c]=>",i,g[i].data);
p=g[i].link;
while(p!=NULL)
{
printf("(%d,%c)-->",p->adjvex,p->info);
p=p->next;
}
printf("^\n");
}
}
int visited[4];
int queue[4];
void bfs(adjlist g,int n)
{
int front=0,rear=1,v=0;
edgenode * p;
visited[n]=1;
printf("顶点:%d,%c\n",n,g[n].data);
queue[rear]=n;
while(front!=rear)
{
front=front+1;
v=queue[front];
p=g[v].link;
while(p!=NULL)
{
if(visited[p->adjvex]==0)
{
visited[p->adjvex]=1;
printf("%d,%c\n",p->adjvex,g[p->adjvex]);
rear=(rear+1);
queue[rear]=p->adjvex;
}
p=p->next;
}
}
}
void main()
{
adjlist g;
creagraph(g);
travgraph(g,4);
bfs(g,0);
}
现要为学校建立一个数据库,设学校环境如下:一个系有若干个专业,每个专业一年只招一个班,每个班有若干个学生。.现要建立关于系、学生、班级的数据库,关系模式为:
学生STUDENT (学号,姓名,年龄,班号)
班CLASS (班号,专业名,系名,入学年份)
系 DEPARTMENT (系号,系名)
试用SQL语言完成以下功能:
1 建表,在定义中要求声明:
(1)每个表的主外码。
(2)每个班级的人数不能超过30人。
(3)学生的年龄介于15到40岁之间。
(4)学生姓名不能为空。
(5)只有班里没有学生的时候,才能删除该班级。
2 插入如下数据
CLASS(
101,软件,计算机,1995;
102,微电子,计算机,1996;
111,无机化学,化学,1995;
112,高分子化学,化学,1996;
121,统计数学,数学,1995;
131,现代语言,中文,1996;
141,国际贸易,经济,1997;
142,国际金融,经济,1996;
)
STUDENT (
8101,张三,18,101; 8102,钱四,16,121;
8103,王玲,17,131; 8105,李飞,19,102;
8109,赵四,18,141; 8110,李可,20,142
8201,张飞,18,111; 8302,周瑜,16,112;
8203,王亮,17,111; 8305,董庆,19,102;
8409,赵龙,18,101; 8510,李丽,20,142 )
DEPARTMENT( 001, 数学; 002, 计算机;
003, 化学; 004, 中文;
005, 经济;)
3 完成以下查询功能
(1)找出所有姓李的学生,并按其年龄由小到大排序。
(2)列出所有开设超过两个专业的系的名字。
(3)列出学生人数大于等于2的系的编号和名称。
4 学校又新增加了一个物理系,编号为006。
5 学生张三转到化学系111班,请更新相关的表。
(二)
现有一个商店的数据库,记录顾客及其购物情况,由下面三个表组成:
商品(商品号,商品名,单价,商品类别,供应商);
顾客(顾客号,姓名,住址);
购买(顾客号,商品号,购买数量);
试用SQL语言完成下列功能:
1 建表,在定义中要求声明:
(1)每个表的主外码;
(2)顾客的姓名和商品名不能为空值;
(3)单价必须大于0,购买数量必须再0到20之间;
2 往表中插入数据:
商品(M01,佳洁士,8.00,牙膏,宝洁;
M02,高露洁,6.50,牙膏,高露洁;
M03,洁诺,5.00,牙膏,联合利华;
M04,舒肤佳,3.00,香皂,宝洁;
M05,夏士莲,5.00,香皂,联合利华;
M06,雕牌,2.50,洗衣粉,纳爱斯
M07,中华,3.50,牙膏,联合利华;
M08,汰渍,3.00,洗衣粉,宝洁;
M09,碧浪,4.00,洗衣粉,宝洁;)
顾客(C01,Dennis,海淀;
C02,John,朝阳;
C03,Tom,东城;
C04,Jenny,东城;
C05,Rick,西城;)
购买(C01,M01,3; C01,M05,2;
C01,M08,2; C02,M02,5;
C02,M06,4; C03,M01,1;
C03,M05,1; C03,M06,3;
C03,M08,1; C04,M03,7;
C04,M04,3; C05,M06,2;
C05,M07,8;)
商品有9 条,顾客有5条,
购买有5条
3 用SQL语句完成下列查询:
(1)求购买了供应商"宝洁"产品的所有顾客;
(2)求购买的商品包括了顾客"Dennis"所购买商品的顾客(姓名);
(3)求牙膏卖出数量最多的供应商。
4 将所有的牙膏商品单价增加10%。
5 删除从未被购买的商品记录。
(三)
现有一个公司的部门及雇员的数据库,由下面三个表组成:
雇员(雇员号,姓名,年龄,地址,薪水)
部门(部门号,部门名,部门经理)
工作(雇员号,部门号,在该部门工作的年限)
试用SQL语言完成下列功能:
①建表,在定义中要求声明
⑴每个表的主外码
⑵雇员的年龄介于18到55之间
⑶雇员姓名和部门名不能为空
⑷薪水取1000到50000之间整数
②往表中插入数据
雇员(E01,tom,35,海淀,8000
E02,dennis,24,朝阳,5000
E03,john,20,海淀,4000
E04,rick,41,朝阳,7000
E05,bill,45,西城,7500
E06,frank,35,海淀,6000
E07,jank,25,东城,3000
E08,mike,23,东城,3500)
部门(D01,人事,E04
D02,信息,E01
D03,销售,E05
D04,财务,E06)
工作(E01,D02,6
E01,D03,1
E01,D04,2
E02,D01,2
E02,D04,0
E03,D02,0
E04,D01,4
E04,D02,1
E05,D03,2
E06,D04,4
E07,D04,1
E08,D03,2)
③用SQL语句完成下列查询
⑴求同时在三个部门工作的雇员和姓名
⑵列出各部门的职工的工资总额,并按照总额大小降序排列
⑶求和其部门经理住址相同的员工的姓名及经理姓名
④为财务部门的雇员加薪,5年以下加5%,5年以上加3%
⑤删除部门工作年限为0的工作记录,若删除后有雇员没有任何部门工作,删除其雇员记录