《软件工程-作业解答1-7章.ppt》由会员分享,可在线阅读,更多相关《软件工程-作业解答1-7章.ppt(69页珍藏版)》请在三一办公上搜索。
1、13:07:42,软件工程作业解答,13:07:42,作业及解答(第1-2章),1-5 根据历史数据可以做出如下的假设:对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960)存储器的价格按下面公式描述的趋势逐年下降:P1=0.30.72Y-1974(美分/位)如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.0480.72Y-1974(美元/字)在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:,13:07:42,(1)在1985年对计算机存储容量的需求估计是多少?如
2、果字长为16位,这个存储器的价格是多少?(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。,作业及解答(第1-2章),13:07:42,(1)在1985年对计算机存储容量的需求,估计是如果字长为16位,则这个存储器的价格是(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令。在1985年一名程序员每天可开发出10条指令,如果每月有20个工作日
3、,则每人每月可开发出1020条指令。为了开发出4474263条指令以装满存储器,需要的工作量是:,作业及解答(第1章),13:07:42,程序员的月平均工资是4000美元,开发出4474263条指令的成本是(3)在1995年对存储容量的需求估计为:如果字长为32位,则这个存储器的价格是:如果一条指令为一个字长,则为使存储器装满程序共需73,577,679条指令。在1995年一名程序员每天可开发出30条指令,每月可开发出600条指令,为了开发出可装满整个存储器的程序,需要的工作量为,作业及解答(第1章),13:07:42,开发上述程序的成本为:1-6 什么是软件过程?它与软件工程方法学有何关系?
4、软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。软件过程是软件工程方法学的3个重要组成部分之一。,作业及解答(第1章),13:07:42,作业及解答(第3章),2-4 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,请分层次地画出描述本系统功能的数据流图。医院对患者7监护系统的基本要求是随时接收每个病人
5、的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。,13:07:42,数据流图的画法,具体步骤:1、先找系统数据源点和汇点,确定系统与外界的接口。2、找出外部实体的输出数据流和输入数据流。3、在图的边上画出系统的外部实体。4、从外部实体的输出数据流(汇点)出发进行回溯,按照系统的逻辑逐步画出一系列的逻辑加工,直到找到外部实体所需的输入数据流(源点),形成数据流的封闭。5、检查和修改所画数据流图,保证数据流图的正确性。6、按照上述步骤,再从各加工
6、出发,画出所需子图。,13:07:42,作业及解答(第3章),从问题陈述可知,本系统数据源点是“病人”和“护士”,他们分别提供生理信号和要求病情报告的信息。进一步分析问题陈述,从系统应该“定时记录病人情况以形成患者日志”这项要求可以想到,还应该有一个提供日期和时间信息的“时钟”作为数据源点。从问题陈述容易看出,本系统的数据终点是接收警告信息和病情报告的护士。系统对病人生理信号的处理功能主要是“接收信号”、“分析信号”和“产生警告信息”。此外,系统还应该具有“定时取样生理信号”、“更新日志”和“产生病情报告”的功能。为了分析病人生理信号是否超出了医生规定的安全范围,应该存储“患者安全范围”信息。
7、此外,定时记录病人生理信号所形成的“患者日志”,显然也是一个数据存储。,13:07:42,作业及解答(第3章),13:07:42,患者监护系统,E1-护士E2-病人E3-时钟,P1-接收信号P2-分析信号P3-产生警告P4-定时取样生理信号P5-更新日志P6-产生病情报告,D1-患者日志D2-患者安全范围,F1-要求报告F2-生理信号F3-日期、时间F4-警告信息F5-安全范围F6-日志,13:07:42,13:07:42,13:07:42,13:07:42,2-5 北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电
8、话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。请用定义数据字典的方法,定义上述的电话号码。,作业及解答(第3章),13:07:42,数据结构的描述 符 号 含 义 举 例 被定义为 与 x=ab.,.或.|.或 x=a,b,x=a|b.或 m.n 重复 x=a,x=3a8(.)可选 x=(a)“.”基本数据元素 x=“a”.连结符 x=1.9,作业及解答(第3章),13:07:42,作业及解答(第3章),电话号码=校内电话号码|校外电话号码校内电话号码=非零数字+3 位数字/后面继续定义校外电话号码=本市号码|外地号码本市
9、号码=数字零+8位数字外地号码=数字零+3位数字+8位数字非零数字=1|2|3|4|5|6|7|8|9数字零03位数字3数字3/3至3个数字8位数字=非零数字+7位数字7位数字=7数字7数字0|1|2|3|4|5|6|7|8|9,13:07:42,3-3 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。请用数据
10、流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。,作业及解答(第3章),13:07:42,作业及解答(第3章),13:07:42,银行储蓄系统,E1-储户E2-业务员,P1-记录存款信息P2-打印存单P3-核算密码P4-计算利息P5-打印利息清单P6-设置利率,D1-存款利息D2-存款利率,F1-存款单F2-取款单F3-存单F4-利息F5-存款信息F6-取款信息F7-密码F8-储蓄利率,13:07:42,13:07:42,作业及解答(第3章),13:07:42,作业及解答(第3章),ER模型,本问题中共有两类实体,分别是“储户”和“储蓄所”,在它们之间存在“存取款”关系。因为一位储
11、户可以在多家储蓄所存取款,一家储蓄所拥有多位储户,所以“存取款”是多对多(M:N)关系。储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、地址和电话号码,而数额、类型、到期日期、利率和密码则是关系类型存取款的属性。,13:07:42,作业及解答(第3章),13:07:42,3-6 复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态
12、,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。请用状态转换图描绘复印机的行为。,作业及解答(第3章),13:07:42,作业及解答(第3章),从问题陈述可知,复印机的状态主要有“闲置”、“复印”、“缺纸”和“卡纸”。引起状态转换的事件主要是“复印命令”、“完成复印命令”、“发现缺纸”、“装满纸”、“发生卡纸故障”和“排除了卡纸故障”。,13:07:42,13:07:42,P104:3 用面向数据流的方法设计下列系统的软件结构(1)储蓄系统2-2(2)机票预定系统2-3(2)患者监护系统2-4,作业及解答(第5章),13:07:42,13:07:42,作业及解答(第5章),13:07
13、:42,不能是两个分开的子系统,是相同的前台单个处理,13:07:42,不能是两个分开的子系统,是相同的前台单个处理,作业及解答(第5章),为了方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,旅客在飞机起飞前一天凭取票通知和账单交款取票,系统核对无误即印出机票给顾客,(1),(2),(3),(4),13:07:42,作业及解答(第5章),13:07:42,作业及解答(第5章),P2安排航班,作业及解答(第5章),P3顾客取票,可以是两个子系统,预定和取票是不同的处理方式(后台批量和
14、前台单个),13:07:42,13:07:42,P104:4美国某大学有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过$26000(含$26000)的教师工资将保持不变,年工资少于$26000的教师将增加工资,所增加工资数额按下述方法计算:给每位教师所赡养的人(包括教师本人)每年补助$100,此外,教师有一年工龄每年再多补助¥50,但是,增加后的年工资总额不能多于$26000。教师工资档案存储在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇佣日期等信息。需要写一个程序计算并印出每名教师的原工资和调整后的新工资。要求:(1)画出此系统的数据流图;(2)写出需求说
15、明;(3)设计上述的工资调整程序(要求用HIPO图描绘设计结果),设计时分别采用两种算法,并比较两种算法的优缺点:(a)搜索工资档案数据,找出年工资少于$26000的人,计算新工资,校核是否超过$26000,存储新工资,印出新旧工资对照表;(b)把工资档案数据按工资从最低到最高的次序排序,当工资数额超过$26000时即停止排序,计算新工资,校核是否超过限额,存储新工资,印出结果。(4)你所画出的数据流图适应于哪种算法?,13:07:42,作业及解答(第5章),13:07:42,作业及解答(第5章),13:07:42,作业及解答(第5章),搜索算法,13:07:42,作业及解答(第5章),排序算
16、法,13:07:42,P131:3 画出下列伪码程序的程序流程图和盒图STARTIF p THEN WHILE q DO f END DOELSE BLOCK g n END BLOCKEND IFSTOP,作业及解答(第6章),13:07:42,作业及解答(第6章),13:07:42,P131:4 下图给出的程序流程图代表一个非结构化的程序,请问:(1)为什么说它是非结构化的?(2)设计一个等价的结构化程序。(3)在(2)题的设计中你使用附加的标志变量flag吗?若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag的程序,作业及解答(第6章),13:07:42,(1)通常所
17、说的结构化程序,是按照狭义的结构程序的定义衡量,符合定义规定的程序。图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。,作业及解答(第6章),13:07:42,(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图示盒图描绘了等价的结构化程序。,作业及解答(第6章),13:07:42,(3)不使用flag把该程序改造为等价的结构化程序的方法如图所示。,作业及解答(第6章),13:07:42,C EXAMPLELOOP:DO WHILE X0 A=B+1 IF A10 THEN X=A ELSE Y=Z END IFIF Y
18、5 THEN PRINT X,Y ELSE IF Y=2 THEN GOTO LOOP ELSE C=3 END IFEND IF,P131:8 画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗?,G=H+REND DOIF F0 THEN PRINT G ELSE PRINT KEND IFSTOP,作业及解答(第6章),13:07:42,P131:7令P代表交易的总金额,Q代表每股的售价,n代表交易的股数。(1)表示手续费计算方法的判定表如图所示。判定表的每一列是一条计算规则。例如,第1列(规则1)规定,当交易总金额P少于1000元,且每股售价Q低于14元,且交
19、易的股数n是100的倍数时,给经纪人的手续费为(l+0.05)0.084P第16列(规则16)表明,当交易总金额P超过10000元,且每股售价Q在14元到25元之间,且交易的股数n不是100的倍数时,手续费为(1+0.06)(0.04P+134)(2)表示手续费计算方法的判定树如图所示。,作业及解答(第6章),13:07:42,作业及解答(第7章),13:07:42,作业及解答(第7章),13:07:42,STARTINPUT(A,B,C)/判定表达式1IF A5 THEN X=10 ELSE X=1END IF/判定表达式2IF B10 THEN Y=20ELSE Y=2END IF,作业(
20、第7章),/判定表达式3IF C15 THEN Z=30ELSE Z=3END IFPRINT(X,Y,Z)STOP,P174:4(3)、设计下列伪码程序的语句覆盖和路径覆盖测试用例:,13:07:42,作业(第7章),语句覆盖的测试用例,13:07:42,作业(第7章),路径覆盖的测试用例,13:07:42,5.请结合等价类方法给出getNumDaysInMonth(int month,int year)方法的测试用例,其中getNumDaysInMonth方法根据给定的月份和年份返回该月份的总天数。参考答案:月的等价类:31天的月份;30天的月份;2月 年的等价类:闰年;非闰年,13:07
21、:42,13:07:42,6.现在要对一个自动饮料售货机软件进行黑盒测试,该软件的规格说明如下:一个自动售货机软件可以销售单价1元5角的盒装饮料。该售货机只接收1元和5角两种硬币,若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,则送出相应的饮料;若投入的硬币少于1元5角,则显示错误信息并退出硬币;若投入的硬币多于1元5角,则送出饮料的同时退还多余的硬币。请设计测试该软件的全部测试用例。,13:07:42,13:07:42,9-2 什么是“对象”?它与传统的数据有何异同?答:对象是用面向对象方法学开发软件时对客观世界实体的抽象,它是由描述实体属性的数据及可以对这些数据施加的所有操作封装
22、在一起构成的统一体。传统的数据是用传统方法学开发软件时对客观世界实体的抽象,但是,种抽象是不全面的:数据只能描述实体的静态属性,不能描述实体的动态行为。必须从外界对数据施加操作,才能改变数据实现实体应有的行为。对象与传统数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体。必须发消息请求对象主动地执行它的某些操作,处理它的私有数据,而不能直接从外界对它的私有数据进行操作。,习题,13:07:42,附:用面向对象方法解决下述问题时需要哪些对象类?类与类之间有何关系?在显示器屏幕上圆心坐标为(250,100)的位置,画一个半径为25的小圆,圆内显示字符串“you”;在圆心坐标
23、为(250,150)的位置,画一个半径为100的中圆,圆内显示字符串“worId;再在圆心坐标为(250,250)的位置,画一个半径为225的大圆,圆内显示字符串“Universe”。,13:07:42,答:解决这个问题的一个可能的方案是,在“圆”类中增加一个字符串类型的属性,并给“圆”类的服务“显示”加一段代码,使它不仅能在屏幕上显示圆,而且能在圆内显示字符串。虽然用面向对象的程序设计语言实现这个方案并不困难,但它却不是一个理想的方案:字符串和圆是截然不同的两类实体,当我们考虑字符串时,想到的是字符串内容、字体、字号(字符大小)、对齐方式及其他一些可能的属性,它们中没有哪一个是与圆有关的。把
24、两类不同实体的属性放在同一个类中,这样定义出的“综合”模块的独立性显然比较差。当处理性质完全不同的功能时,更理想的方案是,首先建立一些“基础性”的基类,然后把若干个基础性基类的适当特征组合起来,利用多重继承机制派生出一个特定的派生类,使这个派生类具有所需要的综合功能。,13:07:42,在解答上一题时已经定义了圆类,它定义了圆的属性,并能提供在屏幕上显示圆的服务,可以认为圆类是关于图形圆的一个基础性的类。现在还需要再定义一个关于字符串的基础性的类,这个类的基本功能是,在图形模式下从指定的坐标开始,在屏幕上以指定的字体显示一个给定内容的字符串,字符的大小由字符串在屏幕上占用的长度决定。分析上述需
25、求可知,“图形模式字符串”类的基本属性如下:位置(即坐标),字符串内容,显示字符串时的字体,显示字符串时占用的屏幕长度。在解答上一题时曾经定义了位置类,图形模式字符串的基本属性中又包含位置属性,显然应该从位置类派生出图形模式字符串类。该类对外提供的服务为,在屏幕的指定位置以指定字体显示给定的字符串。,13:07:42,有了“圆”和“图形模式字符串”这样两个基础性的类之后,就可以利用多重继承机制从这两个类派生出一个新类,我们给这个派生类起名字为“圆内字符串”,它既继承了圆类在屏幕上显示圆的功能,又继承了图形模式字符串类在图形模式下显示字符串的功能,从而具有在屏幕上显示圆且在圆内显示字符串的综合功
26、能。综上所述,解决本问题所用到的对象类及类之间的层次关系如下:从“位置”类分别派生出“点”类和“图形模式字符串”类,然后由“点”类派生出“圆”类,最后由“圆”类和“图形模式字符串”类共同派生出“圆内字符串”类。,13:07:42,9试建立下述订货系统的用例模型。假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的终端把事务报告给订货系统。当某种零件的库存数量少于库存量临界值时就应该再次订货。,作业及解答(第9章),13:07:42,