软件工程师知识点

2022-07-13

第一篇:软件工程师知识点

软件工程知识点

第一章

软件工程概述

一、软件的定义和特性

(P2—P3) 定义:软件=程序+数据+文档

程序:按照事先设计的功能和性能要求执行的指令或语句序列

数据:程序能正常操纵信息的数据结构

文档:描述程序操作和使用的文档 特性:

(1) 软件是一种逻辑实体,具有抽象性,不是一般的物理实体;

(2) 软件的成产与硬件存在某些相同点,但有根本上的不同,软件开发是人的智力的高度发挥,而不是传统意义上的制造,它更依赖于开发人员的素质,智力,人员和组合,合作和管理;

(3) 软件维护与硬件维修有着本质的差别,软件维护没有硬件维护那样有可替换的标准零件; (4) 软件在运行和使用期间没有硬件那样的机械磨损,老化问题,但存在退化问题;

(5) 基于构件的开发方法由于其自身的特点越来越受到人们的重视,这些技术可以减少开发时间、提高质量,并提高复用水平。

* 掌握P4图1-2(b)软件失效率曲线

二、计算机软件的发展经历了几个阶段?各有何特征?(P1—P2)

共经历了四个阶段

特征:第一阶段——程序规模小且主要采用个体工作方式,开发的系统大多采用批处理技术

第二阶段——引入人机交互的概念,实时系统出现,产生了第一代数据库管理系统,程序编制采用了合作的工作方式,出现了早期的软件危机

第三阶段——分布式系统出现,嵌入式系统得到广泛应用,低成本硬件

第四阶段——强大的桌面系统和计算机网络迅速发展时期,面向对象技术得到广泛应用,人工智能技术和专家系统开始应用于软件。

三、什么是软件危机?其产生的原因是什么?

定义:软件危机是指由于落后的软件生产方式无法满足迅速增长的计算机软件应用需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。(P4) 原因:(P5)

(1) 用户对软件需求的描述不准确、不全面,甚至有错误,以及在开发过程中,不断提出或者修改需求; (2) 用户和开发人员对软件需求的理解存在差异,导致所开发的软件产品和用户需求不一致;

(3) 大型软件项目需要组织一定的人力共同完成,各类人员的信息交流不及时、不准确,有时还可能产生误解,软件开发人员对大型软件缺少开发经验,管理人员缺少相应的管理经验;

(4) 软件开发人员不能有、独立自主的处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误;

(5) 开发技术落后,缺乏有效的方法学和工具方面的支持,过分依赖程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化

(6) 软件产品的特殊性和人类智力的局限性,导致人们无法处理“复杂问题”,因为软件是逻辑产品,软件开发进展情况较难衡量、软件开发质量难以评价、管理和控制软件开发过程相当困难。

四、什么是软件工程?它的目标和内容是什么?

定义:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中,并对方法的研究。(P6)

目标:在给定的成本和进度前提下,开发出具有可修改性、可理解性、可维护性、有效性、可靠性、可适用性、可重用性、可移植性、可跟踪性和互操作性并且满足用户需求的软件产品。(P7)

内容:主要内容包括软件开发技术和软件工程管理两方面。(P6)

要素:方法,工具,过程

五、什么是软件生存周期?它有哪几个活动?

定义:(software life cycle)把软件产品从形成概念开始,经过定义、开发、使用和维护直到最后退役的全过程。

活动:软件定义、软件开发、软件使用维护和退役(P9)

六、什么是软件生存周期模型?它有哪些主要模型?

定义:又称为软件开发模型,软件过程模型,它清晰直观地反映了软件开发的全部过程、所涉及的活动和任务结构框架,并指出了开发了开发各阶段的关系、开发活动的衔接情况。

主要模型:瀑布模型(waterfall model),原型(prototype)模型,螺旋(the spiral)模型,增量(incremental)模型,喷泉(fountain)模型,迭代(iterative)模型

七、简述有哪些主要的软件开发方法?(P22)

结构化方法:也称为生命周期方法或传统方法,由结构化分析(structured analysis)、结构化设计(SD)、结构化编程(SP)三部分有机组合而成。其基本思想是自顶向下,逐步求精,基本原则是抽象和分解。

面向对象方法(Object—Oriented Method):把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO。包括面相对象分析(OOA)、面向对象设计(OOD)、面向对象的程序设计(OOP)等过程。

八、软件生命期各阶段的任务是什么?(P10)

软件定义:问题定义,系统的可行性研究,需求分析

软件开发:概要设计,详细设计,编码实践,软件测试

软件使用维护和退役:软件发布与实施,软件维护,版本更新或退役

九、简述瀑布模型(P12)、原型模型特点。

瀑布模型:软件开发的各项活动严格按照线性方式进行,各阶段之间具有顺序性和依赖性,且为了保证软件的开发质量进行阶段性评审。缺点是逆转性差,若在评审中发现缺陷或错误往回追溯修正时要付出一定的代价。适合在软件需求明确且很少发生变化、开发技术比较成熟、工程管理比较严格地场合使用。

原型模型:有助于用户和软件分析员双方相互学习对方领域知识,使得用户和开发人员统一对软件需求的认识,理解,有助于需求的定义评审,从而有助于提高开发速度。缺点是用户对原型没有正确认识,会催促开发人员尽早交付软件,同时也在一定程度上限制了软件开发人员的创新。(P14)

第二章

软件需求基础

一、试述软件需求、需求分析、需求建模概念的含义及区别。

软件需求:指用户对目标软件系统在功能、性能、行为、涉及约束等方面的期望,这种期望可能是原始的、笼统的,也可能是抽象的太细节化的。(P26)

需求分析:通过对应用问题及其环境的分析与理解,采用一系列的分析方法和技术,将用户的需求逐步精确化、完全化、一致化,最终形成需求规格说明文档的过程。(P26)

需求建模:需求建模是为了更好的理解用户所描述的需求所作出的一种抽象,是用符号语言对事务无歧义的书面描述。模型主要包括数据模型,功能模型和行为模型。(P38)

二、可行性研究的任务是什么?(P31)

用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。

三、成本—效益分析可用哪些指标进行度量?(P32)

成本效益分析是衡量经济可行性的。

指标:(1)货币的时间价值。(2)投资回收期(3)纯收入

四、需求分析阶段的基本任务是什么?(P27)

任务:深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节,定义软件的其他有效性需求。

五、简述需求分析阶段的过程。(P36)

1.问题识别

2.分析与综合

3.编制需求分析阶段的文档

4.需求验证

六、常用的初步软件需求获取的方法有哪些?为什么要用这些方法来进行需求获取?(P33)

方法: 1.访谈与会议

2.观察用户工作流程

3.建立联合小组

4.其他获取方法:快速原型法,基于本体的需求获取方法

原因:分析人员和用户的共同知识领域可能不多,致使分析人员对问题往往知之不多,而用户对目标软件的要求及对要求的描述常常是零乱而模糊地,从而会造成相互交流和互相理解上的困难。

七、在软件需求分析时,应首先建立当前系统的物理模型,在根据物理模型尽力当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?(P28)

当前系统:可能是需要改进的某个已在计算机运行的数据处理系统,也可能是一个人工的数据处理过程。

物理模型是确定待开发软件系统的系统元素,并将功能和数据结构分配到这些系统元素中,它是软件实现的基础。逻辑模型忽视实现机制与细节,只描述系统要完成的功能和要处理的数据。

逻辑模型是在物理模型的基础上去掉一些非本质因素形成的,它反应的是系统的本质。

第三章

软件设计基础

一、什么是软件概要设计?该阶段的基本任务是什么?

定义:设计人员依据软件需求规格说明文档,确定软件的体系结构,建立软件模块间的关系,定义个功能模块的接口,设计全局数据库或数据结构,规定设计约束,指定组装测试计划。

任务:将软件需求转化为软件的系统结构和数据结构(P49)

*力争做到功能模块之间有比较低的耦合度而功能模块内部有较高的内聚度。

二、详细设计的基本任务是什么?有哪几种描述方法?

任务:通过对软件结构细化,得到软件的详细的算法和数据结构。(P49)

描述方法:(过程设计)程序流程图

盒图(N-S图)

问题分析图(PAD图)

判定表和判定树

过程设计语言(PDL)(P77)

三、软件设计的基本原理包括哪些内容?(P51)

抽象与逐步求精、模块化、信息隐蔽、模块独立

四、衡量模块独立性的两个标准时什么?各表示什么含义?

标准:内聚和耦合

含义:内聚(cohesion)——衡量一个模块内部各个元素彼此结合的紧密程度

耦合(coupling)——衡量不同模块之间的相对独立性(互相连接的紧密程度)

五、模块的耦合性有哪几种?各表示什么含义?

种类:非直接耦合——两个模块之间没有直接关系,他们中任何一个都不依赖于另一个而能独立工作

数据耦合——一模块访问另一模块,相互传递的信息已参数形式给出,并且传递的参数完全是简单数据元素,而不是控制元素、公共数据结构和外部变量。

标记耦合——两模块之间都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口界面传递数据结构的一部分。

控制耦合——一模块传递给另一模块的参数中包含了控制信息(开关,标记,名字等),该控制信息勇于控制接收模块中的执行逻辑。

外部耦合——一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量信息。

公共耦合——一组模块都访问同一个公共数据环境

内容耦合——一模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只出现在汇编程序中);一个模块有多个入口。

*从上到下耦合性从低到高,独立性从高到底

六、模块的内聚有哪几种?各表示什么含义?

种类:巧合内聚(偶然内聚)——将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块

逻辑内聚——完成一组在逻辑上相关的任务的模块间具有逻辑内聚

时间内聚(经典内聚)——完成几个必须在同一时间内进行的任务的模块间具有时间内聚

过程内聚——一个模块完成多个任务,这些任务必须按指定的过程执行。把流程图中的某一部分划出组成模块就得到过程内聚模块

通信内聚——一个模块内所有成分都使用同一输入数据或产生同一输出数据,即一个模块内所有处理元素都集中在某个数据结构的一块区域中的模块具有通信内聚

信息内聚——一个模块内完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点

七、结构化程序设计的基本要点是什么?

结构化程序设计是尽可能少用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GOTO语句,而且应该总是使用前句GOTO语句。

第四章 结构化分析与设计

一、什么是结构化分析方法?该方法使用什么描述工具?(P85—P86)

定义:结构化分析方法是一种利用自顶向下逐层分解、由粗到细、由复杂到简单技术的求解方法。

