文档库 最新最全的文档下载
当前位置:文档库 › 软件工程实用教程吕云翔-课后答案

软件工程实用教程吕云翔-课后答案

软件工程实用教程吕云翔-课后答案
软件工程实用教程吕云翔-课后答案

1练习题

1)软件的特点有哪些?

1.软件是一种逻辑实体,具有抽象性。硬件是有形的设备,而软件不像硬件那样具有

明显的可见性。人们可以把软件记录在介质上,但是却无法直观地观察到它的形态,而必须通过在计算机上实际地运行才能了解它的功能、性能及其他特性。

2.软件的生产与硬件的制造不同。它更多地渗透了人类的智能活动,是人类智力劳动

的产物。软件是被开发或设计的,而不是传统意义上被制造的。软件成本集中于开

发上,这意味着软件项目不能像制造项目那样管理。

3.软件在运行使用过程中,不会磨损。在软件的运行和使用期间,它不会产生像硬件

那样的磨损和老化现象,然而却存在着缺陷维护和技术更新的问题。软件不会磨损,但是它会退化,而软件的退化是由于修改。因此,软件维护比硬件维护要复杂得多。

4.软件的开发至今尚未完全摆脱手工艺的开发方式。在硬件世界,构件复用是工程过

程的自然的一部分,而在软件世界,它是刚刚开始起步的事物。虽然软件产业正在

向基于构件的组装前进,但大多数软件仍是定制的。

5.软件的开发和运行必须依附于特定的计算机系统环境。它不像有些设备一样,能够

独立地工作,而是受到了物理硬件、网络配置、支撑软件等因素的制约。由此引发

了软件的可移植性问题。

2)软件危机是如何产生的?有哪些表现?

原因:在20世纪60年代中期,随着软件规模的扩大,复杂性的增加,功能的增强,使得高质量的软件开发变得越来越困难。

表现:

1.开发出来的软件产品不能满足用户的需求,即产品的功能或特性与需求不符。

这主要是由于开发人员与用户之间不能充分有效的交流造成的,使得开发人员

对用户需求的理解存在着差异;

2.相比越来越廉价的硬件,软件代价过高;

3.软件质量难以得到保证,且难以发挥硬件潜能。开发团队缺少完善的软件质量

评审体系以及科学的软件测试规程,使得最终的软件产品存在着诸多缺陷;

4.难以准确估计软件开发、维护的费用以及开发周期。往往软件产品不能在预算

范围之内,按照计划完成开发。很多情况下,软件产品的开发周期或经费会大

大超出预算;

5.难于控制开发风险,开发速度赶不上市场变化;

6.软件产品修改维护困难,集成遗留系统更困难;

7.软件文档不完备,并且存在着文档内容与软件产品不符的情况。软件文档是计

算机软件的重要组成部分,它为在软件开发人员之间以及开发人员与用户之间

信息的共享提供了重要的平台。软件文档的不完整和不一致的问题会给软件的

开发和维护等工作带来很多麻烦。

3)简述软件工程的基本原则。

1.用分阶段的生存周期计划进行严格的管理;

将软件的生存周期划分为多个阶段,对各个阶段实行严格的项目管理。软件开

发是一个漫长的过程,人们可以根据工作的特点或目标,把整个软件的开发周

期划分为多个阶段,并为每个阶段制定分阶段的计划及验收标准,这样有益于

对整个软件开发过程进行管理。在传统的软件工程中,软件开发的生存周期可

以划分为可行性研究、需求分析、软件设计、软件实现、软件测试、产品验收

和交付等阶段。

2.坚持进行阶段评审;

严格的贯彻与实施阶段评审制度可以帮助软件开发人员及时地发现错误并将

其改正。在软件开发的过程中,错误发现的越晚,修复错误所要付出的代价就

会越大。实施阶段评审,只有在本阶段的工作通过评审后,才能进入下一阶段

的工作。

3.实行严格的产品控制;

在软件开发的过程中,用户需求很可能在不断的发生着变化。有些时候,即使

用户需求没有改变,软件开发人员受到经验的限制以及与客户交流不充分的影

响,也很难做到一次性获取到全部的正确的需求。可见,需求分析的工作应该

贯穿到整个软件开发的生存周期内。在软件开发的整个过程中,需求的改变是

不可避免的。当需求更新时,为了保证软件各个配置项的一致性,实施严格的

版本控制是非常必要的。

4.采用现代程序设计技术;

现代的程序设计技术,比如面向对象,可以使开发出来的软件产品更易维护和

修改,同时还能缩短开发的时间,并且更符合人们的思维逻辑。

5.软件工程结果应能清楚地审查;

虽然软件产品的可见性比较差,但是它的功能和质量应该能够被准确地审查和

度量,这样才能有利于有效的项目管理。一般软件产品包括可以执行的源代码、

一系列相应的文档和资源数据等。

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

开发小组成员的人数少有利于组内成员充分的交流,这是高效团队管理的重要

因素。而高素质的开发小组成员是影响软件产品的质量和开发效率的重要因

素。

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

随着计算机科学技术的发展,软件从业人员应该不断地总结经验并且主动学习

新的软件技术,只有这样才能不落后于时代。

4)什么是软件过程?软件过程标准包括哪些内容?

软件过程又称为软件生存周期过程,是软件生存周期内为达到一定目标而必须实施的一系列相关过程的集合。

标准:

制定了ISO12207软件生存周期过程标准,它把用于开发一个软件系统的过程分为三类:主过程、支持过程和辅助过程(组织过程)。

主过程是构成软件生存周期主要部分的那些过程,正是这些过程启动或进行软件产品的开发、操作或维护。这些过程共有五个,它们是:

(1)获取过程:定义需方(即获取一个系统、软件产品或软件服务的组织)的

活动;

(2)供应过程:定义供方(即向需方提供系统、软件产品或软件服务的组织)

的活动;

(3)开发过程:定义开发者(即定义和开发软件产品的组织)的活动;

(4)维护过程:定义维护者(即对软件产品进行维护服务的组织)的活动,这

个过程包括系统移植和退役;

(5)运行过程:定义运行者(即在计算机系统运行环境中向其用户提供运行服

务的组织)的活动。

支持过程是对另一个过程提供支持的过程。被支持的过程根据需要采用支持性过程,并与该过程结合,帮助软件项目获得成功,并提高质量。支持过程共有如下

八个:

(1)文档过程:定义对某生存周期过程所产生的信息进行记录的活动;

(2)配置管理过程:定义配置管理活动;

(3)质量保证过程:定义客观地保证软件产品和过程符合规定要求、遵守已定

计划的活动;

(4)验证过程:定义需方、供方或独立的第三方对软件产品进行验证的活动,

这些验证活动的深度由软件项目的性质决定;

(5)确认过程:定义需方、供方或独立的第三方对软件产品进行确认的活动;

(6)联合评审过程:定义对某项活动的状态和产品进行评价的活动,这一过程

可由任何双方共同采用,其中一方(评审方)评审另一方(被评方);

(7)审计过程:定义对是否符合要求、计划和合同进行确定的过程,这个过程

可由任何双方采用,其中一方(审计方)审计另一方(被审方)的软件产

品或活动;

(8)问题解决过程:定义对开发、操作、维护或其它过程中发现的问题(包括

不一致性)进行分析和排除的过程。

辅助过程是一个组织用来建立、实施一种基础结构、并不断改进该基础结构的过程。基础结构由一些相关的生存周期过程和人员组成。这些辅助过程有如下四个:

(1)基础设施过程:定义建立生存周期过程的基础结构所需的基本活动;

(2)管理过程:定义在生存周期过程中管理(包括项目管理)的基本活动;

(3)培训过程:定义为提供经过适当培训的人员所需的一些活动;

(4)过程改进过程:定义一个组织(即需方、供方、开发者、操作者、维护者

或另一过程的管理者)为了建立、测量、控制和改进其生存周期过程需完

成的基本活动。

5)简述常见的软件生存周期模型各自的特征和优缺点。

1.瀑布模型是一种线性的开发模型,具有不可回溯性。开发人员必须等前一阶段的任务完成后,才能开始进行后一阶段的工作,并且前一阶段的输出往往就是后一阶段的输入。由于它的不可回溯性,如果在软件生存周期的后期发现并要改正前期的错误,那么需要付出很高的代价。传统的瀑布模型是文档驱动的。瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。瀑布模型适应于具有以下特征的软件开发项目。

(1)在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取

到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变

更需要付出高昂的代价。

(2)软件开发人员具有丰富的经验,对软件应用领域很熟悉。

(3)软件项目的风险较低。瀑布模型不具有完善的风险控制机制。

