配色: 字号:
《软件工程》习题答案
2022-09-04 | 阅:  转:  |  分享 
  
1练习题



软件的特点有哪些?

软件是一种逻辑实体,具有抽象性。硬件是有形的设备,而软件不像硬件那样具有明显的可见性。人们可以把软件记录在介质上,但是却无法直观地观察到它的形态,而必须通过在计算机上实际地运行才能了解它的功能、性能及其他特性。

软件的生产与硬件的制造不同。它更多地渗透了人类的智能活动,是人类智力劳动的产物。软件是被开发或设计的,而不是传统意义上被制造的。软件成本集中于开发上,这意味着软件项目不能像制造项目那样管理。

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

软件的开发至今尚未完全摆脱手工艺的开发方式。在硬件世界,构件复用是工程过程的自然的一部分,而在软件世界,它是刚刚开始起步的事物。虽然软件产业正在向基于构件的组装前进,但大多数软件仍是定制的。

软件的开发和运行必须依附于特定的计算机系统环境。它不像有些设备一样,能够独立地工作,而是受到了物理硬件、网络配置、支撑软件等因素的制约。由此引发了软件的可移植性问题。



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



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





开发出来的软件产品不能满足用户的需求,即产品的功能或特性与需求不符。这主要是由于开发人员与用户之间不能充分有效的交流造成的,使得开发人员对用户需求的理解存在着差异;

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

软件质量难以得到保证,且难以发挥硬件潜能。开发团队缺少完善的软件质量评审体系以及科学的软件测试规程,使得最终的软件产品存在着诸多缺陷;

难以准确估计软件开发、维护的费用以及开发周期。往往软件产品不能在预算范围之内,按照计划完成开发。很多情况下,软件产品的开发周期或经费会大大超出预算;

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

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

软件文档不完备,并且存在着文档内容与软件产品不符的情况。软件文档是计算机软件的重要组成部分,它为在软件开发人员之间以及开发人员与用户之间信息的共享提供了重要的平台。软件文档的不完整和不一致的问题会给软件的开发和维护等工作带来很多麻烦。



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

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

将软件的周期划分为多个阶段,对各个阶段实行严格的项目管理。软件开发是一个漫长的过程,人们可以根据工作的特点或目标,把整个软件的开发周期划分为多个阶段,并为每个阶段制定分阶段的计划及验收标准,这样有益于对整个软件开发过程进行管理。在传统的软件工程中,软件开发的生存周期可以划分为可行性研究、需求分析、软件设计、软件实现、软件测试、产品验收和交付等阶段。

坚持进行阶段评审;

严格的贯彻与实施阶段评审制度可以帮助软件开发人员及时地发现错误并将其改正。在软件开发的过程中,错误发现的越晚,修复错误所要付出的代价就会越大。实施阶段评审,只有在本阶段的工作通过评审后,才能进入下一阶段的工作。

实行严格的产品控制;

在软件开发的过程中,用户需求很可能在不断的发生着变化。有些时候,即使用户需求没有改变,软件开发人员受到经验的限制以及与客户交流不充分的影响,也很难做到一次性获取到全部的正确的需求。可见,需求分析的工作应该贯穿到整个软件开发的生存周期内。在软件开发的整个过程中,需求的改变是不可避免的。当需求更新时,为了保证软件各个配置项的一致性,实施严格的版本控制是非常必要的。

采用现代程序设计技术;

现代的程序设计技术,比如面向对象,可以使开发出来的软件产品更易维护和修改,同时还能缩短开发的时间,并且更符合人们的思维逻辑。

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

虽然软件产品的可见性比较差,但是它的功能和质量应该能够被准确地审查和度量,这样才能有利于有效的项目管理。一般软件产品包括可以执行的源代码、一系列相应的文档和资源数据等。

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

开发小组成员的人数少有利于组内成员充分的交流,这是高效团队管理的重要因素。而高素质的开发小组成员是影响软件产品的质量和开发效率的重要因素。

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