工具:数据流图(DFD 实体—关系图(E-R) 数据字典(DD) 描述基本加工小说明(Process SPECification)

二、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?(P87)

定义:数据流图是描述数据加工处理过程的有效工具。它标识了一个系统的逻辑输入和逻辑输出,以及把逻辑输入转换逻辑输出所需的加工处理。

作用:主要描述系统的功能,即当前系统主要完成哪些功能。

基本符号:箭头——数据流

圆或椭圆——加工(变换)

双杠或单杠——数据

矩形框——外部实体

三、什么是数据字典?其作用是什么?共有哪些条目?(P94)

定义:数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。

作用:对系统所有的数据进行描述和解释并进行管理。 条目:数据项条目、数据流条目、数据库文件条目(P96)

四、简述如何画分层数据流图,对分层数据流图的审查由哪些审查要点?(P88 P92)

画法:首先,把整个系统看成一个加工作为顶层数据流图(0层);然后,逐层对大的加工进行分解,分解为更小的自加工;最后,直到所有的加工都成为基本加工(不需要再分解,足够简单可以直接解决的加工)为止。

审查:

1、数据流图和程序流程图的混淆

2、父图和子图的平衡问题

3、局部文件问题

4、分解的深度与层次

五、什么样是“事物流”?什么事“变换流”?试将相应形式的数据流图转换为软件结构图。(P104)

事物流——数据沿传入路径到系统,由外部形式变换为内部形式后到达事务中心(完成分派任务),事务中心根据数据项计值结果从若干动作路径中选定一条继续执行。(事务中心)

变换流——信息以“外部世界”所具有的形式进入系统,经处理后又以这种形式离开系统。包括传入路径,变换中心,传出路径三部分。(变换中心) 步骤:(1)对结构化分析阶段产生的DFD图进行复审;

(2)确定数据流图的类型

(3)按照SD方法所规定的一组映射规则,把DFD图转换为初始SC图

六、试述“变换分析”、“事务分析”设计步骤。(P106—P108)

变换分析:第一步——划分DFD图的边界,也就是将DFD图划分为三个基本的组成部分,不同的设计人员可能产生不同的划分结果;

第二步——完成第一级分解,建立初始SC图的框架;

第三步——完成第二级分解,细化SC图的每个分支,得到初始SC图。

事务分析:首先确定事务中心,即几条动作路径的公共源头;其次划定接收路径和发送路径;然后分解和细化每个接收分支和发送分支,完成初始的SC图。

七、简述有哪些启发式设计策略可以帮助软件设计人员改善软件质量,优化软件结构。(P108—P110)

(1)模块的高独立性和规模适中

(2)保持高扇入和低扇出

(3)模块的作用域应在控制域之内

(4)降低模块接口的复杂度

第五章

面向对象的分析与设计

一、说明对象、类、类结构、消息的基本概念(P113)

对象:是封装了数据结构及可以施加在这些数据结构上的操作的封装体。

类:对具有相同属性和操作的一组对象的抽象性描述,它描述了属于该对象类型的所有对象的性质,包括外部特性和内部实现两个方面。 类结构:(实例)

消息:是用来请求对象执行某一处理或回答某一要求的信息。

二、试述面向对象方法学的优点。(P112)

1、开发的软件比较容易理解

2、稳定性好

3、可重用性好

4、较易开发大型软件产品

5、可维护性好

三、什么是UML?为什么使用UML?(P118)

定义:UML(Unified Modeling Language)是一个通用的、可视化标准建模语言。

使用原因:统一的标准

面向对象

可视化、表示能力强

独立于过程

易掌握、易用

四、在UML中用例图的作用是什么?其包括哪些符号?简述各符号的含义。(P122)

作用:捕获系统中用户的需求

符号:人形(stickman)——活动者

椭圆——用例

实线——关系

五、简述用例建模的步骤。

步骤:识别参与者——识别用例——识别关系——建模——用例规约

六、什么是用例规约?其包括哪些基本内容?什么是基本流和备选流?

定义:用例的补充说明,包括简要说明,事件流,用例场景,特殊需求,前置条件,后置条件 基本流: 备选流:

七、在UML中的状态图,活动图,时序图在系统分析中各起到了什么作用?

状态图——描述对象在生命周期内处于哪些状态,每一种状态的行为以及什么样的事件引起对象状态发生改变,展示了系统的动态视图。P144 活动图——描述动作及对象状态改变的结果,描述采取何种动作似的对象的状态改变,动作的序列是什么及在何处发生。P148 时序图——详细表示对象之间以及对象与系统外部的参与者之间动态联系的图形文档,它详细而直观地表现了一组相互协作的对象在执行一个(或少量几个)用例时的行为依赖关系,以及操作和消息的时序关系。P139

八、简述类图中关联和依赖关系的区别。

关联表示两个类的对象之间存在某种语义上的联系。(组合/聚合关联)如:学生选课,学生与课程间

依赖是类与类之间最弱的关系,它是两个模型元素(类、用例等)之间的语义连接关系,其中一个模型元素是独立,另一模型元素依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。如教师与粉笔。

九、类图中类与类之间的关系有哪几种?

类与类之间的静态关系:关联,泛化,依赖,细化

第六章

人机界面设计

一、简述人机界面的设计过程。(P168)

1、确定任务的目标和含义;

2、将每个目标或含义映射为一系列特定的动作;

3、说明这些动作将来在界面上执行的顺序;

4、指明系统状态,及上述各动作序列中每个动作在界面上执行时界面呈现的形式;

5、定义控制机制,即用户可用的改变系统状态的设备和动作;

6、说明控制机制怎样作用于系统状态;

7、指明用户如何根据界面上反映出的信息,解释系统的状态。

二、简述人机界面设计过程中应考虑哪些一般问题?(P168)

系统响应时间

用户帮助设施

出错信息处理

命令交互

三、如何理解界面设计中“人的因素”(P162)

人对感知过程的认识

用户的技能和用户间的差异

第八章

软件测试

一、什么是白盒测试法?有哪些覆盖标准?P205

定义:(结构测试或逻辑驱动测试)测试时,把程序看做一个打开的盒子,它是知道产品内部工作过程,而不顾他的功能。

覆盖标准:语句覆盖

判定覆盖

条件覆盖

判定/条件覆盖

条件组合覆盖

路径覆盖

二、什么是黑盒测试法?采用黑盒技术测试用例有哪几种方法?(P199)

定义:(功能测试或数据驱动测试)它是在已知产品所应具有功能的基础上,通过测试来检测每个功能是否都能正常使用。

方法:等价类划分

边界值分析

错误推测

因果图

比较测试

三、软件测试要经过哪些步骤?这些测试与软件开发各阶段之间有什么关系?

步骤:单元测试——集成测试——确认测试——系统测试

关系:单元测试(模块测试)——是最小单位的测试,其依据是详细设计说明书。测试者(程序员)根据详细设计说明书和源程序清单了解模块的I/O条件和模块的逻辑结构。

集成测试(组装测试、联合测试、子系统测试、部件测试)——是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。

确认测试(有效性测试)——检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准(用户参与)。

系统测试——针对整个产品系统进行的测试,验证系统是否满足了需求规格的定义,找出与需求规格不相复合或与之矛盾的地方。

四、单元测试有哪些内容?

模块接口

局部数据结构测试

路径测试

错误处理测试

边界测试

五、什么是集成测试?非渐增式测试与渐增式测试有什么区别?渐增式测试如何组装模块?

定义:集成测试(组装测试、联合测试、子系统测试、部件测试)是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统进行测试。

区别:P216自己看

组装:

六、什么是回归测试?(P218)

发生修改之后重新测试先前的测试以保证修改的正确性。目的在于检验以前出现过的但已修复好的缺陷不再出现。

七、什么是测试用例?(P194)

测试用例由测试输入数据和预期输出结果组成。

八、软件测试和软件调试有何区别?

第九章

软件维护

一、软件维护有哪些内容?(P229)

改正性维护

适应性维护

完善性维护

预防性维护

二、何为非结构化维护和结构化维护?(P231)

结构化维护——采用软件工程的方法进行软件的开发,则每一个阶段都有相应的文档,且文档与程序代码互相匹配,因此维护容易进行。

非结构化维护——没有采用软件工程的方法进行软件的开发,开发出的软件只有程序没有文档,或者仅有一些片段的说明性文档。给维护工作带来很大的困难,耗时耗力且代价高。

三、软件维护的流程是什么?(P233)

提交维护申请报告——生成软件修改报告——软件修改——主要流程

四、软件维护的副作用有哪些?(P240)

修改编码的副作用 修改数据结构的副作用 修改文档的副作用

第二篇:软件工程知识点总结

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。是一门指导软件系统开发的工程学科,它以计算机理论及其他学科为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经实践证明的学科的管理措施与最先进的技术方法结合起来,目标是以较少的投资获取高质量的软件。 内容:方法与技术、工具与环境、管理技术、标准与规范。 领域:软件需求分析、软件设计、软件构造、测试和维护。 难题 1.复杂性 2.不可见性 3.易变性 4.服从性 5.非连续性

计算机科学中与实践相关的部分,都和数据以及其他学科发生关系。软件工程和人的行为、现实社会的需求息息相关。

发展史:1.生产作坊方式2.面向对象的方法3.软件过程工程4.软件复用和基于构件的开发 学生做到:1.研发出符合客户需求的软件 2.通过一定的软件流程,在预计的时间内发布足够好的软件 3.通过数据和其他方式展现所开发的软件是可以维护和继续发展。

单元测试(好标准):1.在最基本的功能/参数上验证程序正确性;2.由最熟悉代码的人写;3.测试后,机器状态保持不变;4.要快;5.产生可重复、一致的结果;6.独立性;7.覆盖所有代码路径;8.集成到自动测试的框架中;9.和产品代码一起保存和维护。

回归测试:模块出现退步,从正常退化到不正常状态,为了验证新改进的代码的正确性。 个人开发:计划:估计时间(开发):.需求分析.生成设计文档.设计复审.代码规范.具体设计.具体编码.代码复审.测试;记录用时;测试报告;计算工作量;事后总结;提出改进计划 个人在团队中:1.通过交流实验等方法理解问题、需求或任务2.提出多种解决办法3.与相关角色交流解决问题的提案,决定一个可行方案4.执行5.和其他角色合作,测试实现方案,修复缺陷6.对结果负责

代码规范:代码风格规范:1.缩进2.行宽3.括号4.断行与空白行5.分行6.命名7.下划线8.大小写9.注释

代码设计规范:1.函数2.goto3.错误处理4.处理C++中的类 代码复审目的:1.找出错误代码2.发现逻辑错误3.发现算法错误4.发现潜在错误5.发现可能需要改进的地方6.传授经验

代码复审步骤:1.代码成功编译2.程序员必须测试过代码3.程序与提出新的代码,差异分析4.可选择面对面复审,独立复审5.面对面复审中,开发者控制流程,讲述修改的前因后果,复审者有权打断叙述提出自己意见7.开发者负责所有问题得到满意解答8.达成一致意见 复审后:1.改正明显的错误2.对无法解决的错误,记录下来3.把所有错误记在“我常犯的错误”表中,作为以后自我复审的第一步

结对编程好处:1.在开发层次,提供更好的设计质量和代码质量,解决问题能力强2.对开发人员,结对更有信心3.在企业管理层上,更有效的交流相互学习传递经验,高投入产出比 如何结对编程:1.驾驶员:写设计文档,进行编码和单元测试2.领航员:审阅文档、编码;考虑单元测试的覆盖率;思考是否需要重构;帮解决技术问题3.不断轮换角色,不连续一小时,领航员控制时间4.主动参与5.只有水平差距,没有级别差距6.设置好结对编程环境 团队模式:1.主治医师2.明星3.社区4.业余剧团5.秘密团队6.特工7.交响乐团8.爵士乐 开发方法: 统一流程(RUP)业务建模.需求.分析和设计.实现.测试.部署.配置和变更管理.项目管理.环境. 敏捷开发原则:1.尽早并持续交付有价值的软件满足需求2.欢迎需求的变化3.经常发布可用软件,间隔较短4.业务员与开发人员共同工作5.以有进取心的人为核心6.面对面交流7.可用软件是衡量项目进展的主要指标8.可持续发展9.不断关注技术和设计10.保持简明 敏捷流程:1.找出完成产品所需要做的事2.决定当前冲刺需要解决的事3.冲刺 软件需求:1.获取和引导需求2.分析和定义需求3.验证需求4.在软件产品的生命周期中管理需求(功能性需求.开发过程需求.非功能性需求.综合需求) 需求获取方法:用户调查1.焦点小组2.深入面谈3.卡片分类4.调查问卷5.用户日志研究6.人类学调查7.眼动跟踪研究8.快速原型调研9.a/b测试

利益相关者:用户:直接使用软件的人;客户:购买软件的人;市场分析师:代表典型用户的需求;监管机构:符合行业和政策规定;软件工程师:需求阶段重要角色

项目经理PM:对项目流程负责,正确的协调团队内部外部,调配各部门资源和时间,有效进行风险管理,保证一个项目按计划结项。管事也管人,不一定做具体工作。 应对风险:1.进一步研究2.接受3.规避4.转移5.降低6.制定应急计划

PM能力:1.观察、理解和快速学习2.分析管理能力3.专业能力4.自省能力

典型用户:名字.年龄.收入.代表的用户在市场上的比例和重要性.典型场景.环境.生活情况.知识层次/能力.偏好

功能说明书 1.定义好相关概念2.规范好一些假设3.避免误解,界定边界条件4.描述主流用户5.一些好的功能会有副作用6.服务质量说明 功能驱动设计:1.构造总体模型2.构造功能列表3.制定开发计划4.功能设计阶段5.实现具体功能

用户体验:1.用户第一印象2.从用户角度考虑问题3.软件服务始终要记住用户的选择4.短期刺激和长期影响5.不让用户犯简单错误6.用户体验和质量7.情感设计 评价标准:1.尽快提供可感触的反馈2.系统界面符合用户的现实惯例3.用户有控制权4.一致性和标准化5.适合各种类型的用户6.帮助用户识别、诊断并修复错误7.有提示和帮助文档 测试方法:1.单元测试2.代码覆盖率测试3.构建验证测试4.验收测试5.探索式测试6.回归测试7.场景/集成/系统测试8.伙伴测试9.效能测试10.压力测试11.内/外部公开测试

黑箱:把软件系统当作一个黑箱,无法了解或使用系统的内部结构及知识。从软件的行为而不是从内部结构出发来设计测试。 白箱:设计者可以看到软件系统的内部结构,并使用软件的内部结构和知识来选择测试数据及具体的测试方法。

软件质量:1.程序的质量2.软件工程的质量(开发过程可见性、风险控制、软件内部模块、开发成本控制、内部质量指标完成情况)

如何衡量:CMMI理论:一级初始级(企业项目目标实现),二级管理级(对项目流程审查,保证成功),三明确级(对管理体系制度化保障完成),四量化管理级(数字化管理,流程的稳定性),五级优化级(充分利用信息资料,主动改善流程)

如何衡量:1.软件CC后DCR的数量2.用户的好评3.在CC后发现bug的数量4.文档完整性和准确性5.修复bug平均时间6.单位开发量出现最大bug数量7.测试用例的覆盖率8.模块的复杂程度9.代码的行数10.文档的数量和复杂程度11.有多少代码重复12.平均每天构建失败的次数13.实现了多少功能点14.软件能运行多久,平均初次错误时间,无故障时间 会诊:1.开发者提交参加会诊的bug和修改方案2.会议决定是否同意修改方案3.执行

IT创新:1.灵光一闪,创新及随其后2.大家都喜欢创新3.好的想法会赢4.创新者都是一马当先5.要成为领域的专家6.技术是创新的关键7.成功的团队更能创新

团队合作阶段:1.萌芽阶段2.磨合阶段3.规范阶段4.创造阶段5.团队的效能曲线和假团队 职业道德:1.行为与公众利益一致2.以客户和雇主利益最大化的方式做事3.确保自己的产品以及修改满足专业标准4.具备完整独立的专业判断5.软件项目的经理和领导人应提倡并亲自采用复合道德规范的方法来管理软件的开发和维护6.保证职业的诚信和荣誉7.公平对待同侪,并予以支持和帮助。

需求分析:四方面:对问题的识别、分析与综合、制定规格说明书、评审;三原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。

第三篇:软件工程知识点总结

7.1软件的定义及特点

软件( Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program) ,数据(Data)及其相关文档( Document)的完整集合。

三个特点:

(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性; (2)软件的生产与硬件不同,在它的开发过程中没有明显的制造过程; (3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。

7.2软件危机及其表现

软件危机(softward crisis)是指在计算机软件的开发和维护中所遇到的一系列严重问题。这些问题绝不仅仅是“不能正常运行的”软件才具有,实际上几乎所有软件都不同程度地存在这些问题。

具体地说,软件危机主要有下述一些表现。

(1)对软件开发成本和进度的估计常常很不准确。

(2)用户对“已完成的”软件系统不满意的现象经常发生。

(3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。

(5)软件通常没有适当的文档资料。

(6)软件成本在计算机系统总成本中所占的比例逐年上升。

7.3软件工程及三要素

软件工程:软件工程是采用工程的概念、原理、技术和方法来指导软件开发和维护的工程学科,以工程化的原理和方法来解决软件问题。

软件工程的特性:

(1) 软件工程关注于大型程序的构造 (2) 软件工程的中心课题是控制复杂性 (3) 软件经常变化

(4) 开发软件的效率非常重要 (5) 和谐地合作是开发软件的关键 (6) 软件必须有效地支持它的用户

(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人

软件工程方法学包含3个要素:方法、工具和过程。

7.4软件生命周期

软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和 测试、验收与运行、维护升级到废弃等阶段,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审 查、形成文档以供交流或备查,以提高软件的质量。

每个阶段的任务如下

问题定义阶段:该阶段的关键任务是要明确:要解决的问题是什么? 可性行研究阶段:该阶段的关键任务是要明确:做不做? 需求分析阶段:该阶段的关键任务是要明确:做什么?

概要设计(总体设计)阶段:该阶段的关键任务是要明确:怎么做? 详细设计阶段:该阶段的关键任务是要明确:具体做法。

编码和单元测试阶段:该阶段的关键任务是:编码和单元测试。

综合测试阶段:该阶段的关键任务是通过各种类型的测试(及调试)使软件达到预定的要求。 软件维护阶段:该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的要求。

7.4.1瀑布模型

瀑布模型有以下优点

1)为项目提供了按阶段划分的检查点。

2)当前一阶段完成后,您只需要去关注后续阶段。 3)可在迭代模型中应用瀑布模型。

4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。

瀑布模型有以下缺点

1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。

2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。

3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。 4)瀑布模型的突出缺点是不适应用户需求的变化。

“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行,用户常常难以清楚地给出所有需求,用户必须有耐心,等到系统开发完成。

7.4.2 原型模型—快速原型模型

在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。 优点:

(1)开发人员和用户在“原型”上达成一致。这样一来,可以减少设计中的错误和开发中的风险,也减少了对用户培训的时间,而提高了系统的实用、正确性以及用户的满意程度。 (2)缩短了开发周期,加快了工程进度。 (3)降低成本。

尽早发现需求,揭示风险 缺点:

⑴为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。

⑵为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。

⑶开发过程不便于管理。

7.4.3螺旋模型

螺旋模型的优点: (1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标

(2)减少了过多测试或测试不足 (3)维护和开发之间并没有本质区别 螺旋模型的缺点:

(1)风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大

(2)主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险

(3)随着迭代次数的增加,工作量加大,软件开发成本增加

7.4.4增量模型

增量模型优点:

(1)在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。

(2)整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。 (3)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。 (4)采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。 增量模型的缺点:

(1)在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。

(2)开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。 (3)多个构件并行开发,具有无法集成的风险。

7.4.5喷泉模型

主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征。 喷泉模型的优点

喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

喷泉模型的缺点

由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

其特点如下:

(1)开发过程有分析、系统设计、软件设计和实现4个阶段。 (2)各阶段相互重叠,它反映了软件过程并行性的特点。 (3)以分析为基础,资源消耗成塔型。

(4)反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。 (5)强调增量开发,整个过程是一个迭代的逐步提炼的过程。

7.4.6构件组装模型

构件组装模型导致软件复用,而可复用性给软件工程师提供了大量的可见的益处。软件开发不

用一切从零开始,开发过程就是一个组装构件的过程,维护的过程就是对构件升级、替换和扩充的过程,大大提高了软件的开发效率。构件模型允许多个项目同时开发,降低了费用,提高了可维护性。

构件模型也存在一些缺点,如:由于存在多种构件标准,缺乏通用的构件组装结构标准,如果自行定义会引入较大的风险;构件可重用性和软件系统高效性之间不易协调;如果过分依赖构件,构件质量会影响最终的产品质量。

7.4.7 RUP RUP是由Rational公司的Booch、Jacobson、Rumbaugh提出的软件过程模型,也称RUP(Rational Unified Process)。RUP重复一系列周期,每个周期由一个交付给用户的产品结束。

每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。 模型见下图:

1.4个阶段

初始阶段:进行问题定义,确定目标,评估其可行性,降低关键风险。 细化阶段:制定项目计划、配置各类资源、建立系统架构(包括各类视图)。 构造阶段:开发整个产品,并确保产品可移交给用户。 移交阶段:产品发布、安装、用户培训。

在每个阶段的每次迭代的最后,用例模型、分析模型、设计模型、实现模型都会增量,每个阶段结束的里程碑处,管理层做出是否继续、进度、预算、是否给下一阶段提供资助等决定。

不同阶段工作流的侧重点不同,前两阶段大部分工作集中在需求、分析和架构设计上;在构造阶段,重点转移到详细设计、实现和测试上。

2.9个工作流

RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。

商业建模:深入了解使用目标系统的机构及其商业运作,评估目标系统对使用它的机构的影响。 需求:捕获客户的需求,并且使开发人员和用户达成对需求描述的共识。 分析和设计:把需求分析的结果转化成分析模型与设计模型。 实现:把设计模型转换成实现成果。

测试:检查个子系统的交互与集成,验证所有需求是否都被正确地实现了,识别,确认缺陷并确保在软件部署之前消除缺陷。

部署:成功地生成目标系统的可运行版本,并把软件移交给最终用户。

配置和变更管理:跟踪并维护在软件开发过程中产生的所有制品的完整性和一致性。

软件项目管理:提供项目管理框架,为软件开发项目制定计划,人员配备,执行和监控等方面的实用准则,并为风险管理提供框架。

环境:向软件开发机构提供软件开发环境,包括过程管理和工具支持。

7.5 UML UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具。 UML由以下5类图来定义: 第1类:用例图

第2类:静态图(包括类图、对象图和包图) 第3类:行为图(包括状态图和活动图) 第4类:交互图(包括时序图和协作图) 第5类:实现图(包括组件图和配置图)

第一类是用例图:从用户角度描述系统功能,并指出各功能的操作者。

第二类是静态图:包括类图,对象图,包图。类图描述系统中类的静态结构,不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等也包括类的内部结构(类的属性和动作)。

第三类是行为图:描述系统的动态模型和组成对象之间的交互关系,其中状态图描述类的对象所有可能的状态,以及事件发生时的状态的转移条件,通常,状态图为类图的补充,在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且状态发生改变的类画状态图,活动图描述满足用例要求所要进行的活动以及活动的约束关系,有利于识别并行的活动。

第四类是交互图:描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,他强调对象之间消息发送的顺序。

第五类是实现图:其中构建图描述代码部件的物理结构和各部件之间的依赖关系,一个部件可能是一个资源代码部件,一个二进制部件或者一个可执行部件。它包含逻辑类和实际类的有关信息。部件图有利于分析和理解部件间的相互影响程度。

下面分别描述9个图。

7.5.1 类图

类图展示了一组类、接口和协作及它们间的关系,在建模中所建立的最常见的图就是类图。用类图说明系统的静态设计视图,包含主动类的类图——专注于系统的静态进程视图。系统可有多个类图,单个类图仅表达了系统的一个方面。要在高层给出类的主要职责,在低层给出类的属性和操作。

7.5.2对象图

对象图展示了一组对象及它们间的关系。用对象图说明类图中所反应的事物实例的数据结构和静态快照。对象图表达了系统的静态设计视图或静态过程视图,除了现实和原型的方面的因素外,它与类图作用是相同的。

7.5.3用例图

用例图展现了一组用例、参与者以及它们间的关系。可以用用例图描述系统的静态使用情况。在对系统行为组织和建模方面,用例图的是相当重要的。

用例(use case):从用户的观点对系统行为的一个描述。 用来从用户的观察角度收集系统需求。

用例图表达系统的外部事物(参与者)与系统的交互,它表达了系统的功能,即系统所提供的服务。

整个软件项目的开发可以采用Use Case 驱动的方式进行。

7.5.4交互图

交互图展现了按一定的目的进行的一种交互,它由在一个上下文中的一组对象及它们间交互的信息组成。交互图也可用于描述一个用例的行为。顺序图和协作图都是交互图,顺序图和协作图可以相互转换。

顺序图和协作图都是交互图,它们既是等价的,又是有区别的。

顺序图和协作图都能等价的表现系统运行中对象通过消息发生的交互行为。

顺序图表示了时间的消息序列,便于分析交互的时序,但没有表示静态对象关系,顺序图可以有效地帮助人们观察系统的顺序行为。

协作图着重表示一个协作中的对象之间的联系和消息。

7.5.5顺序图

展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。用顺序图说明系统的动态视图。

7.5.6协作图

展现了一组对象,这组对象间的连接以及这组对象收发的消息。它强调收发消息的对象的结构组织,按组织结构对控制流建模。

协作图显示某组对象为了由一个用例描述的一个系统事件而与另一组对象进行协

作的交互图。

协作图只对相互间有交互作用的对象和这些对象间的关系建模,而忽略了其他对象

和关联。

协作图中包括如下元素:1.对象(Object)、2.链(Link)和3.消息(Message)。

协作图的用途:

如果按组织对控制流建模,应该选择使用协作图。协作图强调交互中实例间的结构关系以及所传送的消息。协作图对复杂的迭代和分支的可视化以及对多并发控制流的可视化要比时序图好。

协作图有别于时序图的两点特性: (1)协作图有路径 (2)协作图有顺序号

7.5.7状态图

展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。一个状态图描述了一个状态机,用状态图说明系统的动态视图。它对于接口、类或协作的行为建模尤为重要,可用它描述用例实例的生命周期。 在任一给定的时刻,一个对象总是处于某一特定的状态。

状态图主要表现一个对象所经历的状态序列,引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作。

7.5.8活动图

活动图是一种特殊的状态图,描述需要做的活动、执行这些活动的顺序(多为并行的)以及工作流(完成工作所需要的步骤)。它对于系统的功能建模特别重要,强调对象间的控制流程。

活动图实质上是一种流程图,只不过表现的是从一个活动到另一个活动的控制流。活动图描述活动的序列,并且支持对带条件的行为和并发行为表达。

7.5.9时序图

在一个运行的系统中,对象之间要发生交互,并且这些交互要经历一定的时间。

顺序图表达的正是这种基于时间的动态交互。重点是完成某个行为的对象类和这些对象类之间所传递的消息的时间顺序。

7.5.10构件图

构件图展现了一组构件之间的组织和依赖,用于对原代码、可执行的发布、物理数据库和可调整的系统建模。

组件图代表系统的一个物理实现块,代表逻辑模型元素如类、接口的物理打包。

7.5.11部署图

部署图展现了对运行时处理节点以及其中构件的配署。它描述系统硬件的物理拓扑结构(包括网络布局和构件在网络上的位置),以及在此结构上执行的软件(即运行时软构件在节点中的分布情况)。用部署图说明系统结构的静态部署视图,即说明分布、交付和安装的物理系统

7.5.12区别

1.以描述系统状态转移为主的状态图和活动图

状态图:用来描述对象,子系统,系统的生命周期。通过状态图可以了解一个对象所能达到的所有状态,以及对象收到的事件对对象状态的影响。

活动图:显示动作及其结果。着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动,它是状态图的一个变种。

状态图与活动图的区别:活动图主要描述动作及对象状态改变的结果。状态图主要描述的是事件对对象状态的影响。

2.以描述系统系统对象通讯和交互为主的协作图和序列图

序列图:描述对象是如何交互的。重点放在消息序列上,描述消息在对象间是如何收发的。

协作图:描述协作对象的交互与链接。

协作图和序列图的区别:协作图和序列图都是描述对象交互的,但是序列图强调的是时间,协作图强调的空间。

7.6需求分析与用例建模

7.6.1需求分析的任务

需求分析的基本任务不是确定系统怎样完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。---- 准确地回答“系统必须做什么?”。

需求分析的步骤: 需求获取 分析建模 文档编写 需求验证

7.6.2类图

类(Class)、对象(Object)和它们之间的关系是面向对象技术中最基本的元素。类图技术是OO方法的核心。

类图标加上它们之间的关系就构成了类图。

类图用于对系统静态设计视图建模。与数据模型不同,它不仅显示了信息的结构,同时还描述了系统的行为。

类图中可以包含接口,包,关系等建模元素,也可以包含对象,链等实例。

类图典型的应用在下面三类建模: (1)对系统的词汇建模 (2)对简单协作建模

(3)对逻辑数据库模式建模

类图通常包含下述内容:类、接口、协作、依赖、泛化和关联关系。

关系(Relationship)是事物间的关系。在类的关系中,最常用的4种分别为: 依赖(Dependency):它表示类之间的使用关系 泛化(Generalization):它表示类之间的一般和特殊的关系; 关联(Association):它表示对象之间的结构关系 实现(Realization):它是规格说明和其实现之间的关系。

类主要包含以下几个部分

(1)名称(Name)名称是每个类所必有的构成,用于和其他类相区分。 (2)属性(Attribute)类的一个组成部分描述了类所代表事物的属性 (3)操作(Operation)操作是对类的对象所能做的事务的抽象

类在UML中由专门的图符表达,是分成3个分隔区的矩形,顶端为类的名字,中间存放类的属性、属性的类型和值,第3个分隔区放操作、操作的参数表和返回类型,如下图:

7.6.3用例图

在UML中,一个用例模型由若干个用例图(use case diagram)描述。用例图是显示一组用例、参与者以及它们之间关系的图。

用例图是从用户的角度来描述对软件产品的需求,分析产品的功能和行为,因此,对整个软件开发过程而言,用例图是至关重要的。

用例图定义和描述了系统的外部可见行为,是分析、设计直至组装测试的重要依据。 让用户参与前期的系统分析与设计。

用例图的组成: 用例(Use Case) 参与者(Actor) 关系(Relationship)

1.什么是参与者

参与者:在系统之外,透过系统边界与系统进行有意义交互的任何事物。 参与者可能是人、另外一个系统、时间的流逝等。

UML中,参与者用“人形”图标来表示,名字写在图标的下方。

参与者

2.什么是用例

用例(use case)一个用例是用户与计算机之间的一次典型交互作用。在UML中,用例被定义成系统执行的一系列动作(功能)。

参与者和用例分别描述了“谁来做?”和“做什么?”这两个问题。 每个用例都必须有一个惟一的名字以区别于其他用例。 用例用一个椭圆来表示,用例的名字可以书写在椭圆的内部或下方。用例的UML图标如图所示。 3.用例间、用例与参与者的关系

(1)泛化关系(Generalization):一个用例可以被特别列举为一个或多个子用例,这被称为用例泛化:

(2)包含关系(Include)一个用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为作为自身行为的一部分,这被称作包含关系。

(3)扩展关系(Extend):一个用例也可以被定义为基础用例的增量扩展,这称作扩展关系,扩展关系是把新行为插入到已有用例的方法。

(4)关联关系:关联关系表示参与者与用例之间的通信。

4.用例间的关系

(1)泛化关系

当多个用例共同拥有一种类似的结构和行为的时候我们可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。

用例可以被特别列举为一个或多个子用例,这被称做用例泛化。 (2)包含关系

包含是指基本用例(base use case)会用到包含用例(inclusion),具体地讲,就是将包含用例的事件流插入到基础用例的事件流中。包含用例是可重用的用例──多个用例的公共用例。

(3)扩展关系

将扩展用例的事件流在一定的条件下按照相应的扩展点插入到基础用例中。 基础用例不必知道扩展用例的任何细节,它仅为其提供扩展点。 扩展用例的行为是否被执行要取决于主事件流中的判定点。

扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例:

a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开);

b.表明只在特定条件(如例外条件)下才执行的分支流;

5.用例之间的关系

包含用例与扩展用例的区别

①相对于基础用例,扩展用例是可选的,而包含用例则不是。

②如果缺少扩展用例,基础用例还是完整的,而缺少包含用例,则基础用例就不完整了。 ③扩展用例的执行需要满足某种条件,而包含用例不需要。 ④扩展用例的执行会改变基础用例的行为,而包含用例不会。

6.识别用例的方法:

①参与者希望系统提供什么功能;

②系统是否存储和检索信息;如果是,这个行为由哪个参与者触发; ③当系统改变状态时,是否通知参与者;

④是否存在影响系统的外部事件,是哪个参与者通知系统这些外部事件。

7.6.4活动图

1.什么是活动图

活动图是UML中描述系统动态行为的图之一,是描述系统或业务的一序列活动构成的控制流,它描述了系统从一种活动转换到另一种活动的整个过程。

2.活动图用途

活动图用于对系统的动态行为建模。

活动图常用来描述业务或软件系统的活动轨迹,描述了系统的活动控制流程。我们常用活动图对业务过程、工作流和用例实现进行建模。

活动图主要应用对两个方面建模:一是在业务分析阶段,对工作流程进行建模;二是在系统分析和设计阶段,对操作流程进行建模。

7.6.5面向对象分析建立的3类模型

对象模型、动态模型、功能模型

对象模型

对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关心系统中对象的结构、属性和操作,它是分析阶段三个模型的核心,是其他两个模型的框架。[2]

⒈对象和类 ⑴对象。

对象建模的目的就是描述对象。 ⑵ 类。

通过将对象抽象成类,我们可以使问题抽象化,抽象增强了模型的归纳能力。 ⑶ 属性。

属性指的是类中对象所具有的性质(数据值)。 ⑷ 操作和方法。

操作是类中对象所使用的一种功能或变换。类中的各对象可以共享操作,每个操作都有一个目标对象作为其隐含参数。

方法是类的操作的实现步骤。 ⒉关联和链

关联是建立类之间关系的一种手段,而链则是建立对象之间关系的一种手段。 ⑴ 关联和链的含义。

链表示对象间的物理与概念联结,关联表示类之间的一种关系,链是关联的实例,关联是链的抽象。

⑵ 角色。

角色说明类在关联中的作用,它位于关联的端点。 ⑶ 受限关联。

受限关联由两个类及一个限定词组成,限定词是一种特定的属性,用来有效的减少关联的重数,限定词在关联的终端对象集中说明。

限定提高了语义的精确性,增强了查询能力,在现实世界中,常常出现限定词。 ⑷ 关联的多重性。

关联的多重性是指类中有多少个对象与关联的类的一个对象相关。重数常描述为“一”或“多”。 ⒊类的层次结构 ⑴ 聚集关系。

聚集是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。聚集最重要的性质是传递性,也具有逆对称性。

聚集可以有不同层次,可以把不同分类聚集起来得到一颗简单的聚集树,聚集树是一种简单表示,比画很多线来将部分类联系起来简单得多,对象模型应该容易地反映各级层次。

⑵一般化关系。

一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方式。它是“一般---具体”的关系。一般化类称为你类,具体类又能称为子类,各子类继承了父类的性质,而各子类的一些共同性质和操作又归纳到你类中。因此,一般化关系和继承是同时存在的。一般化关系的符号表示是在类关联的连线上加一个小三角形。

⒋对象模型

⑴模板。模板是类、关联、一般化结构的逻辑组成。 ⑵对象模型。

对象模型是由一个或若干个模板组成。模板将模型分为若干个便于管理的子块,在整个对象模型和类及关联的构造块之间,模板提供了一种集成的中间单元,模板中的类名及关联名是唯一的

动态模型

动态模型是与时间和变化有关的系统性质。该模型描述了系统的控制结构,它表示了瞬间的、

行为化的系统控制

性质,它关心的是系统的控制,操作的执行顺序,它表示从对象的事件和状态的角度出发,表现了对象的相互行为。

该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。使用状态图作为描述工具。它涉及到事件、状态、操作等重要概念。

⒈事件

事件是指定时刻发生的某件事。

⒉状态

状态是对象属性值的抽象。对象的属性值按照影响对象显著行为的性质将其归并到一个状态中去。状态指明了对象对输入事件的响应。

⒊状态图

状态图是一个标准的计算机概念,他是有限自动机的图形表示,这里把状态图作为建立动态模型的图形工具。

状态图反映了状态与事件的关系。当接收一事件时,下一状态就取决于当前状态和所接收的该事件,由该事件引起的状态变化称为转换。

状态图是一种图,用结点表示状态,结点用圆圈表示;圆圈内有状态名,用箭头连线表示状态的转换,上面标记事件名,箭头方向表示转换的方向。

功能模型

功能模型描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑计算的次序。功能模型由多张数据流图组成。数据流图用来表示从源对象到目标对象的数据值的流向,它不包含控制信息,控制信息在动态模型中表示,同时数据流图也不表示对象中值的组织,值的组织在对象模型中表示。

数据流图中包含有处理、数据流、动作对象和数据存储对象。 ⒈处理

数据流图中的处理用来改变数据值。最低层处理是纯粹的函数,一张完整的数据流图是一个高层处理。

⒉数据流

数据流图中的数据流将对象的输出与处理、处理与对象的输入、处理与处理联系起来。在一个计算机中,用数据流来表示一中间数据值,数据流不能改变数据值。

⒊动作对象

动作对象是一种主动对象,它通过生成或者使用数据值来驱动数据流图。

⒋数据存储对象

数据流图中的数据存储是被动对象,它用来存储数据。它与动作对象不一样,数据存储本身不产生任何操作,它只响应存储和访问的要求。

7.7设计阶段

7.7.1详细设计

详细设计阶段的根本目标是确定怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

详细设计的目标: 设计出的处理过程应该尽可能简明易懂。 详细设计的任务:

(1) 为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;

(2) 确定每一模块使用的数据结构;为以后的编写程序做好充分的准备。 (3) 确定模块接口的细节。

7.7.2总体设计

1.面向对象设计

面向对象设计的准则:优秀设计就是使得系统在其整个生命周期中的总开销最小的设计, 其主要特点就是容易维护。

面向对象设计(OOD,Object-Oriented Design)是面向对象分析到实现的一个桥梁。面向对象分析是将用户需求经过分析后,建立问题域精确模型的过程;而面向对象设计则根据面向对象分析得到的需求模型,建立求解域模型的过程。即分析必须搞清楚系统“做什么”,而设计必须搞清楚系统“怎么做”,从分析到设计不是传统方法的转换,而是平滑(无缝)过渡,而求解域模型是系统实现的依据。

静态结构设计:  类设计  包设计  接口设计

动态结构设计(行为和交互建模):  对象如何进行交互的

2.GUI (图形用户界面)设计概述

对于用户来说,一个友好的界面是至关重要的。

用户界面(User Interface)的设计质量直接影响用户对软件产品的评价,从而影响软件产品的竞争力和使用寿命,因此,对人机界面的设计必须给予足够的重视。

良好的GUI设计原则

1、关注用户及其任务,而不是技术

2、首先考虑功能,其次才是表现

3、与用户对任务的看法保持一致

4、设计要符合常见情况

5、不要分散用户对他们目标的注意力

6、促进学习,从外(用户)到里(设计人员)思考,而不是相反。

7、传递信息,而不仅仅是数据

8、设计应满足响应需求

9、通过用户试用发现错误,然后修复它

3.数据库设计

设计原则:

每一个类成为一个数据库表。 关系映射:

(1)一对多的关系映射为数据库表的主外键关联(1方的主键加入n方成为外键)

(2)一对一的关系映射为数据库表的主外键关联(1方的主键加入另一方成为外键)

(3)多对多的关系映射:产生第三张表,将两个多方的主键加入其中成为外键,两个外键的组合成为主键。

利用数据库三范式检查表,从而考察领域类图的分析是否合理,消除冗余数据。 检查数据是否能够反映用例视图的需要;进一步与用户再次确认使用的数据。

7.8注释

夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。

注释分为两类:序言性注释和功能性注释。

1.序言性注释

通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。

序言性注释包括: 程序标题;

有关本模块功能和目的的说明; 主要算法;

接口说明:包括调用形式,参数描述,子程序清单;

有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息; 模块位置:在哪一个源文件中,或隶属于哪一个软件包;

开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。

2.功能性注释

功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样,而不要解释下面怎么做。

要点:

描述一段程序,而不是每一个语句; 用缩进和空行,使程序与注释容易区别;

7.9软件测试

软件测试的定义:软件测试是使用人工和自动手段来运行或测试某个系统的过程,其目的在于检测被测试软件系统是否满足规定的需要,或是弄清楚被测系统的预期结果与实际结果之间的差别。

黑盒测试:仅需要知道被测试对象的输入和预期输出,不需要了解代码实现的细节。测试方法

主要分为两类:功能层面的测试方法和函数层面的测试方法(边界值测试、等价类测试、基于决策表测试)。侧重于系统业务流程的梳理,是基于动态业务过程设计测试用例。

白盒测试:是针对程序代码展开的测试,分为静态测试和动态测试:关注对象包括源代码和程序结构。静态白盒测试的方法是代码检查。静态测试不需要运行程序和设计测试用例,侧重于源代码的检查和优化,直接查看源代码和执行代码,直接定位代码中的缺陷。动态测试侧重于程序结构的测试。

测试用例的定义:测试用例是一组测试输入,执行条件和预期结果。目的是要满足一个特定的目标。如果执行一条特定的程序路径或者检验是否符合一个特定的需求的用例。测试用例:输入+输出+测试环境测试环境包括:硬件环境,软件环境,网络环境,历史数据。

测试用例分为两个阶段:测试用例分析阶段,测试用例设计阶段。

7.9.1测试和调试的区别

1、目的不同

软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务.调试的目的是为了证明程序的正确,因此它必须不断地排除错误.它们的出发点不一样。前者是挑错,是一种挑剔过程,属于质盘保证活动。后者是排错,是一种排除过程,是编码活动的一部分。

2、任务不同

既然软件测试属于质量保证活动,因此它贯穿于整个开发过程.从需求分析开始,就要制订软件测试计划,软件设计时要设计系统软件测试、集成侧试用例,编码阶段要设计单元软件测试用例并进行单元软件测试,软件测试阶段要进行集成软件测试、系统软件测试等,直到产品交付。只要有修改就有软件测试,产品交付后同样。它是比较有规律的活动,有系统的方法、原则作指导。

而调试是编码活动的一部分,因此有编码就有调试.它的任务主要就是排错。调试的方法经常与使用的开发工具有关,例如:解释型的开发工具可以交互式调试,编译型开发工具就很难较好地查错。当然它有一些启发式的方法,它是一种比较依赖开发人员经验的活动。

3、指导原则和方法不同

软件侧试是一种有规律的活动,有一系列软件软件测试的原则.其中主要是制订侧试计划,然后严格执行.其次是一种挑剔性行为,因此它不但要侧试软件应该做的,还需要侧试软件不应该做的事情。调试所遵循的规律主要是一些启发式规则,是一个推理过程。例如使用归纳法、演绎法、回溯法等。

软件测试的输出是预知的,其软件测试用例必须包括预期的结果,而调试的输出大多是不可预见的,需要调试者去解释、去发现产生的原因。

4、操作者

因为心理状态是软件测试程序的障碍,所以执行软件测试的人一般不是开发人员,以使软件测试更客观、更有效,而调试人员一般都是开发人员.

7.9.2软件维护

软件维护活动类型总起来大概有四种:纠错性维护(校正性维护)、适应性维护、完善性维护或增强、预防性维护或再工程。

改正性维护

改正性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行:而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。

适应性维护

适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%~25%。由于计算机硬件价格的不断下降,各类系统软件屡出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。

完善性维护

完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重较大.也是关系到系统开发质量的重要方面。这方面的维护除了要有计划、有步骤地完成外.还要注意将相关的文档资料加入到前面相应的文档中去。

预防性维护

预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。这方面的维护工作量占整个维护工作量的4%左右。

第一章

1.软件有哪些种类?

答:1.按功能特征进行划分:

(1)系统软件(2)支撑软件(3)应用软件

2.按规模大小进行划分

微型、小型、大型、甚大型、极大型

4.结合自己的亲身经历,谈谈软件工具在软件开发过程中的作用。

使软件开发更加模式化,工程化,从而提高软件开发的效率和封装性。

第二章

2.软件瀑布模型为什么要划分阶段?各个阶段的任务是什么?

在软件开发早期,开发只是被简单地分成编写代码和修改代码两个阶段。往往在拿到项目后立刻编写程序,然后调试通过后直接交付给用户使用。如果应用中出现错误,或者有新的要求,都需要重新修改代码。这种小作坊式的软件开发方法有明显的弊端,如缺乏统的项目规划、不太重视需求的获取和分析、对软件的测试和维护考虑不周等,这些都会导致软件项目的失败。

概念阶段:计划、需求分析

开发阶段:设计、编码、测试

维护阶段:运行维护

3.举例说明哪些项目的开发适用于原型模型或螺旋模型,哪些不适于采用这两种模型。

螺旋模型适合于大型软件的开发,应该说它是最为实际的方法,它吸收了软件工程“演化”的概念,使得开发人员和客户对每个演化层出现的风险有所了解,继而做出应有的反应。

不适用:小型软件。

原型般是指对某种产品进行模拟的初始版本或者原始模型,在工程领域中具有广泛应用。

不适用:大型软件项目;含有对于计算量大、逻辑性较强的程序模块:

第三章

1.可行性研究的任务是什么?

可行性研究的任务是以最小的代价在尽可能短的时间内确定问题是否能够解决。简单的说,可行性研究的最终结果是决定项目y做还是小做”而不是“如何做”。 2.项目开发计划有哪些内容?

引言(目的、背景、参考文献、术语);项目概述(功能、条件、运行环境、产品、程序、文档、服务、验收标准、实施计划、工作任务分解、进度、预算、人员)

第四章

1.什么是需求工程?需求工程包括哪些活动?

需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的 门学科。它通过合适的工具和记号系统地描述待开发系统,及其行为特征和相关约束,形成需求文档;并对用户不断变化的需求演进给予支持。

一个良好的需求开发过程应该包括需求获取、需求分析与建模、编写需求规格说明书和需求评审4个主要活动。

2.需求工程过程包括哪些主要活动? 需求开发过程应该包括需求获取、需求分析与建模、编写需求规格说明书和需求评审4个主要活动。 3.有哪两种主要的需求分析模型?它们的主要思想是什么?

答:面向对象分析模型,结构化分析模型。前者是采用面向对象的思想进行软件需求分析的建模过程,而后者模型的核心是DD,它是设计各种数据对象的总和。他们的模型分别起到了描述数据模型,功能模型与行为模型的作用。

4.需求规格说明书的主要作用是什么?应该包括哪些主要内容? 作用:

(1)作为用户方和开发方之间的合同,为双方相互了解提供基础。

(2)反映问题的结构,作为系统设计和编码的依据。

(3)作为测试和验收目标系统的依据。 内容:

用户可以通过需求规格说明书检查需求描述是否满足原来的期望。设计人员根据软件需求规格说明书的描述了解所需开发软件的功能和性能,以及开发软件时必须满足的约束,将其作为软件设计的依据。测试人员根据软件需求规格说明书中对产品的描述,设计测试计划、测试用例和测试过程。产品发布人员根据软件需求规格说明和用户界面设计编写用户手册和帮助信息

第五章

2.简述数据流图分解时的注意事项。

•上层可分解得快些(即分解成子数据处理个数多些),这是因为上层是综合性描述,对可读性的影(即分解成的子数据处理个数多些),这是因为上层是综合性描述,对可读性的影响小。而下层应分解得慢性。

•在不影响可读性的前提下,应适当多分解成几部分,以减少分解层数。 3.数据字典的作用是什么?它有哪些基本内容? •分解应自然,概念上要合理、清晰。

作用:数据字典作为分析阶段的工具,有助于改进分析人员和用户.间的通信,进而消除很多的误解,同时也有助于改进不同开发人员之间的通信;. 内容:数据字典的内容主要是对数据流图中的数据项、数据流、加工逻辑、数据存储和外部实体

第六章

1.什么是面向对象方法?与传统软件开发方法相比,面向对象方法有什么优点? 是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法。 优点:

1.符合人们对问题的认识习惯

2.增强问题域与最终软件系统之间的衔接

3.易于维护和复用

4.易于开发大型软件产品

2.什么是模型?在软件开发过程中为什么需要建立模型?

在软件开发过程中,建立软件模型具有十分重要的作用,主要体现在以下几个方面:

有助于问题的简化,通过抽象降低复杂性;

有助于和其他开发小组成员,各种用户以及系统相关者进行交流;

有助于维护人员了解软件设计的思路和细节,为以后的维护和升级提供了文档。

第七章

1.面向对象分析包括哪些活动?应该建立哪些类型的模型?

面向对象分析OOA模型的过程包括理解用例模型、识别分析类、定义交互行为、建立分析类图、评审分析模型5个活动组成。

目标是建立一个符合问题域、满足用户需求的OOA模型。

2.什么是实体类、边界类和控制类?为什么将分析类划分成这3种类型?

实体类:用于描述必须存储的信息,同时描述相关的行为。实体类代表拟建系统中的核心信息。在RUP的有关文档中对实体类的解释为:“实体类是用于对必须存储的信息和相关行为建模的类。 边界类:在系统与外界之间,为它们交换各种信息与事件。边界类处理软件系统的输入和输出。在RUP的有关文档中对边界类的解释为:边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。

控制类:与业务过程相关,它们控制整个业务的流程和执行次序。在RUP的有关文档中对控制类的解释为:控制类用于对一个或几个用例所持有的控制行为进行建模。

控制类对象可以和边界对象交互,也可以和实体对象交互,但不能和用例的参与者直接进行交互。

第八章

1.什么是软件设计?它的目标和任务是什么?

<1>软件设计:在需求分析的基础上通过抽象和分解将系统分解成模块,确定系统功能的实现。即把软件需求转换为软件包表示的过程。

<2>目标:软件设计的最终目标是产生一个设计规约,该规约包括体系结构、描述数据、接口和构件的设计模型。

软件设计的任务,就是把分析阶段产生的软件需求规格说明转换为用适当手段表示的软件设计文档。

2.完成良好的软件设计应遵循哪些原则?

模块化与模块独立性;抽象与逐步求精;信息隐藏。 3.如何理解模块独立性?用什么指标来衡量模块独立性?

<1>模块的独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。

<2>一般采用两个准则度量模块独立性,即模块的内聚性和模块间的耦合性 4.说明软件设计阶段的任务和过程 软件设计分两步完成,即总体设计与详细设计。第个阶段是总体设计,即概要设计或初步设计。这、阶段主要确定实现目标系统的总体思想和设计框架,确定程序由哪些模块组成,以及模块与模块之间的关系,最后提出概要设计说明书。第二个阶段是详细设计,即过程设计或构件级设计,其任务是通过对结构表示进行细化,确定各个软件构件的详细数据结构和算法,产生描述各个软件构件的详细设计文档。

5.试说明软件体系结构在软件设计阶段中的重要性。

良好的体系结构设计是决定软件系统成功的重要因素。软件体系结构设计的好坏往往会成为一个系统设计成败的关键。通常,软件体系结构涉及软件的总体组织、全局控制、数据存取及子系统之间的通信协议等。

6.简述面向对象设计阶段要做的工作。

OOD主要包括三个方面的工作:系统体系结构设计、用例实现方案设计和用户界面设计。

第十一章

1.简述程序设计语言的基本特征及分类。

基本特征包括心理特性,工程特性和技术特性三个方面。语言的的—心理特性对人机通信的质量有主要的影响;语言的工程特性对软件开发成功与否有重要的影响,此外语言的技术特性也会影响软件设计的质量

•按程序设计语言的历史发展过程,计算机语言可分为机器语言、汇编语言、高级程序设计语言。

•按与机器的依赖程度,可分为低级、中级和高级语言。

•按应用范围,可分为通用语言与专用语言两大类,通用语言义可细分为系统程序设计语言、科学计算语言、事务处理语言和实时控制语言等。

•按程序的设计方法,可分为命令性语言和作用性语言。

•按语言的成分,可以分成顺序语言、并行语言和实时语言等。

•按语言的组成方法,可以分成汇集式语言和可扩充语言。 2.为了具有良好的程序设计风格,应该注意哪些方面的问题?

要形成良好的程序设计风格,应从源程序文档化、数据说明、语句构造、输入输出和追求效率几个方面加以注意。

3.什么是软件测试?软件I则试的原则有哪些?

软件测试是按照特定的规则,发现缺陷而执行程序的过程。

一个好的测试用例是指尽可能找到迄今为止尚未发现缺陷的用例。 一个成功的测试是指揭示了迄今为止尚未发现缺陷的测试。 软件测试的原则:

(l)所有的测试都应该能追溯到用户需求。

(Z)应该在测试之前就制定出测试计划。

(3)Pareto原理可应用于软件测试。

(4)测试应从“小规模”开始,逐步转向“大规模”

(S)穷举测试是不可能的。

(6)既要做通过性测试,又要做失效性测试。

(D为了达到最佳的测试效果,应该由独立的第三方从事测试工作。

第十四章

1.为什么说软件维护是不可避免的?

因为软件的开发过程中,一般很难检测到所有的错误,其次软件在应用过程中需要随用户新的要求或运行环境的变化而进行软件的修改或纠正软件开发过程未发现的错误,增强、改进和完善软件的功能和性能,以适应软件的发展,延长软件的寿命,软件的维护是不可避免的。 2.什么是软件再工程?软件再工程的主要活动有哪些?

指在逆向工程所获信息的基础上修改重构已有的系统,产生的―个新版本,或者说利用这些信息修改或重构软件系统的工作。

它定义了6为活动r即库存目录分析、文档重构、逆向工程、代码重构、数据重构、正向工程。 3.软件调试与软件测试有什么区别?

1、目的不同

软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务。调试的目的是为了证明程序的正确,因此它必须不断地挤除错误.它们的出发点不一样“前者是挑错,是一种挑剔过程,属于质盘保证活动。后者是排错,是-种排除过程,是编码活动的部分•

2、任务不同

既然软件测试属于质量保证活动,因此它贯穿十整个计发过程.从需求分析开始,就要制订软件测试计划,软件设计时要设计系统软件测试、集成侧试用例,编码阶段要设计单元软件测试用例并进行单元软件测试,软件测试阶段要进行集成软件测试、系统软件测试等,直到产品交付。只要有修改就有软件测试,产品交付后同样。它是比较有规律的活动,有系统的方法、原则作指导。

而调试是编码活动的部分,因此有编码就有调试它的任务主要就是排错。调试的方法经常与使用的开发工具有关,例如解释型的开发工具可以交互式调试,编译型开发工具就很难较好地查错。当然它有些启发式的方法,它是.种比较依赖开发人员经验的活动。

3、指导原则和方法不同

软件侧试是种有规律的活动,有一系列软件软件测试的原则.其中主要是制U侧试计划,然后严格执行。其次是种挑剔性行为,因此它不但要侧试软件应该做的,还需要侧试软件个应该做的事情。调试所遵循的规律主要是些启发式规则,是”个推理过程。例如使用归纳法、演绎法、回溯法等。

软件测试的输出是预知的,其软件测试用例必须包括预期的结果,而调试的输出大多是不可预见的,需要调试者去解释、去发现产生的原因。

4、操作者

因为心理状态是软件测试程序的障碍,所以执行软件测试的人一般不是开发人员,以使软件测试更客观、更有效,而调试人员一般都是开发人员•

5、操作环境、配置、工具不同

调试在开发的编码环境下进行。如果编码使用解释型语言,则可以进行人机交互式调试,设里断点、单步调试等。如果编码使用编译型语言,也可以设置断点、显示调试变量值等。而软件测试是在软件测试环境下进行,直接运行开发完成的程序,可能不再需要一些开发时的驱动程序、动态链接库等.使用不同的工具,环境配置也不同。

简答题,

1.什么是软件工程?请分析软件工程的目标是什么?

答案:软件工程是:1将系统化的、规范的、可度量的方法应用于软件的升发、运行和维护过程,也就是说将工程化应用于软件开发和管理之中;2对1中所选方法的研究”

软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件,其主要目标如下: a)实现预期的软件功能,达到较好的软件性能,满足用户的需求。

b)增强软件过程的可见性和可控性,保证软件的质量。

