软件工程导论作业第一章.docx

上传人:b****7 文档编号:10561873 上传时间:2023-02-21 格式:DOCX 页数:31 大小:1.62MB
下载 相关 举报
软件工程导论作业第一章.docx_第1页
第1页 / 共31页
软件工程导论作业第一章.docx_第2页
第2页 / 共31页
软件工程导论作业第一章.docx_第3页
第3页 / 共31页
软件工程导论作业第一章.docx_第4页
第4页 / 共31页
软件工程导论作业第一章.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

软件工程导论作业第一章.docx

《软件工程导论作业第一章.docx》由会员分享,可在线阅读,更多相关《软件工程导论作业第一章.docx(31页珍藏版)》请在冰豆网上搜索。

软件工程导论作业第一章.docx

软件工程导论作业第一章

第一章习题

1.什么是软件危机?

它有哪些典型表现?

为什么会出现软件危机?

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

概括的说,软件危机包含以下两方面的问题:

如何开发软件和如何维护数量不断膨胀的已有软件。

软件危机主要有以下一些典型表现:

(1)对软件开发成本和进度的估计常常很不准确;

(2)用户对“已完成的“软件系统不满意的现象经常发生;

(3)软件产品的质量往往靠不住;

(4)软件常常是不可维护的

(5)软件通常没有适当的文档资料;

(6)软件成本在计算机系统总成本中所占的比例逐年上升;