随着计算机科学技术的发展,软件从业人员应该不断地总结经验并且主动学习新的软件技术,只有这样才能不落后于时代。



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

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



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

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

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

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

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

维护过程:定义维护者(即对软件产品进行维护服务的组织)的活动,这个过程包括系统移植和退役;

运行过程:定义运行者(即在计算机系统运行环境中向其用户提供运行服务的组织)的活动。



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

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

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

质量保证过程:定义客观地保证软件产品和过程符合规定要求、遵守已定计划的活动;

验证过程:定义需方、供方或独立的第三方对软件产品进行验证的活动,这些验证活动的深度由软件项目的性质决定;

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

联合评审过程:定义对某项活动的状态和产品进行评价的活动,这一过程可由任何双方共同采用,其中一方(评审方)评审另一方(被评方);

审计过程:定义对是否符合要求、计划和合同进行确定的过程,这个过程可由任何双方采用,其中一方(审计方)审计另一方(被审方)的软件产品或活动;

问题解决过程:定义对开发、操作、维护或其它过程中发现的问题(包括不一致性)进行分析和排除的过程。



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

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

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

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

过程改进过程:定义一个组织(即需方、供方、开发者、操作者、维护者或另一过程的管理者)为了建立、测量、控制和改进其生存周期过程需完成的基本活动。



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

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

在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。

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

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



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

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



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

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

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

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

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

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

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



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

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



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

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

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



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

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

对开发人员的素质要求较高。统一过程模型在实际实施过程中也存在很多的困难,包括:多层次持续的规划与评估;判断构架中关键风险的经验;高效率的验证和评价手段;多工种之间的频繁沟通;多版本工作产品的管理等。



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

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

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



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

1.分析设计工具

(1)MicrosoftVisio

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

(2)RationalRose

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

(3)Together

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

(4)PowerDesigner

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

(5)CASEStudio

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



2.程序开发工具

(1)MicrosoftVisualStudio

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

(2)Eclipse

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

(3)NetBeans

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

(4)Delphi

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

(5)DevC++

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



3.测试工具

(1)LoadRunner

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

(2)WinRnnner

MercuryInteractive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。

(3)Segue

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



4.配置管理工具

(1)MicrosoftVisualSourcesafe

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

(2)ClearCase

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



5.项目管理工具

(1)MicrosoftProject

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

(2)CA-SuperProject

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

(3)TimeLine

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



练习题



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

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



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

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

战略可行性研究主要从整体的角度考虑项目是否可行,例如提出的系统对组织目标具有怎样的贡献;新系统对目前的部门和组织结构有何影响;系统将以何种方式影响人力水平和现存雇员的技术;它对组织整个人员开发策略有何影响等等。

操作可行性研究主要考虑系统是否能够真正解决问题;是否系统一旦安装后,有足够的人力资源来运行系统;用户对新系统具有抵触情绪是否可能使操作不可行;人员的可行性等问题。

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

技术可行性研究主要考虑项目使用技术的成熟程度;与竞争者的技术相比,所采用技术的优势及缺陷;技术转换成本;技术发展趋势及所采用技术的发展前景;技术选择的制约条件等。

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

市场可行性研究主要包括研究市场发展历史与发展趋势,说明本产品处于市场的什么发展阶段;本产品和同类产品的价格分析;统计当前市场的总额、竞争对手所占的份额,分析本产品能占多少份额;产品消费群体特征、消费方式以及影响市场的因素分析;分析竞争对手的市场状况;分析竞争对手在研发、销售、资金、品牌等方面的实力;分析自己的实力等。

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

风险可行性研究主要是考虑项目在实施过程中可能遇到的各种风险因素,以及每种风险因素可能出现的概率和出险后造成的影响程度。



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

明确系统的目标

分析研究现行系统

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

获得并比较可行的方案

撰写可行性研究报告



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

可行性研究的目的是评估系统是否值得去开发,问题是否能够解决,而不是对需求进行定义。如果说可行性分析是要决定“做还是不做”,那么需求分析就是要回答“系统必须做什么”这个问题。



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

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



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

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