c)提高所开发软件的可维护性,降低维护费用。

d)提高软件开发生产率,及时交付使用。

e)合理预算开发成本,付出较低的开发费用。

3.根据相关的法律,对于侵犯软件著作权的行为,根据情节应当给予什么处罚?

对于侵犯软件著作权的行为,要根据情况承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任;损害社会公共利益的,由著作权行政管理部门责令停止侵权行为,没收违法所得,没收、销毁侵权复制品,并处罚款;情节严重的,著作权行政管理部门可以没收用子制作侵权复制品的材料、工具、设备等;触犯刑律的,依法追究刑事责任。

4根据你的理解,列举出职业化软件工程师要注意的三个主要问题,请给出理由。 没有唯一答案。

1)不遵守标准和规范:职业化的重要特征是遵守行业标准,不能肆意按照自己的想象来发挥。自从人们认识到软件危机以来,总结软件开发的失败教训和成功经验,并把它们总结成为最佳实践,进而形成标准,要充分利用这些最佳实践和标准来指导软件过程。任何闭门造车、想当然的行为都是不被提倡的,注定要走弯路。

2)对待计划不严肃:软件工程强调计划性,计划的内容包括;设备资源、进度安排、人力资源、任务分配等等。在项目的进行中要跟踪计划执行情况,记录计划执行过程中的偏差,对任何变更都要经过评审和批准才能付诸行动。