(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

出现软件危机,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关

(1)软件不同于硬件,缺乏“可见性“,规模庞大,而且程序复杂性随着程序规模的增加而指数上升,软件本身的特点确实给开发和维护带来一些客观问题;

(2)人们在开发和维护,忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护。

3什么是软件工程?

它有哪些本质特性?

怎样用软件工程消除软件危机?

软件工程是指导计算机软件开发和维护的一门工程学科。

软件工程的本质特性:

1.软件工程关注于大型程序的构造。

2.软件工程的中心课题是控制复杂性。

3.软件经常变化。

4.开发软件的效率非常重要。

5.和谐的合作是开发软件的关键。

6.软件必须有效的支持它的用户。

7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。

用软件工程消除软件危机的7条定理:

1.用分阶段的生命周期计划严格管理。

2坚持进行阶段评审。

3实行严格的产品控制。

4采用现代程序设计技术。

5结果应能清楚的审查。

6开发小组的人员应该少而精。

7承认不断改进软件工程实践的必要性。

4.什么是软件过程?

它与软件工程方法学有何关系?

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

5.简述结构化范型和面向对象范型的要点,并分析它们的优缺点。

结构化范型采用了结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。

优点:

这种方法学为广大软件工程师所熟悉,在开发某些类型的软件时比较有效。

面向对象范型有四个要点:

1.把对象作为融合了数据及在数据上的操作行为的统一的软件结构。

2.把所有对象都划分成了类。

3.按照父类和子类的关系,把若干个相关类组成一个层次结构的系统。

4.对象彼此间仅能通过发送信息互相联系。

优点:

降低了产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。

还促进了软件的可重用性。

6.什么是软件生命周期模型?

试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。

软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。

瀑布模型:

优点:

1.可强迫开发员采用规范的方法

2.严格地规定了每个阶段必须提交的文件

3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:

传统的瀑布模型过于理想化,是由文档驱动的。

快速原型模型:

通过快速构建起一个可在计算机上运行的原型系统,让用户试用原型并收集用户反馈意见的方法,获取用户真正的需要。

增量模型:

优点:

能在较短时间内向用户提交可完成部分工作的产品;逐步增加产品功能可以使用户有较充实的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

螺旋模型

优点:

对可选方案和约束条件的强调有利于已有软件的重用;减少了过多测试;维护只是螺旋模型中另一个周期。

第二章习题

7.在软件开发的早期阶段为什么要进行可行性研究?

应该从哪些方面研究目标系统的可行性?

 

可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

 从三个方面研究每种解法的可行性

(1)技术可行性

(2)经济可行性(3)操作可行性 可行性研究过程的步骤 1、 复查系统规模和目标 2、 研究目前正在使用的系统 3、 导出新系统的高层逻辑模型 4、 进一步定义问题 5、 导出和评价供选择的解法 

6、 推荐行动方针 7、 草拟开发计划 8、 书写文档提交审查

8.北京某高校可用的电话号码有以下几类:

校内电话号码由4位数字组成,第一位数字不

是0.校外电话又分为本市电话和外地电话两类。

拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

用定义数据的方法,定义上述的电话号码。

答:

电话号码=[校内电话号码|校外电话号码]

校内电话号码=非零数字+3位数字

校外电话号码=[本市号码|外地号码]

本市号码=数字零+8位数字

外地号码=数字零+3位数字+8位数字

非零数字=[1|2|3|4|5|6|7|8|9]

数字零=0

3位数字=3{数字}3

8位数字=非零数字+7位数字

7位数字=7{数字}7

数字=[0|1|2|3|4|5|6|7|8|9]

其中,[]意思是或,从校内电话号码或校外电话号码中选择一个;{}表示重复,两边的数字表示重复次数的下限和上限;=意思是定义为;+意思是和,连接两个分量。

第三章习题

9.为什么要进行需求分析?

通常对软件系统有哪些需求?

答:

“需求分析”确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、具体的要求。

为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,只有深入理解了用户的需求,我们的工作才会有意义。

对软件通常有以下需求:

功能需求:

指定系统必须提供的服务;

性能需求:

指定系统必须满足的定时约束或容量约束,通常包括速度、信息量速率、主存容量、磁盘容量、安全性等方面的需求;

可靠性和可用性需求:

指定系统的可靠性,可用性量化了用户可以使用系统的程度;出错处理需求:

说明系统对环境错误应该怎么响应;

接口需求:

描述应用系统与它的环境通信的格式;

逆向需求:

说明软件系统不应该做什么;

将来可能提出的要求:

应该明确列出那些虽然不属于当前系统开发范畴,但是据分析将来很可能会提出来的要求。

10.怎样与用户有效地沟通以获取用户的真实需求?

答:

(1) 初步需求获取,通过访谈与会议、问卷调查、观察用户工作流程等方法; 

(2) 面向数据流,自顶向下求精 

 

(3) 简易的应用规格说明  (4) 快速建立软件原型 

复印机的工作过程大致如下:

未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行11.复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告,等待维修人员来排除故障,故障排除后回到闲置状态。

 

请用状态转换图描绘复印机的行为。

 

从问题陈述可知,复印机的状态主要有“闲置”、“复印”、“缺纸”和“卡纸”。

引起状态转换的事件主要是“复印命令”、“完成复印命令”、“发现缺纸”、“装满纸”、“发生卡纸故障”和“排除了卡纸故障”。

状态转换图如下:

第五章习题

5-1.为每种类型的模块耦合举一个具体的例子。

 

(1)非直接耦合—例如,两个模块没有直接关系(模块1和模块2),模块独立性最强。

(2)数据耦合—例如,下左图

(3) 特征耦合—例如,上右图 

“住户情况”是一个数据结构,图中模块都与此数据结构有关。

“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。

 

(4) 控制耦合--模块A通过传送开关、标志、名字等控制信息,明显地控制选择模块B的功能,例如下图

(5) 外部耦合—例如,下左图,模块A、B均需使用共享打印机

(6) 公共环境耦合—例如,上右图,模块A、B、C共享全局变量数组 

(7) 内容耦合—例如,一个过程非正常地进入另一个过程 

Sub AA(„) 

„ „ goto L „

End sub 

Sub BB(„) 

„ „ L:

  „ „ 

End sub

为每种类型的模块耦合举一个具体的例子?

另一种答法

答:

耦合是对一个软件结构内不同模块之间互连程度的度量。

耦合强弱取决于模块间接口的复杂程度, 进入或访问某一模块的点,以及通过接口的数据,一般模块之间可能的连接方式有7种,构成耦合的7种类型,它们之间的关系为:

 

 下面举例说明以上各种耦合:

 

a.非直接耦合(Nondirect  Coupling)在这种情况下,两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。

例如在实数的运算中,有两个模块分别完成几个实数的求和,求乘积功能,这两个模块之间没有直接联系,只有在主模块调用中有执行的前后顺序而已,这个例子即属于非直接耦合。

 

b.数据耦合(Data  Coupling)即一个模块访问另一个模块时,彼此之间是通过数据参数来交换输入,输出信息的,这种耦合为数据输入,输出信息的这种耦合为数据耦合。

如有两个模块,其中A完成两个烽的比较,求出其中最大的并返回该值,模块B是完成了个数的比较,求出其中最大的并返回该最大值,为完成四个数的比较,模块B调用模块A即可完成,在这种调用关系中,模块A的运算结果作为一个参烽参加B的运算,这两个模块之间即发生数据耦合。

数据耦合是松散的耦合,模块间的独立性比较强。

 

c.标记耦合(Stamp  Coupling),即一组模块通过参数传递记录信息,这就是标记耦合。

事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。

 

d.控制耦合(Control Coupling)即一个模块通过开关标志,名字等控制住处明显的控制,选择另一模块的功能,这就是控制耦合,如下 图所示,这一种耦合实质是在单一接口上实现选择多功能模块中的某项功能,如程序设计中用到多路选择结构即是最好的例子。

 

e.外部耦合(External  Coupling)即一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递全局数据结构,而且不是通过参数表传递全局变量的信息。

如C语言中都访问被说明为extern类型的外部变量的各个模块之间即发生外部耦合。

外部耦合引起的问题类似于下面要介绍的公共耦合,区别在于外部耦合中不存在依赖于一个数据结构内部各项的物理安排。

 

f.公共耦合(Common  Coupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就是公共耦合。

公共的数据环境可以是全局的数据结构,共享的通信区,内存的公共覆盖区等。

如几个模块对同一个数据库的查询就属于这种耦合。

公共耦合可以分为松散的公共耦合和紧密的公共耦合,其中松散的公共耦合是单向操作,如两个或多个模块对同一个文件的读操作;而紧密的公共耦合是双向的操作,如两个或多个模块对同一文件的读写操作。

下面用图表示松散的和紧密的公共耦合。

g.内容耦合。

即有下列情况时即出现内容耦合。

 

(1)一个模块访问另一个模块数据; 

(2)一个模块不通过正常入口而转到另一个模块的内部; 

(3)两个模块有一部分代码重叠; 

(4)一个模块有多个入口。

2、 为每种类型的模块内聚举一个具体例子。

 

答:

内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化的自然扩展,一般模块的内聚性分为7种,它们的关系如下图示:

 

下面举例说明各种内聚的情况 

a. 偶然内聚。

即模块内各部分之间没有联系,或者即使有联系也很松散,这种即为偶然内聚,它是

内聚程度最低的模块。

如一些没有任何联系的语句可能在许多模块中重复多次,程序员为了节省存储,把它们抽出来组成一个新的模块,这个模块就是偶然内聚模块,例如C语言中的#define  TRYODBCC…… 

b.逻辑内聚(Logical  Cohesion)即这种模块把几种功能组合在一起,每次调用时,由传送给模块的

判定参数来确定该模块应执行哪一种功能。

如根据输入的控制信息,或从文件中读入一个记录,或向文件写出一个记录。

 

c.时间内聚(Classical  Cohesion)这种模块大多数为多功能模块,但模块的各人功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行,例如初始化模块和终止模块。

 

d.过程内聚(Procedural  Cohesion)即一个模块内的处理是相关的,而且必须以特定次序执行,则这个模块称为过程内聚模块。

例如我们把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。

 

e.通信内聚(Communication  Cohesion)如果一个模块内部各功能部分都使用可相同的数据输入,

或产生了可相同的数据输入,或产生了可相同的输出数据,则称之为通信内聚模块。

通常,通信内聚模块是通过数据流图来定义的。

 

f.顺序内聚,即一个模块内处理元素和同一功能紧密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据据作为下一处理元素的输入数据)如在对员工加工资的数据库操作中,读取数据和更新数据即具有顺序内聚的关系。

 

g.功能内聚(Functional  Cohesion)即模块内部所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚,功能内聚是最高程度的内聚。

第六章习题

1.假设只有SEQUENCE和DO_WHILE两种控制结构,怎样利用它们完成IF_THEN_ELSE操作?

 

答:

转化如下:

 

K = 1 

DO WHILE (条件 .AND. K.EQ.1)  

程序块1  

K=K+1 

END DO 

DO WHILE ( (.NOT. 条件) .AND. K.EQ.1)  

程序块2  

K=K+1 

END DO 

2.假设允许使用SEQUENCE和IF_THEN_ELSE两种控制结构,怎样利用它们完成DO_WHILE操作?

 

答:

转化如下; 

label:

 IF (条件) THEN   

程序块   

GOTO label  

ELSE  

程序块 

 END IF 

3.画出下列伪码程序的程序流程图和盒图:

 START 

IF  p  THEN 

     WHILE  q  DO                   

 f      

END  DO 

ELSE 

     BLOCK    

  g    

  n 

     END  BLOCK 

END  IF 

STOP 答:

(1)流程图如图6-1所示:

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) 用判定树表示手续费的计算方法