建立当前系统的“具体模型”:系统的“具体模型”就是现实环境的忠实写照,这样的表达与当前系统完全对应,因此用户容易理解。

抽象出当前系统的逻辑模型:分析系统的“具体模型”,抽象出其本质的因素,排除次要因素,获得当前系统的“逻辑模型”。

建立目标系统的逻辑模型:分析目标系统与当前系统逻辑上的差别,从而进一步明确目标系统“做什么”,建立目标系统的“逻辑模型”。

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



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

数据流图(DFD)

实体联系图(E-R)

控制流图(CFD)

状态迁移图(STD)



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





别名:学生资料

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



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

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



练习题



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

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



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

模块化

抽象化

逐步求精

信息隐藏



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

从来看,软件设计是对软件需求进行:数据设计、体系结构设计、接口设计、构件设计和部署设计。



从工程管理角度来看,软件设计分为概要设计和详细设计。前期进行概要设计,得到软件系统的基本框架。后期进行详细设计,明确系统内部的实现细节。



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

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



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

软件体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。

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



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

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

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

独立构件风格:这种风格的主要特点是:事件的触发者并不知道哪些构件会被这些事件影响,相互保持独立这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用;各个构件之间彼此无连接关系,各自独立存在,通过对事件的发布和注册实现关联包括进程通讯、事件系统。

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

仓库风格:仓库是存储和维护数据的中心场所。在仓库风格中存在两类构件,表示当前数据的状态的中心数据结构和一组对中心数据进行操作的独立构件。包括数据库系统、超文本系统、黑板系统。



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

面向数据流的设计方法就是通常所说的结构化设计方法,它以数据流图为基础,把DFD变换成软件结构的不同映射方法,以软件结构图(SC图)的形式表现。SC图描述软件系统的层次和分块结构关系,体现模块与模块之间的联系与通讯,从而表达软件的体系结构。

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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



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

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

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

需求分析;调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。

概念设计;对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—联系模型(E-R模型)方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。

逻辑设计;主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。

物理设计;根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设计的结果就是所谓“物理数据库”。

验证设计;在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应用任务来验证数据库设计的正确性和合理性。一般,一个大型数据库的设计过程往往需要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面去进行修改。因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方便性。



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

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

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

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

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

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



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

置用户于控制之下:以不强迫用户进入不必要的或不希望的动作的方式来定义交互模式;提供灵活的交互;允许用户交互可以被中断和撤销;当技能级别增长时可以使交互流水化并允许定制交互;使用户隔离内部技术细节;设计应允许用户和出现在屏幕上的对象直接交互。

减少用户的记忆负担:减少对短期记忆的要求;建立有意义的缺省;定义直觉性的捷径;界面的视觉布局应该基于真实世界的隐喻;以不断进展的方式揭示信息。

保持界面一致:允许用户将当前任务放入有意义的语境;在应用系列内保持一致性;如果过去的交互模式已经建立起了用户期望,不要改变它,除非有不得已的理由。



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

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

利用Visio实现3.5。



练习题



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

机器语言是计算机可以直接识别、执行的指令代码,它是计算机发展早期的语言。由于机器指令直接操纵计算机硬件的执行,所以不同结构的计算机有不同的机器语言。用机器语言编码时必须考虑到机器的实现细节,所以它的编程效率极低,而且很难掌握。

汇编语言用一组助记符来代替机器语言中晦涩、难懂的二进制代码,使得代码比较直观,易于程序员理解。在执行时,汇编语言必须由特定的翻译程序转化为机器语言,才能由计算机执行。可以说,每种汇编语言都是支持这种语言的计算机独有的,所以它与机器语言一样都是“面向机器”的低级语言。由于汇编语言的抽象层次太低,所以程序员在使用时需要考虑大量的机器细节。