3)不主动与人沟通:软件不可见的特性,需要软件工程师进行大量书面的、口头的或面对面的沟通,沟通的目的是为了使相关的人员了解项目的进展、遇到的问题、应用的技术、采用的方法。 5.软件工程为什么要强调规范化和文档化?. 软件工程强调规范化和文档化。规范化的目的是使众多的开发者遵守相同的规范,使软件生产摆脱个人生产方式,进入标准化、工程化的生产方式。文档化是将软件的设计思想、设计过程和实现过程完整地记录下来,以便于后人的使用和维护,在开发过程中各类相关人员借助于文档进行交流和沟通。另外,在开发过程中产生的各类文档使得软件的生产过程由不可见变为可见,便于管理

者对软件生产进度和开发过程进行管理。在用户最终验收时可以通过对提交的文档进行技术审查和管理审查,保证软件的质量。

6.请简单说明结构化分析的主要步骤。

根据用户的需求画出初始的数据流程图,写出数据字典和初始的加工处理说明(lPO图),实体关系图。以初始数据流程图为基础,从数据流程图的输出端开始回溯。在对数据流程图进行回溯的过程中可能会发现丢失的处理和数据,应将数据流程图补充完善。对软件性能指标、接口定义、设计和实现的约束条件等逐一进行分析。系统分析人员与用户起对需求分析的结果进行复查。根据细化的需求修订开发计划。编写需求规格说明书和初始的用户手册,测试人员开始编写功能测试用的测试数据。