判定表的每一列是一条计算规则。

例如,第1列(规则l)规定,当交易总金额P少于1,000元,且每股售价Q低于l4元,且交易的股数n是l00的倍数时,给经纪人的手续费为:

 

(1+0.05)×0.084P 

第16列(规则l6)表明,当交易总金额P超过l0,000元,且每股售价Q在14元到25元之间,且交易的股数n不是l00的倍数时,手续费为:

 

(1+0.06)X(0.04P+134) 

图6-7 判定树 

 

8.画出下列伪码程序的流图,计算它的环形复杂度。

你觉得这个程序的逻辑有什么问题吗?

 

C   EXAMPLE 

LOOP:

DO WHILE  X>0            

A=B+1            

IF A>10  

        THEN X=A            

ELSE Y=Z           

 END IF 

IF Y<5 

THEN PRINT X,Y     

ELSE IF Y=2 

          THEN GOTO LOOP               

ELSE C=3               

END IF 

END IF 

G=H+R 

END DO 

IF F>0 

THEN PRINT G     

ELSE PRINT K 

END IF 

STOP 

环形复杂度V(G)=流图中的区域数 

=流图中判定结点数目+1=6+1=7 =节点数E-弧数n+2=19-12+1=7

(2)该算法问题在于控制最外层循环的变量Z不仅没有经过初始化,并且在该循环内部没有任何有可能该变Z的语句。