高级语言出现于20世纪50年代,它不仅在语义上更易于程序员理解,而且在实现上也不再依赖于特定的计算机硬件。它为程序员的编码工作提供了方便,同时大大提高了软件的生产效率。

第四代语言是超高级语言,它是对数据处理和过程描述的更高级的抽象,一般由特定的知识库和方法库支持,比如与数据库应用相关的查询语言,描述数据结构和处理过程的图形语言等,它们的目的在于直接实现各种应用系统。



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

继承、多态

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

(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#语言是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言,它充分借鉴了C++、Java和Delphi的优点,是现在微软.NETWindows网络框架的主角。

(10)标记语言

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

(11)脚本语言

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



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

版权和版本声明

程序版式

注释

命名规则

数据说明

代码构造

输入输出

效率



使用MicrosoftVisualStudio和C#对求两个整数的最大公约数进行编程。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;



namespaceGreatestCommonDivisor

{

classProgram

{

//辗转相除法

publicstaticintcalculate(intx,inty)

{

if(x
{

returncalculate1(y,x);

}

returncalculate1(x,y);

}



//xisnolessthany

privatestaticintcalculate1(intx,inty)

{

if(x%y!=0)

{

returncalculate1(y,x%y);

}

returny;

}

}

}

5练习题



软件测试的原则有哪些?

完全测试是不可能的。

测试中有风险存在。

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

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

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

在设计测试用例时,应包括输入数据和预期的输出结果两个部分,并且,输入数据不仅应该包括合法的情况,还应该包括非法的输入情况。

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

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

使开发人员和测试人员分立,即软件的开发工作和测试工作不能由同一部分人来完成。

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



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

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

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



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

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

单元测试又称模块测试,是针对软件设计的最小单位进行正确性检验的测试工作。目的是检查每个程序单元能够正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,发现各模块内部可能存在的各种错误。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行的独立进行单元测试。

集成测试也叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。目的是检验程序单元或部件的接口关系,逐步集成为符合概要设计要求的程序部件或整个系统。集成测试有自顶向下和自底向上两种方式。

确认测试是检查已实现的软件是否满足了需求规格说明书中确定了的各种需求,以及软件配置是否完全、正确。

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

验收测试由用户参与,对系统做交付使用前的验收。分为α测试和β测试。α测试指的是由用户、测试人员、开发人员等共同参与的内部测试,而β测试指的是完全交给最终用户的测试。



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



1≤月份≤121≤日期≤311812≤年≤2012

















等价类划分表

输入及外部条件 有效等价类 等价类编号 无效等价类 等价类编号 日期的类型 数字字符 1 非数字字符 8 年 在1812与2012之间 2 小于1812 9 大于2012 10 月 在1与12之间 3 小于1 11 大于12 12 非闰年的2月 日在1与28之间 4 日小于1 13 日大于28 14 闰年的2月 日在1与29之间 5 日小于1 15 日大于29 16 月份为1月、3月、5月、7月、8月、10月、12月 日在1与31之间 6 日小于1 17 日大于31 18 月份为4月、6月、9月、11月 日在1与31之间 6 日小于1 19 日大于30 20

有效等价类的测试用例

序号 输入数据 预期输出 覆盖范围

(等价类编号) 年 月 日 年 月 日 1 2003 3 15 2003 3 16 1,2,3,6 2 2004 2 28 2004 2 29 1,2,3,5 3 1999 2 3 1999 2 4 1,2,3,4 4 1970 9 29 1970 9 30 1,2,3,7

无效等价类的测试用例

序号 输入数据 预期输出 覆盖范围

(等价类编号) 年 月 日 年 月 日 1 xy 5 9 输入无效 8 2 1700 4 8 输入无效 9 3 2300 11 1 输入无效 10 4 2005 0 11 输入无效 11 5 2009 14 25 输入无效 12 6 1989 2 -1 输入无效 13 7 1977 2 30 输入无效 14 8 2000 2 -2 输入无效 15 9 2008 2 34 输入无效 16 10 1956 10 0 输入无效 17 11 1974 8 78 输入无效 18 12 2007 9 -3 输入无效 19 13 1866 12 35 输入无效 20

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

while(a>0)

{

a=a–1;

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

{

c=c–b;

}

else

c=c+b;

}

a=b+c;





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

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

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





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

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





实现一个简单的求和函数,并用VisualStudio的Unittest工具对该函数进行测试。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;



namespaceSum

{

classArithmetic

{

publicintsum(inta,intb)

{

returna+b;

}

}

}







usingSum;

usingMicrosoft.VisualStudio.TestTools.UnitTesting;

namespaceTestProject1

{





///

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

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

///


[TestClass()]

publicclassArithmeticTest

{





privateTestContexttestContextInstance;



///

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

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

///


publicTestContextTestContext

{

get

{

returntestContextInstance;

}

set

{

testContextInstance=value;

}

}



#region附加测试属性

//

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

//

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

//[ClassInitialize()]

//publicstaticvoidMyClassInitialize(TestContexttestContext)

//{

//}

//

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

//[ClassCleanup()]

//publicstaticvoidMyClassCleanup()

//{

//}

//

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

//[TestInitialize()]

//publicvoidMyTestInitialize()

//{

//}

//

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

//[TestCleanup()]

//publicvoidMyTestCleanup()

//{

//}

//

#endregion





///

///sum的测试

///


[TestMethod()]

publicvoidsumTest()

{

Arithmetictarget=newArithmetic();//TODO:初始化为适当的值

inta=50;//TODO:初始化为适当的值

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

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

intactual;

actual=target.sum(a,b);

Assert.AreEqual(expected,actual);

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

}



///

///Arithmetic构造函数的测试

///


[TestMethod()]

publicvoidArithmeticConstructorTest()

{

Arithmetictarget=newArithmetic();

//Assert.Inconclusive("TODO:实现用来验证目标的代码");

}

}

}



6练习题



面向对象的思想有哪些基本概念?

面向对象:按人们认识客观世界的系统思维方式,采用基于对象的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。



对象:即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。在面向对象概念中我们把对象的内部状态称为属性,把运动规律称为方法或事件。如某架载客飞机作为一个具体事物,是一个对象。它的属性包括型号、运营公司、座位数量、航线、起飞时间、飞行状态等,而它的行为包括整修、滑跑、起飞、飞行、降落等。



类:类是具有相似内部状态和运动规律的实体的集合。类的概念来自于人们认识自然、认识社会的过程。在这一程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,我们从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类”;在演绎的过程中我们又把同类的事物,根据不同的特征分成不同的小类,这就是“分类”;对于一个具体的类,它有许多具体的个体,我们就管这些个体叫做“对象”。类的内部状态是指类集合中对象的共同状态;类的运动规律是指类集合中对象的共同运动规律。如所有的飞机可以归纳成一个类,它们共同的属性包括型号,飞行状态等,它们共同的行为包括起飞、飞行、降落等。



消息:消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、接收消息的对象、消息传递办法、消息内容、反馈。

包:现实世界中不同对象间的相互联系和相互作用构成了各种不同的系统,不同系统间的相互联系和相互作用构成了更庞大的系统,进而构成了整个世界。在面向对象概念中把这些系统称为包。



包的接口类:在系统间相互作用时为了蕴藏系统内部的具体实现,系统通过设立接口界面类或对象来与其他系统进行交互;让其他系统只看到是这个接口界面类或对象,这个类在面向对象中称为接口类。



与传统的软件工程方法相比,面向对象的软件工程方法有哪些优点?

符合人类的思维习惯。面向对象的软件工程方法最重要的特点就是把事物的属性和操作组成一个整体,以对象为核心,更符合人类的思维习惯。此外,它更加注重人类在认识客观世界时循序渐进,逐步深化的特点。主张在软件开发的过程中多次反复迭代的思想。

可复用性好。由于采用了继承和多态的机制,极大地提高了代码的可复用性。

稳定性好。面向对象的软件工程方法基于对象的概念。当目标系统的需求发生变化时,只要实体及实体之间的联系不发生变化,就不会引起软件系统结构的变化,而只需要对部分对象进行局部修改。

可维护性好。由于利用面向对象软件工程方法开发的软件系统稳定性好和可复用性好,而且采用了封装和信息隐藏机制,易于对局部软件进行调整,所以系统的可维护性比较好。



UML的作用和优点是什么?

UML(UnifiedModelingLanguage)是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。它不是一种可视化的程序设计语言,而是一种可视化的建模语言;它不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;它不是过程,也不是方法,但允许任何一种过程和方法使用它。



更好的表现同一事物的不同方面采用不同的视图,每个视图从一个角度看待和描述问题。

UML有多少类图,分别有什么作用?

在UML中,共定义了13种图用来对不同的方面进行建模和描述,其中包括6种静态图和7种动态图。



静态图用来描述系统结构,包括类图、对象图、构件图、部署图、包图和组合结构图。

类图描述类、接口、协作以及之间的关系;

对象图描述对象以及对象之间的关系;

包图描述包以及其相互依赖关系;

组合结构图描述系统某一部分(组合结构)的内部结构;

构件图描述构件及其相互依赖关系;

部署图描述构件在各节点上的部署。



动态图用来描述系统行为,包括顺序图、通信图、计时图、交互纵览图、活动图、状态机图和用例图。

用例图描述一组用例、执行者以及相互关系;

顺序图是强调消息执行顺序的交互图;

通信图是强调对象协作的交互图;

计时图是强调真实时间信息的交互图;

交互纵览图展示交互图之间的执行顺序;

活动图描述事物执行的控制流或数据流;

状态机图描述对象所经历的状态转移。



用Rose绘制“学生档案管理系统”的底层用例图。



用Rose绘制除“登录系统”用例以外的其他用例的顺序图。







7) 用Rose绘制除“增加学生档案信息”用例以外的其他用例的类图。





7练习题



软件项目管理包括哪些内容?

启动过程——确定一个项目或某阶段可以开始,并要求着手实行;

计划过程——进行(或改进)计划,并且保持(或选择)一份有效的]可控的计划安排,确保实现项目的既定目标;

