-1--1-第1页共7页一、问答题:1、什么是计算机软件,它有哪些特点?2、试说明“软件生存周期”的概念。3、软件工程学的基本原则有哪些?试说明其中信息隐蔽的具体含义。4、举例说明你对概要设计与详细设计的理解。有不需要概要设计的情况吗?5、软件测试阶段,使用各种测试方法的综合策略是什么?答:1、什么是计算机软件,它有哪些特点?软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。软件的特点是:(1)软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。(2)软件的生产与硬件不同,它没有明显的制造过程。对软件的质量控制,必须着重在软件开发方面下功夫。(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。(4)软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。(5)软件的开发至今尚未完全摆脱手工艺的开发方式。(6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。(7)软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。(8)相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观念和人们的心理。它直接影响到项目的成败。2、试说明“软件生存周期”的概念。软件与任何一个事物一样,有它的孕育、诞生、成长、成熟、衰亡的生存过程。这就是软件的生存周期。它主要分为6个阶段:软件项目计划、软件需求分析和定义、软件设计、程序编码、软件测试,以及运行维护。(1)软件项目计划:在这一步要确定软件工作范围,进行软件风险分析,预计软件开发所需要的资源,建立成本与进度的估算。根据有关成本与进度的限制分析项目的可行性。(2)软件需求分析和定义:在这一步详细定义分配给软件的系统元素。可以用以下两种方式中的一种对需求进行分析和定义。一种是正式的信息域分析,可用于建立信息流和信息结构的模型,然后逐渐扩充这些模型成为软件的规格说明。另一种是软件原型化方法,即建立软件原型,并由用户进行评价,从而确定软件需求。(3)软件设计:软件的设计过程分两步走。第一步进行概要设计,以结构设计和数据设计开始,建立程序的模块结构,定义接口并建立数据结构。此外,要使用一些设计准则来判断软件的质量。第二步做详细设计,考虑设计每一个模块部件的过程描述。经过评审后,把每一个加细的过程性描述加到设计规格说明中去。(4)程序编码:在设计完成之后,用一种适当的程序设计语言或CASE工具生成源程序。应当就风格及清晰性对代码进行评审,而且反过来应能直接追溯到详细设计描述。-2--2-第2页共7页(5)软件测试:单元测试检查每一单独的模块部件的功能和性能。组装测试提供了构造软件模块结构的手段,同时测试其功能和接口。确认测试检查所有的需求是否都得到满足。在每一个测试步骤之后,要进行调试,以诊断和纠正软件的故障。(6)软件维护:为改正错误,适应环境变化及功能增强而进行的一系列修改活动。与软件维护相关联的那些任务依赖于所要实施的维护的类型。3、软件工程学的基本原则有哪些?试说明其中信息隐蔽的具体含义。答:抽象·信息隐蔽·模块化·局部化·确定性·一致性·完备性·可验证性。信息隐蔽:遵循信息封装,使用与实现分离的原则,将模块设计成“黑箱”,可以将实现的细节隐藏在模块内部,使用者只能通过模块接口访问模块中封装的数据。4、说明你对概要设计与详细设计的理解。有不需要概要设计的情况吗?软件设计是一个把软件需求变换成软件表示的过程。最初这种表示只是描绘出软件的总的框架,然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的软件表示。正因为如此,所以从工程管理的角度来看,软件设计分两步完成。首先做概要设计,将软件需求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。由于概要设计建立起整个系统的体系结构框架,并给出了系统中的全局数据结构和数据库接口,人机接口,与其它硬、软件的接口。此外还从系统全局的角度,考虑处理方式、运行方式、容错方式、以及系统维护等方面的问题,并给出了度量和评价软件质量的方法,所以它奠定了整个系统实现的基础。没有概要设计,直接考虑程序设计,就不能从全局把握软件系统的结构和质量,实现活动处于一种无序状态,程序结构划分不合理,导致系统处于一种不稳定的状态,稍一做改动就会失败。所以,不能没有概要设计。5、软件测试阶段,使用各种测试方法的综合策略是什么?在任何情况下都必须使用边界值分析方法。经验表明用这种方法设计出测试用例发现程序错误的能力最强。必要时用等价类划分方法补充一些测试用例。用错误推测法再追加一些测试用例。对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。二、简答题1、阅读下列关于面向对象的程序设计的基本概念的叙述,回答问题。在传统的程序设计中,处理对象的数据和处理对象的行为的编码是分别描述的。但是在面向对象的程序设计方法中,这种方法起了根本变化;将处理对象的这两个部分紧密地联系在一起,即一个对象(Object)中包含了描述状态的数据和描述它行为的编码,并且将整个对象视为程序的数据。描述对象中数据行为的编码称为方法(Method)。在面向对象的程序设计方法中,封闭性(Encapsulation)和继承性(Inheritance)是两个最为突出的特点。-3--3-第3页共7页①.封闭性:类似于结构化程序设计的模块化概念,但具有更好的封闭性。在一个对象中定义的数据不能直接被其它对象访问,即数据被封闭在对象中。这一特性使得程序员必须将描述对象状态的数据与对这些数据进行操作的方法视为一个整体,从而对象的独立性较传统的模块更高。因此,对程序中一个对象的任何修改其影响范围仅限自身,使得程序的编写可以将对象作为零件,积木式地进行组装。在这种程序设计方法中,对象之间以松散方式耦合,在程序执行时才实现动态装订。面向对象程序设计的这一特性,使得程序代码的可重用性大大提高。②.继承性:这个概念是全新的。将功能相近的对象称为类(Class),同类中不同状态的对象称为同一类中的不同实例(Instances),不同功能的对象称为不同类的实例。换言之,不同类具有不同代码,不同实例有不同的数据。类的功能可使不同对象可共享相同的代码资源,许多人将一个程序设计语言是否有类的功能作为它能否支持面向对象的程序设计的重要标志。类的功能常具有层次机制,即除了根结点外,所有类能够从其超类中继承所有的行为和状态。例如,猫的超类是猫科类,猫科类的超类是动物类,所以猫类可以自动地继承猫科类和动物类的所有行为和状态。问题1为什么结构化程序设计语言中模块代码的可重用性不如对象高?问题2试述类与模块的概念根本不同,及为什么不同对象中的共性仅需定义一次?答:①围绕封闭性②围绕继承性2、阅读下列关于提高程序质量和编程风格的文字叙述,并回答下列问题。B.Kernighan和P.Plauger曾出版了“编程风格要点(TheElementsofProgrammingStyle)”一书,讨论了提高程序质量的种种技巧,下面是其中的部分:◆采用有实际意义的变量名◆避免使用过于相似的变量名◆变量名中尽量不含数字◆同一变量名不要具有多种意义◆显式说明所有变量◆尽量少用中间变量◆表达式中注意添加括号,以澄清计算意图◆注意浮点运算的误差◆注意整数运算的特点◆避免不必要的GOTO语句◆GOTO语句不要相互交叉◆尽量少用语句标号◆在使程序运行得更快之前,先使其正确◆在使程序运行得更快之前,先使其清晰◆别贪图效率方面的小利,而破坏程序的清晰性问题1用最少的文字说明,为什么要“避免使用过于相似的变量名”问题2用最少的文字说明,为什么要避免使用不必要的GOTO语句?问题3用最少的文字说明,为什么“别贪图效率方面的小利,而破坏程序的-4--4-第4页共7页清晰性“?答:①避免混乱,提高易读性②避免破坏结构化程序③提高易读性、可维护性三、分析设计题(共50分):1、根据下面逻辑结构,设计足够的测试用例,满足条件组合覆盖.(10分)2、设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”(1)试利用因果图法,建立该软件的因果图;(8分)(2)设计测试该软件的全部测试用例。(8分)(1)因果图输入条件(原因)输出条件(结果)投入1元5角硬币(1)(21)退还5角硬币E投入2元硬币(2)(11)(22)送出“可乐”饮料按“可乐”按钮(3)(23)送出“雪碧”饮料按“雪碧”按钮E(4)(12)(24)送出“红茶”饮料按“红茶”按钮(5)(2)测试用例设计-5--5-第5页共7页1234567891011输入投入1元5角硬币(1)11110000000投入2元硬币(2)00001111000按“可乐”按钮(3)10001000100按“雪碧”按钮(4)01000100010按“红茶”按钮(5)00100010001中间结点已投币(11)11111111000已按钮(12)11101110111输出退还5角硬币(21)00001110000送出“可乐”饮料(22)10001000000送出“雪碧”饮料(23)01000100000送出“红茶”饮料(24)00100010000测试用例每一纵列为一个测试用例3、为现实企业与人才牵线搭桥的作用,来弥补招聘中存在的种种不足。在这种条件下,需要开发一个网上招聘系统。需求陈述如下:人力资源部的工作人员通过这个招聘系统维护知识库,编制试题,发布职位和与这个职位相应的试题;应聘者可以通过网上提交自己的简历并同时回答相应的试题。人力资源部的工作人员通过这个招聘系统可以统计整理这些简历,并根据应聘者的简历和试题分数提取出需要面试的人员,然后按照一定的方式通知面试人员参加面试,在面试过程中,记录相应的面试结果。人力资源部的工作人员可以随时浏览人员简历和面试的相关信息。网上招聘系统可以分为两个主要的组成部分,一个是客户端子系统,一个是管理端子系统。客户端子系统主要是指应聘者通过登录招聘网站进行操作的功能,即应聘功能。管理端子系统是招聘公司的管理人员发布招聘职位,整理应聘者简历,面试等功能。(1)分别用UML画出客户端与管理端的功能用例图;(2)试写出目标系统的性能要求;(3)设计客户端的页面流程与管理端的页面流程。答:分别用UML画出客户端与管理端的功能用例图;客户端的功能主要包括选择职位、填写简历、回答试卷等功能,它的用例图如下图-6--6-第6页共7页填写简历应聘者选择应聘职位试题回答管理端主要是指提供公司内部人力资源管理人员使用的功能部分,它的功能分为知识库、试卷管理、职位发布、简历整理、面试管理等部分,每个登录者首先经过认真安全认证然后缺陷权限,根据相应的权限现实相应的功能。管理端用例图(2)性能要求:根据用户对本系统的要求,确定系统在响应时间、可靠性、安全等方面有较高的性能要求。客户端的功能用例图-7--7-第7页共7页界面需求、响应时间需求、开放性需求、可扩展性需求、系统安全性需求(3)设计客户端的页面流程与管理端的页面流程。(10分)客户页面流程如下图所示:应聘者网上登录企业招聘信息职位列表职业详细信息申请职位填写个人基本信息填写家庭成员填写工作经历填写基本技能填写教育经历填写个人评价预览简历答题客户端的页面流程