2.原型模型主要用于挖掘需求,或是进行某种技术或开发方法的可行性研究,是一种开发人员为了快速而准确地获取需求经常采用的方法。在初步获取需求后,开发人员会快速地开发一个原型系统。通过对原型系统进行模拟操作,开发人员可以更直观、更全面和更准确地了解用户对待开发系统的各项要求,同时还能挖掘到隐藏的需求。

原型模型的优点是简单和快速,缺点是需要花费一些额外的成本来构造原型,并且不利于创新。

3.增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点,此外,它还有以下优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;允许增量投资,即在项目开始时,可以仅对一个或两个增量投资。

增量模型的不足为:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性,可能会超出组织的能力。

增量模型适用于以下特点的软件项目。

(1)软件产品可以分批次地进行交付。

(2)待开发的软件系统能够被模块化。

(3)软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。

(4)项目管理人员对全局把握的水平较高。

4.演化模型基于这样的假定:需求是最基本的,是唯一的风险。

演化模型具有以下优点:在需求不能予以规范时,可以使用这一演化模型;用户可以通过运行系统的实践,对需求进行改进;与瀑布模型相比,需要更多用户/获取方的参与。演化模型的不足包括:演化模型的使用仍然处于初步探索阶段,因此具有较大的风险,需要有利的管理;即使很好地理解了需求或设计,该模型的使用也很容易成为不编写需求或设计文档的借口;用户/获取方不理解该方法的自然属性,因此当结果不够理想时,可能会产生抱怨。

5. 螺旋模型通常用来指导大型软件项目的开发。它把开发过程分为制定计划、风险分析、实施开发和用户评估四类活动。

螺旋模型综合了传统的生存期模型的优点,同时扩展了增量模型管理任务的范围:风险分析,用来弥补其不足。螺旋模型的另外一个特征是,只有一个迭代过程真正开发可交付的软件。螺旋模型也存在其缺点:一个周期执行时间太长;要有方法和自动化工具支持,否则无法实施。

螺旋模型适应于风险较大的大型软件项目的开发。

6. 统一过程模型具有三大特点:用例驱动,以架构为中心,迭代和增量开发。统一过程模型核心是解决可操作性问题,帮助开发人员尽可能少地依赖那些“不可描述的经验”。

可以多次执行各个工作流程,从而有利于更好地理解需求、设计出合理的系统构架,并最终交付一系列渐趋完善的成果。适用的范围极为广泛。

对开发人员的素质要求较高。统一过程模型在实际实施过程中也存在很多的困难,包括:

多层次持续的规划与评估;判断构架中关键风险的经验;高效率的验证和评价手段;多工种之间的频繁沟通;多版本工作产品的管理等。

7.敏捷方法是一种轻量级的软件工程方法,更强调软件开发过程中各种变化的必然性,通过团队成员之间充分的交流与沟通以及合理的机制来有效地响应变化。

敏捷模型避免了传统的重量级软件开发过程复杂、文档繁琐和对变化的适应性低等各种弊端,它强调软件开发过程中团队成员之间的交流、过程的简洁性、用户反馈、对所作决定的信心以及人性化的特征。

缺点:组织模型和建模方法比较薄弱。

7)常用的软件工程的辅助工具有哪些?各有什么作用?

1.分析设计工具

(1)Microsoft Visio

Microsoft Visio通过创建与数据相关的Visio图表来显示数据,这些图表易于刷新,并能够显著提高生产率,使用各种图表可了解、操作和共享企业内组织系统、资源和流程的有关信息。Visio提供了各种模板:业务流程的流程图、网络图、工作流图、数据库模型图和软件图,这些模板可用于可视化和简化业务流程、跟踪项目和资源、绘制组织结构图、映射网络、绘制建筑地图以及优化系统。

(2)Rational Rose

Rational Rose是美国的Rational公司的面向对象建模工具,利用这个工具,可以建立用UML描述的软件系统的模型,而且可以自动生成和维护C++、Java、VB和Oracle等语言和系统的代码。Rational Rose包括了统一建模语言(UML),OOSE,以及OMT,是一个完全的,具有能满足所有建模环境需求能力和灵活性的一套解决方案。允许开发人员,项目经理,系统工程师和分析人员在软件开发周期内在将需求和系统的体系架构转换成代码,消除浪费的消耗,对需求和系统的体系架构进行可视化,理解和精练。

(3)Together

Together是由Borland公司发布的集成了Java IDE的产品线,源于JBuilder中的UML建模工具。这条产品线提供了不同应用层次的功能,比如Together Designer,Together Architect,Together Developer。从2007年开始,他们将这些功能合并为一个产品进行发布。技术上讲,Together是一组Eclipse插件。Together Deploper使用UML 1.4,支持多种语言,物理数据建模,设计模式,源代码设计模式识别,模板代码设计和重用,文件生成等。

(4)PowerDesigner

PowerDesigner是Sybase公司的CASE工具集,提供了一个复杂的交互环境,支持开发生存周期的所有阶段,从处理流程建模到对象和组件的生成。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设计模型进行控制。PowerDesigner系列产品提供了一个完整的建模解决方案,业务或系统分析人员,设计人员,数据库管理员DBA和开发人员可以对其裁剪以满足他们的特定的需要;而其模块化的结构为购买和扩展提供了极大的灵活性,从而使开发单位可以根据其项目的规模和范围来使用他们所需要的工具。

(5)CASE Studio

CASE studio是一个专业的数据库设计工具。可以透过ER图表、资料流向图来设计各式各样的数据库系统(像是ms sql, oracle, sybase等),另外程式提供了各式各样的管理单元帮助程序员进行设计。

2.程序开发工具

(1)Microsoft Visual Studio

Microsoft Visual Studio是微软公司推出的Windows平台上的集成开发环境。提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建应用程序。Visual Studio包括各种增强功能,例如可视化设计器、对Web开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能,为开发人员提供了所有相关的工具和框架支持。

(2)Eclipse

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会管理。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

(3)NetBeans

NetBeans由Sun公司在2000年创立,当前可以在Solaris、Windows、Linux和Macintosh OS X平台上进行开发,并在Sun公用许可范围内使用。NetBeans是一个全功能的开放源码Java IDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控制和XML编辑融入其众多功能之中。NetBeans可支持Java 2平台标准版(J2SE)应用的创建、采用JSP和Servlet的2层Web应用的创建,以及用于2层Web应用的API及软件的核心组的创建。此外,NetBeans还预装了两个Web服务器,即Tomcat和GlassFish,从而免除了繁琐的配置和安装过程。

(4)Delphi

Delphi是Borland公司研制的可视化开发工具,可在Windows3.x、Windows95、WindowsNT、WindowsXP、Windows Vista等环境下使用。Delphi拥有一个可视化的集成开发环境,采用面向对象的编程语言ObjectPascal和基于部件的开发结构框架。它提供了500多个可供使用的构件,利用这些部件,开发人员可以快速地构造出应用系统。开发人员也可以根据自己的需要修改部件或用Delphi本身编写自己的部件。

(5)Dev C++

Dev C++是一个C&C++开发工具,它是一款自由软件,遵守GPL协议。它集合了GCC、MinGW32等众多自由软件,并且可以取得最新版本的各种工具支持。它使用MingW32/GCC 编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能。

3.测试工具

(1)Load Runner

LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为实行实时性能监测。

(2)Win Rnnner

Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试

人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。

(3)Segue

Segue Silk产品系列是高度集成的自动化黑盒功能、性能测试平台。分布式测试环境,集中控制门户(浏览器方式)能够控制测试代理,提供自动测试流程的流程化定义功能,具备"端到端"的组件测试能力,测试用例的管理、自动测试,连同测试脚本的跨平台能力,基于AOL 7标准,全面支持WEB应用的测试能力,能够通过提供大量的数据,提供工作流类应用的模拟运行功能,全面支持UNICODE编码标准,支持各种WEB技术构件。

4.配置管理工具

(1)Microsoft Visual Sourcesafe

Microsoft Visual SourceSafe是微软公司出品的版本控制系统,简称VSS。软件支持Windows系统所支持的所有文件格式,通常与微软公司的Visual Studio产品同时发布,并且高度集成。包括服务器和通过网络可以连接服务器的客户端。VSS提供了基本的认证安全和版本控制机制,提供历史版本对比,适合于个人程序开发的版本管理。

(2)ClearCase

ClearCase是Rational公司开发的配置管理工具,可以与Windows资源管理器集成使用,并且还可以与很多开发工具集成在一起使用。ClearCase主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务,包括支持当今流行软件开发环境Client/Server网络结构。它包含了一套完整的软件配置管理工具而且结构透明、界面可亲。

5.项目管理工具

(1)Microsoft Project

Microsoft Project是专案管理软件程序,由微软开发销售。软件设计目的在于协助专案经理发展计划、为任务分配资源、跟踪进度、管理预算和分析工作量。可产生关键路径日程表,日程表可以以资源标准的,而且关键链以甘特图形象化。另外,Project可以辨认不同类别的用户。这些不同类的用户对专案、概观、和其它资料有不同的访问级别。