因此,该段代码中的WHILE循环部分代码要么不会执行,要么可能出现死循环。

 

第七章习题

7-4什么是模块测试和集成测试?

它们各有什么特点?

 

答:

模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。

其特点是:

主要应用白盒测试的技术,对多个模块的测试可以并发的进行。

 

集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试。

特点是:

可能发生接口问题。

 

为什么有了白盒测试还要有黑盒测试?

白盒测试发现程序的隐患,内存泄漏,误差累计问题,黑盒测试在这方面存在严重的不足。

黑盒测试只有测试软件外部的表现,即使软件的输入、输出都是正确的,都不能说明软件是正确的,因为程序有可能用错误的运算方式得出正确的结果。

白盒测试优点:

(1)可构成测试数据使特定程序部分得到测试。

(2)有一定的充分性度量手段

(3)可获得较多工具支持。

缺点:

(1)不易生成测试数据

(2)无法对未实现规格说明的部分进行测试

(3)工作量大,通常只用于单元测试,有应用局限。

黑盒测试优点:

(1)适用于各阶段测试

(2)从产品功能角度测试

(3)容易入手生成测试数据。

缺点:

(1)某些代码得不到测试

(2)如果规则说明有误则无法发现

(3)不易进行充分性测试。

7—8.对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。

要求:

 

    