7.设计类的属性时必须要定义是哪两项?

设计类的属性时必须要定义的内容:

1)属性的类型:设计属性时必须要根据开发语言确定每个属性的数据类型•如果数据类型不够,设计人员可以利用已有的数据类型定义新的数据类型。

2)属性的可见性。在设计属性时要确定公有属性、私有属性、受保护属性。活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。活动图特别适合描述工作流和并行处理过程。具体地说活动图可以描述一个操作过程中需要完成的活动;描述一个对象内部的工作;描述如何执行组相关的动作,以及这些动作如何影响它们周围的对象;说明个业务活动中角色、工作流、组织和对象是如何工作的。

顺序图用于描述一组交互对象间的交互方式,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。

8面向对象的分析通常要建立三个模型, 请问三个模型的作用?

a)功能模型:表达系统的详细需求,为软件的进一步分析和设计打下基础。在面向对

象方法中,由用例图和场景描述组成。

b)对象模型:表示静态的、结构化的系统“数据”性质。描述现实世界中实体的对象以及它们之间的关系,表示目标系统的静态数据结构。在面向对象方法中,类图是构件对象模型的核心上具。

c)动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构件系统的动态模型。

9.面向对象的设计活动中,有构架师、用例工程师和构件师参加,他们每个角色的职责是什么?

构架设计的目的是要勾画出系统的总体结构,这项工作由经验丰富的构架设计师主持完成。该活动以用例模型、分析模型为输入,生成物理构架、子系统及其接口、概要的设计类(即设计阶段定义的类)。

根据分析阶段产生的高层类图和交互图,由用例设计师研究已有的类,将它们分配到相应的用例中。检查每个用例的功能,这些功能依靠当前的类能否实现,同时检查每个用例的.特殊需求是否有合适的类来实现。细化每个用例的类图,描述实现用例的类及其类之间的相互关系,其中的通用类和关键类可用粗线框区分,这些类将作为项目经理检查项目时的重点。

经过前面两个活动,构架设计师已经将系统的构架建立起来,用例设计师按照用例的功能将每个类分配给相应的用例。现在要由构件工程师详细设计每个类的属性、方法和关系。 10.提高程序可读性有哪些招数?对你来讲比较灵验的是哪些?

a)源程序文件头说明,函数应有函数头说明,内容包括:程序标题;有关该模块功能和目的说明;主要算法说明;接O说明,包括调用形式、参数描述、子程序清单、有关数据的说明。

b)主要变量(结构、联合、类或对象)的定义能够反映其内在含义。 c)变量定义最规范化,说明的先后次序固定。

d)处理过程的每个阶段和典型算法前都有相关注释说明。

三、简答题:

2、什么是软件工程?包括哪些内容?

答: 软件工程:用科学知识和技术原理来定义、开发、维护软件的一门学科。 软件工程的内容:

1)软件开发技术:软件开发方法、软件开发过程、软件开发工具和环境。 2)软件开发管理:软件管理学、软件经济学、软件心理学。

软件工程的目标:是成功的建造一个大型软件系统,所谓成功是要达到以下几个目标:①付出较 低的开发成本;②面到要求的软件功能;③取得较好的软件性能;④开发的软件易于 移植;⑤需要较低的维护费用;⑥能按时完成开发任务,及时交付使用;⑦开发的软 件可靠性高; 软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工 程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、 确认以及维护等活动。

软件工程的框架可概括为:①目标、②过程和③原则。

软件工程的原则:是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。 基本原理:⑴用分阶段的生命周期计划严格管理;⑵坚持进行阶段评审;⑶实行严格的产品控制; ⑷采用现代程序设计技术;⑸结果应能清楚地审查;⑹开发小组的人员应该少而精; ⑺承认不断改进软件工程实践的必要性;(工程化的方法开发软件基本原理)

软件工程方法学:软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工 程学科。

软件工程方法学包括:①传统方法学(结构化范型)和②面向对象方法学。

面向对象的要点: ①把对象作为融合了数据及在数据上的操作行为的统一的软件构件。②把所 有对象都划分成类。③按子类与父类的关系,把类组成一个层次结构。④对象彼此之 间仅能通过传递消息互相联系。

软件工程方法学三要素是:①方法;②工具;③过程。

3、 软件生命周期由哪三个时期组成,又划分为哪8个阶段?

答:软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。软件生命周期是

由:⑴软件定义时期;⑵软件开发时期;⑶软件维护时期三个时期组成的。又划分为:①问题定义、②可行性研究、③需求分析、④总体设计、⑤详细设计、⑥编码和单元测试、⑦综合测试、⑧维护八个阶段。

1、问题的定义及规划 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

2、需求分析 在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需

求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

3、软件设计 此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。

4、程序编码 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。

5、软件测试 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。

6、运行维护 软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。

4、 什么是白盒测试法?什么是黑盒测试法?

答:白盒测试:所谓白盒测试就是在知道产品内部工作过程或程序内部结构和处理过程的前提下,检

验产品内部动作是否按照规格说明书的规定正常进行或按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作的测试方法.因此白盒测试又称为结构测试或逻辑测试。

从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:⑴语句覆盖;⑵判定覆盖;⑶条件覆盖;⑷判定/条件覆盖;⑸条件组合覆盖;⑹点覆盖;⑺边覆盖;⑻路径覆盖。 黑盒测试:所谓黑盒测试是指在完全不考虑程序的内部结构和处理过程的前提下,在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接受输入数据产生正确的输出信息,并且保持外部信息的完整性.因此,又称为功能测试。特点:等价类划分、边界值分析、因果图、错误推测。

优点 1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了 2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因 缺点 1. 结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴

2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作

3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不

是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。

5、 什么是集成测试?非渐增式和渐增式有什么区别?渐增式如何组装模块?

答:将模块组合起来成为一个完整的系统对其进行测试。非渐增式是将模块先进行单元测试然后组装

在一起进行测试。渐增式是逐个将未测试的模块组装到已经测试过的模块上去进行集成测试,每加入一个就测试一次。非渐增式需要桩模块和驱动模块、非渐增式开始可以并行测试、渐增式可以及时的发现接口错误,非渐增式很难发现接口发现错误、渐增式开始不能并行测试、渐增式测试比较彻底。渐增式组装模块有自顶向下和自底向上两种组装方式。

6、 什么是确认测试?该阶段有那些工作?

答:调试的目的是发现错误的位置并改正错误。简单调试、演绎调试、递归调试、回溯调试。

7、 面向对象方法学与传统方法学有何区别?

答:面向对象方法学注重的是软件的重用性,而传统的方法学则在这一问题解决上不理想。面向对象

方法学和传统的方法学在问题分析上的切入点不同。面向对象里面,系统是长出来的,传统的方法学里面,系统是放进去的。传统方法:⑴结构化开发方法,注重的是系统功能,自顶向下,从大到小的功能分解,从DFD到MSD,

往往系统需求变化最大就是功能,一段较长的时间内,商业的流程可能已经发生了很大的变化,这样基于功能和过程的方法显然难以维护的,代码重用率可想而知,而商业过程中的数据可能变化不会很大,⑵信息工程法,注重的是数据,事件流->信息流,(资金流,物流)->数据流,数据的输入和转化输出,数据流程图,状态转化图,事件顺序图,过程依赖图,两者都是由事件驱动.面向的是问题,是为了要解决某一个具体问题,其观察事物的方法不是本体客体本身,而是对本体客体相互作用过程抽象,转化成逻辑模型。面向对象方法学:其切入点是客观世界的主体和客体,通过封装实现了信息交流的安全,抽象和继承使得事物的一完整表述和容易修改新的变化,聚合,关联反映事物间的相互作用和关系,通过关联类管理,这样把事物和事物间的关系分开.减少了复杂度,便于维护,大大提高了代码重用率。

8、 软件开发模型有几种?各有什么特点? 软件生存周期模型:是描述软件开发过程中各种活动如何执行的模型。(模型:是为了理解事物而 对事物做出一种抽象,它忽略不必要的细节,它也是事物的一种抽象形式、一个规划、一个程式。) 主要模型:①瀑布模型;②增量模型;③螺旋模型;④喷泉模型;⑤变换模型;⑥基于知识的模 型等

瀑布模型:①它提供了一个摸板,这个摸板使分析、设计、编码、测试和支持的方法可以在该摸 板下有一个共同的指导;②虽然有不少缺陷但比在软件开发中随意的状态要好得多。 快速原型模型:①开发速度快,质量有保证。②对信息系统特别有效。

增量模型:①人员分配灵活,刚开始不用投入大量人力资源,当核心产品很受欢迎时,可增加人

力实现下一个增量。②当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径,这样就可以先发布部分功能给客户,对客户起到镇静剂的作用。③具有一定的市场。

螺旋模型:①对于大型系统及软件的开发,这种模型是一个很好的方法。开发者和客户能够较好

地对待和理解每一个演化级别上的风险。②对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险。

9、 可行性研究:⑴系统流程图;⑵数据流程图;

系统流程图:系统流程图是概括地描绘物理系统的传统工具。基本思想是用图形符号以黑盒子形

式描绘组成系统的每个部件。其表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程。

数据流程图:简称DFD,是描述数据处理过程的工具。数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,是一种功能模型。作用:它以图形的方式描绘数据在系统中流动和处理的过程,反映系统必须完成的逻辑功能。基本符号有四种:→,箭头,表示数据流;○,圆或椭圆,表示加工; =,双杠,表示数据存储;□,方框,表示数据的源点或终点。

可行性研究的任务: (1)经济可行性。确定待开发系统是否值得投资开发。(2)技术可行性。对待

开发的系统进行功能、性能和限制条件的分析,确定在现有资源的条件下技术风险有多大,系统是否能实现。 (3)法律可行性。确认待开发系统可能会涉及的任何侵犯、妨碍、责任等问题。(4)抉择。对系统开发的不同方案进行比较评估。

10、 什么是字据字典?其作用是什么?它有哪些条目?

字据字典:简称DD,就是用来定义数据流图中的各个成分具体含义的,它以一种准确的、无二义性 的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。

作 用:⑴为系统的分析设计及维护提供了有关元素的一致的定义和详细的描述.⑵为分析人员查找

数据流图中有关名字的详细定义而服务的.⑶它和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分.

条 目:数据流、数据项、数据存储、基本加工。

11、 需求分析的任务是什么? 答: 需求分析是指:开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈 述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格说明)的过程。 需求分析的主要任务:⑴正确地确定对系统综合要求,充分理解和表达用户的需求。⑵通过结构分