(2)CA-SuperProject

Computer Associates International公司的CA-SuperProject是一个常用的软件,特别是在那些管理公司网络的项目管理人员、在Unix或Windows环境下的工作人员以及需要高性能程序的人中更受欢迎。这个软件包能支持多达160,000多个任务的大型项目。能创建及合并多个项目文件,为网络工作者提供多层密码入口,进行计划审评法(PERT)的概率分析。而且,这一程序包含一个资源平衡算法,在必要时,可以保证重要工作的优先性。

(3)Time Line

Symantec公司的Time Line软件是有经验的项目经理的首选。它的报表功能以及与SQL 数据库的连接功能都很突出。日程表、电子邮件的功能,排序和筛选能力以及多项目处理都是精心设计的。另外,它还有一个叫做Co-Pilot的功能,这是一个很有用的推出式帮助设施,用户界面很好,极易操作。许多评论人员认为Time Line最适于大型项目以及多任务项目,但不如其他软件包便于初学者使用。

2练习题

1)什么是项目立项,包括哪几个步骤?

任何一个完整的软件工程项目都是从项目立项开始的。项目立项包括项目发起、项目论证、项目审核和项目立项四个过程。

2)可行性研究包括哪些方面?每个方面关注的问题领域是什么?

可行性研究需要从多个方面进行评估,主要包括:战略可行性、操作可行性、计划可行性、技术可行性、社会可行性、市场可行性、经济可行性和风险可行性等。

●战略可行性研究主要从整体的角度考虑项目是否可行,例如提出的系统对组织目标

具有怎样的贡献;新系统对目前的部门和组织结构有何影响;系统将以何种方式影

响人力水平和现存雇员的技术;它对组织整个人员开发策略有何影响等等。

●操作可行性研究主要考虑系统是否能够真正解决问题;是否系统一旦安装后,有足

够的人力资源来运行系统;用户对新系统具有抵触情绪是否可能使操作不可行;人

员的可行性等问题。

●计划可行性研究主要估计项目完成所需的时间并评估项目的时间是否足够。

●技术可行性研究主要考虑项目使用技术的成熟程度;与竞争者的技术相比,所采用

技术的优势及缺陷;技术转换成本;技术发展趋势及所采用技术的发展前景;技术

选择的制约条件等。

●社会可行性研究主要考虑项目是否满足所有项目涉及者的利益;是否满足法律或合

同的要求等。

●市场可行性研究主要包括研究市场发展历史与发展趋势,说明本产品处于市场的什

么发展阶段;本产品和同类产品的价格分析;统计当前市场的总额、竞争对手所占

的份额,分析本产品能占多少份额;产品消费群体特征、消费方式以及影响市场的

因素分析;分析竞争对手的市场状况;分析竞争对手在研发、销售、资金、品牌等

方面的实力;分析自己的实力等。

●经济可行性研究主要是把系统开发和运行所需要的成本与得到的效益进行比较,进

行成本效益分析。

●风险可行性研究主要是考虑项目在实施过程中可能遇到的各种风险因素,以及每种

风险因素可能出现的概率和出险后造成的影响程度。

3)进行可行性研究的一般步骤是什么?

1)明确系统的目标

2)分析研究现行系统

3)设计新系统的高层逻辑模型

4)获得并比较可行的方案

5)撰写可行性研究报告

4)需求分析和可行性研究的侧重点有什么不同?

可行性研究的目的是评估系统是否值得去开发,问题是否能够解决,而不是对需求

进行定义。如果说可行性分析是要决定“做还是不做”,那么需求分析就是要回答“系

统必须做什么”这个问题。

5)获取需求的常用方法有哪些?

问卷调查、访谈、实地操作、建立原型

6)如何进行结构化需求分析,其建模方法都有哪些?

结构化分析的具体步骤为:

1)建立当前系统的“具体模型”:系统的“具体模型”就是现实环境的忠实写照,这

样的表达与当前系统完全对应,因此用户容易理解。

2)抽象出当前系统的逻辑模型:分析系统的“具体模型”,抽象出其本质的因素,

排除次要因素,获得当前系统的“逻辑模型”。

3)建立目标系统的逻辑模型:分析目标系统与当前系统逻辑上的差别,从而进一

步明确目标系统“做什么”,建立目标系统的“逻辑模型”。

4)为了对目标系统进行完整的描述,还需要考虑人机界面和其他一些问题。

在结构化分析中经常用到的建模方法主要有:

1)数据流图(DFD)

2)实体联系图(E-R)

3)控制流图(CFD)

4)状态迁移图(STD)

7)根据“学生档案管理系统”的数据流图,完成它的数据字典。

数据流名称:资料

别名:学生资料

组成:学号+姓名+性别+年龄+学院+年级+专业

8)有如下一个学生选课系统:教师提出开课计划,系统批准后给教师下发开课通知。

学生可向系统提出选课申请,系统批准后给学生下发选课申请结果通知。课程结束后,系统还可以帮助教师录入学生成绩,同时把成绩单发送给学生。

请用Visio画出该系统顶层的数据流图。

3练习题

1)软件设计的意义和目标是什么?

软件设计在软件开发过程中处于核心地位,它是保证质量的关键步骤。设计为我们提供了可以用于质量评估的软件表示,设计是我们能够将用户需求准确的转化为软件产品或系统的唯一方法。软件设计是所有软件工程活动和随后的软件支持活动的基础。

2)在软件设计的过程中要遵循哪些规则?

模块化

抽象化

逐步求精

信息隐藏

3)软件设计如何分类,分别有哪些活动?

从活动任务来看,软件设计是对软件需求进行:数据设计、体系结构设计、接口设

计、构件设计和部署设计。

从工程管理角度来看,软件设计分为概要设计和详细设计。前期进行概要设计,得

到软件系统的基本框架。后期进行详细设计,明确系统内部的实现细节。

4)什么是软件体系结构,什么是软件体系结构风格?

体系结构是研究系统各部分组成及相互关系的技术学科。软件体系结构不仅指定了系统的组织结构和拓扑结构,也显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。

所谓软件体系结构风格,是描述某一特定应用领域中系统组织方式的惯用模式。

1)软件体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将

各个模块和子系统有效地组织成一个完整的系统。

2)软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。

5)常见的软件体系结构风格有哪些,如何分类?

1 数据流风格:数据到达即被激活处理工作,无数据时不工作。

2 调用/返回风格:各个组件通过调用其它组件和获得返回参数来进行交互,配合

完成功能。

3 独立构件风格:这种风格的主要特点是:事件的触发者并不知道哪些构件会被这

些事件影响,相互保持独立这样不能假定构件的处理顺序,甚至不知道哪些过程会

被调用;各个构件之间彼此无连接关系,各自独立存在,通过对事件的发布和注册

实现关联包括进程通讯、事件系统。

4 虚拟机风格:它创建了一种虚拟的环境,将用户与底层平台隔离开来,或者将高

层抽象和底层实现隔离开来。

5仓库风格:仓库是存储和维护数据的中心场所。在仓库风格中存在两类构件,表

示当前数据的状态的中心数据结构和一组对中心数据进行操作的独立构件。包括

数据库系统、超文本系统、黑板系统。

6)面向数据流的设计方法的主要思想是什么?

面向数据流的设计方法就是通常所说的结构化设计方法,它以数据流图为基础,把

DFD变换成软件结构的不同映射方法,以软件结构图(SC图)的形式表现。SC图

描述软件系统的层次和分块结构关系,体现模块与模块之间的联系与通讯,从而表

达软件的体系结构。

7)什么是内聚、耦合,包括哪些常见类型?

内聚指的是一个模块内部各组成部分的处理动作的组合强度,又称块内联系。包括几种内聚类型:

●偶然内聚:模块内各成分无实质性的联系,只是偶然地被凑到一起;

●逻辑内聚:模块内部各组成部分的处理动作在逻辑上相似,但功能却彼此不同或无

关;

●时间内聚:将若干在同一个时间带内进行的工作集中在一个模块内,但这些工作彼

此无关;

●过程内聚:模块内部包含的各个成分按照某种确定的顺序进行,但所做工作没有什

么关系;

●通讯内聚:模块内的各个组成部分都使用相同的输入数据或产生相同的输出数据;

●顺序内聚:模块中各个组成部分顺序执行,前一个成分的输出就是后一个成分的输

入;

●功能内聚:模块内的各个组成部分全都为完成同一个功能而存在,共同完成一个单

一的功能,并且只完成一个功能。

耦合指的是两个模块之间的相互依赖关系,又称块间联系。包括以下几种类型的偶合:

●非直接耦合:调用和被调用模块之间不存在直接的数据联系;

●数据耦合:调用和被调用模块之间存在简单变量这样的数据传递;

