浙大 软件工程基础离线作业秋.docx
《浙大 软件工程基础离线作业秋.docx》由会员分享,可在线阅读,更多相关《浙大 软件工程基础离线作业秋.docx(47页珍藏版)》请在冰豆网上搜索。
浙大软件工程基础离线作业秋
浙江大学远程教育学院
《软件工程基础》课程作业
姓名:
学号:
7
年级:
2012秋
学习中心:
—————————————————————————————
第一章概述
1.什么是软件危机,它有哪些典型表现?
答:
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
这些问题绝不仅仅是不能正常运行软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
概括地说,软件危机包含下述两方面的问题:
如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
典型表现:
(1)对软件开发成本和进度的估计常常很不准确
(2)用户对“已完成的”软件系统不满意的现象经常发生(3)软件产品的质量往往靠不住(4)软件常常是不可维护的(5)软件通常没有适当的文档资料(6)软件成本在计算机系统总成本中所占的比例逐年上升(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
2.简述产生软件危机的原因和解决的思路。
答:
软件危机产生的原因一方面与软件本身的特点有关,另一方面,是与已有软件开发、维护的方法不正确有密切关系。
解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
即采用工程化的原则和方法组织软件开发是摆脱软件危机的一个主要出路。
111
3.什么是软件工程?
它有哪些本质特性?
答:
软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法进行软件开发和维护的学科。
其实质就是用工程的概念、原理、技术和方法,结合有效的管理方法和先进的开发技术,开发与维护软件,以解决软件危机。
4.软件工程是如何用来消除软件危机的?
答:
软件工程是从技术和管理两个方面来研究如何更好地开发和维护计算机软件,从源头上消除软件危机。
5.假设你是某软件开发企业的CEO,当你把教材P.4的图1.1给手下的软件工程师们看,同时告诉他们应及早发现并改正错误的重要性时,有人不以为然,认为要求在错误进入软件前就发现并清除它们是不现实的,并举例说:
“如果一个故障是编码错误造成的,那么又如何能够在设计阶段就发现并清除呢?
”那你应该如何说服?
答:
软件开发编码错误虽然无法完全避免,但是我们要掌握先进开发技术以及正确开发方法,才能降低因某写错误引发软件危机。
必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好,管理严密,各类人员协调配合,共同完成的工程项目。
并且研究探索更好有效的技术与方法,尽快消除在计算机系统早期阶段形成的一下错误概念和做法,应当开发和利用更好的软件工具。
为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。
6.简述软件的定义。
答:
软件=程序+数据+文档
7.软件工程的目的是什么?
答:
为高质量的软件开发提供一个科学的体系框架。
8.什么是软件工程方法学?
软件工程是一种什么样的技术?
包括哪三大要素?
分为哪三个分支?
答:
软件工程方法学就是指在软件生命周期全过程中使用的一整套管理和开发技术方法的集合。
目前,使用最广泛的软件工程方法学分别是传统方法学和面向对象方法学。
软件工程作为一种层次化的技术,有方法、工具和过程三大要素,并由于其涉及学科内容的极为广泛,而分为三个分支:
软件开发技术、软件项目管理技术、软件质量管理技术。
9.简述软件工程的基本原理。
答:
软件工程有7条基本原理:
1.严格按照软件生命周期计划进行管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用先进的程序设计技术
5.结果应能清楚的审查
6.开发小组成员应少而精
7.承认不断改进软件工程实践的必要性
10.软件工程的基本开发原则有哪些?
答:
软件工程的基本开发原则有:
1.模块化
2.抽象和信息隐蔽
3.模块的高内聚和低耦合
4.确定性
5.一致性
6.完备性
11.构成软件工程的基本元素有哪些?
答:
除了前面给出的软件工程三大要素,还应该包括控制和质量保证。
这里的控制,即规模控制、成本控制、复杂性控制等。
12.什么是软件过程?
它与软件工程方法学有何关系?
答:
软件过程是指为了获得高质量软件产品,在软件工具支持下,由软件人员完成的一系列软件工程活动。
软件过程规定了开发软件所需完成的各项任务步骤。
过程步骤的设定与软件生命周期、生命周期模型、软件开发工具,以及参与开发的人员等诸方面因素有关。
13.什么是软件生命周期?
什么是软件生命周期模型?
答:
软件如同自然界任何事物一样,都有其孕育、诞生、成长、成熟、衰亡的生存过程。
软件的这一过程,称为软件生命周期。
软件生命周期模型也称软件开发过程模型,是为了解决产业环境中的实际问题,而提出的开发策略。
是反映整个软件生命期中,系统开发、运行、维护等实施活动的一种结构框架。
14.简述软件生命周期方法学的途径,以及划分阶段步骤的目的和实质。
答:
软件生命周期方法学是软件工程的传统途径,划分阶段步骤的目的和实质是:
控制开发工作的复杂性,通过有限步骤,把抽象逻辑概念,转化为具体物力实现。
15.试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明它们各自的适用范围。
答:
1.瀑布模型。
瀑布模型广为人知和历史悠久,其优势是规范及文档驱动的方法。
但问题是,往往不能够真正满足用户的需求。
适用于传统软件工程领域的结构化开发。
2.原型模型。
是为了克服瀑布模型的缺点而提出来的。
通过快速构建一个在机器上可运行的原型系统,让用户试用原型,并收集反馈意见的办法,来获取用户真实的需求。
3.螺旋模型。
螺旋模型适用于大型软件项目,比起之前的其它模型而言,有其一定的优越性,但这些优越性并不是绝对的。
主要体现在对开发人员的风险评估经验和专门知识的要求较高。
如果项目风险较大,而开发人员的水平较低,不能准确的识别和分析风险,则势必造成重大损失。
4.增量模型。
具有在软件开发早期阶段使投资获得明显回报和交易维护的优点,但是要求软件具有开放的结构。
第二章可行性研究
1.在软件开发的早期阶段,为什么要进行可行性研究?
其目的和任务各是什么?
答:
可行性研究的目的是用最小的代价,在尽可能短的时间内确定问题是否可解决,以及是否值得解决。
可行性研究的任务不是解决问题,而是确定是否可解/值得解。
2.应该从哪些方面研究目标系统的可行性?
答:
主要从以下几个方面进行可行性研究:
1.技术可行性。
以现有技术,能否在预定时间内完成该系统开发。
2.经济可行性。
通过成本-效益分析,估算系统的整体经济效益是否满足要求。
3.操作可行性。
分析系统的运行方式、操作规程是否适应用户应用需要。
4.社会可行性。
分析系统在法律、社会、市场等方面的认可度。
3.可行性研究有哪些工作步骤?
答:
(1)复查定义,确定系统规模和目标。
(2)研究老系统
(3)导出高层逻辑模型(conceptualdesign)
(4)重新定义
(5)导出多种解法
(6)推荐行动方针
(7)开发计划(粗略)
(8)审查、存档
4.简述系统流程图在可行性研究中的作用。
答:
系统流程图是概括的描述物理系统的传统工具。
系统流程图反映的是信息在系统各部分间流动的情况。
系统流程图可以帮助了解和分析系统,以概括的方式表达对系统的认识,并可以描述未来物理系统的概貌。
5.简述数据流图在可行性研究中的作用和用途。
答:
数据流图在可行性分析中可以帮助分析和描绘数据在软件中流动和被处理的逻辑过程,用图形的方式描述系统的逻辑功能,是系统分析员和用户之间理想的通信工具。
6.简单描述数据字典但内容和定义数据的方法。
答:
数据字典主要由下列4种元素定义组成:
1.数据流
2.数据流分量
3.数据存储
4.处理
除了数据定义外,数据字典还应包含一些关于数据的其它信息。
定义数据的方法通常采用自顶向下分解的方式。
并由顺序、选择、重复三种基本数据元素类型组成数据。
7.说明软件计划的内容和目标。
答:
软件计划的内容=项目任务范围+环境资源+工作量+进度
软件计划的目标是为了提供一个框架,以便于管理者对资源、成本和进度等进行合理的估算。
8.什么是软件范围?
定义软件范围需要哪些信息?
答:
软件范围就是在技术和管理层面上都是无二义性和可理解的项目范围,是软件开发各阶段的工作依据。
定义软件范围需要以下信息:
a.与用户、总体目标及利益相关的问题。
b.有利于系统分析员理解的问题。
c.集中于交流效果的问题。
9.简述软件开发环境资源的三个层次。
答:
软件开发环境资源由三个层次构成:
开发环境、软件构件以及最重要的资源——人。
10.软件环境资源的特征有哪些?
它们对制定软件计划都有哪些意义?
答:
每一类资源都有四个特征:
资源描述、可用性说明和资源提供的时间、资源使用的延续时间。
可以为制定软件计划估算软件开发所需的资源。
11.软件计划中,安排软件开发进度主要可以用哪些工具?
都有哪些优缺点?
答:
编制进度计划的常用工具主要有甘特图和网络计划法。
甘特图的优点是简单,能动态地反映开发进展;缺点是难以反映多个任务间的逻辑关系。
网络计划法则恰好弥补了甘特图的缺点,最适合反映多个工作之间的逻辑关系。
12.主要的成本估计技术有哪些?
其依据的主要是什么?
答:
主要有,代码行技术。
是一种基于规模的分解估算:
D=f(vi)
以及基于问题的分解估算:
EV=(Sopt+4Sm+Spess)/6
还有功能点技术。
这种技术以功能点(FP)为单位,度量软件的规模。
由于项目本身的复杂性,因此,成本估计技术主要采用“分而治之”的分解技术对软件项目进行估算
13.为什么说成本估计是不可能精准的?
答:
那是由于太多的变化因素——人员、技术、环境、策略、复杂性等等,使得成本估算永远不可能精确。
14.进行成本/效益分析的方法主要有哪些?
答:
常用成本/效益分析的方法主要有:
(1)货币的时间价值
(2)投资回收期
(3)纯收入
(4)投资回收率
15.软件计划的主要内容有哪些?
答:
最重要的是需求分析,然后是测试。
规格说明书,其中包括程序架构、模块功能以及编码规范等,零售软件还要有发布和维护等等。
具体的计划会因为软件规模、客户要求和公司实力、风格等有所不同,但大体上就这几部分。
测试是要贯穿始终的,从需求阶段就开始测试。
16.如何对制定完成的软件计划进行复审?
为什么要复审?
答:
软件计划的复审通常涉及有关软件工作范围和软硬件资源问题等。
复审应该邀请用户参加,用户可提出建议,并与开发人员最终商定内容。
复审内容分为技术和管理两个方面:
技术方面需要考虑的问题有:
系统的任务是否合理;
系统的给你复杂性是否与开发成本、进度以及风险一致;
系统规格说明书是否足够充分;
系统性能要求是否恰当
管理方面需要考虑的问题有:
计划中描述的工作范围是否符合用户需求?
计划中对资源的描述是否有效、合理?
计划中系统的开发成本与进度要求是否合理?
计划中人员的安排是否合理?
系统开发存在哪些风险?
复审可以尽早发现错误,复审是软件质量保证的重要措施。
17.为方便储户,某银行拟开发计算机储蓄系统。
储户填写的存款单或取款单由业务员键入系统。
如果是存款,系统记录存款人的姓名、地址、存款类型、存款日期、存款数量和利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。
请写出问题定义并分析此系统的可行性。
答:
该案例是分析开发计算机储蓄系统的可行性。
技术可行性:
使用现有的技术可以完成该系统
经济可行性:
这个系统的经济效益可以超过它的可发成本,可以节省时间和金钱
操作可行性:
系统的操作方式在这个用户组织内可以行得通
同时,此系统不违反法律,有巨大的社会效益。
第三章需求分析
1.为什么要进行需求分析?
通常对软件系统有哪些需求?
答:
需求问题是软件工程项目失败的主要原因。
一个高质量的软件,很大程度上取决于对要解决的问题的认识,以及如何准确的表达用户的需求。
需求分析就是要解决这个问题。
通常,对一个软件系统的需求可以有功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求等多个方面。
2.怎样与用户有效地沟通,以获得用户的真实需求?
答:
访谈、情景分析,以及面向数据流的自顶向下求精等方法,编制简易的系统规格说明文档,创建原型等,是获取真实需求的有效方法。
3.需求分析的任务是什么?
答:
确定对待开发系统的综合要求。
4.通常系统的需求可以分为哪几个层次?
答:
一般可以分成5个层次:
(1)功能需求:
系统必须做什么?
(2)业务需求:
反映客户组织机构对系统高层次的目标要求。
(3)运行需求:
运行环境、软硬件配置等。
(4)属性需求:
包括用户关心的属性,如效率、灵活性、完整性、可靠性等;开发者关心的属性,如可维护性、可复用性、可移植性等。
(5)未来可能的扩充需求:
如HDIS各组的合并,3维虚拟现实的效果等等。
5.进行需求分析的步骤有哪些?
答:
1.确定系统的综合要求
2.分析系统的数据要求
3.导出逻辑模型
4.修正系统开发计划
6.简述建立原型模型对软件需求分析的作用。
答:
可以快速构建旨在演示目标系统主要功能的可运行程序,帮助用户确定及提供更为精准的需求,以利用户和开发者能够在目标系统应该“做什么”这一问题上尽快达成一致。
7.解释实体-联系图及其用途。
答:
实体-联系图是按照用户的观点对数据建立的模型。
描述从用户角度看到的数据,反映用户的现实环境,并且与在软件系统中的实现方法无关。
8.说明为什么需要进行需求验证及验证的步骤有哪些?
答:
进行需求验证是为了确保软件开发的质量,降低开发成本。
通常对需求进行验证的步骤有:
验证需求的一致性、验证需求的现实性、验证需求的完整性和有效性。
9.银行计算机储蓄系统的工作过程大致如下:
储户填写的存款单或取款单由业务人员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。
答:
第四章总体设计
1.为每种类型的模块耦合举一个具体的例子。
答:
构成耦合性的七种类型
一般模块之间可能的连接方式有七种,构成耦合性的七种类型。
它们之间的关系为(由弱到强)
非直接耦合(NondirectCoupling)
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。
这种耦合的模块独立性最强。
。
数据耦合(DataCoupling)
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。
由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。
因此,数据耦合是松散的耦合,模块之间的独立性比较强。
在软件程序结构中至少必须有这类耦合。
印记耦合(StampCoupling)
如果一组模块通过参数表传递记录信息,就是标记耦合。
事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。
这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。
在设计中应尽量避免这种耦合,它使在数据结构上的操作复杂化了。
如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中在一个模块中,就可以消除这种耦合。
控制耦合(controlCoupling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
耦合的实质是在单一接口上选择多功能模块中的某项功能。
因此,对所控制模块的任何修改,都会影响控制模块。
另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。
外部耦合(ExternalCoupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
例如C语言程序中各个模块都访问被说明为extern类型的外部变量。
外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。
公共耦合(CommonCoupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
这种耦合会引起下列问题:
1)所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。
2)无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。
3)公共数据名的使用,明显降低了程序的可读性。
[Page] 公共耦合的复杂程度随耦合模块的个数增加而显著增加。
如图4.14所示,若只是两个模块之间有公共数据环境,则公共耦合有两种情况。
若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。
若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。
只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。
否则,还是使用模块独立性比较高的数据耦合好些。
内容耦合(ContentCoupling)
又称病态耦合。
如果发生下列情形,两个模块之间就发生了内容耦合。
1)一个模块直接访问另一个模块的内部数据; 2)一个模块不通过正常入口转到另一模块内部; 3)两个模块有一部分程序代码重叠(只可能出现在汇编语言中); 4)一个模块有多个入口。
在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。
好在大多数高级程序设计语言已经设计成不允许出现内容耦合。
它一般出现在汇编语言程序中。
这种耦合是模块独立性最弱的耦合。
2.为每种类型的模块内聚举一个具体的例子。
答:
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
低内聚:
(1)偶然内聚:
如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,这就叫做偶然内聚;
(2)逻辑内聚:
如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如,一个模块产生各种类型的全部输出),称为逻辑模块;
(3)时间内聚:
一个模块包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作),就叫时间内聚。
中内聚:
(1)过程内聚:
如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚;
(2)通信内聚:
如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。
高内聚:
(1)顺序内聚:
如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。
根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。
(2)功能内聚:
如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
功能内聚是最高程度的内聚。
3.简单说明系统总体设计的步骤步骤。
答:
典型的总体设计包括以下9个步骤:
1、确定最佳方案
2、选取合理方案
3、推荐最佳方案
4、功能分解
5、软件结构设计
6、设计数据库
7、制定测试计划
8、书写文档
9、审查和复审
4.举例说明模块化原理的经验1和经验2。
答:
(1)改进软件结构提高模块独立性
(2)模块规模应该适中(3)深度、宽度、扇出和扇入都应该适当(4)模块的作用域应该在控制域之内(5)力争降低模块接口的复杂程度(6)设计单入口和单出口的模块(7)模块功能应该可以预测。
5.为什么要尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合?
答:
减少模块之间的关联度,提高模块的独立性。
因为内容耦合会导致一个模块修改另一个模块的内容,使得程序逻辑发生严重问题。
而公共耦合是若干模块通过一个公共数据环境相互作用,公共部分的改动将影响所有调用它的模块,公共部分的数据存取无法控制,并且复杂程度也会随耦合模块的个数增加而增加。
控制耦合是一个模块通过传递开关、标志、名字等控制信息,明显地控制选择另一个模块的功能。
由于接口单一,因此仍然会影响被控模块的内部逻辑。
而数据耦合只是模块间通过数据参数来交换I/O信息,因此不会对其它模块产生任何等影响。
6.为什么模块的规模要适中?
答:
过大不易理解;太小则接口开销过大。
7.请说明为什么模块控制的宽度和深度要适度。
答:
深度过大表示分工过细,而宽度过大则表示系统复杂度大,所以模块控制的宽度和深度要适度。
8.简述面向数据流设计方法的基本思想。
答:
将由数据流图描绘的信息在系统中加工和流动的情况映射成软件结构。
9.常用数据流类型有哪些?
答:
变换流和事务流。
10.面向数据流的设计方法主要有哪几个步骤?
答:
主要有下面7个步骤:
1.复查基本系统模型
2.复查并精化数据流图
3.确定数据流图具有变换特性还是事务特性
4.确定输入流和输出流动边界,从而孤立出变换中心
5.完成“第一级分解”
6.完成“第二级分解”
7.使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化
11.用面向数据流的方法设计第二章习题17系统的软件结构。
第五章详细设计
1.详细设计的任务是什么?
答:
包括模块的算法设计、模块内的数据结构设计、模块接口设计、其它根据软件特点需要完成的设计、模块测试用例设计、设计文档编写、设计评审。
2.在对系统做详细设计时,应遵循哪些原则?
答:
①模块的逻辑描述应清晰易读、正确可靠;
②设计的处理过程应该简明易懂;
③选择恰当的描述工具来描述模块算法。
3.简述结构化设计的特点。
答:
①自顶向下、逐步求精;
②具有单入、单出的控制结构(取消GOTO语句)
4.结构化程序设计中有哪几种基本控制结构?
分别描绘在程序流程图、盒图和PDA图中这些基本控制的图例。
答:
(1)顺序结构
(2)选择结构
(3)先判定型循环结构
(4)后判定型循环结构
(5)多情况选择
5.假设只有SEQUENCE和DO_WHILE两种控制结构,请问应该如何完成IF_THEN_ELSE操作?
答:
转化如下:
K=1
DOWHILE(条件.AND.K.EQ.1)
程序块1
K=K+1
ENDDO
DOWHILE((.NOT.条件).AND.K.EQ.1)
程序块2
K=K+1
ENDDO
6.假设只有SEQUENCE和IF_THEN_ELSE两种控制结构,请问应该如何完成DO_WHILE操作?
答:
转化如下:
Label:
IF(条件)THEN
程序块
GOTOlabel
ELSE
程序块
ENDIF
7.试说明ISO为什么要建