析的方法对系统进行分解,以确定软件系统的主要成分或软件系统的构成。⑶是对以上已进行的两项工作进行描述,以形成需求文档。⑷编写用户手册;⑸编写验收计划;⑹修正可行性研究阶段所制订的软件项目开发计划。

12、结构化分析方法:结构化分析方法就是用抽象模型的概念,按照软件内部数据传递、变换的关系, 自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。

主要工具:数据流图、数据词典、结构化英语、判定表和判定树。 3种模型:①数据模型、②功能模型和③行为模型。

验证软件需求:⑴一致性;⑵完整性;⑶现实性;⑷有效性;

结构化分析方法步骤: ①了解当前系统的工作流程,获得当前系统的物理模型。②抽象出当前系 统的逻辑模型。③建立上标系统的逻辑模型。④作进一步补充和优化。

结构化程序设计基本要点:⑴采用自顶向下、逐步求精的程序设计方法;⑵使用三种基本程序控 制结构构造程序(①顺序方式;②选择方式;③循环方式;)。⑶主程序员组的组织形式。

13、总体设计过程由两个主要阶段组成:①系统设计阶段,确定系统的具体实现方案;②结构设计阶段, 确定软件结构。

模块:软件系统的层次结构正是模块化的具体体现。将整个软件划分成若干单独命名和可编址的部分,称之为模块。 模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集 成起来构成一个整体,可以完成指定的功能满足用户的需求。模块是构成程序的基本构件。

模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。

14、衡量模块独立性的两个标准是什么?它们各表示什么含义? 两个定性的度量标准:耦合与内聚性。

耦合:是模块之间的相对独立性(互相连接的紧密程度)的度量。模块之间的连接越紧密,联系越多, 耦合性就越高,而其模块独立性就越弱。按耦合度从低到高依次有7种耦合方式:①非直接耦

合(独立运行);②数据耦合(用参数表传递简单数据);③标记耦合(传递数据结构或者一部分);④控制耦合(传递的信息包括控制模块的信息);⑤外部耦合(模块与软件之外的环境有关);⑥公共耦合(多个模块引用同一全局的数据区);⑦内容耦合(访问内部数据,代码重叠或者多个入口)。

内聚:是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。一个模块内部各个元素

之间的联系越紧密,则它的内聚性就越高。按内聚度从低到高依次有7种内聚种类: ①偶然内聚(模块完成的多个任务,任务之间的关系松散);②逻辑内聚(模块完成逻辑相关的一组任务);③瞬时内聚(模块的所有任务必须在同一时间间隔内执行);④过程内聚(模块的处理元素相关而且按照特定的次序执行);⑤通信内聚(模块的所有元素集中在一个数据结构区域上);⑥顺序内聚(模块的处理元素相关,必须顺序执行);⑦功能内聚(模块完成单一的功能,各个部分协调工作,而且不可缺少)

耦合和内聚的关系:一般说来,在系统中各模块的内聚越大,则模块间的耦合越小。但这种关系并不

是绝对的。耦合小使得模块间尽可能相对独立,从而各模块可以单独开发和维护。内聚大使得模块的可理解性和维护性大大增强。因此,在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚。

15、Jackson方法的步骤: (1)实体动作分析:从问题的描述中,提取软件系统要产生和运用的实体,以及

现实世界作用于实体上的动作。(2)实体结构分析:把作用于实体的动作或由实体执行的动作,按时间发生的先后次序排序,构成进程,并用一个层状的Jackson结构图表示。(3)定义初始模型:把实体和动作表示成一个进程模型,定

义模型与现实世界的联系。(4)功能描述:说明与已定义的动作相对应的功能,为已定义的动作加入功能函数。(5)决定系统时间特性:对进程加入时间因素,对进程调度特性进行评价和说明。(6)实现:设计组成系统的硬件和软件,实现系统的原型。

16、测试阶段的信息流:这个阶段的输入信息有两类: (1)软件配置,包括需求说明书、设计说明书和源 程序清单等;

(2)测试配置,包括测试计划和测试方案。

自顶向下集成:从主控制模块开始,沿着程序的控制

层次向下移动,逐渐把各个模块结合起来。在把附属于主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。

深度优先的结合方法先组装在软件结构的一条主控制通路上的所有模块。选择一条主控制通路取决于应用的特点,并且有很大任意

性。而宽度优先的结合方法是沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。

集成测试的策略:当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。

17、 决定软件可维护性的因素:⑴可理解性;⑵可测试性;⑶可修改性;⑷可移植性;⑸可重用性;

软件维护:是指在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.软件维护 是软件生命周期的最后一个阶段,也是持续时间最长代价最大的一个阶段。 软件的可维护性可以定义为:维护人员理解,改正和改动软件的难易程度。

18、 对象:是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数 据施加的操作,封装在一起所构成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。

对象的特点:①以数据为中心;②对象是主动的;③实现了数据封装;④本质上具有并行性;⑤模块 工程规模:此系统中应包含接受模块和信息处理与输出模块。 可能的解决方案及其评价 从三方面研究每种解决方法的可行性:

(1).技术可行性 使用现在的技术完全可以实现该系统

(2).经济可行性 这个系统的开发成本不高,节省的经济资源以及经济消息能够超过该系统的开发成本 (3).操作可行性 该教学事务管理系统在校院的各个办公室都可以实现,操作人员为在校师生,所以不存在技术、能力问题。 推荐行动方针 通过从技术,经济,可操作三方面的研究,分析的出结论,此系统是可行的。 16.构成E-R图的基本要素是实体型、属性和联系,其表示方法为:

· 实体型(Entity):用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。如果是弱实体的话,在矩形外面再套实线矩形。

· 属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值属性的话,再椭圆形外面再套实线椭圆。如果是派生属性则用虚线椭圆表示。

· 联系(Relationship):用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。 比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。(猜考画图,或25题) 第一章 软件工程介绍  软件的特性

1. 软件是设计开发的,而不是传统意义上的生产制造的。 2. 软件不会“磨损”。 3. 虽然整个工业向着基于构件的构造模式发展,然而大多数软件扔是根据实际的顾客需

求定制的。  计算机软件的七大分类:系统软件、应用软件、工程/科学软件、嵌入式软件、产品线软件、Web应用软件、人工智能软件。 

遗留系统发生系统演化的原因:1.软件需要修改其适应性,从而满足新的计算环境或者技术的需求;2.软件必须根据新的业务需求进行升级;3.软件必须扩展以具有与更多现代系统和数据库的协作能力;4.软件架构必须进行改建以适应多样化的网络环境。  软件神话:管理者,用户,从业者  软件的定义:程序、数据和文档。 

软件工程的目的就是为开发高质量的软件产品提供一个工程框架。 第二章 过程综述

 软件工程的三个要素:工具,过程,方法。

 通用软件过程框架:沟通,策划,建模,构建,部署。 

能力成熟度模型:第0级,不完全级;第1级,已执行级;第2级,已管理级;第三级,已定义级;第4级,已定量管理级;第5级,优化级。

第三章 过程模型

 简述惯例框架包含的主要活动:沟通、策划、建模、构建、部署。  简述瀑布模型所包含的主要框架活动:策划、建模、构建、部署。 

简述瀑布模型在实际运用中所面临的问题(缺点):“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成。

演化过程模型产生的背景:业务和产品需求经常变化、严格的交付时间、了解了核心产品和系统需求后没有定义产品或系统扩展的细节问题 

简述基于原型开发模型的软件开发过程:在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。 沟通-》快速策划-》建模快速设计-》构建模型-》部署交付品及反馈

 简述原型开发的缺点:1.为了使原型尽快的工作,没有考虑软件的总体质量和长期的可

维护性。2.为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。3.开发过程不便于管理  统一过程的三个特点:用例驱动,以架构为核心,迭代并增量

 简述统一过程(UP)的5个阶段的主要内容:起始,细化,构建,转换和生产  螺旋模型强调了其他模型均忽略了的(风险分析) 

横切关注点的定义:一个信用卡处理系统的核心关注点是借贷/存入处理,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等许多关注点,我们叫它横切关注点 第四章 敏捷视角下的过程 

软件工程的敏捷理念强调4个关键问题:1.具有控制力的自我组织团队对所开展工作的重要性;2.团队成员之间、开

发参与者与客户之间的交流与合作;3.对“变更代表机遇”的认识;4.以及强调快速软件交付以让客户满意。 

简述极限编程(XP)过程模型所包含的4个主要框架活动:策划,设计,编码,测试 第五章 系统工程

 计算机系统的6个系统要素:软件,硬件,人员,数据库,文档,规程

 Hatley-Pirbhai建模方法:用户界面,输入,系统功能和控制,输出,维护和自检  系统环境图(System Context Diagram)的表示方法(实例) 第六章 需求工程

 需求工程的过程:起始,导出,精化,协商,规格说明,确认和管理 

在项目(起始)阶段,软件工程师会询问一些似乎与项目无直接关系的问题,目的是对

问题、方案需求方、期望方案的本质、客户和开发人员之间初步的交流和合作的效果建立基本的谅解。

 为什么导出需求这么困难:范围问题,理解问题,易变问题。  用例的定义:讲述了能表达主题场景的故事:最终用户如何在一特定环境下和系统交互 

在需求工程的导出阶段,三个主要的需求收集活动是:主持人会议、QFD和用户场景开发 第七章 构建分析模型

 分析模型在系统描述和设计模型之间建立桥梁。

 分析模型必须实现的目标:1。描述客户需要什么;2。为软件设计奠定基础;3。定义在软件完成后可以被确认的一组需求。

 分析模型的所有元素都可以直接跟踪到设计模型。

 分析模型的4个元素:基于场景的元素,面向信息流的元素,基于类的元素,行为元素  UML泳道图是活动图的一种变形,可以让建模人员表示用例所描述的活动流,同时指示哪个参与者或分析类对活动矩形所描述的活动负责。

 UML状态图为每个类表现活动状态和导致这些活动状态变化的事件  UML顺序图说明事件如何引发一个对象到另一个对象的转移

 简述CRC建模的内容:CRC提供了一个简单方法,可以识别和组织与系统或产品需求相关的类。  使用UML类图来举例说明组合和聚合之间的区别  使用UML类图举例说明关联和依赖之间的区别

系统分析的经验原则(1) 系统开发是面向客户的,应从客户的角度考虑。

(2) 诸如系统开发生命周期之类的产品更新换代机构应该在所有的信息系统开发项目中建立起来。

(3) 信息系统开发的过程并不是一个顺序的过程,它允许步骤的重叠和倒转等。 (4) 如果系统的成功可能性受到很大限制时,应取消整个项目。 (5) 文档材料是系统开发生命周期中重要的可递交成果,应加以重视 第八章 设计工程 

简述良好设计的三个特征:1。设计必须实现所有包含在分析模型中的明确需求,而且必须满足客户期望的所有隐含需求;2。对于那些生成代码的人和那些进行测试以及随后维护软件的人而言,设计必须是可读的、可理解的指南;3。设计必须提供软件的全貌,从实现的角度说明数据域、功能域和行为域。  设计模型包含的四种元素是什么:数据/类设计、体系结构设计、接口设计、构建级设计

 软件体系结构的定义:软件的整体结构和这种结构为系统提供概念上完整性的方式  模块应该详细说明且精心设计以求在某个模块中包含的信息不被不需要这些信息的其他模块访问

重构的定义:是使用这样一种方式改变软件系统的过程:不改变代码设计的外部行为而是改进其内部结构

 举例说明逐步求精 

框架和设计模式之间的区别:框架能使应用程序的开发简单,价格低廉,但是开发框架不

是一件容易的事。它是一个需要领域和设计经验的反复过程。设计模式可以简化这个过程,因为它提供了对过去经验的抽象。框架能高度抽象同一领域内的问题,进而降低开发难度和强度。因此,在软件开发过程中把框架和模式配合起来使用,可以极大地提高软件的重用。框架是软件,而设计模式是软件的知识 第九章 进行体系结构设计 

简述软件体系结构的作用:1。软件体系结构的表示有助于对计算机系统开发感兴趣的各方(共利益者)开发交流;2。体系结构突出了早期设计决策,这些决策对随后的所有软件工程工作有深远的影响,同时对系统作为一个可运行实体的最后成功有重要作用。3。体系结构“构建了一个相对小的,易于理解的模型,该模型描述了系统如何构成以及其构建如何一起工作”

 软件体系结构的典型分类:以数据为中心,数据流体系结构,调用和返回体系结构,面向对象体系结构,层次体系结构(以图例来说明) 

体系结构环境图所包含的要素,以图例来说明 第十二章 软件测试策略

 简述软件测试策略的螺旋模型:单元测试,集成测试,确认测试,系统测试 

简述单元测试中驱动程序和桩程序的作用:驱动程序只是一个“主程序”,它接收测试用例数据,将这些数据传递给(将要测试的)构件并打印相关结果。桩程序的作用是替换那些从属于将要测试的构件或被其调用的构件。  集成测试的两种方式:一步到位和增量集成

 试以图例描述自顶向下集成测试方法的过程  简述确认测试的两种主要方法:α测试和β测试  系统测试的主要方法:恢复测试,安全测试,压力测试,性能测试  三种调试方法:蛮力法,回溯法,原因排除法 第十三章 测试战术

 好的测试所具有的特性:1。好的测试具有较高的发现错误的可能性;2。好的测试是不冗余的;3。好的测试应该是“最佳品种”4。好的测试应该既不太简单也不太复杂。 

黑盒测试的定义:所谓黑盒测试是指在完全不考虑程序的内部结构和处理过程的前提下,在程序接

口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接受输入数据产生正确的输出信息,并且保持外部信息的完整性.因此,又称为功能测试。

白盒测试的定义:所谓白盒测试就是在知道产品内部工作过程或程序内部结构和处理过程的前提下, 检验产品内部动作是否按照规格说明书的规定正常进行或按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作的测试方法.因此白盒测试又称为结构测试或逻辑测试。  基本路径测试的环复杂度计算方法和独立路径集合的识别V(G)=E-N+2;其中E为流图

的边数,N为流图的结点数。  控制结构测试的3个主要方法:条件测试,数据流测试,循环测试  黑盒测试的两个主要方法:等价类划分,边界值分析  类级可应用的测试方法:随机测试,划分测试  面向对象的类级划分测试的主要方法:基于状态划分,基于属性划分,基于类别划分 

以图例说明从行为模型导出测试用例 第十四章 产品度量

 软件度量为产品内部属性的质量评估提供了一种(定量)方法,从而可以是软件工程师在产品开发出来之前进行质量评估

 软件测量的5个主要活动:公式化,收集,分析,解释,反馈 

面向目标的软件测量(GQM范型)的内容:1。确定特定过程活动的明确的测量目标或将要评估的产品特性;2。定义一组必须回答的问题以达到目标;3。确定被良好公式化的度量以帮助回答这些问题 

有效软件度量的属性1。简单的和可计算的2。在经验上和直觉上有说服力3。一致的和客观的4。单位和量纲的使用是一致的。5。编程语言的独立性6。高质量反馈的有效机制

第四篇:软件工程复习知识点总结

1. 软件危机的概念,内容,原因及消除的途径; 2. 软件工程的定义,基本原理;

3. 软件工程方法学的基本概念、内容;

4. 软件生命周期的具体内容,每一个阶段的任务是什么?结合具体的工程例子来理解做软件项目主要分那几个阶段。

5. 理解几个典型软件过程的内容及其优点与缺点:瀑布模型、增量模型、快速原型模型、螺旋模型、喷泉模型等; 6. 了解可行性研究中的任务和过程;

7. 掌握系统流程图的概念和方法,会从具体的案例中抽象出系统流程图; 8. 掌握数据流图的概念和方法,会从具体的案例中画出0层数据流图和功能级数据流图;

9. 掌握数据字典的内容、方法、用户和实现; 10.了解成本/效益分析方法;

11.了解需求分析过程中任务是什么. 12.理解面向数据流自顶向下逐步求精的方法和意义;

13.理解分析及建模的意义,需求分析中应该建立哪三种模型?有哪些工具来帮助建立这些模型?

14.掌握实体关系(E-R)图的概念,内容和实现方法,能结合具体实例建立实体关系图;

15.掌握状态图的概念,内容,实现方法和作用;

16.掌握层次方框图、warnier图、IPO图的概念,内容和作用; 17.有穷状态机的概念和内容;