●特征耦合:调用和调用模块之间存在诸如数组这样的数据结构的数据传递;

●控制耦合:耦合的模块之间传递的不是数据信息,而是控制信息,或称开关量或标

志量;

●外部耦合:允许多个模块访问同一个全局变量;

●公共耦合:允许多个模块访问同一个全局性数据结构;

●内容耦合:允许一个模块直接调用另一个模块中的数据。

8)详细设计时,应该完成哪些工作?

软件详细设计包括数据设计、界面设计和构件设计

9)数据库设计有哪些步骤,每一步的主要工作是什么?

1)需求分析;调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、

范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求

和各种约束条件等,形成用户需求规约。

2)概念设计;对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校

等),通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念

模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以

及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机

上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—联系模型(E-R

模型)方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间

的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据

库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一

个全局视图,即用户要描述的现实世界的概念数据模型。

3)逻辑设计;主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,

即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为

各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑

数据库”。

4)物理设计;根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具

体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构

(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。

这一步设计的结果就是所谓“物理数据库”。

5)验证设计;在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型

的应用任务来验证数据库设计的正确性和合理性。一般,一个大型数据库的设计过

程往往需要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面

去进行修改。因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方

便性。

10)如何进行E-R模型到关系模型的转换?

规则1(实体类型的转换):将每个实体类型转换成一个关系模式,实体的属性即为关系模式的属性,实体标识符即为关系模式的键。

规则2(二元联系类型的转换)

●若实体间联系是1:1:隐含在实体对应的关系中;

●若实体间联系是1:N:隐含在实体对应的关系中;

●若实体间联系是M:N:直接用关系表示。

11)界面设计应该遵循什么原则?

1)置用户于控制之下:以不强迫用户进入不必要的或不希望的动作的方式来定义交互

模式;提供灵活的交互;允许用户交互可以被中断和撤销;当技能级别增长时可以

使交互流水化并允许定制交互;使用户隔离内部技术细节;设计应允许用户和出现

在屏幕上的对象直接交互。

2)减少用户的记忆负担:减少对短期记忆的要求;建立有意义的缺省;定义直觉性的

捷径;界面的视觉布局应该基于真实世界的隐喻;以不断进展的方式揭示信息。

3)保持界面一致:允许用户将当前任务放入有意义的语境;在应用系列内保持一致性;

如果过去的交互模式已经建立起了用户期望,不要改变它,除非有不得已的理由。

12)构件设计有哪些设计工具?

流程图、N-S图、PAD图、决策表与决策树、伪代码

13)利用Visio实现3.5。

4练习题

1)程序设计语言的发展经历了哪几个阶段?每个阶段语言的特点是什么?

1.机器语言是计算机可以直接识别、执行的指令代码,它是计算机发展早期的语言。

由于机器指令直接操纵计算机硬件的执行,所以不同结构的计算机有不同的机器语

言。用机器语言编码时必须考虑到机器的实现细节,所以它的编程效率极低,而且

很难掌握。

2.汇编语言用一组助记符来代替机器语言中晦涩、难懂的二进制代码,使得代码比较

直观,易于程序员理解。在执行时,汇编语言必须由特定的翻译程序转化为机器语

言,才能由计算机执行。可以说,每种汇编语言都是支持这种语言的计算机独有的,所以它与机器语言一样都是“面向机器”的低级语言。由于汇编语言的抽象层次太

低,所以程序员在使用时需要考虑大量的机器细节。

3.高级语言出现于20世纪50年代,它不仅在语义上更易于程序员理解,而且在实现

上也不再依赖于特定的计算机硬件。它为程序员的编码工作提供了方便,同时大大

提高了软件的生产效率。

4.第四代语言是超高级语言,它是对数据处理和过程描述的更高级的抽象,一般由特

定的知识库和方法库支持,比如与数据库应用相关的查询语言,描述数据结构和处

理过程的图形语言等,它们的目的在于直接实现各种应用系统。

2)面向对象的高级语言中包含哪些基本概念?

封装、继承、多态

3) 你了解的程序设计语言都有哪些?

(1)Fortran语言

Fortran语言出现于1954年,是世界上最早的高级语言,广泛应用于科学和工程计

算领域。Fortran语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。

(2)Pascal语言

Pascal语言是最早的结构化编程语言,常用于算法和数据结构的描述。用Pascal 编写的程序有一种结构化的美感,学习Pascal语言有助于培养良好的程序设计风格和编程习惯。

(3)Basic语言

Basic相对于其他编程语言来说简单易用,并具有“人机会话”功能,是一种比较适合于初学者和爱好编程的非专业人士的语言。但是其简单与随意的特性也容易让使用者养成不好的编程习惯。

(4)Cobol语言

Cobol语言是最接近于自然语言的高级语言之一,它使用了300多个英文保留字,语法规则严格,程序通俗易懂,是一种功能很强而又极为冗长的语言。常用于商业数据处理等领域。

(5)C语言

C语言兼顾高级语言和汇编语言的特点,灵活性很好,效率高,常用来开发比较底层的软件。例如,Linux操作系统就是用C语言编写的。要充分掌握该语言需要一定的计算机基础和编程经验,所以虽然现在很多高校选择C语言作为入门编程语言,但它并不十分适合初学者。

(6)C++语言

C++语言在C语言的基础上加入了面向对象的特性,既支持结构化编程又支持面向对象编程使其应用领域十分广泛,是现在使用较多的语言之一。

(7)Java语言

Java语言是现在非常流行的一种编程语言,具有平台无关性、安全性、面向对象、分布式、健壮性等特点。Java分为3个体系JavaSE、JavaEE和JavaME,适合企业应用程序和各种网络程序的开发。

(8)Delphi语言

Delphi语言以Pascal语言为基础,扩充了面向对象的能力,并加入了可视化的开发手段,用于开发Windows环境下的应用程序。

(9)C#语言

C#语言是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,它充分借鉴了C++、Java和Delphi的优点,是现在微软.NET Windows网络框架的主角。

(10)标记语言

标记语言主要用来描述网页的数据和格式,没有传统编程语言提供的控制结构和复杂的数据结构定义。例如,超文本标记语言(HTML)和可扩展标记语言(XML)。

(11)脚本语言

脚本语言是可以被另一种语言解释执行的语言。脚本语言假设已经存在了一系列由其他语言写成的有用的组件,它不是为了实现最原始的应用,而主要是把组件连接在一起,实现某一特定领域功能。例如,Shell、Perl、JSP等。这种领域专业语言的应用是未来编程的发展方向之一。

4)要形成良好的编码风格可以从哪些方面做起?

1.版权和版本声明

2.程序版式

3.注释

4.命名规则

5.数据说明

6.代码构造

7.输入输出

8.效率

5)使用Microsoft Visual Studio 2010和C#对求两个整数的最大公约数进行编程。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace GreatestCommonDivisor

{

class Program

{

//辗转相除法

public static int calculate(int x, int y)

{

if (x < y)

{

return calculate1(y, x);

}

return calculate1(x, y);

}

// x is no less than y

private static int calculate1(int x, int y)

{

if (x % y != 0)

{

return calculate1(y, x % y);

}

return y;

}

}

}

5练习题

1)软件测试的原则有哪些?

1.完全测试是不可能的。

2.测试中有风险存在。

3.软件测试只能表明缺陷的存在,而不能证明产品已经没有缺陷。

4.软件产品中所存在的错误数与已发现的错误数成正比。

5.要避免软件测试的杀虫剂现象。

6.在设计测试用例时,应包括输入数据和预期的输出结果两个部分,并且,输入

数据不仅应该包括合法的情况,还应该包括非法的输入情况。

7.要集中测试容易出错或错误较多的模块。

8.应该长期保留所有的测试用例。

9.使开发人员和测试人员分立,即软件的开发工作和测试工作不能由同一部分人

来完成。

10.测试工作应该尽早开始,并且贯穿于整个开发过程中。

2)比较软件测试的V模型和W模型。

V模型中,描述了基本的开发过程和测试行为。它的价值在于非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系。

在V模型的基础上,增加开发阶段的同步测试,就是W模型。在W模型中测试与开发同步进行,这样有利于尽早地发现问题。

3)软件测试的步骤,和每一步骤中需要进行的活动是什么?

测试工作按5个步骤进行,即单元测试、集成测试、确认测试、系统测试和验

收测试。

1.单元测试又称模块测试,是针对软件设计的最小单位进行正确性检验的测试工

作。目的是检查每个程序单元能够正确实现详细设计说明中的模块功能、性能、

接口和设计约束等要求,发现各模块内部可能存在的各种错误。单元测试需要

从程序的内部结构出发设计测试用例。多个模块可以平行的独立进行单元测

试。

2.集成测试也叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序

的、递增的测试。目的是检验程序单元或部件的接口关系,逐步集成为符合概

