第一篇:《软件工程导论》第五版 张海藩 编著 总结
《软件工程导论》第五版 张海藩 编著 总结
分类: Computer System2011-01-04 10:14 6417人阅读 评论(10)收藏 举报
测试数据结构工具任务文档软件测试
总结重点: Unit1
软件危机包含两方面的问题:一是如何开发软件,怎样满足人们对软件日益增长的需求?二是如何维护软件,使它们持久地满足人们的要求。
软件工程学定义:把软件当作一种工业产品,采用工程学的原理来管理和组织软件的开发和维护,称为软件工程。
软件是指程序、数据和文档三者共同构成的配臵。
包含与数据处理系统操作有关的程序、规程、规则以及相关文档的智力创作称为软件。文档是描述程序开发过程的,是智力创作的真实记录,是创作活动的历史档案和结晶。软件的描述性定义:软件由计算机程序,数据结构和文档组成。
软件质量定义为“与软件产品满足规定的和隐含的需求能力有关的特征和特性的全体” 具体来说: 1)软件产品中能满足给定需求的性质和特性的总体; 2)软件具有所期望的各种属性的组合程度。
将软件质量属性划分为六个特性(功能性、可靠性、易用性、效率、维护性和可移植性),这六个属性是面向用户的观点——面向管理的观点,且是定性描述的。
软件质量度量体系:内部度量可用于开发阶段的非执行软件产品,外部度量只能在生存周期过程中的测试阶段和任何运行阶段使用。
软件工程项目的基本目标:(1)低成本;(2)满足功能要求;(3)高性能;(4)易移植;(5)易维护。软件工程方法学就是要从技术和管理上提供如何去设计和维护软件。
软件开发方法:面向数据流(约旦)方法、面向数据结构方法、面向对象方法。
结构程序设计是进行以模块功能和处理过程设计为主的详细设计的基本原则。它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。
用来辅助软件开发、运行、维护、管理、支持等过程中活动的软件称为软件工具(CASE)。
软件生存周期定义:软件产品从形成概念开始,经过开发、使用和维护,直到最后不再使用的整个过程。各阶段的任务彼此间尽可能的相对独立,同一阶段内各项任务的性质尽可能的相同。软件的开发就是“按软件顺时间发展的过程分阶段进行”的。软件生存周期模型:
瀑布模型(阶段间具有顺序型和依赖性,清楚地区分逻辑设计与物理设计、尽可能推迟程序的物理实现,是文档驱动模型,遵循结构化设计);
原型模型(软件产品的开发是线性顺序进行的,本质是快速,用途是获知用户的真正需求,一旦需求确定,原型将被抛弃)。其核心都是将软件开发划分为:分析、设计、编码、测试和维护。
软件生存周期划分为以下几个阶段:可行性研究与计划、需求分析、总体设计、详细设计、实现、组装测试、确认测试、使用和维护。
软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型 软件工程过程是软件生存周期中各个可能的过程,这些过程可进一步划分成为了提供或获得软件产品或服务,或是为了完成软件工程项目需要完成的有关软件工程活动,每一项活动又可分解为一些软件工程任务。标准定义了21个过程分属三类:基本过程(include获取、供应、开发、运作、维护过程)、支持过程和组织过程。软件工程三要素:方法、工具和过程。软件工程管理
目的:为了按照进度及预算完成软件计划,实现预期的经济和社会效益。内容:成本估算、进度安排、人员组织、质量保证、配臵管理等等。怎么强调软件工程管理的极其重要性都不会过分
Unit2 可行性研究
任务和目的:用最小的代价在尽可能短的时间内确定问题是否能够在一定规模之内解决。(确定这一问题是否存在值得去做的解)
过程和步骤:
实质:进行一次大大压缩简化了的系统分析和设计过程,也就是在较高层次上以抽象方式进行的系统分析和设计过程。
技术和工具:DFD+DD
主要内容
(1)澄清问题定义 ——规模、约束和限制
(2)导出新系统的逻辑模型
(3)导出若干个供选择的物理解法(物理模型),并分别研究它们的可能行:
数据流图符号
Example:
数据流图的基本目的是 利用它作为交流信息的工具,另一个主要目的是作为分析和设计的工具。
数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合,它是通过对数据元素和数据结构的定义,来描述数据流和数据存储的逻辑内容的。数据流和数据字典共同构成系统的逻辑模型。数据字典的内容:
数据流、数据元素、数据存储、处理
数据字典最重要的用途是作为分析阶段的工具。
Unit3 需求分析:
目的:精确地定义系统必须做什么,也就是对目标系统提出完整、准确、清晰、具体的要求。——为目标系统提出精确的逻辑模型。
任务:确定对系统的综合要求,包括功能需求、性能需求、可靠性和可用性需求、运行要求、将来可能提出的要求。过程:处理逻辑的分解:自顶向下逐步分解直到每个处理逻辑已是不可再分的“功能单元”为止。书写文档:软件需求规格说明
工具:状态图、IPO图、层次方框图、Warnier图
结构化分析设计技术是70年代中期由E.Yourdon等人提出来的一种面向数据流的方法;要求系统的开发工作在结构化和模块化的基础上进行,它系统的运用了描述模型的概念,按照软件内部数据传递和变换的关系,自顶向下逐层分解,直到找出满足要求的可实现的软件。
在这个方法里,“抽象”,“分解”,“模块化”,“结构化”是它的主要手段;面向数据传递、变换所形成的数据流(Dataflow)和数据流程图(DFD)是它的主要依据。
这个方法的关键工作是:画分层的DFD和确定数据定义与加工策略。Yourdon方法(对应的瀑布模型)的缺陷: 其实Yourdon方法是建立在三个假设之上的:
假设1:所有的需求都是可以预先定义的;
假设2:需求在较长一段时间内是不变的(相对稳定的);
假设3:运用所提供的工具可以做到项目参与者之间清晰、准确、有效的沟通。这三个假设往往是很难成立的:
“逻辑模型”的精确描述依赖于“自顶向下的求精过程”,而“自顶向下的求精过程”的顺利进行又依赖于精确的“逻辑模型”,这二个问题互相缠绕依赖而构成方法学上的“死锁”。原型法(原型模型):
原型就是模型的意思(原型=模型),它指的是模拟某种产品的原始模型。运用原型的策略:抛弃策略&附加策略 对原型的逐步求精过程是一个迭代过程
相对于Yourdon方法来说原型法是一个非线性的系统开发方法。不再强调高质量的阶段性文档。
螺旋模型:沿螺线自内向外每旋转一圈便开发出一个更为完善的软件版本 Yourdon方法适合于“预先指定的系统”; 原型法适合于“用户驱动的系统”。
通常用“范式”定义消除数据冗余程度。第一范式数据冗余程度最大,第五范式数据冗余程度最小。状态转换图:
状态时可以被观察到的系统行为模式,一个状态代表系统的一种行为模式,它规定了系统对事件的响应方式。一张状态图有一个初态和0至多个终态。
事件:在某个特定时刻引起系统做动作和(或)状态转换的控制信息。
验证软件需求的正确性:
一致性、完整性、现实性、有效性
Unit4 总体设计:
目的:确定系统的具体物理实现方案(系统结构设计),确定组成每一个程序的模块,以及模块间的关系(软件结构设计)。任务:软件结构设计(过程设计是详细设计阶段的任务)过程:
设想供选择的方案
选取合理方案(每份方案有 系统流程图、组成系统的物理元素清单、成本/效益分析、实现这个系统的进度计划 4份资料)等9步(P92)
在软件开发早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。总体设计阶段书写的文档:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果。
总体设计过程中,推荐最佳方案后进入“软件结构”设计:设计出组成这个系统的所有程序、文件和数据库,以及它们之间的联系。软件结构:由模块组成的层次系统。模块:数据说明、可执行语句等程序。C/S(Client/Server)结构是软件系统体系结构
“结构化设计”概括地说就是:用一组标准的工具和准则来确定系统应该由哪些模块、用什么方式联结在一起,才能构成一个最好的软件结构。
模块化就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
模块: 具有四种属性的一组程序语句称为一个模块,这四种属性分别是:输入和输出、逻辑功能、运行程序、内部数据。(前两个是模块外部属性,后两个是内部属性,总体设计完成外部属性设计、详细设计完成内部属性设计)
软件结构图中,模块用一矩形表示。模块间调用:用→连接
开发具有独立功能而且和其它模块之间没有过多相互作用的模块,可以做到模块独立。影响模块独立的因素:
耦合(不同模块间互联程度)内聚(同一模块内各元素紧密程度)
力争高内聚、低耦合。5种耦合形式:
数据耦合、控制耦合、特征耦合、公共耦合、内容耦合(从左到右耦合程度递增)最弱的耦合是非直接耦合
7种内聚形式:
功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚(从左到右程度依次递减)模块的扇出与扇入:
模块的扇出是指一个模块拥有的直接下级模块的个数。模块的扇入是指一个模块的直接上级模块的个数。
模块的扇出系数应控制在7以内,尽可能的加大模块的扇入系数。
作用域应该是控制域的子集;
模块的控制域和作用域:
模块的控制域(控制范围):是指这个模块本身以及所有直接或间接从属于它的模块的集合。
模块的作用域(判断作用范围):是指受该模块内一个判断影响的所有模块的集合。(也就是该模块内存在着判断调用语句,而所有受到该判断逻辑影响的模块,就是该模块的作用域。)作用域应该是控制域的子集;理想的是作用域都是直接下属模块。数据流类型——数据在DFD中流径特征
变换流:进入系统中的数据所流经的路径几乎是一样的。事务流:进入系统中的数据所流经的路径不完全是一样的。
事务中心往往包含多个处理逻辑。
“事务”是指一组输入数据。
Unit5 详细设计:
目的:完成模块的过程设计(为SC中每个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出详细清晰的描述。)
模块的逻辑设计(模块的过程描述)主要内容:
1)为每个模块确定采用的算法 2)确定每个模块使用的内部数据结构 3)确定模块的接口细节 4)制定模块的测试计划
完成模块的“内部属性”设计,即给出系统中各个模块的“运行程序”和“内部数据”;由此可见详细设计的结果基本上决定了最终软件的质量。
详细设计的目标更重要的是便于维护。工具:
1.程序流程图(流程图)2.N-S图(盒图)
3.PAD图(问题分析图)
4.伪代码和PDL语言
逻辑设计应遵循的理念:
1.从效率第一到清晰第一
2.结构化的控制结构:结构化程序设计=仅使用单入口单出口的三种基本控制结构 3.逐步细化的实现方法
[例] 在一组数中找出其中的最大数 分别用程序流程图、N-S图和PAD图描述 用“结构化”保证程序的清晰易读,用“逐步细化”实现程序的正确可靠,它们导致了一条自然的结论:模块的逻辑设计必须用结构化程序设计的原理来指导。(结构化分析设计在详细设计阶段)Yourdon方法的技术途径:DFD→DFD+DD→SC→PDL
Yourdon方法在分析阶段,我们用DFD来表示软件的逻辑模型;在设计阶段,又按照数据流类型,分别用变换分析或事务分析将它们转换成相应的软件结构。面向数据结构设计方法的根据和基本思想:
算法和数据结构是程序设计中不可分割的侧面,算法的结构依赖于它要处理的数据结构。只要事先知道一个问题的数据结构,就可以由此导出它的程序结构。
基于数据流还是基于数据结构的出发点不同,最终目标也不同。SADT(结构化分析设计工具)方法的目标是得出软件的最终SC图,它把注意力集中在模块的合理划分上;面向数据结构的设计则要求得出程序的过程性描述,并不明确也提出软件应该先分成模块等概念。
SADT方法:DFD->SC(软件结构图)->模块的过程性描述(PDL等)|<-------总体设计-------> | |<--------详细设计------->|
Jackson方法(面向数据结构):数据结构->程序结构->程序的过程性描述(伪代码等)|<-----总体设计-----> | |<----------详细设计--------->| 程序复杂程度的定量度量:
1.程序图(流图)(用任何方法表示的详细设计结果都可以变换成程序图)
流程图中的各种处理框均简化成一个结点
2.环域复杂度
程序的结构复杂度可用强连通的有向图中线性无关环的个数来度量 V(G)= 判定结点数 + Unit6
编码(也称实现)
任务:把模块的过程性描述翻译为用该语言书写的源程序(或源代码)。编码的风格
1.程序要清晰直观,不要过于巧妙
2.用一定的原则指导控制结构的使用(避免使用容易引起混淆的结构和语句)3.有规律地使用GOTO语句
不得不把效率的考虑放在首位的时候,而结构化程序又不能满足时间要求时,就可用GOTO语句来减少重复的代码段;
4.实现源程序的文档化(软件=程序+文档)<有意义的变量名称、适当注释、标准的书写格式>
Unit7: 软件测试:
定义:程序测试是为了发现错误而执行程序的过程。纠错(调试)是为了确定错误的性质,并且加以纠正。
软件测试包括机器测试(动态测试)(黑盒测试&白盒测试)和人工测试(代码复审)(代码走查+会审+办公桌检查)程序编译通过后,应该先人工测试(发现逻辑错误)后机器测试(在设定的测试数据上执行被测程序).动态测试是一个包括:①设计“测试用例”→②执行被测程序→③分析测试结果并发现错误的过程。(①设计“测试用例”是最关键)
测试用例={ 输入数据 + 期望结果 }
按照在设计“测试用例”时,是否涉及程序的内部结构,把动态测试分为: 白盒测试:从程序的内部逻辑入手,按照一定原则设计测试用例。
黑盒测试:仅以程序外部功能为依据来设计测试用例。检查程序是否完成应做的和是否做了不该做的。(按规格说明书的规定)
软件测试的的步骤:[见笔记本上图]
单元测试:在编码阶段完成;以模块为单位,(主要白盒)发现的往往是编码和详细设计的错误
综合测试:(模块组装测试、集成测试)以软件的设计信息为依据,主要用黑盒,发现设计错误,也可能发现需求说明错误。
确认测试(验收测试):以软件的需求信息为依据,用黑盒,发现需求说明书中的错误,验证软件的有效性 系统测试:指整个计算机系统(包括软件与硬件)的测试。代码复审
1.代码会审:开会逐句朗读和讲解程序,精力集中于发现错误,会后改正错误 2.走查:与会者扮演“计算机”的角色 3.办公桌检查:一个人参加的代码会审 黑盒测试方法:
等价分类法:
按测试结果“等价”把被测程序的输入域划分为若干个等价类,每一个等价类都选择一例“测试用例”,与“应做的事情”相对应的是“有效等价类”,而与“不应该做的事情”相对应的称之为“无效等价类”。
设计等价类的测试用例分为两步: 1.划分等价类并给出定义;
2.选择测试用例的原则:有效等价类的测试用例尽量公用;无效等价类必须每类一例。[例]某城市的电话号码……[看笔记] 边界值分析法(边值法)错误猜测法(猜错法)因果图法
白盒测试方法:[见笔记]
合理的白盒测试,就是要选取足够的测试用例,以实现对源程序比较充分的覆盖。逻辑覆盖法:(按照由低到高对程序逻辑覆盖程度的顺序)
语句覆盖:每条语句至少执行一次;
判定覆盖:不仅每条语句至少执行一次,而且每一分支至少执行一次;
条件覆盖:不仅语句覆盖,而且每个条件均按“真”、“假”两种结果至少执行一次; 条件组合覆盖:不仅语句覆盖,而且每个条件的所有可能组合都至少执行一次。
路径覆盖法:(按照由低到高对程序逻辑覆盖程度)
结点覆盖:每个结点走一次;相当于语句覆盖 边覆盖:每条边走一次;相当于判定覆盖
路径覆盖:每条路径走一次;(不需要考虑程序的循环)
Unit8
面向对象基本原理:使描述问题的问题空间和在计算机上解决问题的解空间在结构上尽可能一致。基本概念:
(1)对象:由数据以及可以施加在这些数据上的操作(或服务、方法、处理)所构成的统一体,它是面向对象软件的基本模块。
(2)类:对具有相同数据和相同操作的一组相似对象的定义(抽象)。(3)不同的对象彼此之间只能通过消息相互作用、相互联系
(4)继承:处于下一层次上的派生类自动继承了位于上一层次基类的属性(数据)和行为(操作)面向对象就是既使用对象又使用类和继承等机制,而对象之间仅能通过传递消息实现彼此间的通信。UML 用视图来表示被建模系统的各个方面,它把软件模型分成5个视图,每一个视图代表完整系统的一个特定方面。每一个视图又由一种或多种模型图构成。
1. 用例视图:用来支持需求分析,也就是说系统将提供的功能是在用例视图中描述的。
2. 逻辑视图:定义系统的实现逻辑,重点关注的是系统的静态结构(类、对象及它们之间的关系),也描述系统内部的动态协作关系。它的模型图包括类图、对象图、状态图、顺序图、协作图及活动图等。3. 组件视图:描述系统的实现模块及它们之间的依赖关系。组件是不同类型的代码模块,通过代码模块的结构和依赖关系来表示。
4. 部署视图:描述软件系统在计算机硬件系统和网络上的安装、分发和分布情况。5. 实现视图:描述组成软件系统的各个物理部件。UML由三部分组成:基本构造块、规则和公用机制
UML 定义了二类模型元素的图形表示:一类模型元素用于表示模型中的某个概念,一类模型元素用于表示模型元素之间的关系 面向对象建模:
对象模型——“谁做?”(类图)动态模型——“什么时候做?”(状态图)功能模型——“做什么?”(用例图)
这三种模型都是必不可少的,对象模型是最核心的。
在面向对象分析中,构造出完全独立于实现的应用域模型;在面向对象设计中,把求解域的结构逐渐加入到模型中;在实现阶段,把应用域和求解域的结构进行编码和验证。
OO方法:OOA→OOD→OOP→OOT 是一个逐渐扩充模型的过程,其间无需转换概念和表示,开发活动之间基本做到了平滑无缝过渡; 对象模型:
类与类之间一般有四种关系:关联、泛化(继承)、依赖和细化。1.关联:表示两个类的“对象”之间存在某种语义上的联系。
2.聚集:聚集是关联的特例,它表示类与类之间的关系是整体与部分的关系。3.泛化(继承):泛化关系指的是类与类之间是“一般---特殊”的关系。4.依赖和细化:依赖关系是指一个模型元素依赖于另一个独立的模型元素,细化关系是指一个模型元素细化成了另一个模型元素。动态模型:
描述了对象模型中对象的生命周期过程,即对象的状态,我们把一个触发行为称为一个事件。动态模型就是通过描述对象的状态、触发状态转换的事件、以及对象的行为来描述软件系统的动态行为(行为模型)。功能模型:
UML提供用例图来表示功能模型,并称之为用例模型。
功能模型也可用SADT中的一组DFD来表示。(也是需求分析阶段)一幅用例图包含的模型元素有:系统、行为者、用例和用例之间的关系。
一个用例是系统的一个完整的功能,通过关联与行为者连接,关联指出一个用例与哪些行为者交互,这种交互是双向的。
用例是一个类,用例的实例是系统的一种实际使用方法,我们称之为脚本。用例之间的关系主要有二种:扩展关系和使用关系。
创建用例模型的工作包括:定义系统、寻找行为者和用例、描述用例、定义用例之间的关系,并确认用例模型。
Unit9:
面向对象分析(Object-Oriented Analysis,简称OOA)的关键就是识别出对象与类,并分析它们之间的关系,最终建立对象模型、动态模型和功能模型。
图: 参照当前系统建立目标系统
通过划分“主题”把一个复杂系统的对象模型分解成几个不同的概念范畴。
软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。维护过程本质上是修改和压缩了的软件定义和开发过程,而且事实上远在提出一项维护要求之前,与软件维护有关的工作已经开始了。
进行维护的原因:改正程序中的错误和缺陷;改进设计以适应新的软、硬件环境;增加新的应用范围;为了将来的维护工作。
维护分为以下几类:改正性维护;适应性维护;完善性维护;预防性维护
----------
未涵盖进来的内容:
需求分析目的:确定目标系统必须具备哪些功能
总体设计的主要任务:一.制定几种可能的实现方案;二.设计程序的体系结构 详细设计(模块设计)任务:设计出程序的详细规格说明 集成测试和验收测试:
集成测试(组装测试):根据设计的软件结构
验收测试:按照规格说明书的规定,由用户参与下对目标系统进行验收的测试
通过对软件测试结果的分析可以预测软件的可靠性。传统软件工程方法学的软件过程,可以用瀑布模型来描述 瀑布模型的特点:阶段间具有顺序性和依赖性、推迟实现的观点
清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现。
瀑布模型带反馈环,发现前面阶段的错误时,沿反馈线回头修改
快速原型模型不带反馈环,软件产品开发是线性顺序进行的,用途是获知用户的需求
增量模型(渐增模型):把软件产品分解成增量构件。原则:当把新构件集成到原有构件时,所形成的产品必须是可测试的。它能在较短时间内向用户提交可完成部分工作的产品。要求开始实现各个构件前就全部完成的需求分析、规格说明、总体设计。
螺旋模型的基本思想:使用原形及其他方法来尽量降低风险。可以看作每个阶段前都加了风险分析的快速原型模型。螺旋模型是风险驱动型的。
喷泉模型体现了面向对象开发过程迭代和无缝的特性。
采用先行顺序的开发方法不可能开发出当今客户需要的大型复杂系统。
构件:功能清晰的模块或子系统。模型:对事物的无歧义的书面描述。
RUP强调采用迭代和渐增的方式来开发软件,重复一系列组成软件生命周期的循环。面向对象方法=对象+类+继承+用消息通信
可行性分析中导出供选择的解法的最简单途径,是从技术角度出发考虑解决问题的不同方案。
系统流程图是概括地描绘物理系统的工具,表达数据在系统各部件之间的流动情况,而非对数据加工处理。数据流图(DFD)描绘信息流和数据从输入移动到输出的过程中所经受的变换。(描绘数据在软件中流动和被处理的逻辑过程),设计时只考虑系统必须完成的基本逻辑功能。
画数据流图的基本目的:利用它作为交流信息的工具;作为分析和设计的工具。符号:数据源点/终点,变换数据的处理,数据存储,数据流 数据存储是处于静止状态的数据流,数据流是处于运动中的数据。
数据字典是关于数据的信息的集合,即对数据流图中包含的所有元素的定义的集合。
数据字典包含内容:数据流,数据流分量,数据存储,处理 数据字典用途:分析阶段的工具。
逆向需求说明软件系统不应该做什么
分析系统常用图形工具:层次方框图、Warnier图 需求分析时要把数据结构规范化。
结构化分析方法就是面向数据流自顶向下逐步求精进行需求分析的方法。
把分析过程中得到的有关数据元素记录在数据字典中,对算法的简明描述记录在IPO图中。快速建立软件原型是最好的需求分析技术。为快速构建和修改原型,使用三种工具和方法: 第四代技术 可重用的软件构件 形式化规格说明和原型环境
概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。数据对象是软件必须理解的复合信息的抽象。
用“范式”定义消除数据冗余的程度,第一范式冗余最大。
状态是任何可被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态图的活动表中经常使用entry,exit,do三种标准事件。
IPO图是输入、处理、输出图,处理框中列出处理的次序暗示了执行的顺序。验证软件需求的正确性:一致性、完整性、现实性、有效性 结构设计是总体设计阶段的任务,过程设计是详细设计阶段的任务 软件结构(即由模块组成的层次系统)可以用层次图或结构图描绘。
在软件开发的早期阶段考虑测试问题,可以促使软件开发者设计时注意提高软件的可测试性。随着模块数增加,设计模块间接口所需工作量也增加。逐步求精是规格说明技术、设计和实现技术的基础。
逐步求精定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
耦合强弱取决于模块接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。模块间的耦合程度影响系统的可理解性、可测试性、可靠性和可维护性 内聚比耦合更重要。
深度表示软件结构中控制的层数,能粗略标识系统大小。
宽度是软件结构内同一层次上的模块总数的最大值。
扇出过大意味着模块过分复杂,扇入越大则共享该模块的上级模块越多(好)。好的软件结构通常顶层扇出高,中层扇出较少,底层模块有高扇入。
面向数据流的设计方法把信息流映射成软件结构,信息流的类型(变换流、事务流)决定映射方法。经典程序设计:只允许使用顺序、IF_THEN_ELSE、DO_WHILE
扩展的结构程序设计:外加DO_CASE、DO_UNTIL 修改的结构程序设计:外加BREAK 系统响应时间的两个属性:长度、易变性 用户界面设计是一个迭代过程。
过程涉及工具:程序流程图、盒图、PAD图、判定表、判定树、过程设计语言PDL 程序复杂度定量度量:
1.McCabe方法(流图,也叫程序图):流图中的区域数=环形复杂度=判定节点数+1
程序的环形复杂度取决于程序控制流的复杂程度,即取决于程序结构的复杂程度。所以它是对测试难度的定量度量,也能对软件可靠性预测。
2.Halstead方法(根据程序中运算符和操作数总数来度量)编码和测试统称为实现。
程序的质量主要取决于软件设计的质量。
测试的目的:发现软件中的错误,根本任务:保证软件质量 调试的目的:诊断并改正测试中发现的错误 效率主要指处理机时间和存储器容量两方面。
用户角度:最严重的错误是导致程序不能满足用户需求的错误。
一旦完成了需求模型就可以着手制定测试计划,建立了设计模型之后就可以立即开始设计详细的测试方案。最佳测试效果:有最大可能性发现错误的测试
模块组装测试两种方法:非渐增式测试(分别测试每个模块)&渐增式测试(把下一个要测试的同已经测好的结合起来测试)
渐增方式分 自顶向下集成和自底向上集成
为了保证加入模块没有引进新的错误,可能需要进行回归测试
自顶向下测试方法主要优点:不需要测试驱动程序,能够在测试阶段的早期发现接口错误。
回归测试:重新执行已经做过的测试的某个子集。它用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误。
确认测试的目的:验证软件的有效性。
如果软件的功能和性能如同用户期望的,就是有效的 确认测试以用户为主,重要内容是复查软件配臵。
条件测试的目的不仅是检测程序条件中的错误,而且是检测程序中的其他错误。在一段程序中已经发现的错误数往往和尚未发现的错误数成正比。
等价划分法和边界值分析法都只孤立地考虑各个输入数据的测试功效,而未考虑多个输入数据的组合效应。软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功运行的概率 错误:由开发人员造成的bug;故障:由错误引起的软件的不正确行为
软件可用性:程序在给定的时间点,按照规格说明书上的规定,成功地运行的概率。预防性维护:为了改进未来的可维护性或可靠性…… 软件维护分为 非结构化维护和结构化维护
维护事件流的最后一个事件是复审,它再次检验软件配臵的有效性,并保证事实上满足了维护要求表中的要求。软件的可维护性:维护人员理解、改正、改动或改进这个软件的难易程度。提高软件维护性是支配软件工程方法学所有步骤的关键目标。
决定软件可维护性因素:可理解性、可测试性、可修改性、可移植性、可重用性 用户文档包括:功能描述、安装文档、使用手册、参考手册、操作员指南 面向对象方法用对象分解取代了传统方法的功能分解。对象彼此之间仅通过消息传递相互联系。面向对象=对象+类+继承+消息传递通信
如果仅用对象和消息,则称为基于对象的方法,而非面向对象的方法。
如果进一步要求把所有对象都划分成类,则称为基于类的方法,仍非面向对象的方法。只有同时使用以上4点,才是面向对象的。
OOD不同于面向过程设计,其思想是:使用现实世界的概念抽象地思考问题而自然的解决问题。(重要的是应用模型)
人在认识和解决复杂问题时最有力的思维工具是抽象。
传统的软件开发方法以算法为核心,开发过程基于功能分析和分解。
面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。对象=描述属性的数据+对数据施加的操作
对象是具有相同状态的一组操作的集合。(从OOD看对象)
对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的能力与他交互的能力。(从信息模拟看对象)
对象:以数据为中心的、主动的、实现了数据封装、本质上具有并行性、模块独立性好 一个对象类型也可以看成是一种抽象数据类型
类:对具有相同数据和相同操作的一组相似对象的定义。消息具有:接受消息的对象、消息选择符(消息名)、变元。属性是对客观世界实体所具有的性质的抽象
继承分但继承和多重继承(多个父类),使用多重继承是要注意避免二义性。继承中,底层的性质将屏蔽高层的同名性质。
多态性通过虚函数实现。虚函数->实现动态联编 函数重载通过静态联编实现。OO 3models:
描述 系统数据结构——对象模型 描述 系统控制结构——动态模型 描述 系统功能计算——功能模型
典型的软件系统使用数据结构(对象模型),执行操作(动态模型)并且完成数据值的变化(功能模型)聚集表示类与类之间的关系是整体与部分的关系。泛化即继承。
动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。所有对象都具有自己的生命周期,状态是对对象属性值的一种抽象。一个触发行为称作一个事件。用状态图描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。
每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并,从而构成系统的动态模型。动态模型是基于事件共享而相互关联的一组状态图的集合。用例模型描述的是外部行为者所理解的系统功能。
用例是一个类,他代表一类功能而不是使用该功能的某个具体实例。用例的实例称脚本。一个用例模型的创建包括:定义系统、寻找行为者和用例、描述用力、定义用力之间的关系、确认模型。针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
状态转换趋势行为发生,这些行为在数据流图中->处理,在用例图中->用例,同时与类图中的服务对应 数据流图的对应:
数据存储,原点/终点:对象 数据流:对象的属性值或对象
对象模型描述了数据流图中的数据流、数据存储以及数据原点/终点的结构。
分析过程总是提取系统需求的过程。
需求陈述的内容:问题范围、功能需求、性能需求、应用环境、假设条件 面向对象分析首要的工作:建立问题域的对象模型。对象模型的建立:
确定对象类和关联 给类增添属性
用适当的继承关系合并组织类
建立了动态模型和功能模型后,再定义类中的操作
应该按问题领域而不是功能分解方法来确定主题。脚本描述事件序列
从OOA到OOD,是一个逐渐扩充模型的过程,OOD即是用OO的观点建立求解域模型的过程。OO中,对象是最基本的模块。
对象之间,应降低交互耦合,提高继承耦合。对象间存在 服务内聚、雷内聚、一般-特殊内聚。
OOD准则:模块化、抽象、信息隐藏、若耦合、强内聚、可重用。
类构件的三种重用方式:实例重用(最基本的重用)、继承重用和多态重用。系统的总框架是基于问题域的。
设计实现服务的算法:算法复杂度、易理解、易实现、容易修改 程序设计风格中从所完成的功能看,有两类不同类型的方法:
策略方法:检查系统运行状态,处理出错情况,并不直接完成计算或实现复杂算法。实现方法:仅针对具体数据完成特定处理,用于实现复杂算法。
OO测试:单元测试、集成测试、确认测试
——授课教师:宁波大学 钱旭明老师
——总结人:宁波大学
张睿卿
第二篇:软件工程导论填空题总结
1.软件生存周期一般可分为问题定义、可行性研究、需求分析、设计编码、测试、运行与维护阶段。
2.按软件的功能进行划分,软件可以划分为系统软件、支撑软件 和应用软件。
3.可行性研究主要集中在以下四个方面 经济可行性、技术可行性、法律可行性 和抉择。4.用户界面的可使用性是用户界面设计最重要的也是最基本的目标。
5.常见的软件概要设计方法有3大类:以数据流图为基础构造模块结构的结构化设计方法,以数据结构为基础构造模块的jackson方法_,以对象、类、继承和通信为基础的面向对象设计方法。
6.数据流图和数据字典共同构成系统的逻辑模型。
7.软件测试的方法有分析方法和非分析方法(即黑盒法)。8.单元测试一般以白盒测试为主,黑盒测试为辅。
9.成本估计方法主要有自底向上估计、自顶向下估计和算法模型估计三种类型。10.通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型,软件工程方法学包含三个要素:方法、工具和过程。目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学
11.最基本的测试是集成测试和验收测试。
12.所谓情景分析就是对用户将来使用目标系统解决某个具体问题的方法和结果进行分析 13.需求分析过程应该建立3种模型,它们分别是数据模型,功能模型,行为模型.数据对象彼此之间相互连接的方式称为联系,也称为关系。联系可分为3种类型:一对一联系,一对多联系,多对多联系。
14.软件的验证:一致性,完整性,现实性,有效性
15.四种维护的定义:1.改正性维护2.适应性维护3.完善性维护4.预防性维护。2.数据流图中信息流的类型有(变换流)和(事务流)。3.软件的定义是:软件=程序+数据+(文档),软件是(程序及其文档)。4.经典结构程序设计包括顺序、选择和(重复)三种结构。5.集成测试时对软件结构中上层使用(自顶向下)的集成测试方法,对软件结构中下层使用(自底向上)的集成测试方法。
6.软件维护包括(改正性维护)、适应性维护、完善性维护、预防性维护。
7.面向对象方法学建模得到的三个基本子模型是(对象建模)、动态模型、功能模型。8.复杂大型问题的对象模型通常由主题层、类与对象层、结构层、(属性层)、及服务层5个层次组成。
9.面向对象方法学是基于 软件的重用。
10.软件层次结构图中方框间的连线表示
调用 关系。
21.在软件开发过程中要产生大量的信息,要进行大量的修改,软件配置管理能协调软件开发,并使混乱减到最低程度。
22.规定功能的软件,在一定程度上对自身错误的作用(软件错误)具有屏蔽能力,则称此软件具有容错功能的软件。
23.McCall提出的软件质量模型包括11 个软件质量特性。
24.软件可维护性度量的七个质量特性是可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
25.为了便于对照检查,测试用例应由输入数据和预期的输出结果两部分组成。
26.程序设计语言的心理特性主要表现在 歧义性、简洁性、传统性、局部性和顺序性。27.软件结构是以 模块 为基础而组成的一种控制层次结构。
28.在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、判定树。
29.结构化语言是介于自然语言和形式语言之间的一种半形式语言。
30.若年利率为i,不计复利,n年后可得21.系统流程图是描述物理模型的传统工具,用图形符号表示系统中各个元素表达了系统中各种元素之间的(信息流动)情况。22.成本效益分析的目的是从(经济)角度评价开发一个项目是否可行。
23.自顶向下结合的渐增式测试法,在组合模块时有两种组合策略:深度优先策略和(宽度优先策略)。
24.独立路径是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看,一条独立路径是至少包含有一条(在其他独立路径中未有过)的边的路径。
25.汇编语言是面向(机器)的,可以完成高级语言无法完成的特殊功能,如与外部设备之间的一些接口工作。
26.在JSP方法中解决结构冲突的具体办法是(中间数据结构或中间文件)。
27.详细设计的任务是确定每个模块的内部特性,即模块的算法、(使用的数据)。28.所有软件维护申请报告要按规定方式提出,该报告也称(软件问题)报告。
29.有两类维护技术:在开发阶段使用来减少错误、提高软件可维护性的面向维护的技术;在维护阶段用来提高维护的效率和质量的(维护支援)技术。
30.科学工程计算需要大量的标准库函数,以便处理复杂的数值计算,可供选择的语言有:(FORTRAN语言)、PASCAL语言、C语言和PL/1语言。1.软件的开发与运行经常受到硬件的限制和制约。(√)2.模块内的高内聚往往意味着模块间的松耦合。(√)3.Jackson图只能表达程序结构,不能表达数据结构。(X)上述数据流图表示数据A和B同时输入变换成C。(X)5.软件的质量好坏主要由验收人员负责,其他开发人员不必关心。(X)6.判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。(√)7.应该尽量使用机器语言编写代码,提高程序运行效率,而减少高级语言的使用。(X)8.UML只能应用于软件系统模型的建立。(X)9.容错就是每个程序采用两种不同的算法编写。(X)软件测试的目的是为了无一遗漏的找出所有的错误。(X)1.在进行总体设计时应加强模块间的联系。(N)2.系统结构图是精确表达程序结构的图形表示法。因此,有时也可以将系统结构图当作系统流程图使用。(N)
3.用黑盒法测试时,测试用例是根据程序内部逻辑设计的。(N)4.在程序调试时,找出错误的位置和性质比改正该错误更难。(Y)
5.以对象、类、继承和通信为基础的面向对象设计方法(OOD)也是常见的软件概要设计方法之一。(Y)
6.如果通过软件测试没有发现错误,则说明软件是正确的。(N)7.快速原型模型可以有效地适应用户需求的动态变化。(Y)
8.模块化,信息隐藏,抽象和逐步求精的软件设计原则有助于得到高内聚,低耦合度的软件产品。(Y)
9.集成测试主要由用户来完成。(N)10.软件危机完全是由于硬件问题引起的。(N)
第三篇:软件工程导论知识总结范文
软件工程导论 第一章:软件工程学概论
1.软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
2.概括的说,软件危机包括两方面问题:如何开发软件已满足日益增长的需求;如何维护数量不断膨胀的已有软件。3.软件危机的典型表现:对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速不及深入的趋势。
4.产生软件危机的原因:在软件开发和维护的过程中存在这么多严重的问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
5.在实践过称中或多或少的采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。
6.软件不同与硬件,他是计算机系统中的逻辑部件而不是物理部件。
7.软件不同于一般程序,他的一个显著特点是估摸庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
8.软件本身独有的特点确实给开发和维护带来一些客观困难。9.对用户要求没有完整的认识就匆忙着手编写程序是软件开发功臣失败的主要原因之一。
10.一个软件从定义、开发、使用和维护,直到最终被遗弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。
11.软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执的指令序列;数据是使程序能够适当的处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。
12.软件工程是指导计算机软件开发和维护的一门工程学科。13.软件工程是:把系统的、规范的、可度量的途径应用与软件开发、运行和维护过程,也就是吧工程应用与软件;研究前面所提到的途径。
14.软件工程的本质特性:软件工程关注与大型程序的构造;软件工程的中心课题是控制复杂性;软件经常变化;开发软件的效率非常重要;和谐的合作是开发软件的关键;软件必须有效地支持他的用户;在软件工程领域中通常由具有一种文化背景的人体另一种具有文化背景的人创造产品。
15.软件工程的基本原理:用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚的审查;开发小组的人员应该少而精;承认不断该井软件工程的必要性。16.软件工程包括技术和管理两方面得内容,是技术与管理紧密结合所形成的工程学科。
17.通常把在软件生命周期全过程中使用的一套技术方法的集合称为方法学,也称之为范型。18.方法学三要素:方法、工具和过程。
19.传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
20.面向对象方法学与传统方法学相反,它吧数据和行为看成是同等重要的,他是一种一数据为主线,把数据和对数据的操作紧密的结合起来的方法。
21.棉线对象方法学的要点:把对象作为融合了数据及在数据上的操作行为的统一的软件构件;把所有的对象都划分成类;按照父类与子类的关系,把若干相关类组成一个层次结构的系统;对象彼此间仅能通过发送消息互相联系。
22.传统方法学强调自顶而下顺序的完成软件开发的各项任务。23.面向方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。
24.面向对象范型的优点:降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作;促进了软件重用。25.面向对象方法特有的继承性和多态性,进一步提高了可重用性。26.软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
27.软件定义时期的任务:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该工程需要的资源和成本,并且制定工程进度表。
28.软件定义时期分为三个阶段:问题定义、可行性研究、需求分析。
29.开发时期阶段组成:总体设计、详细设计、编码和单元测试、综合测试。
30.维护时期的树妖任务是使软件持久的满足用户的需求。31.最基本的测试是集成测试和验收测试。
32.通常的维护活动:改正性维护;适应性维护;完善性维护;预防性维护。
33.软件过程是为了获得高质量软件所需要完成的一系列框架,它规定了完成各项的任务工作步骤。
34.把过程定义为:使用资源将输入转化为输出的活动所构成的系统。
35.系统是相互关联或相互作用的一组要素。
36.过程定义了运用方法的顺序、应该交付的文档资料、为保证软件件质量和协调变化所需要的管理措施,以及标志软件开发各个阶段任务完成的里程碑。37.瀑布模型一直被广泛采用的生命周期模型,仍然是软件工程中应用的最广泛的过程模型。
38.瀑布模型的特点:阶段间具有顺序性和依赖性;推迟延迟的观点;质量保证的观点。
39.瀑布模型的优点:可强迫开发人员采用规范的方法;严格的规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
40.所谓快速原型是快建立起来的可以在计算机上运行的程序,他所能完成的功能往往是最终端产品能完成的功能的一个子集。41.快速原型模型的主要优点:不带反馈环,软件产品的开发基本上是线性顺序进行的。42.增量模型也称渐进模型。
43.增量模型的优点:能在短时间内向用户提交可完成部分工作产品;逐步增加产品功能可以使用户有充裕的时间学习和适应新产品从而减少一个全新的软件可能给客户组织带来的冲击。44.螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。可以把它看作是在每个阶段都增加了风险分析过程的快速模型。
45.螺旋模型的优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件来发的一个重要目标;减少了过多测试或测试不足所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
46.喷泉模型是典型的面向对象的软件过程模型之一。47.“喷泉”这个词体现了面向对象开发过程迭代和无缝的特性。
48.Ratioanal统一过程是一种完整而且完美的软件过程。49.RUP软件开发生命周期是一个二维的生命周期模型。50.RUP九个核心工作流:业务建模;需求;分析与设计;实现;测试;部署;配置与变更管理;项目管理;环境。
51.RUP工作阶段:初始阶段、精化阶段、构建阶段、移交阶段。52.极限编程:是敏捷过程中最富盛名的一个,“极限”含义是指把好的开发实践运用到极致。
53.微软过程生命周期:规划阶段、设计阶段、开发阶段、稳定阶段、发布阶段。
54.面向对象方法=对象+类+继承+用消息通信
可行性研究
1.典型的可行性研究过程步骤:复查系统规模和目标;研究目前正在使用的系统;导出新系统的高岑逻辑模型;进一步定义问题;导出和评论供选择的解法;推荐行动方针;草拟开发计划;书写文档提交审查。
2.系统流程图是概括的描绘物理系统的传统工具。他的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。
3.系统流程图基本符号:处理(矩形)、输入输出(平行四边形)、连接(圆形)、换页连接(向下的五边形箭头)、数据流(箭头)。
4.面对复杂的系统时,一个比较好的方法是分层次的描绘这个系统。
5.数据流图(DFD)是一种图形化技术,他面会信息流和数据从输入移动到输出的过程中所经受的变换。6.数据流图是系统逻辑功能的图形表示。
7.数据流图符号:正方形(或立体型)表示数据的源点或终点;圆角矩形(或圆形)代表数据变换的处理;开口矩形(或两条平行线)代表数据存储;箭头代表数据流,即特定数据流动的方向。8.数据存储和数据流都是数据,仅仅所处的状态不同,数据存储是处于静止状态的数据,数据流是处于运动中的数据。9.画数据流图的基本目的是利用它作为交流信息的工具。另一个主要的用途是作为分析和设计的工具。
10.数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合。、11.数据流图和数据字典共同构成系统的逻辑模型,没有数据字典,数据流图就不严格,然而没有数据流图,数据字典也难以发挥作用。12.数据字典4类元素的定义组成:数据流;数据流分量(即数据元素);数据存储;处理。
13.数据字典中记录数据元素的下列信息:一般信息;定义;使用特点;控制信息和分组信息。
14.数据元素组陈的方式:顺序、选择、重复,可选。15.“=”:等价于或定义为;“+”;和(即连接两个分量);“【】”:或(即,从方括弧内列出的若干分量中选择一个),通常用“|”号隔开供选择的分量;“{}”:重复;“()”:可选。
16.数据字典最重要的用途是作为分析阶段的工具。
17.卡片形式书写数据字典:开片:名字、别名、描述、定义、位置。
18.软软开发成本主要表现为人力消耗。
19.估算技术:代码行技术;任务分解技术;自动估算成本技术。20.成本/效益分析地第一步是估计开发成本、运行费用和新系统将带来的经济效益。
21.通常用利率的形式表示货币的时间价值。
22.通常用投资回收期衡量一项开发工程的价值。所谓投资回收期就是使累计的经济效益等于最初投资所需要的时间。23.衡量工程价值的另一项经济指是工程的纯收入,也就是在整个生命周期之内系统的累计经济效益与投资之差。需求分析 1.软件系统的综合要求:功能需求;性能要求;可靠性和可用性需求;出错处理需求;接口需求;约束;你想需求;将来可能提出的要求。
2.分析系统的数据要求,这是软件需求分析的一个重要任务,它通常采用建立数据模型的方法。
3.复杂的数据由许多基本的数据元素组成,数据结构表示数据元素之间的逻辑关系。
4.访谈是最早开始使用的获取用户需求的技术,也是迄今为止仍然广泛使用的需求分析技术。他有两种基本形式,分别是正式的和非正式的访谈。
5.软件系统本质上是信息处理系统,而任何信息处理系统的基本功能都是把输入数据转变成需要的输出信息。
6.结构分析方法就是面向数据流自顶而下逐步求精进行需求分析的方法。
7.面向团队的需求收集法,称为简易的应用规格说明技术。这种方法提倡用户与开发者密切合作,共同表示问题,提出解决方案要素,商讨不同方案并指定基本要求。
8.面向团队的需求方法的优点:开发者与用用户不分彼此,齐心协力,密切合作;即时讨论并求精;有能导出规格说明的具体步骤。
9.快速建立软件原型是最准确、最有效、最强大的需求分析技术。他是快速建立起来的旨在演示目标系统主要功能的可运行的程序。
10.构建原型的要点是,他应该实现用户看得见的功能,省略系统“隐含”功能。
11.快速模型的特性:快速;容易修改。
12.快随构建和修改原型的方法和工具:第四代技术;可重构的软件构件;形式化规格说明和原型环境。
13.通常,模型是由一组图形符号和组织这些符号的规则组成。14.结构化分析实质上是一种创建模型的活动。
15.通过需求分析除了创建分析模型之外,还应该写出软件需求规格说明书,他是需求分析阶段得出的最主要的文档。16.通常用自然语言完整、准确、具体的描述系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求以及将来可能提出的要求
17.概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。
18.数据模型包含三种续相互关联的信息:数据对象、数据对象的属性、数据对象彼此间相互连接的关系。19.联系:一对一;一对多;多对多。
20.ER图(实体-联系图)包含了实体、关系、属性,通常用矩形代表实体,用连接相关实体的菱形表示关系,用椭圆形或圆角矩形表示实体的属性,并用直线把实体与其属性连接起来。21.通常用“范式”定义消除数据冗余的程度。第一范式(1NF)数据冗余程度最大,第五范式(5NF)数据冗余程度最小。22.状态转换图(简称状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统地行为。
23.状态是任何可以被观察到得系统行为模式,一个状态代表系统的一种行为模式。
24.在状态图中定义的状态主要有:初态、终态和中间状态。在一张状态图中只能有一个初态,而终态则可以有0至多个。25.事件就是引起系统动作或转换状态的控制信息。
26.状态图中,初态用实心圆表示,终态用一对同心圆表示,中间状态用圆角矩形表示。
27.活动表语法格式:事件名(参数表)/动作表达式;三种事件:entry(进入该状态的动作), exit(退出该状态的动作), do(该状态下的动作)。
28.事件表达式的语法格式:事件说明【守卫条件】/动作表达式;守卫条件为真时,状态转换发生。
29.层次方框图用树形结构的一系列多层次的矩形框描绘的数据的层次结构。
30.Warnier图和层次方框图相似,W图也用树形层次结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的秒胡手段。
31.IPO图是输入、处理、输出图的简称。一种图形工具,能够方便的描绘输入数据、对数据的处理和输出数据之间的关系。32.验证软件需求的4个方面:一致性、完整性、现实性、有效性。
33.PSL/PSA(问题陈述语言/问题陈述分析程序)系统:功能:描述任何应用领域的信息系统;创建一个数据库保存对该信息系统的描述符;对描述符施加增加、删除和更改等操作;产生格式化的文档和关于规格说明书的各种分析报告。
34.PSL/PSA系统用描述符从系统信息流、系统结构、数据结构、数据导出、系统规模、系统动态、系统性质和羡慕管理共8个方面描述信息系统。第五章:总体设计
总体设计过程分为两个阶段: 1>.系统设计,确定系统的具体实现方案 2>.结构设计阶段,确定软件结构
总体设计的9个步骤: 1>.设想供选择的方案 2>.选取合理的方案 3>.推荐最佳方案 4>.功能分解 5>.设计软件结 6>.设计数据库 7>.制定测试计划 8>.书写文档 9>.审查和复查
书写文档(形成概要设计规格说明书): 1>.系统说明 2>.用户手册 3>.测试计划 4>.详细的实现计划 5>.数据库设计结果
模块是由边界元素限定相邻程序元素的序列,而且有一个总体标识符代表它.(模块式构成程序的基本构件)根据模块数目和接口成本(模块间的联系成本)两个因素来决定模块的最适当数目.抽象:就是抽出事物的本质特征而暂时不考虑他们的细节.(抽象层次的过程实际上也是逐步求精的过程).抽象和求精是一对互补的概念,也是人类解决复杂问题时最常用,最有效的方法.抽象使得设计者能够说明过程和数据,同时却忽略了低层细节,求精则帮助设计者在设计过程中逐步揭示出低层细节。
信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的.局部化,是指把一些关系密切的软件元素物理地放得彼此靠近,在模块中使用局部数据元素是局部化的一个例子.模块独立性:使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单.模块的独立程序由两个标准度量:
1>.耦合:数据耦合,控制耦合,特征耦合,公共环境耦合,内容耦合
(尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合)
2>.内聚:功能内聚,信息内聚,通信内聚,过程内聚,时间内聚,逻辑内聚,偶然内聚.启发式规则: 1>.改进软件结构提高模块独立性 2>.模块规模应该适中
3>.深度,宽度,扇出和扇入都应适当 4>.模块的作用或应该在控制域之内 5>.力争降低模块接口的复杂程度 6>.设计单入口单出的模块 7>.模块功能应该可以预测
层次图和HIPO图,结构图(描绘软件结构的图形工具).结构图:用尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息.面向数据流的设计方法:把信息流映射成软件结构,信息流的类型决定了映射方法信息流类型:1>.交换流,2>.事务流 第六章:详细设计
在设计人机界面过程中,遇到的4个问题: 1>.系统影响时间(长度,易变性)2>.用户帮助设施(集成的/附加的帮助设施)3>.出错信息处理
4>.命令交互(一个命令对应单一的功能)人机界面设计指南: 1>.一般交互指南涉及信息显示,数据输入和系统整体控制,因此这类指南是全局性的,忽略它们将承担较大的风险.2>.信息显示指南:用文字,图形和声音按位置移动和大小,使用颜色,分辨率和省略
3>.数据输入指南:选择命令,输入数据和向系统提供输入
过程设计的 工具: 1.程序流程图
程序流程图的缺点: 1>.程序流程图本质上不是逐步求精的好工具,它诱使程序员过早的考虑程序的控制流程,而不去考虑程序的全局结构 2>.程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制 3>.程序流程图不容易表示数据结构 2.盒图 盒图的特点:克服了程序流程图的缺点,但自身缺点是不易扩展
1>.功能域(即一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来 2>.不能任意转移控制
3>.很容易确定局部和全程数据的作用域
4>.很容易表现嵌套关系,也可以表示模块的层次结构
3.PAD图(问题分析图):是用二维树形结构的图来表示程序的控制流.将这种图翻译成程序代码比较容易
4.判断表:能够清晰的表示复杂的条件组合与应做的动作之间的对应关系.(在多重嵌套的条件选择时)5.判定树:容易绘制,易于理解,但不能判断哪些组合不可能,叶子多
6.过程设计语言(伪码):是用正文形式表示的数据和处理过程的设计工具.过程设计语言(PDL)的优点: 1>.可以作为注释直接插在源程序中间
2>.可以使用普通的正文编辑程序或文字处理系统,很方便的完成PDL的书写和编辑工作
3>.已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码
程序复杂程序的定量度量 1.流图:只要顺序执行俄流向都能合并,忽略箭头,每个节点都是连通的(用圆表示节点代表一条或多条语句,箭头线成为边,代表控制流)由边和结点围成的面积为区域,当计算区域数时应该包括图形外部为被围起来的那个区域.计算环形复杂度的方法: 1>.流图的区域数等于环形复杂度
2>.流图G的环形复杂度V(G)=E-N+2,其中E是流图中边的条数,N是节点数
3>.流图G的环形复杂度V(G)=P+1,其中P是流图中判定节点的数目 第七章: 1.通常把编码和测试统称实现
2.所谓编码就是把软件设计结果翻译成某种程序设计语言书写的程序
3.为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言有理想的模块化机制,以及可读性好的控制结构和数据结构。为了便于调试和提高软件可靠性,语言特点应该是编译程序能够多地发下程序中错的错误,为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。4.选择程序设计语言的使用标准: 1).系统用户的要求 2).可以使用的编译程序 3).可以得到的软件工具 4).工程规模 5).程序员的知识
6).软件可移植性要求 7).软件的应用领域 5.编码的风格: 1).程序内部的文档 2).数据说明 3).语句说明 4).输入输出
5).效率(通算法提高和决定的)提高效率 :
1).效率是性能的要求,因此应该在需求分析阶段效率方面的要求
2).效率是靠设计来以高的
3).程序的效率和程序的简单程序是一致的 6.讨论效率问题: 1).程序运行时间 2).存储器效率 3).输入输出效率 软件测试基础: 1.测试方法:
1).黑盒:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用。
2).白盒: 如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是佛感召规格说明的规定正常进行
2.黑盒测试是在程序接口进行的 黑盒测试(功能测试)3.测试步骤: 模块测试-》子系统测试-》系统测试-》验收测试-》平行运行
4.测试阶段的信息流: 1》软件配置 2》测试配置 5.单元测试主要使用白盒测试技术,而且对多个模块的测试可以并行的进行 6.测试重点: 1).模块接口 2).局部数据接口 3).重要的执行通路 4).出错处理器 5).边界条件
7.软件测试:为了发现错误而执行代码过程 8.程序调试:为了诊断和改正程序中错误的错误代码 9.集成测试是测试盒组装软件的系统化技术
10.验证指的是保证软件正确地实现了某个特定要求的一系列活动,而确认指的是为了保证软件确实满足了用户需求而进行的一系列活动
11.需求分析阶段产生的软件需求规格说明书。第八章: 软件维护:在软件交付使用之后,为了改正错误或者满足新的需要而修改的过程
改正性维护:把诊断和改正错误的过程称为改正性维护
适应性维护:为了和变化了的环境适当的配合而进行的修改软件的活动是既必要而又经常性的活动
完善性维护:在软件使用的过程中,用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见
预防性维护:为了改进未来的标准性或可靠性或为了给未来奠定更好的基础而修改软件
软件维护的过程: 1.维护组织 2.维护报告:
⑴满足维护要求表中提出的要求所需要的工作量 ⑵维护要求的性质 ⑶这项要求的优先次序 ⑷与修改有关的事后数据 3.维护的事件流 4.保存维护记录 5.评价维护活动: ⑴每次程序运行平均失败的次数 ⑵用于每一类维护活动的总人时数
⑶平均每个程序每种语言每种维护类型,所做的程序变动数 ⑷维护过程中增加或删除一个原语句平均花费的人时数 ⑸维护每种语言所花费的人时数 ⑹一张维护要求表的平均周转时间 ⑺不同维护类型所占的百分比
软件的可维护性的定义:维护人员理解改动改正或改进这个软件的难易程度
决定软件可维护的因素主要有: 1).可理解性 2).可测试性 3).可修改性 4).可移植性 5).可重用性
重用指同一事物不做修改或稍加改动就在不同环境中多次重复使用
以下一个方面可以提高软件的可维护性: 1).软件中可使用的可重用的构件越多,软件的可靠性越高,改正性维护需求需求就越少
2).软件中可使用的可重用的构件越多,适应性和完整性就越容易,文档影响软件可维护性的决定因素
软件系统的文档可分为用户文档和系统文档
软件文档应满足下数要求: 1).必须描述如何使用这个系统 2).必须描述怎样安装和管理这个系统 3).必须描述系统需求和设计 4).必须描述系统的实现和测试
用户文档至少包含下数: 1).功能描述 2).安装文档 3).使用手册 4).参考手册 5).操作员指南
所谓系统文档只从问题定义需求说明到验收测试计划,这样一系列和实现有关的文档
可维护性是所有软件都应该具备的基本特点
代码复审应该强调编码风格和内部说明文档这两个影响可维护性的因素
配置复审在测试结束是进行正式的可维护性复审
配置复审的目的是保证软件配置的所有成分都是完整的,一致的和可理解的
为了便于修改和管理已经编目归档了, 软件在工程过程模型的六类活动: 1).库存目录分析 2).文档重档 3).逆向工程 4).代码重构 5).数据重构 6).正向工程 第九章: 面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法于过程,也就是使描述问题的问题空间与实现解决的解决空间在结构上尽可能一致
面向对象方法学具有以下4个要点: 1).认为客观世界是又各种对象组成,任何事物都是对象 2).把所有对象都划分成各种对象类,每个对象都定义了一组数据和一组方法
3).按照子类与父类的关系把若干个对象类组成一个层次结构的系统
4).对象彼此之间仅能通传递消息互相联系
面向对象方法学的优点有: 1).与人类习惯的思维方法一致 2).稳定性好 3).可重用性好
4).较易开发大型软件产品 5).可维护性好
由于以下因素使得面向对象方法所开发的软件可维护性好: 1).稳定性比较好 2).较容易修改 3).容易理解 4).易于测试和调试
面向对象方法学中的对象是由描述该对象性的数据以及可以对这些数据施加的所有操作封装在一起所构成的同意体
对象是封装了数据结构以及施加在这些数据结构上的操作的封装体
对象有如下基本特点: 1).以数据为中心 2).对象是主动的 3).实现了数据封装 4).本质上具有并行性 5).模块独立性好
类就是对具有相同数据和相同操作的一组相似对象的定义
类是支持继承的抽象数据类型而对象就是类的实例
实例就是由某个特定的类所描述的一个具体的对象
消息是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明
消息由三部分组成 1).接受消息对象 2).消息选择符 3).零个或多个变元
方法就是对象所执行的操作,也就是类中所定义的服务
属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象
对象具有封装性的条件如下: 1).有一个清晰的边界 2).有确定的接口 3).受保护的内部实现
继承是指直接获得已有的性质和特征而不必重复定义它们
多态性是指子类对象可以像父类对象那样使用同样的消息既可以发送给父类对象也可以发送给子类对象
函数重载是指同一个作用域内的若干个参数特征不同的函数可以使用相同的函数名字
运算符重载是指同一个运算符也可以施加于不同类型的操作数上面
所谓模型就是为了理解事物而对事物做出的一种抽象,是对事物一种无歧义的书面描述
用面向对象方法开发软件通常需要建立3中模式: 1).描述系统数据结构的对象模型 2).描述系统控制结构的动态模型 3).描述系统的功能的功能模型
关联是双向的,可在一个方向上为关联起一个名字,在另一个方向上起另一个名字
聚集也称聚合,是关联的特例聚集表示类与类之间的关系,是整体与部分的关系
共享聚集在聚集关系中处于部分个对象可同时参与多个属于整体对象的构成
泛化关系就是通常所说的继承关系,是通用元素和具体元素之间的一种分类关系
没有具体对象的类称为抽象类
预定义的类约束有四种: 1).多重 2).不相交 3).完全 4).不完全
多重继承指的是一个子类可以同时多次继承同一个上层基类
依赖关系描述两个模型元素之间的语意连接关系,其中一个模型元素是独立的,另一个模型元素不独立,它依赖于独立的独立的模型元素
当对同一个事物在不同抽象层次上描述时这些描述之间具有细化关系
细化用来协调不同模型之间的关系,表示各个开发阶段不同抽象层次之间的相关性 第十三章:
管理:通过计划组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程.软件项目管理贯穿于软件的整个生命周期之中.软件管理项目过程从一组项目计划活动开始,而制定计划的基础是工作量估算和完成期限估算.为了使估算项目的工作量和完成期限,首先需要估算软件的规模.度量软件规模的技术: 1>.代码行技术:比较简单的定量估算软件规模的方法.2>.功能点技术:依据对软件信息域特性和软件复杂性的评估结果估算软件规模,用功能点(FP)为单位.信息域的五个特性:输入项数,数出项数,查询数,主文件数,我外部接口数.估算功能点的步骤: 1>.计算未调整的功能点数UFP 2>.计算技术复杂性因子TCF 3>.计算功能点数FP 工作量:软件规模(KLOC或FP)的函数。单位:人月.工作量估算常用模型:静态单变量模型,动态多变量模型,COCOMO2模型.COCOMO2构造性成本模型,给出了三个层次的软件开发工作量估算模型:
1>.应用系统组织模型:主要用于估算构建原型的工作量。2>.早期设计模型:适用于体系结构设计阶段。
3>.后体系结构模型:适用于完成体系结构设计之后的软件开发阶段。
成本因素分为:产品因素、平台因素、人员因素、项目因素。COCOMO2使用的5个分级因素:项目先例性、开发灵活性、风险排除度、项目组凝聚力、过程成熟度。
工程网络是系统分析和系统设计的强有力的工具,用箭头表示作业(即消耗资源又需要持续一定时间),用圆圈表示事件(并不消耗时间和资源).制定进度计划的工具有Gantt图和工程网络。
机动时间=它结束事件的最迟时刻-它开始事件的最早时刻-持续时间.人员组织: 1>.民主制程序员组
2>.主程序员组(特性:专业化、层次化)3>.现代程序员组
软件质量:软件与明确的和隐含的定义的需求相一致的程序.具体地说是:软件与明确的叙述的功能和性能需求,文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度.软件质量保证措施:(软件复审是最重要的之一)1>.基于非执行的测试 2>.基于执行的测试 3>.程序正确性证明
正式技术复审包括走查和审查.走查有两种方式:参与者驱动法,文档驱动法。审查的基本步骤:综述,准备,审查,返工,跟踪。
软件配置管理员是应用于整个软件过程中的保护性活动,是在软件整个生命期内管理变化的一组活动。目标是使变化能够更正确且更容易被适应,在需要修改软件时减少为此而花费的工作量。
能力成熟度模型是改进软件过程的有效策略,以增量方式逐步引入变量,明确定义了5个成熟度级。一个软件开发组织可用一系列小的改良性步骤买入更高的成熟度等级。
第四篇:软件工程导论解答题总结
1、什么叫软件:软件是计算机系统中鱼硬件相互依存的另一部分,它包括程序,数据以及其相关文档的完整集合。
2、什么是软件危机?软件危机的表现是什么?其产生的原因是什么?
软件危机:软件发展第二阶段的末期,由于计算机硬件技术的进步,计算机运行速度、容量、可靠性有显著的提高,生产成本显著下降,这为计算机的广泛应用创造了条件。一些复杂的、大型的软件开发项目提出来了,但是,软件开发技术的进步一直未能满足发展的需要。在软件开发中遇到的问题找不到解决办法,使问题积累起来,形成了尖锐的矛盾,导致软件危机。软件危机表现在以下四个方面:(1)经费预算经常突破,完成时间一再拖延。(2)开发的软件不能满足用户要求。(3)开发的软件可维护性差。(4)开发的软件可靠性差。造成软件危机的原因是:(1)软件的规模越来越大,结构越来越复杂。(2)软件开发管理困难而复杂。(3)软件开发费用不断增加。(4)软件开发技术落后。(5)生产方式落后。
6)开发工具落后,生产率提高缓慢。
软件质量保证应做好哪几方面的工作:(1)采用技术手段和工具。(2)组织正式技术评审。(3)加强软件测试。(4)推行软件工程规范(标准)。(5)对软件的变更进行控制。
(6)对软件质量进行度量。
3、简述软件工程的概念:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
4、两种软件工程方法学开发软件时要建立哪些模型:软件工程方法学包括传统方法学和面向对象方法学。常用的开发模型有:瀑布模型,原型模型,增量模型,螺旋模型和喷泉模型。
5、软件过程模型有哪些?简述它们的特点:过程模型分为五大类:1.管理过程模型。2.瀑布模型。3.增量过程模型:包括增量模型、RAD模型。4.烟花过程模型:包括 原型开发模型、螺旋模型、协同开发模型。5.专用过程模型:包括 机遇构建的开发模型、形式化方法模型、面向方面的软件开发模型。
6、什么是软件生命周期:一个软件从定义、开发、使用和维护,知道最终被废弃,要经历一个毛长的时期,通常把软件经历的这个漫长的时期成为生命周期。
7、软件生命周期有哪几个阶段和步骤:1.软件定义,包括问题定义可行性研究和需求分析。
2.开发时期包括:总体设计,详细设计,编码和单元测试,综合测试。3.维护时期。
8、计算机软件的开发经过哪三个大阶段:答:定义、开发、维护。
9、软件开发的各阶段的任务是什么:1.问题定义:关于规模和目标的报告书。2.可行性研究:系统的高层逻辑模型:数据流图,成本,效益分析3.需求分析:系统的逻辑模型:数据流图,数据字典,算法描述。4.总体设计:系统流程图,成本、效益分析。推荐的系统结构:层次图、结构图。5.详细设计:HIPO图或PDL图。6.编码和单元测试:综合测试方案、结果继承测试,验收测试,完整一直的软件配置。7.维护:包括改正性维护,适应性维护,完整性维护和预防性维护。
10、简述传统方法学软件设计的基本原理及内容。
原理:采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
内容:把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。
11、面向对象设计准则:1.模块化2.抽象3.信息隐藏4.弱耦合5.强内聚6.可重用
11、简述面向对象方法学的4个要点。
(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2)把所有对象都划分成类。
(3)按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
(4)对象彼此间仅能通过发送消息互相联系。
12、软件设计分哪两个阶段?总体设计的两个阶段分别是什么?答:分为总体设计和详细设计两个阶段。总体设计包括系统设计(划分出组成系统的程序、文件、数据库、人工过程和文档等物理元素)和结构设计(确定系统中每个程序是有哪些模块组成的,以及这些模块相互的联系,不设计模块内部算法流程。)
13、软件与硬件的区别是什么?答:软件是一种逻辑部件,而不是具体的物理部件。软件在开发、生产、使用和维护等方面与硬件有明显差异。1.软件是开发,硬件是制造。2.软件是自定的,硬件是组装的。3.软件不会磨损,硬件存在机械磨损问题。
14、简述需求分析工作可以分成哪四个方面?软件需求分析的有哪三个基本原则?
答:需求分析阶段分成四个方面:对问题的识别、分析与综合、制定规格说明和评审。三个基本原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。
15、软件需求分析的任务是什么?雪球分析的任务是确定系统必须完成哪些工作,也就是对木匾系统提出完整、准确、清晰、具体的要求。一般来说,需求分析的任务包括下述几方面:
1.确定对系统的综合要求(主要有:功能要求、性能需求、巡行需求、将来可能提出的需求。)
2.分析系统的数据要求、3.到处系统的逻辑模型:数据流图、实体-联系图、状态转换图、数据字典、算法流程等4.修正系统开发计划。
16、瀑布模型与原型模型分别适用于开发哪些软件:瀑布模型适用于需求稳定,而且可以预先制定的大型系统工程项目。原型模型适合于需求模糊或者随时间变化的中小型项目。
17、数据流图的作用是什么?如何画数据流图?答:数据流图简称DFD,它是以特定的图形符号描述系统逻辑模型的工具;它从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的过程;它是开发人员与用户之间交流信息的通信工具;它也是系统分析与系统设计的工具。画法总结:1.先找出数据原点和汇点,它们是外部实体,由它们确定系统与外界的借口。2.找出外部实体的输出数据流与输入数据流,画出顶层数据流图。3.从顶层加工出发,逐步细化,画出所需子图。4.分析系统的主要处理功能,把每一个处理功能作为一个加工,并且确定它们之间的数据流入,流出关系,画出第一层数据流图。5.对流图中的每个加工进行细化,画出所需的子图,直到加工不需再分解为止。6.按照前面给出原则检查和修改每一层数据流图和子图。
18、什么叫数据字典?如何写数据字典?答:数据字典是描述数据流图中数据的信息的集合(描述内容包括:数据流图、状态转化图。E-R图中的数据信息(数据流、数据存储、外部实体)、控制星系等,不包括处理)如何写?数据元素的组合方式:顺序:即以确定的次序连接两个或多个分量。选择:即从两个或多个可能的元素中选取一个。重复:即把制定的分量重复零次或多次。
19、软件设计的原则有哪些?模块化、抽象与逐步求精、信息隐藏于局部化,模块独立。
20、耦合与内聚分别有哪些?如何定义?如何区分:耦合衡量图同模块彼此见相互依赖的紧密程度,内聚衡量一个模块内部各元素彼此结合的紧密程度。耦合的种类:数据耦合、标记耦合、控制耦合、公共耦合、内容耦合。内聚的种类:顺序内聚、通讯内聚、过程内聚、暂时内聚、逻辑内聚。
21、详细设计阶段用到了哪些图形工具?答:程序流程图(PFD)盒图(N-S)图 问题分析图(PAD)判定表/判定树图。
22、软件工程的启发式规则有哪些:A.当模块过大时就应该分解它。B.深度、宽度、扇出和扇入都应适当。C.对于任何一个内部存在判断调用的模块,它的判断作用的范围应该是其控制范围的一个自己。D.力争降低模块接口的复杂程度。E.设计单入口单出口的模块
23、模块的作用域与控制域分别指什么?答:模块的控制域:本身及其所有下级模块(包括直接和间接下级模块)。模块的作用域:受到该模块内一个判定影响的所有模块的集合。
24、模块的扇入、扇出、深度、宽度分别是什么意思:深度表示软件结构中控制的层----醋溜的标志一个系统的大小和复杂程度。模块的扇出指的是一个模块拥有的直属下级模块的个数,一般扇出数控制在7以内,平均为3或4。模块的扇入指的是一个模块的直接上级模块的个数。
软件测试的目的是什么?答:软件测试是为了发现错误而执行程序的过程;测试是程序的执行过程,目的在于发现错误;软件测试绝对不是要证明程序的正确性,也证明不了程序的正确性。
单元测试有那些内容?答:单元测试主要针对模块的以下五个基本特征进行测试:1.模块接口2.局部数据结构3.重要的执行路径4.错误处理5.边界条件
25、什么是集成测试?非渐增式和渐增式有什么区别?渐增式如何组装模块?(答案
26、什么是确认测试?该阶段有那些工作? 答:按照需求规格说明书中的确定指标对系统惊醒功能与性能的测试。进行明确测试(对照雪球规格说明书用黑河法进行测试)、软件配置检测。(文档的完整性,发现遗漏误及时补充和修改)
27、什么叫流图?如何画出流图?流图的环形复杂度如何计算? 答:流图是抽象化的程序流图,突出表现控制流,符号〇为流图的一个结点,表示一个或多个五分制语句。剪头为变,表示控制流的方向。在分支结构中,分支的汇聚处应由一个汇聚结点,每一条边必须终止与一个结点,结构判断中的条件表达式是有一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的符合条件表达式,则需要改为一系列只有单个条件的嵌套的判断。根据程序内但条件分指数或循环个数来度量环形复杂度即程序的复杂度。V(G)=流图区域数 V(G)=变数-节点数+2 V(G)=单条件判定树+128、什么是黑盒测试法:黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据,产生正确地输出信息。
黑盒测试中,设计测试用例的五种方法:
1)等价类划分法;2)边界值分析法;3)错误推测法;4)因果图分析法;5)场景分析法。
29、白盒测试与黑盒测试分别有哪些测试方法?如何对具体问题测试?答:百合测试对程序模块的所有的执行路径至少测试一侧;对所有的逻辑判定,取“真“与取”假“的两种情况都至少测试一次;百合测试也叫逻辑覆盖法,包括:语句覆盖,判定覆盖,条件覆盖。黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。黑盒测试有等价类法和边界值分析法。
30、什么叫维护?维护的类型有哪些?答:软件维护就是在软件已经交付使用之后,为了改正错误或满足心的需求而修改软件的过程。类型有:1.该整形维护:对程序使用期间发现的程序错误进行诊断和改正的过程;占维护工作量的17-21%。2.适应性维护:配合变化了的环境进行修改软件的活动;占工作量的13-25%3.完整性维护:满足用户在使用过程中提出增加心的功能或修改以后功能的建议而进行的改进性工作;占工作量的50-66% 4.预防性维护:为了改善未来的可维护性或可靠性而修改软件的工作;占维护工作的4%左右。
34、耦合性有哪几种类型? 其耦合度的顺序如何低:非直接耦合数据耦合 标记耦合控制耦合 外部耦合公共耦合 内容耦合 :高
31、UML中活动图、状态图、顺序图都分别描述什么?答:活动图强调的是从活动到活动的控制流,是一种表述过程机理、业务过程以及工作流的技术。它可以用来对业务过程,国祚流建立模型,也可以对用力实现甚至是程序实现来建模。状态机图常用来描述业务或软件系统中的对象在外部事件的作用下,对象的状态从一种状态到另一种状态的控制流。顺序图描述的是对象之间的消息发送关系,而不是类之间的关系。
31、UML中的事物有哪些:结构事物UML中的名词,它是模型的静态部分,描述概念或物理元素。行为事物:UML中的动词,它是模型中的动态部分,是一种跨越时间、空间的行为。分组事物:UML中的容器,用来组织模型,使模型更加的结构化。注释事物:UML中的解释部分,和代码中的注视语句一样,是用来描述模型的。
32、用例图的作用是什么:用例图是外部参与者所能观察到的系统功能的模型图,由一组用例、参与者以及他们之间的关系组成。主要用于对系统、子类系统或类的功能行为惊醒建模。参与者是与系统交互的外部实体,可以是人,也可以是其他系统。用例是从用户的角度描述系统的行为,它将系统的功能描述成一系列时间,这些时间族中对参与者产生可观察结果。
33、UML中的关系有哪些:UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。
35、解释概念:
软件生存周期模型:描述软件开发过程中各种活动如何执行的模型
数据字典(DD):用来定义数据流图中的各个成分的具体含义的。它以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述。内聚性:内聚性是模块独立性的衡量标准之一,它是指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量
JSP方法:JSP方法是面向数据结构的设计方法,其定义了一组以数据结构为指导的映射过程,它根据输入,输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构。多态性:指相同的操作或函数、过程可作用于多种类型的对象上并获得不同结果。
36、简述容错技术的四种主要手段,并解释。
结构冗余:包括静态冗余、动态冗余和混合冗余。
信息冗余:为检测或纠正信息在运算或传输中的错误,须外加一部分信息。
时间冗余:指重复执行指令或程序来消除瞬时错误带来的影响。
冗余附加技术:指为实现上述冗余技术所需的资源和技术。
37、以G.J.Myers的观点,简述对软件测试的定义。
G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义。
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试。
38、以G.J.Myers的观点,简述对软件测试的目的。
(1)为了发现错误而执行程序的过程;(2)一个好的用例能够发现至今尚未发现的错误的测试。(3)一个成功的测试是发现至今尚未发现的错误的测试。
39、就程序设计语言的工程特性而言,对程序编码有哪些要求?
(1)可移植性(2)开发工具的可利用性(3)软件的可重用性(4)可维护性
40、模块的内聚性包括哪些类型?
偶然内聚(2)逻辑内聚(3)时间内聚(4)通信内聚(5)顺序内聚(6)功能内聚
41、列举出5个详细设计阶段的常用工具。
程序流程图,盒图,PAD图(问题分析图),判定表,判定树,过程设计语言,44、系统设计的内容是什么?
(1)系统分解。(2)确定并发性。(3)处理器及任务分配。(4)数据存储管理。(5)全局资源的处理。(6)选择软件控制机制。(7)人机交互接口设计。
42、可行性分析
经济可行性:进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。
社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
投资回收期:投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。对应关系:即有直接因果关系在程序中可以同时处理。
结构冲突:输入数据与输出数据结构找不到对应关系的情况,称为结构冲突。
43、可行性研究报告的主要内容有哪些?
(1)引言:编写本文档的目的;项目的名称、背景;本文档用到的专门术语和参考资料。
(2)可行性研究前提:说明开发项目的功能、性能和基本要求;达到的目标;各种限制条件;可行性研究方法和决定可行性的主要因素。
(3)对现有系统的分析:说明现有系统的处理流程和数据流程;工作负荷;各项费用支出;所需要各类专业技术人员的数量;所需要各种设备;现有系统存在什么问题。
(4)所建议系统的技术可行性分析:所建议系统的简要说明;处理流程和数据流程;与现有的系统比较的优越性;采用所建议系统对用户的影响;对各种设备、现有软件、开发环境、运行环境的影响;对经费支出的影响;对技术可行性的评价。
(5)所建议系统的经济可行性分析:说明所建议系统的各种支出,各种效益;收益投资比;投资回收周期。
(6)社会因素可行性分析:说明法律因素,对合同责任、侵犯专利权、侵犯版权等问题的分析;说明用户使用可行性,是否满足用户行政管理、工作制度、人员素质的要求。
(7)其他可供选择方案:逐一说明其他可供选择的方案,并说明未被推荐的理由。
(8)结论意见:说明项目能否开发;还需要什么条件才能开发;对项目目标有什么变动等。
44、迭代模型的四个阶段:(1)初始阶段。本阶段主要工作是确定系统的业务用况和定义项目的范围。(2)精化阶段。本阶段主要工作是分析问题域、细化产品定义,定义系统的构架并建立基线,为构建阶段的设计和实施工作提供一个稳定的基础。(3)构建阶段。本阶段主要工作是反复地开发,以完善产品,达到用户的要求。(4)产品化(移交)阶段。本阶段主要工作是将产品交付给用户,包括安装、培训、交付、维护等工作。
45、ISO9001与CMMI的联系与区别:两者的相同点是:CMMI和ISO9001标准都致力于质量和过程管理,都是为了解决同样的问题。两者的不同点是:(1)CMMI是动态的、开放的和持续改进的,它强调没有最好只有更好,强调不断改进,强调人在软件开发方面的主动性,非常适用于软件过程的改进。CMMI模型主要关注软件,它能解决“软件危机”这个世界性的问题。(2)ISO 9001是静态的质量控制,只要达到20个关键指标或过程,就能完成质量控制,它更适用于硬件制造行业和第三产业(服务行业)的质量控制。(3)CMMI与ISO9001的设计思路有差异:CMMI是“专用”,ISO9001是“通用”。ISO 9001不覆盖CMMI,CMMI也不完全覆盖ISO9001。
第五篇:软件工程导论知识点总结(整理)
《软件工程导论》课后习题答案
第一章 软件工程概论
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)产品转移:可移植性、可重用性和互运行性。