一、简答题
1.什么是类?什么是对象?简述类在建模中的主要用途
类是一组具有相同属性、操作、关系和语义的对象的描述;对象是类的一个实例
主要用途:模型化问题域中的概念,建立系统的职责分布模型,模型化建模中使用的基本类型
2.简述软件生命周期及其每阶段的主要任务
6个阶段:可行性研究、需求分析、软件设计、编码、测试、维护。
可行性研究:弄清楚“要解决的问题是什么”
需求分析:确定“软件系统必须做什么”
软件设计:确定软件的结构由哪些模块组成
编码:写成以语言表示的“源程序”
测试:尽可能多地发现并排除软件中潜藏出错误
维护:更新功能,升级版本,以保持软件产品正常运行
3.在模块化设计中必须遵守的设计原则是什么?为了实现有效的模块化,采用的启发设计策略是什么?
在模块化设计过程中,必须遵循的设计原则:
抽象与逐步求精、信息隐藏、模块化、高内聚、低耦合、复用性。
按照模块化设计原则,相应的启发式设计策略(6条):
(1)改造程序结构图,降低耦合度,提高内聚度
(2)避免高扇出,并随着深度的增加,力求高扇入
(3)模块的影响范围应限制在该模块的控制范围内
(4)降低模块接口的复杂程度和冗余程度,提高一致性
(5)模块的功能应是可预测的,避免对模块施加过多的限制
(6)尽可能设计单入口和单出口的模块
4.什么是黑盒测试法,常用的黑盒测试方法有哪些?
在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性,着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
常用的黑盒测试技术有:等价类划分法、边界值分析法、错误推测法、因果图法
5.什么是白盒测试法,常用的白盒测试方法有哪些?
关注软件产品的内部细节和逻辑结构,把被测的程序看成一个透明的盒子
常用的白盒测试技术有:代码检查法、逻辑覆盖测试、基本路径测试
6.UML统一建模语言有哪几种模型?各种模型的主要功能是什么
功能模型: 从用户的角度展示系统的功能,包括用例图。
对象模型: 采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类图、对象图、包图。
动态模型: 展现系统的内部行为。 包括序列图,活动图,状态图。
7.我们已经学习了《数据库原理》、《操作系统》,根据我们软件工程软件体系结构,选择其中之一,给出其体系结构
《数据库原理》体系结构分为三级:内部级、概念级和外部级
(1)外部级:单个用户所能看到的数据特性;单个用户使用的数据视图的描述称外模式。(最接近用户)
(2)概念级:涉及到所有用户的数据定义,是全局的数据视图;全局数据视图的描述称“概念模式”。
(3)内部级:最接近于物理存储,涉及到实际数据存储的结构;物理存储视图的描述称为“内模式”。
二、实现一组实数从小到大排序,先给出排序算法,并用数据流程图描述此算法,最后用C语言给出函数声明
算法描述:找一个标准数,将比这个数小的放在左边,将比这个数大的放到右边,对这两组数再次分而治之,找中间的数,将比这个数小的放在左边,将比其大的放到右边,依次类推 直到排序完成为止。
数据流程图:
函数声明:
void sort(int n,int a[]) {
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[j]<a[i])
swap(a[i],a[j]);
}
}
}
三、定义一个点类,其中必须含有计算两点之间距离的方法(或函数);定义直线类,其中必须含有两直线交点的方法(或函数),则其交点设为原点(0,0),交点的值必须为点类类型,再设计一个主类(主函数),验证所设计的两个类。
public class Point { //点类
private double x;
private double y;
public Point() {}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public static double getDist(Point a,Point b) {
double dx=a.getX()-b.getX();
double dy=a.getY()-b.getY();
return Math.sqrt( dx*dx+dy*dy );
}
}
public class Line { //直线类
private double k;
private double b;
public Line() {}
public Line(Point A,Point B) {
if(A.getX()==B.getX()) {
k=0;
b=A.getX();
}else {
k=(B.getY()-A.getY())/(B.getX()-A.getX());
b=A.getY()-k*A.getX();
}
}
public double getK() {
return k;
}
public void setK(double k) {
this.k = k;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public Point getJiaoDian(Line A,Line B) {
if(A.getK()==B.getK()) {
return new Point(0,0);
}
double x=0,y=0;
if(A.getK()==0) {
x=A.getB();
y=B.getK()+B.getB();
}else if(B.getK()==0) {
x=B.getB();
y=A.getK()+A.getB();
}else {
x=(A.k-B.k)/(B.b-A.b);
y=A.k+A.b;
}
return new Point(x,y);
}
}
public class Test { //测试类
public static void main(String[] args) {
Point A=new Point(2,1);
Point B=new Point(1,2);
System.out.println("两点间距离为:"+A.getDist(A, B));
Point C=new Point(2,5);
Point D=new Point(1,3);
Line l1=new Line(A,B);
Line l2=new Line(C,D);
System.out.println("两直线交点为:"+L1.getJiaoDian(L1, L2));
Point C1=new Point(3,1);
Point D1=new Point(1,3);
Line l3=new Line(A,B);
Line l4=new Line(C1,D1);
System.out.println("两直线交点为:"+:L1.getJiaoDian(L3, L4));
}
四、测试用例的设计,分别采用黑盒子测试和白盒子测试
1、ax2+bx+c=0用等价类测试法设计
(1)列出等价类表
输入条件 有效等价类 无效等价类
是否存在根
是否有两个不等实根
是否有两个相等实根
是否存在虚根
(2)
1、a,b,c有效输入:1,9,0,预期输出:有两个不等实根
2、a,b,c有效输入:2,4,2,预期输出:有两个相等实根
3、a,b,c无效输入:1,1,2,预期输出:存在虚根
无效等价类不在此列举
2、白盒子测试一般、等腰、等边三角形,请采用逻辑覆盖中的判定覆盖设计测试用例
五、结构化的分析、设计方法
1、银行货期存取款业务处理系统的数据流图,根据图示完成以下问题。
(1)数据源或数据潭包括: ( );
(2)加工包括: ( );
(3)数据存储包括: ( );
(4)“业务分类的输入流是:( ) ;“业务分类"的输出流是: ( )。
答案:
(1)储户
(2)审查单据,业务分类、修改1A、修改1B、修改2A、修改2B
(3)账目文件、现金帐 =时间+使用人+现金金额(支出金额+收入金额)
(4)输入流:合格存取单存折
输出流:合格存折存款单、合格存折取款单
2、教材销售系统该系统的工作流程描述:
学生填写购书单,如果书库中有所需教材, 则开发票,登记并开领书单,学生凭领书单到书库领书。如果书库中该教材脱销,则填写缺登记表。根据缺书登记表,生成一张采购单,由教材采购人员根据采购单采购教材,新教材进库后,将进书单返回给系统。
请给出该系统的数据流图。
顶层图:
0/1层图:
六、面向对象的分析、设计与建模
根据你对ATM机使用的理解,首先给出ATM机的类图,然后给出“取款用例”的事件流,最后给出李明取款20元的时序图(顺序图)
ATM机的类图:
“取款用例”的事件流:
李明取款20元的时序图(顺序图):
补充事件流:
事件流(Event Stream)是指以近实时的方式计算、分析流事件将事件与事件查询语句相匹配并通知监听器,由基本流和备选流组成。
上题中基本流:
1.用户输入取款金额。
2.系统验证输入金额是否符合输入要求。
3.系统验证用户账户余额。
4.系统显示用户取款金额。
5.用户确认取款金额。
6.系统要求点钞机出钞。
上题中备选流:
1.如果输入金额不符合输入数字格式要求,给出提示,退出。
2.如果输入金额超出最大取款金额,给出提示,退出。
3.如果用户没有确认,给出提示,退出。