1. 美国一家公司在1982年计划用FORTRAN语言开发一个在VAX 750计算机上运行的应用程序,估计这个程序的长度为10000条FORTRAN指令。如果平均每人每天可以开发出10条FORTRAN指令,请问:
(1)开发这个应用程序将用多少人日?
(2)程序员月工资为4000美元,每月按20个工作日计算,这个软件的成本是多少美元?
(3)1982年VAX 750计算机硬件价格约为125000美元,在那一年这个软件的成本在总成本中占多大比例?
(4)20年后,一台性能远远优于VAX 750的微型计算机的价格约为2000美元,这时软件开发生产率已提高到平均每人每天可以开发出40条指令,而程序员的月平均工资也已涨到8000美元。如果在2002年开发上述FORTRAN应用程序,则该软件的成本在总成本中占多大比例?
答:(1) 开发这个应用程序大约需用1000个人日。需要指出的是,上述工作量包括问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试等各个开发阶段的工作量,而不仅仅是编写程序所需的工作量。
(2)每月平均工作20天,故开发这个软件需要用
每人每月的平均工资为4000美元,因此这个软件的成本大约为 50×4000=200000(美元)
(3)软件成本与硬件成本之和为计算机系统的总成本。这个软件的成本在总成本中所占的比例为
(4)在2002年开发这个应用程序所需的工作量约为
这个软件的成本大约为
12.5×8000=100000(美元)
该软件的成本在总成本中所占的比例为
2. 根据历史数据可以作出如下的假设。
(1)对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:
(2)存储器的价格按下面公式描述的趋势逐年下降:
如果计算机字长为16位,则存储器价格下降的趋势为:
在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。
基于上述假设可以比较计算机硬件和软件成本的变化趋势。
(1)在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少?
(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。
(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)(2)题所问。
答:(1)在1985年对计算机存储容量的需求,估计是
如果字长为16位,则这个存储器的价格是
=5789(美元)
(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令。
在1985年一名程序员每天可开发出10条指令,如果每月有20个工作日,则每人每月可开发出10×20=200条指令。
为了开发出4474263条指令以装满存储器,需要的工作量是
程序员的月平均工资是4000美元,开发出4474263条指令的成本为
22371×4000=89484000(美元)
(3)在1995年对存储容量的需求,估计为
如果字长为32位,则这个存储器的价格是
=7127(美元)
如果一条指令为一个字长,则为使存储器装满程序共需73577679条指令。
在1995年一名程序员每天可开发出30条指令,每月可开发出6000条指令,为了开发出可装满整个存储器的程序,需用的工作量为
开发上述程序的成本为
122629×6000=735776790(美元)
3. 什么是软件过程?它与软件工程方法学有何关系?
答:软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。
软件过程是软件工程方法学的3个重要组成部分之一。
4、复印机的工作过程如下:未接收到复印命令时处于闲置状态,一旦接收到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如
果执行复印命令时发现缺纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。
排除了卡纸故障
发生卡纸故障
复印命令
完成复印命令
发现缺纸
装满纸
复印机的状态图
9.画出下列伪码程序的程序流程图和盒图。P131 3题
F T
q循环
while q
q循环
F
10、如果一个程序有两个输入数据,每个输入都是一个32位的二进制整数,那么这个程序有多少个可能的输入?如果每微秒可进行一次测试,那么对所有可能的输入进行测试需要多长时间?
答:每个32位的二进制整数具有232个可能的值,因此,具有两个整数输入的程序应该具有264个可能的输入。
每微秒可进行一次测试,即每秒可进行106个测试,因此,每天可进行的测试数为60*60*24*106=8.64*1010
这等于每年大约可进行3.139*1013个测试。
因为210=1024≈103,所以264=(210)6.4≈1019.2。
(1019.2/(3.139*1013))>105,所以做完全部测试将至少需要105年(即10万年)。
11、假设有一个由5000行FORTRAN语句构成的程序(经编译后大约有25000条机器指令),你估计在对它进行测试期间将发现多少个错误?为什么?
答:经验表明,在类似的程序中,单位长度里的错误数ET/IT近似为常数。美国的一些统计数字告诉我们,通常:
0.5*10-2≤ET/IT≤2*10-2 也就是说,在测试之前每1000条指令中大约有5~20个错误。
假设在该程序的每1000条指令中有10个错误,则估计在对它进行测试期间将发现的错误数为25000*(10/1000)=250
12、一个折半查程序可搜索按字母顺序排列的名字列表,如果查的名字在列表中则返回真,否则返回假。为了对它进行功能测试,应该使用哪些测试用例?
答:为了对这个折半查程序进行功能测试,应该使用下述测试用例:①查列表中第一个名字 预期的输出:TRUE②查列表中最后一个名字
预期的输出:TRUE ③查第一个名字后的名字
预期的输出:TRUE④查最后一个名字前的名字
预期的输出:TRUE⑤查位于列表中间的一个名字预期的输出:TRUE
⑥查不在列表中但按字母顺序恰好在第一个名字后的名字 预期的输出:FALSE
⑦查不在列表中但按字母顺序恰好在最后一个名字前预期的输出:FALSE
13、对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。
要求:
(1)根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间τ的关系曲线。在画这条曲线时你做了什么假设?
(2)为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?
答:(1)假设在程序的平均无故障时间MTTF和测试时间τ之间存在线性关系,即 MTTF=a+bτ
根据题意可知,当τ=1时MTTF=10,当τ=2时MTTF=15,把这些已知的数据代入上列方程后得到下列的联立方程式
解上列联立方程式得出a=5,b=5
因此,MTTF与τ之间有下列关系 MTTF=5+5τ
根据上列方程式画出平均无故障时间MTTF与测试时间τ的关系曲线
(2)为使MTTF=100h需要的测试时间可由下面的方程式得出
100=5+5τ 得τ=19 即需要进行19个月的集成测试。
已知平均无故障时间与单位长度程序中剩余的错误数成反比,具体到本题程序即有MTTF=10000/(K(ET-E程序员一般工资多少钱一个月c(τ)))
根据题意可知,改正了15个错误后MTTF=10,改正了25个错误后MTTF=15,把这些已知的数据代入到上列方程之后,解联立方程得到ET=45,K=33.33。已知当集成测试结束时MTTF=100h,即100=10000/(33.33(45-EC(19)))
EC(19)=42 也就是说当集成测试结束时总共改正了42个错误,还有45-42=3个错误潜伏在程序中。
14、在测试一个长度为48000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。经一个月测试后,甲发现并改正20个错误,使MTTF达到8h。与此同时,乙发现24个错误,其中的6个甲也发现了。以后由甲一个人继续测试这个程序。问:
(1)刚开始测试时程序中总共有多少个潜藏的错误?
(2)为使MTTF达到240h,必须再改正多少个错误?
答:(1)本题中采用了分别测试法,因此,可估算出刚开始测试时程序中错误总数为ET=24/6*20=80
(2)因为8=48000/(K(ET-20))=48000/(K*60)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论