要设计要求的程序部件或整个系统。集成测试有自顶向下和自底向上两种方

式。

3.确认测试是检查已实现的软件是否满足了需求规格说明书中确定了的各种需

求,以及软件配置是否完全、正确。

4.系统测试把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在

一起进行测试。

5.验收测试由用户参与,对系统做交付使用前的验收。分为α测试和β测试。α

测试指的是由用户、测试人员、开发人员等共同参与的内部测试,而β测试指

的是完全交给最终用户的测试。

4)利用等价类划分技术为下面的NextDate问题设计测试用例:

输入三个变量(年、月、日),函数返回输入日期后面的那个日期。

1≤月份≤12 1≤日期≤31 1812≤年≤2012

有效等价类的测试用例

5)利用基本路径测试技术为以下一段程序设计测试用例:

while(a >0)

{

a = a – 1;

if(b <0 || c >=1)

{

c = c – b;

}

else

c = c + b;

}

a =

b + c;

设计测试用例:

输入数据a=0 b=3 c=3;预期结果a=6 b=3 c=3

输入数据a=1 b=3 c=3; 预期结果a=3 b=3 c=0

输入数据a=1 b=3 c=0; 预期结果a= 6 b=3 c=3

举例说明软件维护的副作用。

软件维护是存在风险的。对原有软件产品的一个微小的改动都有可能引入新的错误,产生意想不到的后果。软件维护的副作用主要有三类,包括修改代码的副作用、修改数据的副作用和修改文档的副作用。

7) 实现一个简单的求和函数,并用Visual Studio 2010的Unit test工具对该函数进行测试。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Sum

{

class Arithmetic

{

public int sum(int a, int b)

{

return a + b;

}

}

}

using Sum;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject1

{

///

///这是ArithmeticTest 的测试类,旨在

///包含所有ArithmeticTest 单元测试

///

[TestClass()]

public class ArithmeticTest

{

private TestContext testContextInstance;

///

///获取或设置测试上下文,上下文提供

///有关当前测试运行及其功能的信息。

///

public TestContext TestContext

{

get

{

return testContextInstance;

}

set

{

testContextInstance = value;

}

}

#region 附加测试属性

//

//编写测试时,还可使用以下属性:

//

//使用ClassInitialize 在运行类中的第一个测试前先运行代码

//[ClassInitialize()]

//public static void MyClassInitialize(TestContext testContext)

//{

//}

//

//使用ClassCleanup 在运行完类中的所有测试后再运行代码

//[ClassCleanup()]

//public static void MyClassCleanup()

//{

//}

//

//使用TestInitialize 在运行每个测试前先运行代码

//[TestInitialize()]

//public void MyTestInitialize()

//{

//}

//

//使用TestCleanup 在运行完每个测试后运行代码

//[TestCleanup()]

//public void MyTestCleanup()

//{

//}

//

#endregion

///

///sum 的测试

///

[TestMethod()]

public void sumTest()

{

Arithmetic target = new Arithmetic(); // TODO: 初始化为适当的值int a = 50; // TODO: 初始化为适当的值

int b = 98; // TODO: 初始化为适当的值

int expected = 148; // TODO: 初始化为适当的值

int actual;

actual = target.sum(a, b);

Assert.AreEqual(expected, actual);

//Assert.Inconclusive("验证此测试方法的正确性。");

}

///

///Arithmetic 构造函数的测试

软件工程作业及参考答案(版)

软件危机与软件工程 3. 软件工程方法学的研究内容包含软件开发技术和软件工程管理两部分, 其期望达到的最终目标是 ()。 A ?消除软件危机 B ?软件开发工程化 C ?程序设计自动化 D ?实现软件重用 4?软件工程学中除重视软件开发技术的研究外,另一重要组成内容是软件的( )。 A .工程管理 B .成本核算 C .人员培训 D .工具开发 5?软件计划是软件开发的早期和重要阶段,此阶段要求交互和配合的是( )。 A ?设计人员和用户 B ?分析人员和用户 C .分析人员和设计人员 D .编码人员和用户 6 .软件工程的结构化生命周期方法是将软件开发的全过程划分为相互独立而又相互依存的阶段,软件的 逻辑模型形成 于( )。 A .开发阶段 B .计划阶段 C .分析阶段 D .设计阶段 7 .在软件工程中,软件生存期可分为计划、开发以及维护三个阶段,每个时期又分为若干更小的阶段。 通常,计划时期包括问题定义、可行性研究和 ①,开发时期包括 ②、详细设计、编码以及 ③。 ① A . 需求分析 B . 可行性研究 C . 经费预算 D . 质量保证 ② A . 需求分析 B . 可行性研究 C 总体设计 D 模块化设计 ③ A . 文档编制 B . 运行维护 C . 测试 D . 验收 &软件开发中常采用的生命周期方法,由于其特征而一般称其为() A .层次模型 B .瀑布模型 C .螺旋模型 D .对象模型 9.描述软件生存周期的瀑布模型包括计划、 (A ) 、设计、编码、测试、维护等阶段。其中,设计阶段又可 以分成(B )和(C )两个步骤。 A :①需求分析 ②可行性研究 ③需求调查 ④问题定义 B, C :①方案设计 ②代码设计 ③概要(总体)设计 ④数据设计 ⑤详细设计 10.什么是软件危机?软件危机产生的原因? ".生命周期阶段的划分?每个阶段的任务? 可行性研究 软件工程 1软件危机是指在开发和( A .运行 B .设计 2 ?造成软件危机的原因是: A. 用户使用不当 C .硬件不可靠 )过程中所遇到的一系列严重问题。 B .对软件的错误认识 D ?缺乏好的开发方法和手段

软件工程作业(答案参考)

软件工程第一次作业 1)软件工程适用范围? 答:软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。 2)软件工程如何控制系统开发的复杂性的? 答:可理解性(understandability)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。 3)以你的经验,举例说明一个成熟的软件通常采用什么方法来适应现实世界的变化的?答:以猎豹游览器为例,开始软件投入市场公测,软件自带收集错误报告的程式,当遇到问题软件错误,会将相关信息反馈到接受错误信息的服务器,已方便程序员及时发现问题加以修复,修复完成后提供程序更新,循环此法提供软件运行稳定性,另外还有用户反馈的相关功能,对软件的建议也会收集到服务器,按实用性需求程序员可在原有程序上开发调整更适合用户使用的程序。 4)假设某软件公司,能为同一个用户开发两个不同层次的软件:一个层次的软件功能非常强大,在满足用户所有需求的基础上,还能提供大大超过用户需求的其他更多更强的功能;另一个层次的软件仅仅能满足用户需求,但没有提供其他额外的功能。请问如果你是项目负责人,你会选择为客户开发那个层次的软件? 答:我会选择仅仅满足用户需求的软件。因为太多的功能,相对于非专业的人员,在用户体验上可能会造成困扰,太多的功能会导致难以操作。而且功能强大的软件还会给用户费用上带来不必要的投入,软件是以人为本,方便用户工作,达到提高工作效率的目的。若然日后此用户需要更多功能的时候,我们还是可以向其软件公司提供升级功能解决用户需求。

软件工程概论课后答案解析

第1章软件与软件工程的概念 1、1 举出您所知道的应用软件的例子。 办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1、2 认为“软件就就是程序,软件开发就就是编程序。”这种观点就是否正确?为什么? 认为“软件就就是程序,软件开发就就是编程序。”这种观点就是错误的。 首先,软件就是计算机系统中与硬件相互依存的另一部分,它就是包括程序,数据及其相关文档的完整集合,程序只就是软件的组成部分之一;其次,在软件开发中,编程只就是软件开发过程的一个阶段。 1、3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么? 可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1、4 什么就是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:软件危机就是指在计算机软件的开发与维护过程中所遇到的一系列严重问题。 典型表现: (1)对软件开发成本与进度的估计常常很不准确。 (2)用户对“已完成的”软件系统不满意的现象经常发生。 (3)软件产品的质量往往靠不住。 (4)软件常常就是不可维护的。 (5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年上升。 (7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅 速普及深入的趋势。 产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验与有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。 (4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技 术问题,更重要的就是必须有科学严格的管理。 (5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。

软件工程课后习题参考答案

1.简述软件开发的本质。 答:软件开发的本质就是实现问题空间的概念和处理逻辑到解空间的概念和处理逻辑之间的映射。P19 2.简述实施软件开发的基本途径。 答:实施软件开发的基本途径是系统建模。所谓系统建模,是指运用所掌握的知识,通过抽象,给出该系统的一个结构——系统模型。P19 3.简述何谓模型以及软件开发中所涉及的模型。 答:模型是一个抽象。该抽象是在意图所确定的角度和抽象层次对物理系统的一个描述,描述其中的成分和成分之间所具有的特定语义的关系,还包括对该系统边界的描述。 软件开发中所涉及的模型可分为两大类,一类称为概念模型,描述了系统是什么;另一类统称为软件模型,描述了实现概念模型的软件解决方案。 4.简述软件开发所涉及的两大类技术。 答:软件开发所涉及的两大类技术为:一是求解软件的开发逻辑,二是求解软件的开发手段。 5、简述需求与需求规约的基本性质。 答:需求的基本性质:1) 必要的,该需求是用户所要求的。2)无歧义的,该需求只能用一种方式解释。3)可测的,该需求是可进行测试的。4)可跟踪的,该需求可从一个开发阶段跟踪到另一个阶段。5)可测量的,该需求是可测量的。 需求规约的基本性质:1)重要性和稳定性程度:按需求的重要性和稳定性,对需求进行分级。2)可修改的:在不过多地影响其他需求的前提下,可以容易地修改一个单一需求。 3)完整的:没有被遗漏的需求。4)一致的:不存在互斥的需求。 6、简述软件需求的分类。

