作业与习题.docx
《作业与习题.docx》由会员分享,可在线阅读,更多相关《作业与习题.docx(48页珍藏版)》请在冰豆网上搜索。
作业与习题
第1章 软件工程学概述
1-1什么是软件危机?
它有哪些典型表现?
为什么会出现软件危机?
1-2假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:
“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?
”你怎么反驳他?
1-3什么是软件工程?
它有哪些本质特性?
怎样用软件工程消除软件危机?
1-4简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
1-5根据历史数据可以做出如下的假设:
对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:
M=4080e0.28(Y-1960)
存储器的价格按下面公式描述的趋势逐年下降:
P1=0.3×0.72Y-1974(美分/位)
如果计算机字长为16位,则存储器价格下降的趋势为:
P2=0.048×0.72Y-1974(美元/字)
在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。
基于上述假设可以比较计算机硬件和软件成本的变化趋势。
要求计算:
(1)在1985年对计算机存储容量的需求估计是多少?
如果字长为16位,这个存储器的价格是多少?
(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。
如果一条指令为一个字长,计算使存储器装满程序所需用的成本。
(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复
(1)、
(2)题。
1-6什么是软件过程?
它与软件工程方法学有何关系?
1-7什么是软件生命周期模型?
试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
第2章 可行性研究
2-1在软件开发的早期阶段为什么要进行可行性研究?
应该从哪些方面研究目标系统的可行性?
2-2为方便储户,某银行拟开发计算机储蓄系统。
储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。
请写出问题定义并分析此系统的可行性。
2-3为方便旅客,某航空公司拟开发一个机票预订系统。
旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。
请写出问题定义并分析此系统的可行性。
2-4目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。
某医院打算开发一个以计算机为中心的患者监护系统,请写出问题定义,并且分析开发这个系统的可行性。
医院对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。
2-5北京某高校可用的电话号码有以下几类:
校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。
请用2.5.2小节讲述的定义数据的方法,定义上述的电话号码。
第3章 需求分析
3-1为什么要进行需求分析?
通常对软件系统有哪些需求?
3-2怎样与用户有效地沟通以获取用户的真实需求?
3-3银行计算机储蓄系统的工作过程大致如下:
储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。
3-4分析习题2第3题所述的机票预订系统。
请用实体-联系图描绘本系统中的数据对象并用数据流图描绘本系统的功能。
3-5分析习题2第4题所述的患者监护系统。
请用实体-联系图描绘本系统中的数据对象并用数据流图描绘本系统的功能,画出本系统的顶层IPO图。
3-6复印机的工作过程大致如下:
未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。
请用状态转换图描绘复印机的行为。
第5章 总体设计
5-1为每种类型的模块耦合举一个具体例子。
5-2为每种类型的模块内聚举一个具体例子。
5-3用面向数据流的方法设计下列系统的软件结构:
(1)储蓄系统(参见习题2第2题);
(2)机票预订系统(参见习题2第3题);
(3)患者监护系统(参见习题2第4题)。
5-4美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。
按照协议,所有年工资超过$26000(含$26000)的教师工资将保持不变,年工资少于$26000的教师将增加工资,所增加的工资数按下述方法计算:
给每个由此教师所赡养的人(包括教师本人)每年补助$100,此外,教师有一年工龄每年再多补助$50,但是,增加后的年工资总额不能多于$26000。
教师的工资档案储存在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇用日期等信息。
需要写一个程序计算并印出每名教师的原有工资和调整后的新工资。
要求:
(1)画出此系统的数据流图;
(2)写出需求说明;
(3)设计上述的工资调整程序(要求用HIPO图描绘设计结果),设计时请分别采用下述两种算法,并比较这两种算法的优缺点:
(a)搜索工资档案数据,找出年工资少于$26000的人,计算新工资,校核是否超过$26000,储存新工资,印出新旧工资对照表;
(b)把工资档案数据按工资从最低到最高的次序排序,当工资数额超过$26000时即停止排序,计算新工资,校核是否超过限额,储存新工资,印出结果。
(4)你所画出的数据流图适用于哪种算法?
5-5下面将给出两个人玩的扑克牌游戏的一种玩法,请你设计一个模拟程序,它的基本功能是:
(1)发两手牌(利用随机数产生器);
(2)确定赢者和赢牌的类型;(3)模拟N次游戏,计算每种类型牌赢或平局的概率。
要求用HIPO图描绘设计结果并且画出高层控制流程图。
扑克牌游戏规则如下:
(1)有两个人玩,分别称为A和B;
(2)一副扑克牌有52张牌,4种花色(方块、梅花、红桃和黑桃),每种花色的牌的点数按升序排列有2,3,4,…,10,J,Q,K,A等13种;
(3)给每个人发3张牌,牌面向上(即,亮牌),赢者立即可以确定;
(4)最高等级的一手牌称为同花,即3张牌均为同一种花色,最大的同花牌是同一种花色的Q、K、A;
(5)第二等级的牌称为顺子,即点数连续的3张牌,最大的顺子是花色不同的Q、K、A;
(6)第三等级的牌是同点,即点数相同的3张牌,最大的同点是A、A、A;
(7)第四等级的牌是对子,即3张牌中有两张点数相同,最大的对子是A、A、K;
(8)第五等级的牌是杂牌,即除去上列四等之外的任何一手牌,最大的杂牌是不同花色的A、K、J;
(9)若两人的牌类型不同,则等级高者胜;若等级相同,则点数高者胜;若点数也相同,则为平局。
第6章 详细设计
6-1假设只有SEQUENCE和DO-WHILE两种控制结构,怎样利用它们完成IF-THEN-ELSE操作?
6-2假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构,怎样利用它们完成DO-WHILE操作?
6-3画出下列伪码程序的程序流程图和盒图:
START
IF pTHEN
WHILEqDO
f
ENDDO
ELSE
BLOCK
g
n
ENDBLOCK
ENDIF
STOP
6-4图6.18给出的程序流程图代表一个非结构化的程序,请问:
(1)为什么说它是非结构化的?
(2)设计一个等价的结构化程序。
图6.18一个非结构化程序
(3)在
(2)题的设计中你使用附加的标志变量flag了吗?
若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。
6-5研究下面的伪码程序(见书131页):
要求:
(1)画出程序流程图。
(2)程序是结构化的吗?
说明理由。
(3)若程序是非结构化的,请设计一个等价的结构化程序并且画出程序流程图。
(4)此程序的功能是什么?
它完成预定功能有什么隐含的前提条件吗?
6-6用Ashcroft_Manna技术可以将非结构化的程序转换为结构化程序,图6.19(见书132页)是一个转换的例子。
(1)你能否从这个例子总结出Ashcroft-Manna技术的一些基本方法?
(2)进一步简化图6.19(b)给出的结构化设计。
6-7某交易所规定给经纪人的手续费计算方法如下:
总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。
如果交易总金额少于1000元,则基本手续费为交易金额的8.4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额的5%,再加34元;
如果交易总金额超过10000元,则基本手续费为交易金额的4%加上134元。
当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进、卖出的股数不是100的倍数,在这种情况下附加手续费为基本手续费的9%。
当每股售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种情况下附加手续费为基本手续费的6%。
当每股售价超过25元时,如果交易的股数零散(即,不是100的倍数),则附加手续费为基本手续费的4%,否则附加手续费为基本手续费的1%。
要求:
(1)用判定表表示手续费的计算方法;
(2)用判定树表示手续费的计算方法。
6-8画出下列伪码程序(见书132页)的流图,计算它的环形复杂度。
你觉得这个程序的逻辑有什么问题吗?
6-9把统计空格程序的Jackson图(图6.13)改画为等价的程序流程图和盒图。
6-10人机对话由操作员信息和系统信息交替组成。
假设一段对话总是由操作员信息开始以系统信息结束,请用Jackson图描绘这样的人机对话过程。
模型驱动程序设计练习
6-11
[endif]>什么是抽象逻辑结构图?
它有何特点和作用?
6-12抽象逻辑结构图如何支持分析、设计、实现三个阶段的平滑过渡和表示的一致性?
6-13使用抽象逻辑结构图进行程序设计的基本过程是什么?
6-14抽象逻辑结构图如何支持基于数据结构的程序设计方法?
其设计过程如何?
6-15请分析C++语言,给出支持C++语言的逻辑处理结点类型,以及C++过程蓝图的形式化定义。
6-16请分析PASCAL语言、BASIC语言和JAVA语言,分别给出支持这三种语言的逻辑处理结点类型,并画出每个复合结点分解的图形表示。
6-17请用抽象逻辑结构图程序设计技术设计下列问题的C语言程序,给出概念、逻辑和实现三级抽象逻辑结构图,操作表达式表,以及程序源代码:
A.高斯主消去法求解线性方程组的程序
B.求十个最小的自然数,它的立方和为另外三个自然数的立方和,并且这十个自然数彼此除不尽
C.判某一年是否为闰年
D.判某一数是否为素数
E.两个乒乓球队进行比赛,各出三人。
甲队为A、B、C三人,乙队为X、Y、Z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请找出三对赛手的名单。
6-18请用抽象逻辑结构图程序设计技术设计下列问题的PASCAL语言程序,给出概念、逻辑和实现三级抽象逻辑结构图,操作表达式表,以及程序源代码:
A.输入20个数,求其中的最大值、最小值及平均值
B.将以字符形式读入的数字序列转换成实数
C.求1-100之间的素数
D.在1-500中,找出能同时满足用3除余2,用5除余3,用7除余5的所有整数
E.验证哥德巴赫猜想:
任一充分大的偶数,可以用两个素数之和表示
6-19请用抽象逻辑结构图面向数据结构的程序设计技术设计下列问题的程序,给出输入输出数据结构图,导出的概念、逻辑和实现三级抽象逻辑结构图,伪操作表达式表和程序伪码(P_码):
A. 设计一个打印表格程序,表格形式见表13.13,其中类别栏可以是教师、学生;状态栏中教师行填他的年龄,学生行填他的年级。
表13.13打印表格格式
姓名
年龄
类别
状态
B. 将考生情况文件和考分文件合并成一个文件:
考生新文件。
考生情况文件的结构:
准考证号、姓名、通讯地址;考分文件的结构:
准考证号、考分。
三个文件都由“考生记录”重复组成,并且都按准考证号递增排序。
C. 一个正文文件由若干个记录组成,每个记录是一个字符串。
要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。
要求的输出数据格式是,每复制一行输入字符串后,另起一行印出这个字符串的空格数,最后印出文件中空格的总个数。
D. 将人口普查的数字进行制表。
人口普查统计是按全国省、专区、县三级行政区划分进行的。
每个县有一个或多个报告单元,每个报告单元提供一张统计的数据卡片,包括人口总数和该报告单元所在的县名、专区名和省名。
全国收集所有的统计卡片,结果将以省、区、县的升序排列,对每个省区县要有单个的报告,表明其人口数,最后计算和打印全国人口数,打印报告的形式如下:
人口统计报告
XX县XXXXXXX
XX县XXXXXXX
XX县XXXXXXX
XX专区XXXXXXX
XX县XXXXXXX
XX县XXXXXXX
XX专区XXXXXXX
XX省XXXXXXX
…………
总计(全国人口)XXXXXXX
6-20设计实现一个支持抽象逻辑结构图的全屏幕编辑工具。
6-21设计实现一个将抽象逻辑结构图转换为程序源代码的代码生成器。
6-22设计一个支持抽象逻辑结构图的程序设计环境的总体结构,画出系统的体系结构图,说明各部分应实现的功能和构成,并为该系统制定一个详细的软件开发计划。
第7章 实现
7-1下面给出的伪码中有一个错误。
请仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。
字频统计程序的伪码如下:
INITIALIZEtheProgram
READthefirsttextrecord
DOWHILEtherearemorewordsinthetextrecord
DOWHILEtherearemorewordsinthetextrecord
EXTRACTthenexttextword
SEARCHtheword-tablefortheextractedword
IFtheextractedwordisfound
INCREMENTtheword’soccurrencecount
ELSE
INSERTtheextractedwordintothetable
ENDIF
INCREMENTthewords-processedcount
ENDDOattheendofthetextrecord
READthenexttextrecord
ENDDOwhenalltextrecordshaveheenread
PRINTthetableandsummaryinformation
TERMINATEtheprogram
7-2研究下面给出的伪码程序,要求:
(1)画出它的程序流程图。
(2)它是结构化的还是非结构化的?
说明理由。
(3)若是非结构化的,则
(a)把它改造成仅用3种控制结构的结构化程序;
(b)写出这个结构化设计的伪码;
(c)用盒图表示这个结构化程序。
(4)找出并改正程序逻辑中的错误。
COMMENT:
PROGRAMSEARCHESFORFIRSTNREFERENCES TOATOPICINANINFORMATIONRETRIEVAL SYSTEMWITHTTOTALENTRIES
INPUTN
INPUTKEYWORD(S)FORTOPIC
I=O
MATCH=0
DOWHILEI≤T
I=I+1
IFWORD=KEYWORD
THENMATCH=MATCH+1
STOREINBUFFER
END
IFMATCH=N
THENGOTOOUTPUT
END
END
IFN=0
THENPRINT″NOMATCH″
OUTPUT:
ELSECALLSUBROUTINETOPRINTBUFFER INFORMATION
END
7-3在第2题的设计中若输入的N值或KEYWORD不合理,会发生问题。
(1)给出这些变量的不合理值的例子。
(2)将这些不合理值输入程序会有什么后果?
(3)怎样在程序中加入防错措施,以防止出现这些问题?
7-4回答下列问题:
(1)什么是模块测试和集成测试?
它们各有什么特点?
(2)假设有一个由1000行FORTRAN语句构成的程序(经编译后大约有5000条机器指令),你估计在对它进行测试期间将发现多少个错误?
为什么?
(3)设计下列伪码程序的语句覆盖和路径覆盖测试用例:
START
INPUT(A,B,C)
IFA>5
THENX=10
ELSEX=1
ENDIF
IFB>10
THENY=20
ELSEY=2
ENDIF
IFC>15
THENZ=30
ELSEZ=3
ENDIF
PRINT(X,Y,Z)
STOP
7-5某图书馆有一个使用CRT终端的信息检索系统,该系统有下列4个基本检索命令(见书175页)。
要求:
(1)设计测试数据以全面测试系统的正常操作;
(2)设计测试数据以测试系统的非正常操作。
7-6航空公司A向软件公司B订购了一个规划飞行路线的程序。
假设你是软件公司C的软件工程师,A公司已雇用你所在的公司对上述程序进行验收测试。
你的任务是,根据下述事实设计验收测试的输入数据,解释你选取这些数据的理由。
领航员向程序输入出发点和目的地,以及根据天气和飞机型号而初步确定的飞行高度。
程序读入途中的风向风力等数据,并且制定出3套飞行计划(高度,速度,方向及途中的5个位置校核点)。
所制定的飞行计划应做到燃料消耗和飞行时间都最少。
7-7严格说来,有两种不同的路径覆盖测试,分别为程序路径覆盖和程序图路径覆盖。
这两种测试可分别称为程序的自然执行和强迫执行。
所谓自然执行是指测试者(人或计算机)读入程序中的条件表达式,根据程序变量的当前值计算该条件表达式的值(真或假),并相应地分支。
强迫执行是在用程序图作为程序的抽象模型时产生的一个人为的概念,它可以简化测试问题。
强迫执行的含义是,一旦遇到条件表达式,测试者就强迫程序分两种情况(条件表达式的值为真和为假)执行。
显然,强迫执行将遍历程序图的所有路径,然而由于各个条件表达式之间存在相互依赖的关系,这些路径中的某一些在自然执行时可能永远也不会进入。
为了使强迫执行的概念在实际工作中有用,它简化测试工具的好处应该超过它使用额外的不可能达到的测试用例所带来的坏处。
在绝大多数情况下,强迫执行的测试数并不比自然执行的测试数大很多,此外,对强迫执行的定义实际上包含了一种技术,能够缩短在测试含有循环的程序时所需要的运行时间。
程序的大部分执行时间通常用于重复执行程序中的DO循环,特别是嵌套的循环。
因此必须发明一种技术,使得每个DO循环只执行一遍。
这样做并不会降低测试的功效,因为经验表明第一次或最后一次执行循环时最容易出错。
Laemmel教授提出的自动测试每条路径的技术如下:
当编写程序时每个DO循环应该写成一种包含测试变量T和模式变量M的特殊形式,因此
DOI=1TO38
应变成DOI=1TOM*38+(1-M)*T
可见,当M=0时处于测试模式,而M=1时处于正常运行模式。
当处于测试模式时,令T=0则该循环一次也不执行,令T=1则该循环只执行一次。
类似地应该使用模式变量和测试变量改写IF语句,例如
IFX+Y>0 THEN Z=X
ELSE Z=Y
应变成
IFM*(X+Y)+T>0 THEN Z=X
ELSE Z