《软件工程导论》doc版.doc_第1页
《软件工程导论》doc版.doc_第2页
《软件工程导论》doc版.doc_第3页
《软件工程导论》doc版.doc_第4页
《软件工程导论》doc版.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程导论第一章一软件工程学科的主要目标是什么?软件工程学科讨论的内容是什么?解:软件工程是一门工程性的学科,其目标主要是以最佳的成本效益和最有效有方式解决更大的更复杂的问题,成功地建造每一个大型软件系统。包括:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。 软件工程学科讨论的内容是:系统的及符合成本效益的软件开发方法;或者是开发软件的工程的方法。具体一点的就是把问题进行适当的分解以控制其复杂性。控制软件开发问题中的复杂性是软件工程学科的中心主题。所以我们常用讨论用抽象和分解的方法来解决这个问题。二程序和软件产品的区别是什么?解: (1)从集合的角度来看,软件是包含程序的有机集合体,程序是一系列有序的命令代码的集合。(2)软件=程序+文档=数据结构+算法+文档。从这个公式可以看出:软件是包含程序的有机集合体,程序是软件的必要元素。任何软件都有可运行的程序,至少一个。比如:操作系统给的工具软件,很多都只有一个可运行程序。而Office是一个办公软件包,却包含了很多可运行程序,软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序是软件的一部分。程序是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。 程序与软件的概念不同,但常常因为概念相似而被混淆。软件指程序与其相关文档或其他从属物的集合。一般的我们视程序为软件的一个组成部分。例如:一个游戏软件包括程序(*.exe)和其它图片(*.bmp等)、音效(*.wav等)等附件,那么这个程序(*.exe)称作“应用程序”,而它与其他文件(图片、音效等)在一起合称“软件”。第二章一如何理解“软件开发的生命周期模型”?为什么在开发一个大型软件产品时遵循一个生命周期模型很重要?解: 软件生命周期模型是软件生命周期的一种描述性和概略性的表示,它代表了软件产品经历其生命周期阶段所需的所有活动,它还捕捉这些活动的开展顺序。换句话说,生命周期模型图描绘了对于一个软件产品,从其开始到被取代为止所执行的不同活动。软件开发的生命周期模型之所以重要,是因为:当一个程序是由一个程序员自己开发的,那么他可以自由决定他开发软件的具体步骤。但是当程序是由一个团队开发时,那么成员们就有必要准确地理解什么时候应该做什么,否则的话就可能导致混乱和项目失败。而软件开发的生命周期模型,它鼓励以系统化和规范化的方式来开发软件。所以用软件开发的生命周期模型,有助于系统化和规范化地开发软件。并且软件开发组织通常会其开发的软件准备一个遵循软件生命周期的文档。这样可以防止记录的出错,有助于查明开发过程的不一致,重复和遗漏的地方。另外,当某些具体工程需要时,将备有记录的过程模型按照需要修改会更加的容易,所以软件开发的生命周期模型很重要。二软件开发的瀑布模型的主要阶段是什么?在开发一个典型的软件产品时,哪个阶段消耗了最多的时间和精力? 解:软件开发的瀑布模型的主要阶段是:可行性研:主要目的是确定开发产品在经济上和技术上是否可行。需求分析与说明:其目标是为了了解客户的需求,并妥善地记录相关信息及数据。设计:目标是把SRS文档中说明的要求转换到在某些编程语言中适于执行的一个结构中。编码和单元测试:目的是把软件转换成源代码。集成与系统测试:在编码和单元测试完成后,不同的模块就会被集成。消耗了最多的时间和精力的阶段是:编码。第四章一列出好的SRS文档的5个理想特征。解:1.简洁:SRS文档应当简洁,同时没有歧义,一致并且完整。冗长和无关的描述会减少可读性并增加错误发生的机会。2.结构化:SRS文档应当结构良好,结构良好的文档易于理解和修改。在实践中,SRS文档经历了几次修订以满足顾客的需求。通常顾客需求会随着时间而变化,因此,为了使修改SRS文档更加容易,使文档结构良好是很重要的。3.黑匣子视图:它仅说明系统应该做什么,而不是说明怎么做。这意味着SRS文档应当指明系统的外部行为,但不讨论实施这一问题。把将要开发的系统看作是一下黑匣子,并执行外部可见的系统行为。基于这个原因,SRS文档也被称作系统的黑匣子规约。4.概念完整性:SRS文档应显示出概念完整性,这样读者就能够很容易地理解内容。5.可验证的:记录在SRS文档中的所有系统需求都应该是可验证的,这意味着我们应当可以确定在一次实现中需求有没有被满足。“系统应该是用户友好的”这一类需求是无法验证的。在另一方面,“当一本书的名字被输入时,如果该书可用,那么软件应当显示出该书的位置”这类需求是可以验证的。所要求的系统中所有无法验证的特性都应被单独列在SRS文档中的“实施目标”这一部分。二SRS文档不同类别的用户是谁?他们期望从SRS文档中得到什么?解: SRS文档不同类别的用户有:(1)软件的用户、顾客和销售人员:这一类读者的目的在于确保系统如SRS文档中的撰述会满足他们的需要。(2)软件开发人员:软件开发人员参照SRS文档确保自己严格按照顾客的需求进行开发。(3)测试工程师:他们的目的在于确保从功能的角度来看需求是可以理解的,这样他们就能够测试软件并验证其工作。他们需要有关功能的清楚描述,以及对输入和输出数据的准确识别。(4)用户手册作者:他们总计SRS文档的目的在于确保他们足够透彻地理解该文档以便于撰写用户手册。(5)项目经理:他们要确保只要参照SRS文档即能轻松地估测成本,并保证它含有良好计划一个项目所需的全部信息。(6)维护工程师:SRS文档帮助维护一程师理解系统的功能。清楚地理解功能有助于他们理解设计和代码。另外,需求知道也可以使他们确定为了满足一个特定的目的他们需要对系统的功能做出哪些改动。第五章一在软件设计中所谓的内聚与耦合是什么意思?在取得一个系统的优秀设计的过程中,这些概念是怎么样起作用的?解: 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;耦合一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中个模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。因此,我们应该追求着高内聚,低耦合。这样就可以使得可读性更强、复用性更高、可维护性更容易和易变更性更便捷。可读性更强:例如一个人写文章、讲事情,条理清晰才能易于理解,这同样发生在读写软件代码上。如果一堆代码写得一团乱麻,东一个跳转西一个调用,读它的人会感觉非常头疼。这种事情也许一直在写程序的你我都曾经有过经历。如果一段程序条理非常清晰,每个类通过名称或说明都能清楚明白它的意义,类的每个属性、函数也都是易于理解的它所应当完成的任务和行为,这段程序的可读性必然提高。在软件产业越来越密集,软件产业中开发人员协作越来越紧密、分工越来越细的今天,软件可读性的要求相信也越来越为人们所重视。复用性更高:在软件开发中,最低等级的复用是代码拷贝,然后是函数的复用、对象的复用、组件的复用。软件开发中最懒的人是最聪明的人,他们总是想到复用。在代码编写的时候突然发现某个功能是曾经实现过的功能,直接把它拷贝过来就ok了。如果这段代码在同一个对象中,那么就提出来写一个函数到处调用就行了。如果不是在同一个对象中呢,就将其抽象成一个对象到处调用吧。如果不在一个项目中呢,那就做成组件给各个项目引用吧。代码复用也使我们的代码在复用的过程中不断精化、不断健壮、提高代码质量。代码的复用的确给我们的开发带来了不少便利,但是一段代码能否在各个需要的地方都能复用呢?这给我们的软件开发质量提出了新的要求:好的代码可以复用,不好的则不行。软件中的一个对象如果能保证能完成自己职能范围内的各项任务,同时又不去理会与自己职能无关的其它任务,那么它就能够保证功能的相对独立性,也就可以脱离自己所处的环境而复用到其它环境中,这是一个具有内聚性的对象。可维护性更容易和易变更性更便捷:现在的软件是在不断变更的,这种变更不仅来自于我们的客户,更来自于我们的市场。如果我们的软件通过变更能及时适应我们的市场需求,我们就可以在市场竞争中获胜。如何能及时变更以适应我们的市场呢,就是通过调整软件的结构,使我们每次的变更付出的代价最小,耗费的人力最小,这种变更才最快最经济。高内聚的软件,每个系统、模块、类的任务都高度相关,就使每一次的变更涉及的范围缩小到最小。比如评审表发生了变更,只会与评审表对象有关,我们不会去更改其它的对象。如果我们能做到这一点,我们的系统当然是可维护性好、易变更性好的系统。二比较一下面向对象和面向功能这两种设计途径各自的优势。解: 面向对象的优势是:从编写源代码的开发者角度来看:(1)通过继承,我们可以大幅减少多余的代码,并扩展现有代码的用途。(2)我们可以在标准的模块上构建我们的程序,而不必一切从头开始。这可以减少软件开发时间并提高生产率。(3)数据隐藏的概念帮助程序员保护程序免受外部代码的侵袭。(4)容许一个对象的多个实现同时存在,而且彼此之间不会相互干扰。(5)容许将问题中的对象直接映射到程序中。(6)基于对象的工程可以很容易的分割为独立的部分。(7)以数据为中心的设计方法容许我们抓住可实现的更多细节。(8)面向对象程序的系统很容易从小到大逐步升级。(9)对象间通讯所使用的消息传递技术与外部系统接口部分的描述更简单。(10)更便于控制软件的复杂度。 从总体的设计思路来看:(1)是一种全新的系统分析设计方法(对象、类、结构属性、方法)。(2)适用于各类信息系统的开发。(3)实现了对客观世界描述到软件结构的直接转换,大大减少后续软件开发量。(4)开发工作的重用性、继承性高,降低重复工作量。(5)缩短了开发周期。 面向功能的优势是:面向功能一般用于一些追求速度和内存的编程体,比如完成某项图形算法,JAVA的手机游戏也推荐采用面向过程,因为这样可以提升程序效率和减小目标程序的大小,减少内存消耗。另外,面向功能的这种思维方式符合人们的思维习惯,在中国,大部分有人还是用面向功能的思维去编程。如C语言就是面向功能的,常用自上而下、层层分解的方法来化解问题及编程,通常把一个大问题化为很多个小问题,每一个问题由一个函数来实现。面向功能的语言和思维容易学。而C+是面向对象的,面向对象的发展时间在面向功能之后,所以面向对象继承了面向功能的一些优秀特点。第六章一为下列图书馆信息系统(LIS)软件执行SA/SD。第七章一采用面向对象的范式时是什么提高了生产率?解:要回答这个问题,首先得知道泛式是指具有在多种数据类型上皆可操作的含意,与模板有些相似。泛式的第一个好处是编译时的严格类型检查。这是集合框架最重要的特点。此外,泛式消除了绝大多数的类型转换。如果没有泛式,当你使用集合框架时,你不得不进行类型转换。关于泛式的理解可以总结下面的一句话,它是把数据类型作为一种参数传递进来。 通过以下的五个优点,面向对象的范式时就可以提高了生产率了:(1)使用泛式类型可以最大限度地重用代码、保护类型的安全以及提高性能;(2)使用泛式可以创建集合类;(3)可以创建自己的泛式接口、泛式类、泛式方法、泛式事件和泛式委托;(4)可以对泛式类进行约束以访问特定数据类型的方法;(5)关于泛式数据类型中使用的类型的信息可在运行时通过反射获取。二在软件设计中如何理解封装这个词?封装有哪些好处?解: 一个对象与外部世界仅通过消息交流的属性叫做封装。封装也叫做信息封装:它是确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。封闭主要有三个好处:(1)它保护对象的变量不受其他对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论