答:软件需求可以分为两大类:一类是功能需求,一类是非公能需求,而非公能需求可 7、举例说明功能需求和非功能需求之间的基本关系。 答: 非功能需求可作用于一个或多个功能需求,例如 非功能需求可作用于一个或多个功能需求 其中,非功能需求1作用于功能需求1和功能需求3等;非功能需求2作用于功能需求2等。P24 8、有哪几种常用的初始需求发现技术 答:有5种常用的需求发现技术:自悟、交谈、观察、小组会和提炼。P26 9、简述需求规约的3种基本形式。 (1) 非形式化的需求规约。非形式化的需求规约即以一种自然语言来表达需求规约,如同使用一种自然语言写了一篇文章。(2) 半形式化的需求规约。半形式化的需求规约即以半形式化符号体系(包括术语表、标准化的表达格式等)来表达需求规约。(3)形式化的需求规约。形式化的需求规约即以一种基于良构数学概念的符号体系来编制需求规约,一般往往伴有解释性注释的支持。 P29 10、简述软件需求规约的内容和作用。 答:软件需求规约的内容有:引言、总体描述、特定需求、附录、索引。P28 需求规约的作用可概括为以下4点:1)需求规约是软件开发组织和用户之间一份事实上的技术合同书,是产品功能及其环境的体现。2)对于项目的其余大多数工作,需求规约是一个管理控制点。3)对于产品/系统的设计,需求规约是一个正式的、受控的起始点。4)需求规约是创建产品验收测试计划和用户指南的基础。P31 11、简述需求规约在项目开发中的基本作用。 答:需求规约的作用可概括为以下4点:1)需求规约是软件开发组织和用户之间一份事实上的技术合同书,是产品功能及其环境的体现。2)对于项目的其余大多数工作,需求

软件工程部分课后练习题答案

第一章 1.计算机系统是由计算机硬件系统和软件系统这两个密不可分的部分组成的。 2.计算机软件系统通过运行程序来实现各种不同应用,包括用户为自己的特定目的编写的程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等。 3.在软件工程学中,软件开发技术包括软件开发方法学、软件工具和软件工程环境。 4.在软件工程层次结构中,包括工具层、方法层、过程、技术层和质量保证层。 5.在面向对象概念中,消息传递是其与外部世界相互关联的唯一途径。 第三章 1.软件需求分析,可以把软件功能和性能的总体概念描述为具体的软件需求规格说明,进而建立软件开发的基础。 2.软件需求工作基本上包括收集用户、市场等方面对项目的需要,经过分析建立解题模型,细化模型,抽取需求。 3.结构化分析方法的基本步骤是采用由顶向下对系统进行功能分解,画出分层数据流图;由后向前定义系统的数据和加工,绘制数据词典和加工说明;最终写出软件需求和规格说明书。 4.面向对象分析方法总是从理解系统的“使用实例”开始,基本步骤是:定义系统的用例,在领域分析的基础上建立问题域的类(对象模型),然后开始建立对象——关系和对象——行为模型。 5.需求分析评审过程由以下5个步骤组成:规划、准备、召开审查大会、修改缺陷、重审。 第四章 1.与软件需求分析一样,软件设计也有两种主要设计方法:以结构化设计为基础的结构化软件设计和面向对象方法指导的面向对象软件设计。 2.传统的软件设计任务通常分两个阶段完成。第一个阶段是概要设计,包括体系结构设计

和接口设计,并编写概要设计文档;第二阶段是详细设计,其任务是确定各个软件的数据结构和操作,产生描述各软件组件的详细设计文档。 3.结构化的软件设计方法是一种面向数据流的设计方法,在面向数据流的方法中,数据流是考虑一切问题的出发点。 4.在数据流图中所代表的结构化设计模型中,所有系统均可纳入两种典型的形式,因此系统结构图也有两种类型:变换型系统结构图,事务型系统结构图。 5.Jackson表示法包括图形描述(Jackson图)和文本描述(Jackson伪代码)两种形式。 第五章 1.与结构化设计一样,面向对象设计也是将分析阶段所建立的分析模型转变为软件设计模型,应用数据设计(对象属性设计)、接口设计(消息模型开发)以及过程设计(子系统级设计)。 2.当两个子系统相互通信时,可以建立客户机/服务器连接或端对端连接。 3.系统设计不仅包括主要的业务需求子系统设计,还包括用户界面子系统设计、任务管理子系统设计、数据管理子系统设计。 4.对象设计强调从问题域的概念转换成计算机领域的概念,通过对象的描述、算法和数据结构设计、程序构件和接口,实现相关的类、关联、属性和操作。 5.在面向对象设计中系统设计的主要目标是表示软件体系结构。对象设计着重于对象及其交互的描述 第八章 1.软件程序测试的目的是发现程序中的错误,其主要任务是通过在计算机上执行程序,暴露

软件工程课后作业

路松峰_ 2018-07-29 10:32:40 一、简答题 1.什么是软件工程 软件工程是关于软件生产的各个方面的工程学科。 二、判断题 1、软件危机的主要表现是软件需求增加,软件价格上升。 / 正确 2、软件就是程序,编写软件就是编写程序。 错误 三、选择题 1、用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为( A )工具。 A. CASE C. CAM D. CAD 2、在下列选项中,( C )不是软件的特征。 A.系统性与复制性 B.可靠性与一致性 C.有形性与可控性 D.抽象性与智能性 ) 3、软件工程的三要素是( B ) A.技术、方法和工具 B.方法、工具和过程 C. 方法、对象和类 D.过程、模型和方法

第2次作业 路松峰_ 2018-07-29 10:33:32 一、简答题 … 1、快速原型模型的主要优点是什么 软件产品的开发基本上是线性顺序进行的。 2、什么是模型 模型是认识客观事物时,用文字、符号或者图表等进行简化问题描述的一种方式。 二、判断题 1、在软件开发中采用原型系统策略的主要困难是成本问题。 正确 2、软件过程改进也是软件工程的范畴。 · 正确 三、选择题 1、包含风险分析的软件工程模型是( D )。 A.喷泉模型 B.瀑布模型 C.增量模型 D.螺旋模型 2、软件过程是( C )。 A.特定的开发模型 B.一种软件求解的计算逻辑 C.软件开发活动的集合 D.软件生命周期模型 3、CMM模型将软件过程的成熟度分为5个等级。在(B )使用定量分析来不断地改进和管理软件过程。

… 第3次作业 路松峰_ 2018-07-29 10:34:34 一、简答题 1、需求分析有哪三种方法 面向功能分析、面向数据分析、面向对象分析 ) 2、什么是面向数据结构方法 面向数据结构方法是一类侧重从数据结构方面去分析和表达软件需求,进行软件设计的开发方法。该方法从数据结构入手,分析信息结构,并用数据结构图来表示,再在此基础上进行需求分析,进而导出软件的结构。 二、判断题 1、需求评审人员主要由开发人员组成,一般不包括用户。 错误 2、非功能需求是从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的要求。正确 三、选择题 ;

软件工程导论课后习题答案

