您的当前位置:首页正文

软件工程分析设计题

2021-07-10 来源:好走旅游网
软件工程分析设计题

1.请给出以下问题描述的用例模型。

一个新的音像商店准备采用计算机系统向比较广泛的人群销售或租借录像带和光碟。该 音像商店将存有大约1000盘录像带和500张光碟,这些订购涉及多家订购商。所有的录像 带和光碟都有一个条码,可以使用条码扫描仪来支持销售和返还,客户会员卡也同时条码化。

客户可以预定录像带并在指定日期来取。系统必须拥有灵活的搜索机制来回答客户的询 问,包括关于该音像商店还没有进货的电影(但可能是已经请求订购了)。

2. 请指出下面需求描述存在的问题,并进行适当的修改。 (1) 系统用户界面友好。

(2) 系统运行时应该占用尽量少的内存空间。

(3) 即使在系统崩溃的情况下,用户数据也不能受到破坏。 (4) ATM系统允许用户查询自己银行帐户的现存余额。 (5) ATM系统应该快速响应用户的请求。 (6) ATM系统需要检验用户存取的合法性。

(7) 所有命令的响应时间小于1秒;BUILD命令的响应时间小于5秒。 (8) 软件应该用JAVA语言实现。 答案要点: (1) 问题:“友好”是不可验证的。改正:具有一年计算机使用经验的用户经过3小时的培训就可以学会使用该系统。 (2) 问题:“尽量少”存在歧义。改正:系统运行时所占用的最大内存空间是256MB。 (3) 问题:“不能受到破坏”是不可验证的。改正:如果系统发生崩溃,那么该系统重新正常启动后,可以将用户数据恢复到最后未完成操作执行前的状态。 (4) 该描述是正确的。

1 / 7

软件工程分析设计题

(5) 问题:“快速”是不可验证的。改正:ATM系统将在1秒钟之内响应用户的请求。 (6) 问题:“如何验证合法性”是存在歧义的。改正:ATM系统将通过用户名和口令验证其存取的合法性。

(7) 问题:所有命令中必然会包括BUILD命令,因此这两个需求描述是矛盾的。改正:去掉关于BUILD命令的需求描述。

(8) 问题:该描述不是功能需求或非功能需求,应该是对设计实现的一个约束条件。 3.假设你是一个软件项目的负责人,该项目要求开发一个安全性要求极高的医疗控制系统,用于控制医院病人的放射性治疗。该系统是嵌入式系统,内存限定在 16MB,程序规模估计是10KLOC,病人的放射治疗信息将记录到数据库中。 (1) 请使用简单 COCOMO 模型估算系统开发的工作量。

(2) 请考虑产品、计算机、人员和项目等影响因素,使用中间 COCOMO 模型估算系统开 发的工作量,并说明考虑这些因素的理由及其取值。 参考答案:(1)由简单 COCOMO 模型公式计算: 工作量E = 3.6 ×(10)1.20 = 57.06(人月) 开发时间D=2.5 ×(57.06)0.32 = 9.12(月) (2):

工作量修正因子F =1.90

工作量E =2.8 ×(10)1.20 × 1.90 =2.8 × 15.85 × 1.90 =84(人月) 开发时间D =2.5 ×(84)0.32 =2.5 × 4.13 =10.32(月)

4.现在要对一个自动饮料售货机软件进行黑盒测试,该软件的规格说明如下:一个自动售货

2 / 7

软件工程分析设计题

机软件可以销售单价1元5角的盒装饮料。该售货机只接收1元和5角两种硬币,若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,则送出相应的饮料;若投入的硬币少于1元5角,则显示错误信息并退出硬币;若投入的硬币多于1元5角,则送出饮料的同时退还多余的硬币。请设计测试该软件的全部测试用例。

5.某诊所需要开发一个软件系统来管理预约,具体要求如下:

当病人打电话预约时,接待员将查询日历并安排病人尽早得到诊治。如果病人同意计划 的约定时间,该接待员将输入约定时间和病人姓名,系统将核实病人姓名并提供病人已有的