(1) 根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间τ的关系曲线。

在画这条曲线时做了什么假设?

 

    

(2) 为做到MTTF=100h,必须进行多长时间的集成测试?

 

    (3)当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?

 解答:

 

(1)因为平均无故障时间MTTF与测试时间τ之间存在线性关系,即MTTF=a+bτ,    由于:

10=a+b,15=a+2b,    得到:

a=5,b=5 

   故:

平均无故障时间MTTF与测试时间τ之间存在线性关系为:

MTTF=5+5τ 

(2)为做到MTTF=100h,有方程:

100=5+5τ,故τ=19    即必须进行19个月的集成测试。

 

(3)由于经验:

平均无故障时间与单位长度程序中剩余的错误数成反比,故有:

MTTF=10000/( K * (ET-EC(τ) ) ) 

 由于:

10=10000/( K * (ET-15) ),

15 = 10000/( K * (ET-25) )    

得到:

ET=45,K=33.33 

当集成测试结束时,MTTF=100h,

有:

100 = 10000/( 33.33 * ( 45-EC(19) ) )    

故:

EC(19)=42,即当集成测试结束时总共改正了42个错误,还有45-42=3个错误潜伏在程序中。

7-9. 如对一个长度为100000条指令的程序进行集成测试期间记录下下面的数据:

  

(a) 7月1日:

集成测试开始,没有发现错误。

  

(b) 8月2日:

总共改正100个错误,此时MTTF=0.4h 

(c) 9月1日:

总共改正300个错误,此时,MTTF=2h 根据上列数据完成下列各题:

  

(1) 估计程序中的错误总数;  

(2) 为使MTTF达到10h,必须测试和调试这个程序多长时间?

 

(3) 画出MTTF和测试时间τ之间的函数关系线。

(1)据估算平均无故障时间MTTF的公式有:

 

1/K(Et/100000-100/100000)=0.4 

1/K (Et/100000-300/100000)=2 

得:

K=1000,Et=350  即程序中的错误总数达350。

(2)当MTTF=10h时,有 

1/K (350/100000- Ec/100000)=10 

得:

Ec=340.按七八月分测试改错进度估算,还需进行2个月的集成测试。

 

(3)MTTF和测试时间τ之间的函数关系曲线如下:

7—10.在测试一个长度为24000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。

经一个月测试后,甲发现并改正20个错误,使MTTF达到10h。

与此同时,乙发现24个错误,其中6个甲也发现了。

以后由甲一个人继续测试这个程序。

问:

   

(1) 刚开始测试时程序中总共有多少个潜藏的错误?

  

(2) 为使MTTF达到60h,必须再改正多少个错误?

还需用多长测试时间?

  

(3) 画出MTTF与集成测试时间τ之间的函数关系曲线。

 

解答:

 

(1)本题中采用的是分别测试法,测试前程序中的错误总数:

B0=B1*B2/bc=20*24/6=80 

(2)由于经验:

平均无故障时间与单位长度程序中剩余的错误数成反比,故有:

    

MTTF=24000/( K * (ET-EC(τ) ) )    

由于:

10=24000/( K * (80-20) )    

得到:

K=40 

为使MTTF达到60h,有:

60 = 24000/( 40 * ( 80-EC(τ) ) ) 

故:

EC(τ)=70,即总共需要改正70个错误,由于测试员甲和乙分别测试时,测试员甲已经更正了20个错误,以后由甲一个人继续测试这个程序,因此,还需要更正70-20=50个错误。

覆盖测试 

1.为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。

三、 条件覆盖 

对于第一个判定(X>8 AND Y>5) 

   条件X>8取真值记为T1,取假值记为-T1    条件Y>5取真值记为T2,取假值记为-T2 对于第二个判定(X>0 OR Y>0) 

   条件X>0取真值记为T3,取假值记为-T3    条件Y>0取真值记为T4,取假值记为-T4 对于第三个判定(X>16 O

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1