第一章 一、什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。 软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。 (2) 用户对已完成的软件不满意的现象时有发生。 (3) 软件产品的质量往往是靠不住的。(4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。 (6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。 (7) 开发生产率提高的速度远跟不上计算机应用普及的需求。 软件危机出现的原因: (1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。 (2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。 (3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。 二、假设自己是一家软件公司的总工程师,当把图给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他? 答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改, 不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是在引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是 整体构架的错误。 三、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机? 1993年IEEE的定义:软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。 软件工程的本质特征: (1) 软件工程关注于大型程序(软件系统)的构造(2) 软件工程的中心课题是分解问题,控制复杂性(3) 软件是经 常变化的,开发过程中必须考虑软件将来可能的变化 (4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具 (5) 和谐地合作是开发软件的关键(6) 软件必须有效地支持它的用户 (7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人(完成一些工作)消除软件危机的途径: (1) 对计算机软件有一个正确的认识(软件≠程序) (2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目 (3) 推广使用在实践中总结出来的开发软件的成功技术和方法 (4) 开发和使用更好的软件工具 四、简述结构化范型和面向对象范型的要点,并分析他们的优缺点。 1. 传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。 2. 面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。 五、1-5 根据历史数据可以做出如下的假设: 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=×(美分/位) 如果计算机字长为16位,则存储器价格下降的趋势为:P2=×(美元/字) 在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。

软件工程课后题答案

附加题: 1、对下列子程序进行调试: procedure example(y,z: real; var x: real) begin if (y>1) and (z=0) then x:=x/y; if (y=2) or (x=l) then x:=x+l; end. 该子程序接受x, y, z的值,并将计算结果x的值返回给调用程序。答题要求: (1)画出流程图。 (2)用白盒法设计测试用例,并写出它所满足的是何种覆盖标准、预期结果以及路径。 答:(1)流程图 (2)用白盒法中条件组合覆盖设计测试用例: ①y=2, z=0, x=4; ②y=2, z=1, x=1; ③y=1, z=0, x=2; ④y=1, z=1, x=1. 2、某报表处理系统要求用户输入处理报表的日期,日期限制在2003年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。现要求用黑盒测试法中的边界值法写出测试用例。 答: 输入条件测试用例说明测试数据 报表日期的1个数字字符 5 类型及长度5个数字字符20035 7个数字字符2003005 有1个非数字字符2003.5 全部是非数字字符MAY--- 6个数字字符200305 日期范围在有效范围200301 边界上选取200812 数据200300

200813 月份范围月份为1月200301 月份为12月200312 月份<1 200300 月份>12 200313 3、对以下程序进行测试: PROCEDURE EX(A,B:REAL;VAR X:REAL); BEGIN IF(A=3)OR(B> 1)THEN X:=A×B IF(A>2)AND(B=0)THEN X:=A-3 END 先画出程序流程图。再按不同逻辑覆盖法设计一种(写出名称)测试数据。 答: 语句覆盖A=3 B=0 4、程序功能说明书指出,某程序的输入条件为:每个学生可以选修1至3门课程,试用黑盒法设计测试用例。 (1)按等价分类法设计测试用例(要求列出设计过程) (2)按边缘值分析法设计测试用例。 答: 1)合理等价类 选修1门 选修2门 选修3门 不合理等价类 没选课 选3门以上 测试用例 选修=2

软件工程导论课后题

1-5、根据历史数据可以做出如下的假设: 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×0.72Y-1974(美分/位) 如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048×0.72Y-1974(美元/字) 在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。 基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算: (1) 在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少? (2) 假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。(3) 假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。

2-4 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,请分层次地画出描述本系统功能的数据流图。 医院对患者8监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。 从问题陈述可知,本系统数据源点是“病人”和“护士”,他们分别提供生理信号和要求病情报告的信息。进一步分析问题陈述,从系统应该“定时记录病人情况以形成患者日志”这项要求可以想到,还应该有一个提供日期和时间信息的“时钟”作为数据源点。 从问题陈述容易看出,本系统的数据终点是接收警告信息和病情报告的护士。 系统对病人生理信号的处理功能主要是“接收信号”、“分析信号”和“产生警告信息”。 此外,系统还应该具有“定时取样生理信号”、“更新日志”和“产生病情报告”的功能。 为了分析病人生理信号是否超出了医生规定的安全范围,应该存储“患者安全范围”信息。此外,定时记录病人生理信号所形成的“患者日志”,显然也是一个数据存储。

软件工程习题答案参考

软件工程 绪论 1.什么是软件危机为什么会产生软件危机 答:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。(1).软件维护费用急剧上升,直接威胁计算机应用的夸大。 (2).软件生产技术进步缓慢 2.什么是软件生产工程化工程化生产方法与早期的程序设计方法主 要差别在哪里 答:结构化程序设计地出现,使许多产业界认识认识到必须把软件生产从个人化方式改变为工程化。采用工程的概念、原理、技术和方法开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程,同时这也是工程化生产方法。 3.分别说明(1)软件开发方法与开发工具;(2)软件技术与软件管 理的相互关系。 答:(1)工具和方法,是软件开发技术的两大支柱,它们密切相关。当一种方法提出来并证明有效后,往往随之研制出相应的工具,来帮助实现和推行这种方法。新方法在推行初期,总有人不愿接受和采用。若将新方法融合于工具之中,使人们通过使用工具来了解新方法,就能更快促进新方法的推广。(2)在工业生产中,即使有先进的技术和设备,管理不善的企业也不能获得良好的效益。软件在生产中不能按质按时完成计划,管理混乱往往是其中的重要原因。所以对于

一个理想的软件工程环境,应该同时具备技术和管理两个方面。 4.试从你的亲身实践,谈谈软件工具在软件开发中的作用。 答:用C++开发一个软件,是校园一卡通的模块。首先,要在编辑程序支持下在计算机中输入源程序。然后编译程序,把源程序翻译成目标程序。如果发现错误,就重新调入编辑程序对源程序进行修改。编译通过后,再调用连接程序吧所有通过了编译目标程序连同与之有关的程序连接起来,构成一个能在计算机上运行的可执行软件。编译程序,编辑程序,连接程序以及支持他们的计算机操作系统,都属于软件工具。离开这些工具,软件开发就是去了支持,变得十分困难和低效,甚至不能运行。 5.什么是软件工程环境谈谈你对环境重要性的认识。答:方法与工具相结合,再加上配套的软、硬件支持就形成环境。例如在批处理时代,用户开发的程序是分批送入计算机中心的计算机的,有了错误,就得下机修改。程序员对自己写的程序只能继续地跟踪,思路经常被迫中断,效率难于提高。分时系统的使用,使开发人员从此能在自己的终端上跟踪程序的开发,仅此一点,就明显提高了开发的效率。 6. 何谓面向对象软件工程简述它与传统软件工程在各型软件开发中的作用。 答:以面向对象程序设计为基础。 7. 软件按规模大小可分成哪几类简述软件工程中各型软件开发中的作用。 答:按规模分为极小、小、中、大、甚大、极大。(1)中小型软件:

(完整版)《软件工程》作业及答案

t h e i 《软件工程》作业及答案 1-1 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?答: 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产 率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 产生软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系 统中的逻辑部件而不是物理部件。管理和控制软件开发过程相当困难。 软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上 升。目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念, 在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。1-2 假设你是一家软件公司的总工程师,当你把图1.1给手下的软件 工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能 在设计阶段清除它呢?”你怎么反驳他? 1-3 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机? 答: 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。 软件工程本质特性:1、软件工程关注于大型程序的构造;2、软件工程的中心课题是控制复杂性;3、软件经常变化;4、开发软件的效率非常重要;5、和谐地合作是开发软件的关键;6、软件必须有效地支持它的用户;7、在软件工程领域中是由具有一种文化背景的人替具 有另一种文化背景的人创造产品。 消除软件危机的途径:为了消除软件危机,首先应该对计算机软件有一个正确的认识。必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功 的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在 计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。1-6 什么是软件过程?它与软件工程方法学有何关系? 答: 软件过程是为了获得高质量软件所需要完成的一系列任务的框架, 它规定了完成各项任务的工作步骤。软件工程方法学包含软件过程。1-7 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增 量模型和螺旋模型的优缺点,说明每种模型的适用范围。 答: 生命周期模型简洁地描述软件过程,规定了把生命周期划分成哪些阶段及各个阶段执行顺序。 瀑布模型历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发出的软件产品可能并不是用户 真正需要的。 快速原型模型正是为了克服瀑布模型的缺点而提出来的。它通过快速构建起一个可在计算机上运行的原型系统,让用户试用原型并收集用 户反馈意见的办法,获取用户的真实需求。 增量模型具有可在软件开发的早期阶段使投资获得明显回报和较易维护的优点,但是,要求软件具有开放的结构是使用这种模型时固有的困难。 风险驱动的螺旋模型适用于内部开发的大型软件项目,但是,只有在开发人员具有风 险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。 快速原型模型:适合小型软件; 螺旋模型:适合内部开发的大规模软件项目。2-1 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面 研究目标系统的可行性? 答: 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定 问题是否能够解决。至少应该从下述三方面研究每种解法的可行性:(1)技术可行性;(2)经济可行性;(3)操作可行性。 2-5 北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。请用2.5.2小节讲述的定义数据的方法,定义上述的电话号码。答: 电话号码=[校内电话|本市电话|外地电话] 非零数字字符=[1|2|3|4|5|6|7|8|9] 校内电话=非零数字字符+3{数字}3本市电话=0+非零数字字符+7{数字}7外地电话=0+区码+非零数字字符+7{数字}73-1 为什么要进行需求分析?通常对软件系统有哪些需求?答: 为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论我们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。确定对系统的综合要求:1、功能需求;2、性能需求;3、可靠性和可用性需求;4、出错处理需求;5、接口需求;6、约束;7、逆向需求;8、将来可以提出的要求,分析系统的数据要求。3-2 怎样与用户有效地沟通以获取用户的真实需求? 答: 与用户沟通获取需求的方法:访谈;面向数据流自顶向下求精;简易的应用规格说明技术;快速建立软件原型 4-2 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应 遵守哪些准则? 答: 在开发大型软件系统的过程中应该使用形式化说明技术。应用形式化方法的准则:(1)应该选用适当的表示方法。(2)应该形 式化,但不要过分形式化。 (3)应该估算成本。(4)应该有形式化方法顾问随时提供咨询。 (5)不应该放弃传统的开发方法。(6)应该建立详尽的文档。(7)不应该放弃质量标准。(8)不应该盲目依赖形式化方法。(9)应该测试、测试再测试。(10)应该重用 7-8 对一个包含10000条机器指令的程序进行一个月集成测试后,总 共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了 25个错误(第二个月改正了10个错误),MTTF=15h 。要求:(1) 根据上述数据确定MTTF 与测试时间之间的函数关系,画出 MTTF 与测试时间τ的关系曲线。在画这条曲线时做了什么假设?(2) 为做到MTTF=100h ,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中? 答: (1)所做假设:1)单位长度里的错误数近似为常数;2)失效率正比于软件中剩余的错误数,而平均无故障时间与剩余的错误数成反比. 3)发现的每一个错误都立即正确地改正了.(2)由Shooman 公式:MTTF=I T /(K*(E T -E C (T))) 其中,I T =104,MTTF 1=10,n 1=15,MTTF 2=15,n 2=25。得:MTTF 1=I T /(K*(E T -E C (T 1)))10=10000/(K*(E T -15))MTTF 2=I T /(K*(E T -E C (T 2)))15=10000/(K*(E T -25)) (1)解得程序中固有的错误总数E T =45,此外K=100/3。(2)设MTTF=100,有 100=10000/((100/3)*(45-x))

软件工程概述习题及答案

第一章软件工程概述 一. 填空题 1. 软件的发展过程, , , . 2. 基于软件的工作方式,软件可以划分为, , , . 3. 在软件发展的第四阶段计算机体系结构迅速地从环境转变为环境. 4. 在计算机系统中,软件是, 而硬件是. 5. 软件危机是在软件发展第阶段末期,随着第代计算机和诞而产生。 6. 文档一般可分为面向的文档,面向的文档,面向的文档和面向的文档。 7. 软件生存期若分为三个大的阶段,,. 8. 它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。 9. 在软件的生存周期开发阶段要经三个步骤, , 。 10. 瀑布模型是以文档为驱动、适合于的软件项目的模型。 11. 螺旋模型将开发过程分为几个螺旋周期,在每个螺旋周期内为,, 和四个步骤。 12. 软件开发的螺旋模型综合了瀑布模型和演化模型的优点,还增加了____。采用螺旋模型时,软件开发沿着螺线自内向外旋转,每转一圈都要对____ 进行识别和分析,并采取相应的对策。螺旋线第一圈的开始点可能是一个____ 。从第二圈开始,一个新产品开发项目开始了,新产品的演化沿着螺旋线进行若干次迭代,一直运转到软件生命期结束。 13. 软件开发模型, , , , , . 14. 软件工程面临的问题有, , , . 15. 面向对象方法学把客观世界的事物或实体都看成对象,把对象作为分析设计的元素,把所有对象都划分成对象类,类可以派生和. 16.基于软件的功能划分可以把软件划分为, ,和。 17.计算机系统发展的早期所形成的一系列错误概念和做法,已经严重地阻碍了计算机软件的开发,甚至有的根本无法维护,只能提前报废,造成大量人力、物力的浪费,从而导致软件危机。为了研究解决的方法,计算机科学技术领域中的一门新兴的学科逐步形成了,这就是。18.软件工程是指导的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。 19.为了开发出低成本高质量的软件产品,软件工程学应遵守以下基本原则:, ,和, 。 20.原型模型是从需求分析开始。软件开发者和用户在一起定义,说明需求,并规划出定义的区域。然后快速设计软件中对用户/客户可见部分的表示。快速设计导致了原形的建造,原形由用户/客户评估,并进一步求精。

软件工程课后参考答案

第一章 1.1什么是计算机软件?软件的特点是什么? 计算机软件是指计算机系统中的程序及其文档 软件的特点: ●软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算。 ●软件是被开发的或被设计的,没有明显的制造过程,一旦开发成功,只需复制即可, 但其维护的工作量大。 ●软件的使用没有硬件那样的机械磨损和老化问题。 1.2简述软件的分类,并举例说明 1.系统软件 系统软件居于计算机系统中最接近硬件的一层,其他软件一般都通过系统软件发挥作用。例如:编译软件、操作系统。 2.支撑软件 支撑软件是支撑软件的开发和维护的软件。例如:数据库管理系统、网络软件、软件工具、软件开发环境。 3.应用软件 应用软件是特定应用领域专用的软件。例如:工程/科学计算机软件、嵌入式软件、产品线软件、Web应用软件、人工智能软件。 1.3简述软件语言的分类,并举例说明。 1.需求定义语言 是用于书写软件需求定义的语言。例如:PSL/PSA。 2.功能性语言 是用于书写软件功能规约的语言,通常又称为功能规约语言。例如:广谱语言、Z 语言。 3.设计性语言 是用于书写软件设计规约的语言。例如:PDL。 4.实现性语言 也称为程序设计语言,是用于书写计算机程序的语言。例如:C、java、PROLOG、FORTRAN、COBOL、Modula。 5.文档语言 是用于书写软件文档的语言。通常用自然语言或半形式化语言书写。 1.4什么是软件工程? 软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本为目的。 1.5简述软件工程的基本原则。 软件工程原则包括围绕工程设计、工程支持和工程管理所提出的以下4条基本原则。 1.选取适宜的开发模型 必须认识需求定义的易变性,采用适宜的开发模型,保证软件产品满足用户的要求。 2.采用合适的设计方法

【软件工程】作业与答案解析

《软件工程》作业 第一章 1.什么是软件危机,它有哪些典型表现? 答: 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。 软件危机典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 产生软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。 2.简述产生软件危机的原因和解决的思路。 答:软件危机产生的原因一方面与软件本身的特点有关,另一方面,是与已有软件开发、维护的方法不正确有密切关系。

解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。即采用工程化的原则和方法组织软件开发是摆脱软件危机的一个主要出路。 3.什么是软件工程?它有哪些本质特性? 答: 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。 软件工程本质特性:1、软件工程关注于大型程序的构造;2、软件工程的中心课题是控制复杂性;3、软件经常变化;4、开发软件的效率非常重要;5、和谐地合作是开发软件的关键;6、软件必须有效地支持它的用户;7、在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。 4.软件工程是如何用来消除软件危机的? 软件工程是从技术和管理两个方面来研究如何更好地开发和维护计算机软件,从源头上消除软件危机。 5.假设你是某软件开发企业的CEO,当你把教材P.4的图1.1给手下的软件工程师们看,同时告诉他们应及早发现并改正错误的重要性时,有人不以为然,认为要求在错误进入软件前就发现并清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么又如何能够在设计阶段就发现并清除呢?”那你应该如何说服? 首先要对错误造成工作的延误或一些问题表示歉意。错误是难免,关

软件工程概论课后习题答案

软件工程概论郑人杰等版 第1章软件与软件工程的概念 1.1 举出你所知道的应用软件的例子。 办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1.2 认为“软件就是程序,软件开发就是编程序。”这种观点是否正确?为什么? 认为“软件就是程序,软件开发就是编程序。”这种观点是错误的。 首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。 1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么? 可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现: (1)对软件开发成本和进度的估计常常很不准确。 (2)用户对“已完成的”软件系统不满意的现象经常发生。 (3)软件产品的质量往往靠不住。 (4)软件常常是不可维护的。 (5)软件通常没有适当的文档资料。 (6)软件成本在计算机系统总成本中所占的比例逐年上升。 (7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用 迅速普及深入的趋势。 产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。 (4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及 技术问题,更重要的是必须有科学严格的管理。

软件工程课后习题答案

软件工程课后习题答案 第一章 一、什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。 (2) 用户对已完成的软件不满意的现象时有发生。 (3) 软件产品的质量往往是靠不住的。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。

(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。 (7) 开发生产率提高的速度远跟不上计算机应用普及的需求。软件危机出现的原因: (1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。 (2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。 (3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。 二、假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他? 答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改, 不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是在引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。

相关文档