执行过程——协调人力和其他资源,并执行计划;

控制过程——通过监督和检测过程确保项目目标的实现,必要时采取一些纠正措施;

收尾过程——取得项目或阶段的正式认可,并且有序地结束该项目或阶段。



项目计划应该包括哪些内容?

确定详细的项目实施范围;

定义递交的工作成果;

评估实施过程中主要的风险;

制定项目实施的时间计划;

成本和预算计划;

人力资源计划等。



如何进行项目时间管理?

项目时间管理首先要对项目活动进行定义,依据包括:工作分解结构、项目范围说明、历史信息、约束条件、假定和专家评论。

在整个项目中,我们需要一份能清晰描述活动发生的时间和所需要的资源的计划,项目进度安排的内容为:

定义一组项目活动,并建立活动之间的相互关系;

估算各个活动的工作量和完成任务所需要的资源;

定义里程碑;

分配人力和其他资源,制定进度时序;

检查进度安排,确保任务之间没有冲突,并且包含了完成项目必需的所有任务。



软件工程组主要包括哪些角色?

系统分析员、系统设计员、程序员、测试工程师、文档编辑者、项目经理



软件项目团队成长会经历哪几个阶段,各有什么特点?

形成(Forming)阶段

特点:?成员对工作和人际关系:高度焦虑状态?成员的情绪特点:激动、希望、怀疑、焦急、怀疑?在心理上:极不稳定状态?应对措施:明确整个团队的方向、目标和任务;为每个人确定职责和角色?领导风格:指导型的领导风格?