18.总体设计是做什么?总体设计的过程是怎样的?总体结构设计的目的是什么?

19.掌握几个设计原理,理解他们的内容和意义;

20.掌握耦合和内聚的概念和内容,理解这些原理对设计有哪些指导意义; 21.耦合包含了哪些类型?每个类型的具体内容是什么?要求能通过程序代码识别出耦合类型。

22.启发性规则的内容及部分概念。 23.层次图、HIPO图和结构图的内容;

24.掌握面向数据流的设计方法,了解其中涉及到的概念(变换流,事务流),结合例子理解变换分析的具体过程。 25.详细设计是做什么? 26.什么是结构程序设计?

27.人机界面设计问题包含哪些?

28.掌握设计过程中用到的工具:程序流程图的概念,内容和方法;盒图的概念、内容和方法;会结合实例使用这些工具;掌握PAD 图的概念和内容;掌握判定表的概念和内容。要结合实例来掌握它们。

29.了解结合Jackson图来掌握面向数据结构的设计方法;会用Jackson程序设计方法对具体的实例进行设计。

30.掌握几种测试:单元测试、集成测试、确认测试、白盒测试技术和黑盒测试技术;掌握它们的概念,内容和方法;

31.对每一种测试方法,理解其具体细节:比如理解什么是渐增式测试和非渐增式测试,什么是Alpha测试和Beta测试.....;

1 32.结合G.J.Myers的观点理解软件测试的目的;(教材p150) 33.掌握白盒测试的技术细节(比如:掌握逻辑覆盖中的8个覆盖点;掌握基本路径测试,会根据过程设计结果画出相应的流图;会计算流图的环形复杂度;会计算出线性独立路径的基本集合);掌握黑盒测试的技术细节; 34.理解软件维护的定义、特点和维护过程;

2 自测练习题:

一、选择题

1.瀑布模型的存在问题是(

A.用户容易参与开发

B.缺乏灵活性

C.用户与开发者易沟通

D.适用可变需求

2.可行性分析是在系统开发的早期所做的一项重要的论证工作,它是决定该系统是否开发的决策依据,因必须给出(

)的回答。

A.确定

B.行或不行

C.正确

D.无二义

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.对谁做

8.若有一个计算类型的程序,它的输入量只有一个X,其范围是[-1.0,1.0],现从输入的角度考虑一组测试用例:-1.001,-1.0,1.0,1.001。设计这组测试用例的方法是(

)

A.条件覆盖法

B.等价分类法

C.边界值分析法

D.错误推测法

9.研究开发所需要的成本和资源是属于可行性研究中的研究的一方面。( ) A.技术可行性

B.经济可行性 C.社会可行性

D.法律可行性 10.模块的内聚性最高的是( ) A.逻辑内聚

B.时间内聚 C.偶然内3 聚

D.功能内聚

12. ( )是把对象的属性和操作结合在一起,构成一个独立的对象,其内部信息对外界是隐蔽的,外界只能通过有限的接口与对象发生联系。 A 多态性 B 继承 C 封装 D 消息

二、填空题

1. 将数据流图映射为程序结构时, 所用映射方法涉及信息流的类型。其信息流分为 和 两种类型。

2.为了便于对照检查,测试用例应由输入数据和预期的_ _____两部分组成。 3. 软件由程序、

组成。

4. 在学校中,一个学生可以选修多门课程,一门课程可以由多个学生选修,那么学生和课程之间是

关系。

5. 软件工程釆用层次化的方法,每个层次都包括 、方法、 三要素。 6.一个模块拥有的直属下级模块的个数称为 ,一个模块的直接上级模块的个数称为 。

三、名词解释题 1.内聚性 2.软件危机 3.完善性维护 4. 数据字典 5. 程序流图 6. 驱动程序 7. 数据耦合 8. 类图

9. Alpha测试与Beta测试 10. 软件产品

四、简答题

1. 黑盒测试旨在测试软件是否满足功能要求,它主要诊断哪几类错误? 2. 瀑布模型、增量模型的优缺点

3. 程序流程图或者盒图的5种基本结构的画法 4. 简述过程设计语言(PDL)的特点。

5. 根据特定的项目,你会考虑哪些因素来选择合适的程序设计语言。 6. (教材P141) 画出下列伪码程序的程序流程图和盒图 START IF p THEN WHILE q DO f END DO ELSE BLOCK 4 g n END BLOCK END IF STOP 7. (教材P141)研究下面的PDL语言(过程设计语言,也称伪码程序): LOOP: Set I to (START + FINISH)/2 If TABLE(I)=ITEM goto FOUND If TABLE(I)ITEM Set FINISH to (I-1) If (FINISH - START) > 1 goto LOOP If TABLE(START)=ITEM goto FOUND If TABLE(FINISH) = ITEM goto FOUND Set FLAG to 0 Goto DONE FOUND: Set FLAG to 1 DONE:Exit 1.画出程序流图和N-S盒图。 2.此程序的功能是什么?

五、综合题(三题分别5,7,8分,共20分)

1.某培训中心要研制一个计算机管理系统。它的业务是: 将学员发来的信件收集分类后,按几种不同的情况处理。

如果是报名的,则将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文件、课程文件上登记,并开出报告单交财务部门,财务人员开出发票给学生。

如果是想注销原来已选修的课程,则由注销人员在课程文件、学生文件和帐目文件上做相应的修改,并给学生注销单。

3)如果是付款的,则由财务人员在帐目文件上登记,也给学生一张收费收据。 要求:

(1).对以上问题画出功能级数据流程图。 (2).画出该培训管理的软件结构图。

2.某旅馆的电话服务如下:

可以拨分机号和外线号码。分机号是从7201至7299。外线号码先拨9,然后是市话号码或长话号码。长话号码是以区号和市话号码组成。区号是从100到300中任意的数字串。市话号码是以局号和分局号组成。局号可以是455,466,888, 552中任意一个号码。分局号是任意长度为4的数字串。

要求:写出在数据字典中,电话号码的数据条目的定义即组成。

3. 软件测试的过程包括哪些?黑盒测试与白盒测试的具体内容是什么?它们分别针对哪几类错误?

5

一.集成测试中自顶向下集成和自底向上集成的优缺点?

1、自顶向下集成 优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。

缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。 适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。

2、自底向上集成

优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。

缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。

适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

二.简述螺旋模型的基本开发过程。 正确答案

(1)需求定义。利用需求分析技术理解应用领域,获取初步的用户需求,制定项目开发计划。

(2)风险分析。根据初始需求或改进意见评审可选用的方案,给出消除或减少风险的途径。

(3)工程实现。利用快速原型构造方法针对已知的用户需求生成快速原型。 (4)评审。将原型提交用户使用并征询用户改进意见。

上述过程将不断迭代,直至给出用户满意的目标软件产品。

三.一般而言,衡量某种程序语言是否适合于特定的项目,应考虑哪些因素? (1)应用领域; (2)算法和计算复杂性; (3)软件运行环境; (4)用户需求中关于性能方面的需要; (5)数据结构的复杂性; (6)软件开发人员的知识水平; (7)可用的编译器与交叉编译器。

四.名词解释:

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象

软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的和隐含特征相一致的程度。

恢复测试是指采取各种人工干预方式强制性地使软件出错,使其不能正常工作,6 进而检验系统的恢复能力。

类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等

数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递

7

第五篇:软件工程导论知识点总结(整理)

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

第一章 软件工程概论

1.什么是软件危机?

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这 些问题表现在以下几个方面:

(1)用户对开发出的软件很难满意。

(2)软件产品的质量往往靠不住。

(3)一般软件很难维护。

(4)软件生产效率很低。

(5)软件开发成本越来越大。

(6)软件成本与开发进度难以估计。

