【软件工程】考题预测

一、简答题

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.如果用户没有确认,给出提示,退出。

  • 12
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向前的诚_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值