
软件工程
硕士研究生课程考试试题
第一部分 概念部分
1.软件。
答:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
2.软件工程。
答:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料
3.软件需求。
答:(1)用户解决问题或达到目标所需的条件或能力(Capability)。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。
(3)一种反映上面(1)或(2)所描述的条件或能力的文档说明。
软件需求包括三个不同的层次——业务需求、用户需求和功能需求——也包括非功能需求。
4.软件配置。
答:软件配置管理是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。
5.软件体系结构。
答:是产生软件设计的第一步,它将需求规格说明中确定的系统能力与实现这些能力的构件关联起来。并描述构件间的相互联系,定义从子系统创建系统的相关操作。
6.软件维护种类。
答:软件维护分为:
(1)改正性维护:针对故障导致的问题所进行的处理称为改正性维护。
(2)适应性维护:对系统的一部分改变要求改变系统的其他部分,适应性维护实现这种改变。
(3)完善性维护:是为了对系统的某些方面进行改进而做出的改变。
(4)预防性维护:改变系统的某些方面以预防失效的发生。
7.软件文档。
答:文档(document)是指某种数据媒体和其中所记录的数据。它具有永久性,并可以由人或机器阅读,通常仅用于描述人工可读的东西。在软件工程中,文档常常用来表示对活动、需求、过程或结果进行描述、定义、规定、报告或认证的任何书面或图示的信息。它们描述和规定了软 件设计和实现的细节,说明使用软件的操作命令。文档也是软件产品的一部分,没有文档的软件就不成其为软件。软件文档的编制(documentation)在软件开发工作中占有突出的地位和相当大的工作量。高质量、高效率地开发、分发、管理和维护文档对于转让、变更、修正、扩充和使用文档,对于充分发挥软件产品的效益有着重要的意义。
8.软件可靠性。
答:一个系统对于给定的时间间隔内,在给定条件下无失效运作的概率。
第二部分 方法部分
一、软件计划
软件计划书的主要撰写要素。
答:一个好的软件项目计划书应该包含下面几项内容:
(1)项目范围。
(2)项目进度。
(3)项目团队组织结构。
(4)打算构建的系统的技术描述。
(5)项目的标准、过程和提议的技术及工具。
(6)质量保证计划。
(7)配置管理计划。
(8)文档计划。
(9)数据管理计划。
(10)资源管理计划。
(11)测试计划。
(12)培训计划。
(13)安全计划。
(14)风险管理计划。
(15)维护计划。
二、需求分析
选择实例,用实体-关系图、状态机、数据流图、代数规格说明四种方法之一完成需求表示。
答:用状态机表示公园凭票单行门。
三、软件设计
选择实例用管道和过滤器、隐式调用、分层、信息库四种方法之一完成设计。
答:根据分层的方法设计安全体系结构:
分层的安全体系结构:
最内层是加密层,它的功能是加密和解密用于系统的基本加密方案中的钥匙。第二层是文件接口层,它的功能是对文件进行加密和解密。第三层是密钥管理,它允许某个构件签名一个文件,验证签名并计算散列代码以获得文件访问权。最后,第四层是认证层,这一层负责管理按照加密格式存储的密码文件,而且它要求用户提供身份和一个密码。用户可以根据在需求中表述的要求,在不通层次访问系统。
四、软件实现
选择一个算法实例用程序编码文档化和可视化的思路和相关方法完成算法编码。
答:火车站托运行李收费计算算法编码(C语言):
/*程序功能:计算火车站托运行李收费
编写日期:
算法描述:若行李重量不超过50公斤,每公斤收费1.6元;超过50公斤,每公斤收费2.0元,两部分之和为总共收费。*/
#include double compute(int i, double w) { double s; /*定义double型自动变量s,存放根据重量w(实参)求得的一件行李托运费*/ static double total=0; //定义double型内部静态变量total,存放托运费的累加值 if(w<=50.0) s=1.6*w; //行李重量w不超过50公斤,每公斤收1.6元的托运费 else 行李重量w超过50公斤的部分,每公斤收2.0元托运费 total +=s; /*由内部静态变量total累加,每称一件行李累加一次,s是一件行李的托运费,total是几件行李累加的托运费*/ printf ("\\n 行李件数:%d\总计: %.2f\\n" ,i ,total ) ; //输出行李件数和总共应付的托运费 return s; //把由重量w(实参)求得的一件行李托运费作为函数的返回值 } void main() { double w, s; //自动变量w记录每件行李的重量,s记录每件行李的托运费 int i; //自动变量i记录行李的件数 for (i=1; ; ++i) //for语句无第二分量,无穷循环语句 { printf ("\\n\\n(%d) 输入每件行李的重量 :",i); scanf ("%lf",&w); /*用键盘输入每件行李的重量,存放在自动变量w中,也可用电子秤采样读出存放在w中*/ if (w==0) break ; //当输入的行李重量为0时,则结束无穷循环 s= compute (i ,w) ; //每称一次行李,调用一次compute(),求得一件行李的托运费 printf ("\\n 重量:%.1lf\托运费: %.2lf",w,s); //输出这件行李的重量和托运费 } } 五、软件测试 1.选一实例并设计测试用例,完成正整数值的测试。 答:要完成对一个正整数的测试,可以用该程序的外部规格来生成初始测试用例,这些实例不仅应该考虑预期的输入数据,还应该考虑输入和输出的边界条件以及无效数据的几种情况。可以针对以下每种情况生成一个测试用例: (1)一个非常大的正整数 如99999999999 (2)一个正整数 如25 (3)一个正的小数 如2.3 (4)一个大于0小于1的数 如0.25 (5)0 (6)一个负整数 如-9 (7)一个负小数 如-2.3 (8)一个非数字符号 如@ 对每个测试用例测试后做出预期结果和是否符合正整数的判定,就完成了正整数的测试。 2.选一实例并设计测试用例,完成语句测试、判定测试及路径测试中之一的测试。 解:对如下程序进行路径测试: void Sort(int iRecordNum,int iType) 1 { 2 int x=0; 3 int y=0; 4 while (iRecordNum-- > 0) 5 { 6 if(iType= =0) 7 x=y+2; 8 else 9 if(iType= =1) 10 x=y+10; 11 else 12 x=y+20; 13 } 14 } 该程序流程图如下:(流程图中标号为程序行号) 选择适当的数据分别测试四条路径,下面是测试路径及预期输出数据值: 路径1:4-14;输入数据:iRecordNum=0,或者取iRecordNum<0的某一个值;预期结果:x=0 路径2:4-6-7-14;输入数据:iRecordNum=1,iType=0;预期结果:x=2 路径3:4-6-8-10-13-4-14;输入数据:iRecordNum=1,iType=1;预期结果:x=10 路径4:4-6-8-11-13-4-14;输入数据:iRecordNum=1,iType=2;预期结果:x=20 第三部分 软件设计 以“银行取款”事务处理为例,请做: 1)画出取款业务的数据流图; 2)定义“存折”数据中的5项(见本题第三小题)数据定义; class Account { private: char *name; short number[16]; double money; short password[6]; char time[10]; public: void withdraw(double money); void deposit(double money); }; 其中,姓名=2{汉字}10 账号="0000 0000 0000 0001"到"9999 9999 9999 9999" 余额="0.00"到"9 999 999 999 999.99" 密码="000000"到"999999" 开户日期="1980"至"2009"+"/"+"01"至"12"+"/"+"01"至"31" 3)给出数据定义中相关边界值测试描述。 (提示:存折=姓名+账号+余额+密码+开户日期) 姓名边界值测试描述: 密码边界值测试描述:
账号边界值测试描述:测试编号 输入 预期结果 符合与否 001 张三 返回false,提示输入不能为一个汉字 不符合 002 李四 返回true 符合 003 可爱又好玩的蜡笔小新 返回true 符合 004 可爱又好玩的蜡笔小新心 返回false,提示输入不能超过10个汉字 不符合
余额边界值测试描述:测试编号 输入 预期结果 符合与否 001 0 返回false,提示输入账号不能为一位数字 不符合 002 1111 1111 返回false,提示输入账号必须为16位数字 不符合 003 0000 0000 0000 0000 返回true 符合 004 9999 9999 9999 9999 返回true 符合 005 3333 3333 3333 3333 3333 返回false,提示输入账号必须为16位数字 不符合 006 @#! 返回false,提示输入账号必须为数字 不符合 测试编号 输入 预期结果 符合与否 001 0.00 返回true 符合 002 1000.00 返回true 符合 003 9 999 999 999 999.99 返回true 符合 004 @#$ 返回false,提示输入必须为数字 不符合 005 MONEY- 返回false,提示输入必须为数字 不符合
开户日期边界值测试描述:测试编号 输入 预期结果 符合与否 001 1 返回false,提示输入密码必须为6位数字 不符合 002 000000 返回true 符合 003 999999 返回true 符合 004 1000000 返回false,提示输入密码必须为6位数字 不符合 005 ¥xiaoxin 返回false,提示输入密码必须为6位数字 不符合 测试编号 输入 预期结果 符合与否 001 1919/01/11 返回false,提示开户日期不能小于1980年 不符合 002 1980/01/01 返回true 符合 003 2008/01/20 返回true 符合 004 2009/01/01 返回true 符合 005 2008/30/30 返回false,提示月份不能大于12 不符合 006 2020/03/11 返回false,提示年份不能大于2009 不符合 007 2004/02/50 返回false,提示日期不能大于31 不符合 008 —xiaoxin 返回false 不符合