震荡(Storming)阶段

特点:?成员对工作和人际关系:剧烈动荡状态?成员的情绪特点:紧张、挫折、不满、对立、抵制?应对措施:应付和解决出现的各种问题和矛盾;引导成员对自己的角色及职责进行调整;邀请团队成员积极参与解决问题和作出决定。?领导风格:影响型的领导风格?

规范(Norming)阶段

特点?成员对工作:积极、努力?人际关系:已确立,大部分矛盾已解决?成员的情绪特点:信任、合作、忠诚、友谊、满意?应对措施:积极放权,使成员进行自我管理和自我激励;对成员取得进步给予表扬;积极支持团队成员的各种建议和参与;努力规范整个团队的行为。?领导风格:参与型的领导风格?

发挥(Performing)阶段

特点?成员对工作:积极、努力;?人际关系:融洽?成员的情绪特点:开放、坦诚、依赖、集体荣誉感?应对措施:给予团队足够的授权,使团队做到自我管理和自我激励;及时公布项目进程,表彰先进;集中精力做好进展计划和项目变更,指导项目团对改进作业方法。?领导风格:授权型的领导风格?

简述软件配置管理的工作内容。

配置管理的工作范围一般包括四个方面:

标识配置项;配置项是配置管理中的基本单元,每个配置项应该包含相应的基本配置管理的信息。标识配置项就是要给配置项取一个合适的名字。