记录数据。在每次检查和治疗之后,医生将标记相应的预约已经完成并添加治疗说明,如果

必要的话还会安排病人下一次再来。

诊所人员可以使用系统按照病人姓名和预约日期进行查询,查询结果显示病人的记录数 据和预约信息。接待员可以取消预约,并打印出已经预约但不能接诊的通知清单。另外,接

待员还可以打印出关于所有病人的每周预约安排。

请使用功能点技术估算该软件的规模,并说明每个信息域特征的估计理由。 答案:(1) 外部输入: 病人信息(简单)、预约信息(中等) 治疗说明(简单)、取消预约(中等) (2) 外部输出: 治疗记录(简单)、预约信息(中等) 通知清单(中等)、每周预约安排(复杂) (3) 外部查询: 查看日历(中等)、查看病人数据(简单) 查看预约(中等)、查看治疗记录(简单) (4) 内部文件: 病人信息(简单)、预约信息(中等)

3 / 7

软件工程分析设计题

治疗记录(简单) (5) 外部接口:无

6.请考虑下图的对象模型,运用你对Gregorian日历的知识,指出该模型存在的所有问题,并给出修改后的正确模型。

参考答案: “星期”之间不是聚合关系“月”与其他关系之间的多重性不正确

修改结果:

7.请考虑下图表示的系与教师之间关系的类图:1) 类图中显示了哪些关系?2) 一个教师

4 / 7

软件工程分析设计题

可以同时在多个系工作吗?请说明理由。

参考答案:

(1) 类图显示了两个关系:

“学校”与“系”之间的一对多关联;“系”与“教师”之间的多对多关联 (2) 一个教师可以同时在多个系工作,因为它们之间是多对多关联。 8.请分析比较下面两个for循环的优缺点。 第一个for循环: for (i = 0; i < N; i++) {

if (condition) DoSomething(); else

DoOtherthing(); }

第二个for循环: if (condition) {

for (i = 0; i < N; i++) DoSomething(); } else {

for (i = 0; i < N; i++) DoOtherthing();

5 / 7

软件工程分析设计题

}

参考答案:

第一个for循环的代码简练且结构清晰,但效率较低; 第二个for循环的执行效率较高,但结构不够紧凑。 9.下面三个程序运行时分别会产生什么结果?为什么? 程序1:

void GetMemory(char *p, int num) {

p = (char *)malloc(sizeof(char), num); return; }

int main() {

char *str = NULL;

GetMemory(str,100); strcpy(str, “Hello World.”); printf(str); return 0; }

程序2:

void GetMemory(char *p, int num) {

p = (char *)malloc(sizeof(char), num); return; }

int main() {

char *str = NULL;

GetMemory(&str, 100); strcpy(str, “Hello World.”); printf(str); return 0; }

程序3: int main() {

char *str = (char *)malloc(100); strcpy(str, “Hello ”); free(str);

if (str != NULL) {

strcpy(str, “World.”); printf(str); }

6 / 7

软件工程分析设计题

return 0; }

参考答案:

程序1:系统运行崩溃。

原因:GetMemory(str,100)并没有将申请到的内存传回到调用程序,str一直是NULL, 从而导致非法内存访问,使程序崩溃。 程序2:显示“Hello World.”,但将产生内存泄漏。

原因:GetMemory(&str,100)申请到的内存没有被释放。 程序3:显示“Hello World.”但有时系统运行异常。

原因: 在free(str)释放内存空间后,str仍然指向原来空间地址,成为“野指针”。如果这时系统将所释放的空间分配给其他程序使用,将会造成系统运行异常。

10.请结合等价类方法给出getNumDaysInMonth(int month, int year)方法的测试用例,其中getNumDaysInMonth方法根据给定的月份和年份返回该月份的总天数。

月的等价类:①31天的月份;②30天的月份;③2月年的等价类:① 闰年;② 非闰年

7 / 7

因篇幅问题不能全部显示,请点此查看更多更全内容