第一章习题
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类型的外部变量的各个模块之间即发生外部耦合。外部耦合引起的问题类似于下面要介绍的公共耦合,区别在于外部耦合中不存在依赖于一个数据结构内部各项的物理安排。