(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。

2.为什么会产生软件危机?

(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。

(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。

(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。

3.怎样克服软件危机?

(1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。

(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。

(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。

总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

4.构成软件项目的最终产品:

应用程序、系统程序、面向用户的文档资料和面向开发者的文档资料。

5.什么是软件生存周期?

软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。

6.软件生存周期为什么划分成阶段?

(1) 任何一个阶段的具体任务不仅独立,而且简单,便于不同人员分工协作,从而降低整个软件开发工作的困难程度。

(2) 可以降低每个阶段任务的复杂程度,简化不同阶段的联系,有利于工程的组织管理,也便于采用良好的技术方法。

(3) 使软件开发的全过程以一种有条不紊的方式进行,保证软件的质量,特别是提高了软件的可维护性。

7.应该怎样来划分阶段?

(1)每一个阶段的任务尽可能独立;

(2)同一阶段内的任务性质尽可能相同;

(3)每一个阶段任务的开始和结束有严格的标准。

8.软件开发模型有几种?它们的开发方法有可特点?

软件开发模型有瀑布型、渐增型和变换型。

瀑布型开发方法是按照软件生存周期的划分依次实施,每一个阶段有明确规定的任务。它的特点:

(1)各个阶段的顺序性和依赖性;

(2)划分逻辑设计与物理设计,尽可能推迟程序的物理实现;

(3)每个阶段必须完成规定的文档,对其中问题通过复审及早发现,及早解决。

渐增型开发方法及特点:

(1) 从部分需求出发,先建立一个不完全的系统,通过测试运行该系统取得经验和信息反馈,加深对软件需求的理解,进一步使系统扩充和完善。如此反复,直至软件人员和用户对所设计完成的软件系统满意为止。

(2) 在渐增型开发下的软件是随软件开发的过程而逐渐形成的。

(3) 渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和完善系统。多数研究性质的试验软件,一般采用此方法。

变换型开发方法及特点:

(1)从软件需求的形式化说明出发,经过一系列的程序变换,得到最终的程序系统。

(2)该方法必须有严格的数学理论和形式化技术的支持。

9.什么是软件工程?

软件工程是指导计算机软件开发和维护的工程学科。

(1) 它采用工程的概念、原理、技术和方法来开发和维护软件;

(2) 它将管理技术与当前经过时间考验的而证明是正确的技术方法结合起来;

(3) 它强调使用生存周期方法学和结构分析和结构技术;

(4) 经过人们长期的努力和探索,围绕着实现软件优质高产这个目标,从技术到管理两个方面做了大量的努力,逐渐形成了"软件工程学"这一新的学科。

10.什么是软件工程环境: 方法与工具的结合,加上配套的软、硬件支持称为软件工程环境。它能支持开发者按照软件工程的方法,全面完成生存周期中的各项任务。

第二章 可行性研究

1. 问题定义的任务和主要工作?

问题定义的任务:将用户提出的要求具体化、定量化;确定研制系统的范围,明确研制的边界。

问题定义阶段的工作:

(1) 通过调查研究,了解系统需求;

(2) 确定系统的功能需求、性能需求、可靠性需求、安全及保密性、资源、开发费用及开发进度等的需求;

(3) 问题定义阶段的产品--系统目标与范围说明书。

2. 可行性研究目的?

确定在问题定义中所提出的问题是否值得去解,在限制条件下,问题能否解决。

3.可行性研究的任务?

(1) 进一步分析和澄清问题的定义,在澄清问题的基础上,导出系统的逻辑模型;

(2) 从系统逻辑模型中,选择问题的若干种主要解法,研究每一种解法的可行性,为以后的行动提出建议;

(3) 如果问题没有可行的解,建议停止系统开发;如果问题有可行的解,应该推荐一个较好的解决方案,并为工程制定一个初步的计划。

4.可行性研究包括哪几方面的内容?

(1)技术可行性:现有技术能否实现本系统,现有技术人员能否胜任,开发系统的资源能否满足;

(2)经济可行性:经济效益是否超出开发成本;

(3)操作可行性:系统操作在用户内部行得通吗?

(4)法律可行性:新系统开发是否会侵犯他人、集体或国家利益,是否违反国家法律。

5.可行性研究的步骤?

(1)复查系统的规模和目标;

(2)研究目前正在使用的系统,总结现有系统的优劣,提出新系统的雏形; (3)导出新系统的高层逻辑模型; (4)推荐建议方案;

(5)推荐行动方针;

(6)书写计划任务书(可行性报告);

(7)提交审查。

6. 可行性研究报告的主要内容?

可行性分析的结果是可行性研究报告,内容包括:

(1) 系统概述:说明开发的系统名称,提出单位和开发单位。

(2) 可行性研究的前提:系统目标;要求;约束和限制;可行性研究的基本准则等。

(3) 对现有系统的分析:处理流程,图示说明现有系统的处理流程和数据流程;现有系统存在的问题。

(4) 系统需求:主要功能;主要性能及其要求;操作要求;信息要求;限制性要求。

(5) 建议系统:系统目标;处理流程;系统结构,功能,性能;系统技术可行性;投资和效益分析;操作可行性;法律可行性。

(6) 其它可选方案:与国内外同类型方案的比较;提出一两个可行性方案供论证和探讨。

(7) 制定下一阶段的预算。

(8) 结论性意见:由用户方、设计方和投资方共同签署意见。

第三章 需求分析

1. 需求分析的描述工具有哪些?

有数据流图、数据字典、判定表、判定树、结构化自然语言、层次方框图、Warnier图、IPO图和需求描述语言等。

2. 需求分析的基本任务是什么?

准确定义未来系统的目标,确定为了满足用户的需要系统必须做什么。

3. 怎样建立目标系统的逻辑模型?要经过哪些步骤? 建立目标系统的逻辑模型的过程也就是数据流图的分解过程。

4. 什么是结构化分析?它的结构化体现在哪里?

结构化分析:使用数据流程图、数据字典、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化说明书的目标文档-需求规格说明书。

结构化体现在将软件系统抽象为一系列的逻辑加工单元,各单元之间以数据流发生关联。

5. 软件需求规格说明书由哪些部分组成?

组成包括:

(1) 引言:编写目的、背景说明、术语定义及参考资料等。 (2) 概述主要功能、约束条件或特殊需求。 (3) 数据流图与数据字典。

(4) 用户接口、硬件接口及软件接口。 (5) 性能需求、属性等。

(6) 其它需求,如数据库、操作及故障处理等。

6. 为什么数据流图要分层?画分层的DFD要遵循哪些原则?

分层的目的:便于逐步细化、结构清晰。 画分层的DFD要遵循哪些原则: (1)父图与子图之间数据要平衡。

(2)分解的深度和层次达到使加工足够简单、易于理解的基本加工为止。

(3)区分局部文件和局部外部项(局限于数据流中某一层或某几层的文件和外部项)。 (4)不要把控制流作为数据流。 (5)忽略琐碎的枝节。

(6)每个数据流要有一个合适的名字,尽量使用现实系统中有具体意义的名字。

7. 系统流程图与数据流程图有什么区别?

系统流程图描述系统物理模型的工具,数据流程图描述系统逻辑模型的工具。

系统流程图从系统功能的角度抽象的描述系统的各个部分及其相互之间信息流动的情况。

数据流程图从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的工作状况。

8.数据字典包括哪些内容?它的作用是什么?

数据字典是描述数据流图中数据的信息的集合。它对数据流图上每一个成分:数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。对用户来讲,数据字典为他们提供了数据的明确定义;对系统分析员来讲,数据字典帮助他们比较容易修改已建立的系统逻辑模型。

9.描述加工逻辑的工具有哪些?

判定树、判断表和结构化语言等。

第四章 总体设计

1. 系统设计包括哪两个阶段?

系统设计包括总体设计与详细设计两个阶段。

2. 总体设计的主要任务是什么?

总体设计的主要任务是完成软件结构的设计,确定系统的模块及其模块之间的关系。

3. 什么是模块?模块具有哪几个特征?总体设计主要考虑什么特征?

模块是数据说明、可执行语句等程序对象的集合,可以单独命名且可通过名字来访问。

模块具有输入和输出(参数传递)、功能、内部数据结构(局部变量)和程序代码四个特性。

概要设计主要考虑输入、输出(参数传递)和功能两个特性。

4. 什么是模块化?模块设计的准则?

模块化是按规定的原则将一个大型软件划分为一个个较小的、相对独立但又相关的模块。

模块设计的准则:

(1) 改进软件结构, 提高模块独立性:在对初步模块进行合并、分解和移动的分析、精化过程中力求提高模块的内聚,降低藕合。

(2) 模块大小要适中:大约50行语句的代码,过大的模块应分解以提高理解性和可维护性;过小的模块,合并到上级模块中。

(3) 软件结构图的深度、宽度、扇入和扇出要适当。一般模块的调用个数不要超过5个。

(4) 尽量降低模块接口的复杂程度;

(5) 设计单入口、单出口的模块。

(6) 模块的作用域应在控制域之内。

5. 变换型数据流由哪几部分组成?

变换型结构由三部分组成:传入路径、变换(加工)中心和传出路径。 6. 变换分析设计的步骤?

(1) 区分传入、传出和变换中心三部分,划分DFD图的分界线; (2) 完成第一级分解:建立初始SC图的框架; (3) 完成第二级分解:分解SC图的各个分支;

(4) 对初始结构图按照设计准则进行精化与改进。

7. 事务型数据流由哪几部分组成?

事务型结构由至少一条接受路径、一个事务中心与若干条动作路径组成。

8. 事务分析设计的步骤?

(1) 在DFD图中确定事务中心、接收部分(包含全部接收路径)和发送部分(包含全部动作路径);

(2) 画出SC图框架,把DFD图的三部分分?quot;映射"为事务控制模块,接收模块和动作发送模块.一般得到SC图的顶层和第一层(如果第一层简单可以并入顶层);

(3) 分解和细化接收分支和动作分支,完成初始的SC图;

(4) 对初始结构图按照设计准则进行精化与改进。

9. 比较层次方框图与结构图是的异同?

(1) 层次方框图描绘数据的层次结构, 结构图描绘的是软件结构。

(2) 二者都采用多层次矩形框树形结构。层次方框图的顶层矩形框代表完整的数据结构, 下面各层矩形框依次代表上个框数据的子集;结构图

是在层次图的每一个方框内注明模块的名字或主要功能,方框之间的直线表示模块的调用关系,用带注解的箭头表示模块调用过程中传递的信息。

第五章 详细设计

1. 详细设计的目的? 为软件结构图(SC图或HC图)中的每一个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出清晰的描述.

2. 详细设计的主要任务? 编写软件的“详细设计说明书”.软件人员要完成的工作:

(1) 为每一个模块确定采用的算法, 选择某种适当的工具表达算法的过程,写出模块的详细过程描述. (2) 确定每一模块使用的数据结构. (3) 确定模块结构的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及关于模块输入数据、输出数据及局部数据的全部细节. (4) 为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试.

3. 结构化程序设计的基本原则? 在详细设计中所有模块都使用单入口、单出口的顺序、选择、循环三种基本控制结构. 4. 比较面向数据流和面向数据结构两类设计方法的异同? 相同点:

(1) 遵守结构程序设计“由顶向下”逐步细化的原则,并以其为共同的基础;

(2) 均服从“程序结构必须适应问题结构”的基本原则,各自拥有从问题结构(包括数据结构)导出程序结构的一组映射规则。

不同点:

(1) 面向数据流的设计以数据流图为基础,在分析阶段用DFD表示软件的逻辑模型,在设计阶段按数据流类型,将数据流图转换为软件结构。面向数据结构的设计以数据结构为基础,从问题的数据结构出发导出它的程序结构。

(2) 面向数据流的设计的最终目标是软件的最终SC图,面向数据结构的设计的最终目标是程序的过程性描述。

5. 比较Jackson方法和LCP方法的异同?

Jackson与LCP设计方法都是以数据结构为出发点,以程序的过程描述为最终目标,设计步骤基本相似。它们的主要差别是:

(1)使用不同的表达工具,其中LCP方法中的表达工具Warnier图

比Jackson设计方法中的表达工具Jackson图有更大的通用性; (2)Jackson方法的步骤和指导原则有一定的灵活性,而LCP设计

方法则更加严密。

6. 详细设计的描述工具应具备什么功能?

无论哪类描述工具不仅要具有描述设计过程,如控制流程、处理功能、数据组织及其它方面的细节的能力,而且在编码阶段能够直接将它翻译为用程序设计语言书写的源程序。

第六章

编码

1. 编码的任务?

使用选定的程序设计语言,把模块的过程性描述翻译为用语言书写的源程序(源代码)。

2. 对源程序基本要求?

源程序要求:正确可靠、简明清晰、效率高。 (1)源程序的正确性是对程序质量的最基本要求;

(2)源程序的简明清晰,便于验证源代码和模块规格说明的一致性,容易进行测试和维护;

(3)对于大多数模块,编码时应该把简明清晰放在第一位;

(4)除了编码阶段产生源代码外,在测试阶段也需要编写一些测试程序,用于对软件的测试。

3. 程序设计语言的特点? (1) 名字说明:程序中使用对象的名字,能为编译程序所检查和识别; (2) 类型说明:定义对象的类型,确定该对象的使用方式;

(3) 初始化:为变量提供适当的初始值或由系统给变量赋一特殊的表明未初始化的值; (4) 对象的局部性:程序中真正需要的那部分才能访问的对象; (5) 程序模块:控制程序对象的名字;

(6) 循环控制结构:如FOR语句、WHILE-DO语句、REPEAT-UNTIL语句等; (7) 分支控制结构:如IF语句、CASE语句等;

(8) 异常处理:为程序运行过程中发生的错误和意外事件提供检测和处理上的帮助; (9) 独立编译:能分别编译各个程序单元。

4. 选择程序设计语言需要考虑的因素?

(1) 选择用户熟悉、便于用户维护的语言。

(2) 选择目标系统的环境中可以提供的编译程序所能选用的语言。 (3) 选择可以得到的软件工具,能支持程序开发中可以利用的语言。

(4) 根据工程规模的大小、目标系统应用范围,如实时应用选择Ada语言或汇编语言,系统软件开发选择C语言或汇编语言,软件开发中若含有大量数据操作则选择SQL、dBASE等数据库语言等。

(5) 选择程序员熟悉的语言。

(6) 选择标准化程度高、程序可移植性好的语言。

(7) 根据算法与计算的复杂性、数据结构的复杂性选择。如对于系统程序和结构复杂的应用程序,选择支持数组、记录(或结构)与指针动态数据结构的Pascal语言或C语言。

(8) 根据实时要求系统需要的响应速度和效率选择相应的语言。

5. 编码风格的指导原则。

(1) 源程序:包括适当的标识符、适当的注解、程序清单的合理布局与清晰;

(2) 数据说明:数据结构或数据类型的说明次序标准化;变量名称尽量有意义;对复杂的数据结构在注解中要说明在程序设计中实现这个数据结构的方法。

(3) 语句的构造简单明了:不要为节省空间将多个语句写在同一行;尽量避免复杂的条件及“非”条件的测试;避免大量使用循环嵌套和条件嵌套;括号的使用是为了使逻辑表达式和算术表达式的运算顺序清晰直观。

(4) 效率:考虑程序运行的时间存储器效率、输入/输出的效率;在处理程序正确性、清晰与效率之间的关系时先求程序正确后求快;先求清楚后求快;保持程序简单以求快;书写清楚,不为“效率”牺牲清晰。

6. 第四代语言(4GL)应具备哪些的特征?

(1) 具有很强的数据管理能力,能对数据库进行有效的存取、查询和其它有关操作; (2) 能提供一组高效的、非过程化的命令,组成语言的基本语句,编程时用户只需用这些命令说明“做什么”,不必描述实现的细节;

(3) 能满足多功能、一体化的要求。为此,语言中除必须含有控制程序逻辑与实现数据库操作的语句外,还应包括生成与处理报表、表格、图形,以及实现数据运算和分析统计功能的各种语句,共同构成一个一体化的语言,以适应多种应用开发的需要。

第七章

软件测试

1. 软件测试的基本任务?

软件测试是按照特定的规则,发现软件错误的过程;好的测试方案是尽可能发现迄今尚未发现错误的测试;成功的测试方案是发现迄今尚未发现错误的测试;

2. 测试与调试的主要区别?

(1) 测试从一个侧面证明程序员的失败;调试证明程序员的正确;

(2) 测试从已知条件开始,使用预先定义的程序,且有预知的结果,不可预见的仅是程序是否通过测试;调试从不可知内部条件开始,除统计性调试外,结果是不可预见的;

(3) 测试有计划并且要进行测试设计;调试不受时间约束;

(4) 测试是发现错误、改正错误、重新测试的过程;调试是一个推理的过程;

(5) 测试执行是有规程的;调试执行要求程序员进行必要的推理;

(6) 测试由独立的测试组在不了解软件设计的件下完成;调试由了解详细设计的程序员完成;

(7) 大多数测试的执行和设计可由工具支持;调试用的工具主要是调试器。

3.人工复审的方式和作用? 人工复审的方式:代码会审、走查和排练和办公桌检查; 人工复审的作用:检查程序的静态错误。

4.什么是黑盒测试?黑盒测试主要采用的技术有哪些? 黑盒测试:也称为功能测试,它着眼于程序的外部特征,而不考虑程序的内部逻辑结构。测试者把被测程序看成一个黑盒,不用关心程序的内部结构。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

黑盒测试主要采用的技术有:等价分类法、边沿值分析法、错误推测法和因果图等技术。

5.什么是白盒测试?白盒测试主要采用的技术有哪些? 测试者了解被测程序的内部结构和处理过程,对程序的所有逻辑路径进行测试,在不同点检查程序状态,确定实际状态与预期状态是否一致。

白盒测试主要采用的技术有:路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。

6. 路径测试技术中几种主要覆盖的含义?举例说明? 语句覆盖:至少执行程序中所有语句一次。

判定覆盖:使被测程序中的每一个分支至少执行一次。故也称为分支覆盖。 条件覆盖:执行所有可能的穿过程序的控制路流程。

条件组合测试:设计足够的测试用例,使每个判定中的所有可能条件取值组合至少执行一次。

7. 等价分类法的测试技术采用的一般方法?举例说明? (1) 为每个等价类编号;

(2) 设计一个新的测试方案,以尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步骤,直到所有有效等价类被覆盖为止。

(3) 设计一个新的测试方案,使它覆盖一个尚未被覆盖的无效等价类, 重复这一步骤,直到所有无效等价类被覆盖为止。

8. 软件测试的一般步骤? 单元测试、子系统测试、系统测试、验收测试、平行测试。

9. 比较集成试的两种方式的优劣? 非渐增式测试方式:分别测试模块,再把所有模块按设计要求放在一起组成所要的程序。该方法编写测试软件工作量大,模块间的接口错误发现得晚,错误定位较难诊断,总体测试有的错误容易漏掉,测试时间相对较少,可以并行测试所有模块,能充分利用人力,加快工程进度。。

渐增式测试方式:把下一个要测试的模块,同已经测试好的那些模块结合起来进行测试。该方法利用已测试过的模块作测试软件,开销小,较早发现模块间的接口错误,错误定位往往和最近入的模块相关,对已测试好的模块可在新加入模块的条件下受到新的检验,测试更彻底,需要较多的测试时间,不能并行测试。 总的来说,渐增式测试方法比较好。

10.软件测试的策略?

(1) 在任何情况下都应使用边界值分析的方法。 (2) 必要时用等价类划分法补充测试方案。 (3) 必要时再用错误推测法补充测试方案。 (4) 对照程序逻辑,检查已设计出的测试方案。

(5) 根据对程序可靠性的要求采用不同的逻辑覆盖标准,再补充一些测试方案。

第八章 软件维护

1. 为什么说软件的维护是不可避免的?

因为软件的开发过程中,一般很难检测到所有的错误,其次软件在应用过程中需要随用户新的要求或运行环境的变化而进行软件的修改或完成功能的增删等,为了提高软件的应用水平和使用寿命,软件的维护是不可避免的。

2. 软件的维护一般分为哪几类?

改正性维护:满足用户对已开发产品的性能与运行环境不断提高的要求,进而达到延长软件寿命的目的。

适应性维护:对程序使用期间发现的程序错误进行诊断和改正的过程,配合变化了的环境进行修改软件的活动;

完善性维护:满足用户在使用过程中提出增加新的功能或修改已有功能的建议而进行的工作;

预防性维护:为了改善未来的可维护性或可靠性而修改软件的工作。

3. 影响软件维护的因素有哪些?

开发方法:采用模块化详细设计文档有助于理解软件的结构、界面功能和内部流程;开发过程中严格而科学的管理规划及清晰可靠的文档资料对发生错误后的理解与纠错是至关重要的;开发过程中模块的独立程度越高,对软件修改越容易,对软件的改进和移植越方便。

开发条件:软件开发及维护人员的水平决定了软件开发的质量和维护的效率;开发过程中使用标准的程序设计语言和标准的操作系统接口,可以大大提高软件的可维护性;在测试过程中用例的有效性,可极大地减少软件存在的错误;其次使用规范化的文档资料可为维护提供更好的依据。

4. 软件维护困难主要表现在什么方面?

(1) 一般来讲,维护人员对开发人员写的程序及文档,理解都比较困难,对维护工作不会喜欢;

(2) 维护持续时间都很长,在开发人员不在现场的轻快下,维护软件通常是很困难的;

(3) 绝大多数软件在设计时对将来的软件修改都没有考虑或考虑不多,尤其未能在设计中强调并认真解决好模块的独立性,使软件的修改既困难又易发生差错。

5. 决定软件可维护性的因素?

(1) 软件的可理解性、可测试性、可修改性;

(2) 文档描述符合要求、用户文档简洁明确、系统文档完整并且标准。

6. 软件价格应该计入维护成本吗?为什么?

在软件的生命周期中,软件维护的工作量非常大,不同应用领域的维护成本差别也很大。一般大型软件的维护成本远远高于开发成本若干倍。因此软件价格中应该计入维护成本。

第九章 软件工程管理

1. 软件工程管理的内容?

(1) 费用管理: 对软件开发进行成本核算,使软件生产按照商品生产的规律办事。包括:以简单、科学方法估算软件开发费用,作为签定开发合同的根据;管理开发费用的有效使用,即用经济手段来保证产品如期按质完成。

(2) 质量管理: 按项目的质量保证计划,确保各个开发阶段的开发和维护工作全部按软件工程的规范进行,保证软件产品的质量。

(3) 配置管理:通过对于程序、文档和数据的各种版本所进行的管理,保证资料的完整性与一致性。

(4) 项目管理:制定《项目实施计划》,按照计划的内容组织和实施软件的工程化生产。最终目标是以合理的费用和进度,圆满完成计划所规定的软件项目。

2. 软件项目有哪些特点?

(1) 软件项目与其他任何产业项目不同,它是算法、思想、概念、组织、流程、效率、优化等的融合体;

(2) 开发软件项目产品,在多数情况下,用户给不出明确的想法和要求。

(3) 在开发过程中,程序及其相关的文档资料常常需要修改,在修改过程中又可能带来新的问题,且这些问题要在很久以后才会发现。

(4) 在研制开发过程中,文档资料是不可缺少的,但工作量又是巨大的,往往也是人们不愿去作的。

(5) 参加软件项目的工作人员,要求具有一定的业务水平和实际工作经验,而很难完全避免的人员流动,对工作的影响是很大的。离开的人员不仅带走了重要的信息,而且带走了工作经验。

3. 软件成本估算的一般方法?

自顶向下估计:首先估算出项目总的开发成本,然后在项目内部进行成本分配。由少数专家参与,依靠他们过去的经验,将要开发的软件与过去开发过的软件进行"类比",以估计新的软件开发所需要的工作量和成本。

自底向上估计:将开发任务分成若干子任务,子任务又分成子子任务,直到每一个单元内容足够明确为止;把各个任务单元的成本估计出来,汇合成项目的总成本。该方法得到的结果比较接近实际。

4. 为什么在软件开发中,不能用简单增加人员的方法来缩短开发时间?

大量软件开发实践说明:向一个已经延迟的项目追加开发人员,可能使它完成得更晚。因为当开发人员以算术级数增长时,而人员之间的通信将以几何级数增长,往往"得不偿失"。

5. 影响软件质量的主要因素有哪些?

(1) 产品运行:正确性、风险性、效率、完整性、健壮性和可用性;

(2) 产品修改:可理解性、可维护性、灵活性、可测试性;

(3) 产品转移:可移植性、可重用性和互运行性。

上一篇:如何优化英语教学下一篇:如何做教研室主任

本站热搜