进行配置控制;进行配置控制是配置管理的关键,包括存取控制、版本控制、变更控制和产品发布控制等。存取控制通过配置管理中的“软件开发库”、“软件基线库”、“软件产品库”来实现,每个库对应着不同级别的操作权限,为团队成员授予不同的访问权利。版本控制往往使用自动的版本控制工具来实现,比如SVN。变更控制是应对软件开发过程中各种变化的机制,可以通过建立控制点和报告与审查制度来实现。产品发布控制面向最终发布版本的软件产品,旨在保证提交给用户的软件产品版本是完整、正确和一致的。

记录配置状态;配置状态报告记录了软件开发过程中每一次配置变更的详细信息。记录配置状态的目的是使配置管理的过程具有可追踪性。

执行配置审计。配置审计是为了保证软件工作产品的一致性和完整性,从而保证最终软件版本产品发布的正确性。



简述CMM软件过程成熟度的五个级别,以及每个级别对应的标准。

初始级的软件过程是无秩序的,它几乎处于无步骤可循的状态。管理是随机的,软件产品的成功往往取决于个人。

在可重复级,已建立了基本的项目管理过程,对成本、进度和功能特性进行跟踪,并且在借鉴以往经验的基础上制定了必要的规范。

在已定义级,用于管理和工程两个方面的过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。所有项目均使用经过批准、裁减的标准软件过程来开发和维护软件。

已管理级的软件过程和产品质量有详细的度量标准并且得到了定量的认证和控制。

优化级的软件过程可以通过量化反馈和先进的新思想、新技术来不断地、持续性地改进。



风险识别的步骤是什么?

风险识别分为三步进行:收集资料;估计项目风险形势;识别风险。

软件工程中包含哪些文档?可以分为哪几类?



软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、可行性研究报告、项目开发计划。

项目开发计划、测试计划、测试报告、开发进度月报及项目开发总结。

用户手册、操作手册、维护修改建议、软件需求说明书、运行模式建议说明书。



按照文档产生和使用的范围,软件文档大致可以分为三类:

开发文档:这类文档在软件开发过程中,作为软件开发人员前一阶段工作成果的体现和后一阶段工作依据的文档。包括:软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、可行性研究报告、项目开发计划。

管理文档:这类文档是在软件开发过程中,由软件开发人员制定的需提交的一些工作计划或工作报告。管理人员能够通过这些文档了解软件开发项目的安排、进度、资源使用和成果等。包括项目开发计划、测试计划、测试报告、开发进度月报及项目开发总结。

用户文档:这类文档是软件开发人员为用户准备的有关该软件使用、操作、维护的资料。它包括用户手册、操作手册、维护修改建议、软件需求说明书、运行模式建议说明书。























献花(0)
+1
(本文系籽油荃面原创)