软件工程答案一、6、什么是软件生命周期?一个软件从定义,开发,使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长时期称为生命周期7、软件生命周期有哪几个阶段和步骤?三个阶段:定义、开发、维护八个步骤:问题定义、可行性研究、需求分析;总体设计、详细设计、编码与单元测试、综合测试;运行维护。8、计算机软件的开发经过哪三个大阶段?三个阶段:定义、开发、维护9、软件开发的各阶段的任务是什么?定义阶段:问题定义--任务:关于规模和目标的报告书;可行性研究--任务:系统的高层逻辑模型:数据流图,成本/效益分析;需求分析--任务:系统的逻辑模型:数据流图,数据字典,算法描述。开发阶段:总体设计--任务:系统流程图,成本/效益分析,推荐的系统结构:层次图/结构图;详细设计--任务:HIPO图或PDL图;编码和单元测试--任务:源程序清单,单元测试方案和结果;综合测试--任务:综合测试方案,结果集成测试,验收测试,完整一致的软件配置。维护阶段:软件维护--任务:维护记录以及改正性维护,适应性维护,完整性维护和预防性维护二、可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题能否解决。必须时刻记住的是,可行性研究的目的不是解决问题,而是确定问题是否值得去解决。(可行性分析是可以说是整个项目中的第一步,这一步要作的事情包括很多,不仅涉及成本,还要涉及人力资源\环境分析\预计回报等很多因素,因而,如果在综合分析了这些因素之后,得出的结论是该项目无法实施,那之后所有的工作都是没有意义的)三、3.简述需求分析的任务及其过程步骤。答:需求分析的任务是理解客户需要什么,分析需求,评价可行性,协商合理的方案,无歧义地详细说明方案,确认规格说明,管理要求,以至将这些需求转化为可行系统。过程步骤:(1)初步沟通(2)导出需求(3)分析和精化(4)可行性研究(5)协商与沟通(6)规格说明四、1、软件测试的目的是什么?软件测试是为了发现错误而执行程序的过程;测试是程序的执行过程,目的在于发现错误;软件测试中需要数据,即为测试而精心设计的测试用例,利用测试用例去运行程序,帮助发现程序错误;一个好的测试用例在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误的测试。软件测试绝对不是要证明程序的正确性,也证明不了程序的正确性.五、2、软件设计分哪两个阶段?总体设计的两个阶段分别是什么?分为总体设计和详细设计两个阶段。总体设计包括系统设计(划分出组成系统的程序、文件、数据库、人工过程和文档等物理元素)和结构设计(确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系,不涉及模块内部算法流程)六、3、什么叫维护?维护的类型有哪些?软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。软件维护类型有:1、改正性维护:对程序使用期间发现的程序错误进行诊断和改正的过程;占维护工作量17-21%。2、适应性维护:配合变化了的环境进行修改软件的活动;占维护工作量18-25%。3、完善性维护:满足用户在使用过程中提出增加新的功能或修改已有功能的建议而进行的改进工作;占维护工作量50-66%。七、6.衡量模块独立性的两个标准是什么?它们各表示什么含义?答:(1)两个定性的度量标准:耦合与内聚性。(2)耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。(3)内聚性:也称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。模块内元素联系越紧密,内聚性越高。八、3.数据流图的四种组成成分数据的源点或数据终点:数据源和终点表示数据的外部来源和去处。它通常是系统之外的人员或组织,不受系统控制。数据处理(加工):数据处理处理是对数据进行的操作,它把流入的数据流转换为流出的数据流。每个数据处理处理都应取一个名字表示它的含义,并规定一个编号用来标识该数据处理在层次分解中的位置。名字中必须包含一个动词,例如“计算”、“打印”等。数据存储(文件):数据存储是存贮数据的工具,数据存储名应与它的内容一致。数据存贮在数据流图中起着保存数据的作用,指向数据存贮的数据流可以理解为写数据,从数据存贮引出的数据流可以理解为读数据,双向数据流可以理解为修改数据。数据流:数据流由一组确定的数据组成。数据流用带有名字的具有箭头的线段表示,名字称为数据流名,表示流经的数据,箭头表示流向。数据流可以从处理流向处理,也可以从处理流进、流出数据存储,还可以从源点流向处理或从处理流向终点。名词解释题一、6模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。二、三、4、什么叫软件危机?软件危机包含哪两点?软件危机产生的原因是什么?软件危机是指在计算机软件开发与维护过程中所遇到的一系列严重问题。包括两点:(1)如何开发软件,以满足对软件日益增长的需求;(2)如何维护数量不断膨胀的已有软件。软件开发和维护过程中存在的许多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。具体表现如下:(1)软件是逻辑部件而不是物理部件。(2)软件的规模越来越大,复杂性越来越大。(3)轻视需求分析的重要性,轻视软件维护的错误观点和方法四、5、耦合与内聚分别有哪些?如何定义?如何区分?耦合衡量不同模块彼此间互相依赖(连接)的紧密程度内聚衡量一个模块内部各个元素彼此结合的紧密程度耦合的种类:数据耦合:如果两个模块间的通讯信息是若干参数,其中每一个参数都是一个数据元素,称数据耦合这种耦合为数据耦合。这是模块之间影响最小的耦合关系。标记耦合:当把整个数据结构作为参数传递而被调用模块只需要使用其中一部分数据元素标记耦合时,这种情况称为标记耦合。控制耦合:那么A和B之间控制耦合如果模块A向模块B所传递的信息控制了模块B的内部逻辑,的耦合称为控制耦合。公共耦合:如果两个或多个模块都和同一个公共数据域有关,则称为公共耦合。公共耦合公共耦合是一种不良的耦合关系,它给模块的维护和修改带来困难。如果两个模块共享的数据很多,都通过参数传递很不方便时,可以利用公共耦合。内容耦合:如果一个模块和另一个模块的内部属性(即运行程序和内部数据)有关,则称为内容耦合。功能内聚:如果一个模块内部的各组成部分的处理动作全都为执行同一个功能而存在,并且功能内聚:只执行一个功能,则称为功能内聚。判断一个模块是不是功能内聚,只要看这个模块是“做什么”是完成一个具体的任务,还是完成多任务。顺序内聚:如果一个模块内部的各个组成部分执行的几个处理动作有这样的特征:前一个处顺序内聚:理动作所产生的输出数据是后一个处理动作的输入数据,称为顺序内聚。顺序内聚维护起来不如功能内聚方便,要修改模块中的一个功能,会影响到同一个模块中的其他功能。通讯内聚:如果一个模块内各组成部分的处理动作都使用相同的输入数据或产生相同的输通讯内聚出数据,称为通讯内聚。过程内聚:如果一个模块内部的各个组成部分的处理动作各不相同,彼此也没有联系,但他们都受同一个控制流支配,决定他们的执行次序,称为过程内聚。暂时内聚(时间内聚):如果一个模块内的各组成部分的处理动作和时间有关,则称为暂时:内聚。暂时内聚模块的处理动作必须在特定的时间内完成。-----指在一个特定的时间范围内完成,但完成次序不重要。例如:程序设计中的模块的初始化。逻辑内聚:如果一个模块内部的各组成部分的处理动作在逻辑上相似,但功能都彼此不同或逻辑内聚:无关,则称为逻辑内聚。一个逻辑内聚模块往往包括若干个逻辑相似的动作,使用时可以选用一个或几个功能。例如:把编辑各种输入数据的功能放在一个模块中。机械内聚(偶然内聚):如果一个模块的内部各组成部分的处理动作彼此没有任何联系,则:称为机械内聚五、语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。六、判定覆盖就是设计若干个测试用例,运行被测程序,使得每个语句至少执行一次,程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。七、结构化设计(SD)是使用最广泛的一种设计方法,该方法适合于软件系统的总体设计和详细设计,特别是将一个复杂的系统转换成模块化结构系统,该方法具有它优势。(相对独立,功能单一的模块结构;块内联系大,块间联系小的模块性能标准;采用模块结构图的描述方式)以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块。面向数据流的设计是以需求分析阶段产生的数据流图为基础,按一定的步骤映射成软件结构,因此又称结构化设计(sd)。八、6、软件测试的步骤有哪些?每个测试阶段的测试依据是什么?分别有谁来测试?步骤测试内容时间单元测试:将每一个模块作为一个单独的测试单元,保证每个模块作为一个单元能正确运行。(编码测试阶段)子系测试系统:将经过单元测试的模块放在一起形成一个子系统来测试,以测试模块间的接口正确性作为主要任务。(集中测试阶段)系统测试:将经过测试的子系统装配成一个完整的系统来测试,检验系统是否确实能实现需求规格说明书中的功能,以及系统的动态特征是否符合预定要求。阶段系统测试是指整个计算机系统(包括软硬件)的测试,可与系统的安装和验收相结合进行。(集中测试阶段)验收测试:在用户的参与下,把软件系统作为单一的实体进行测试,使软件系统能满足用户的需要。测试内容与系统测试基本相同。(验收阶段)平行测试:新旧两个系统同时运行进行比较,避免风险的同时给用户对新系统一段熟悉的时间(运行阶段)