目录

实用软件工程复习知识点

《实用软件工程》复习知识点

参考书目:《实用软件工程》

出版社:人民邮电出版社

编著:张海藩  吕云翔


很认真写的期末考试总结,供大家参考!

目录


第一部分:概念

· 软件包括

程序 、

数据 和

文档 。

· 按照功能的不同,软件可以分为

系统软件 、

支撑软件 和

应用软件 三类。

· 按照工作方式的不同,计算机软件划分为

实时软件 、

分时软件 、

交互式软件 和

批处理软件 。

· 软件与硬件相比 ,(1)

软件是一种逻辑实体,具有抽象性 ;(2)

软件的生产与硬件的制造不同 ;(3)

软件在运行使用过程中不会磨损 ;(4)

软件的开发至今尚未完全摆脱手工艺的开发方式 ;(5)

软件的开发和运行必须依附于特定的计算机系统环境 。

· 软件危机(Software Crisis) :软件危机就是指人们在开发软件和维护软件过程中所遇到的一系列的问题。

· 软件危机的主要表现为 :(1)

产品的功能或特性与需求不符 ;(2)

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

软件质量难以得到保证,且难以发挥硬件潜能 ;(4)

难以准确估计软件开发、维护的费用以及开发周期 ;(5)

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

软件产品维护困难,集成遗留系统更困难 ;(7)

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

· 软件危机出现的原因是 :(1)

忽视软件开发前期的需求分析 ;(2)

开发过程缺乏统一的、规范化的方法论的指导 ;(3)

文档资料不齐全或不准确 ;(4)

忽视用户之间、开发组成员之间的交流 ;(5)

忽视测试的重要性 ;(6)

不重视维护或由于上述原因造成维护工作的困难 ;(7)

从事软件开发的专业人员对这个产业认识不充分,缺乏经验 ;(8)

没有完善的质量保证体系 。

· 软件工程(Software Engineering)

1968年 ,在

北大西洋公约组织 举行的一次学术会议上,人们首次提出了软件工程这个概念。

软件工程是借鉴传统工程的原则、方法,以提高质量、降低成本为目的,指导计算机软件的开发和维护的工程学科 ,软件工程本身是一个交叉学科,它是一种层次化的技术。

· 软件工程的3要素 :软件工程以

关注质量 为目标,其中

过程 、

方法 和

工具 是软件工程的三要素。

· 软件工程知识体系

1.软件需求 (software requirements)软件需求涉及软件需求的获取、分析、规格说明和确认。
2.软件设计 (software design)软件设计定义了一个系统或组件的体系结构、组件、接口和其他特征的过程以及这个过程的结果。
3.软件构建 (software construction)软件构建是指通过编码、验证、单元测试、集成测试和调试的组合,详细地创建可工作的和有意义的软件。
4.软件测试 (software testing)软件测试是为评价和改进产品的质量、标识产品的缺陷和问题而进行的活动。
5.软件维护 (software maintenance)软件维护是指由于一个问题或改进的需要而修改代码和相关文档,进而修正现有的软件产品并保留其完整性的过程。
6.软件配置管理 (software configuration management)软件配置管理是一个支持性的软件生命周期过程,它是为了系统地控制配置变更,在软件系统的整个生命周期中维持配置的完整性和可追踪性,而标识系统在不同时间点上的配置的学科。
7.软件工程管理 (software engineering management)软件工程的管理活动建立在组织和内部基础结构管理、项目管理、度量程序的计划制定和控制三个层次上。
8.软件工程过程 (software engineering process)软件工程过程涉及软件生命周期过程本身的定义、实现、评估、管理、变更和改进。
9.软件工程模型和方法 (software engineering models and methods)软件工程模型特指在软件的生产、使用与退役等各个过程中的参考模型的总称,诸如需求开发模型、架构设计模型等都属于软件工程模型的范畴;软件开发方法,主要讨论软件开发各种方法及其工作模型。
10.软件质量 (software quality)软件质量特征涉及多个方面,保证软件产品的质量是软件工程的重要目标。

· 软件产品的6个生命周期

可行性研究 、

需求分析 、

软件设计 、

编码 、

软件测试 、

软件维护 。

· 软件生命周期模型

名称概念及适用范围优缺点
1.瀑布模型概念 :瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品; 适用范围 :用户需求明确,且在开发过程中没有或很少变更,开发人员对软件应用领域很熟悉,用户使用环境稳定,开发过程对用户参与的要求很低;优点 :过程模型简单,执行容易; 缺点 :无法适应变更,不可回溯(sù);
2.快速原型模型概念 :快速原型模型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成功能的一个子集; 适用范围 :进行产品移植或升级时,以及项目招投标时,对所开发的领域比较熟悉;优点 :开发费用低、开发周期短且对用户更友好; 缺点 :准确的原型设计比较困难,不利于开发人员的创新;
3.增量模型概念 :增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件; 适用范围 :进行已有产品升级,对完成期限有严格要求;优点 :用户可以及时了解开发进展,降低了开发风险,开发顺序灵活; 缺点 :要求待开发的软件系统可以被模块化;
4.螺旋模型概念 :螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析; 适用范围 :螺旋模型只适合于大规模的软件项目;优点 :有利于软件的重用,有助于把软件质量作为开发的重要目标,减少了不必要的测试或测试不足所带来的风险; 缺点 :开发人员需要具有丰富的风险评估经验和专业知识;

· 软件开发方法有 :结构化方法(

自顶向下逐步求精的指导思想 )、面向数据结构方法(

Jackson方法 )、面向对象方法(

以对象建模为基础,自底向上和自顶向下相结合 )。

· 可行性研究的概念 :可行性研究就是指在项目进行开发之前,根据项目发起文件和实际情况,对该项目是否能在特定的资源、时间等制约条件下完成做出评估,并且确定它是否值得去开发。

· 可行性研究的8个内容 :(1)战略可行性、(2)操作可行性、(3)计划可行性、(4)技术可行性*、(5)社会可行性*、(6)市场可行性、(7)经济可行性*、(8)风险可行性。

· 可行性研究的5个步骤

明确系统目标 、

分析研究现行系统 、

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

获得并比较可行的方案 ;

撰写可行性研究报告 。

· 需求分析的2个任务

建模阶段 和

描述阶段 ,描述阶段输出

软件需求规格说明书SRS 。

· 需求分析分为

需求获取 、

分析建模 、

需求描述 和

需求验证 4步。

· 数据流图(DFD,Data Flow Diagram) :数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经历的变换,便与分析员与用户沟通。数据流图有4种符号,正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形(或两条平行横线)代表数据存储;箭头表示数据流。

· 实体关系图(ER,Entity Relationship) :描绘

数据对象 之间的关系,包含

实体(矩形) 、

关系(菱形框,一对一1:1一对多1:N多对多M:N) 和

属性(椭圆形或圆角矩形) 3种基本成分。

一对一联系(1:1)一个部门有一个经理,而每个经理只在一个部门任职
一对多联系(1:N)每位教师可以教多门课程,但是每门课程只能由一位教师来教
多对多联系(M:N)一个学生可以学多门课程,而每门课程可以有多个学生来学

· 状态转换图(STD,State Transition Diagram)的3个基本符号 :初态用实心圆表示;中间状态用圆角矩形表示;终态用一对同心圆(内圆为实心圆)表示。

· 数据字典(DD,Data Dictionary) :数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合。数据字典是为了描述在结构化分析过程中定义对象时的内容以及所有与系统相关的数据元素的有组织的列表。

· 软件设计 就是要把需求规格说明书中归纳的需求转换为可行的解决方案,并把解决方案反映到设计说明书里,需求分析解决的是“做什么”的问题,而软件设计解决了“怎么做”的问题。

· 从工程管理角度来看, 软件设计分为

概要设计 和

详细设计 。概要设计确定软件的结构以及各组成部件之间的相互关系,确定目标系统的总体架构,用

层次图 、

结构图 、

HIPO图 表示;详细设计确定模块内部的算法和数据结构,描述系统中每个模块的实现算法和细节,用程序流程图、判定表判定树表示。

· 面向对象设计分为

系统设计 和

对象设计 。

· 模块独立 :模块的内聚是指模块内部各个元素之间彼此结合的紧密程度;耦合是对各个模块之间互连程度的度量。高内聚(

顺序内聚、功能内聚 )低耦合(

无直接耦合、数据耦合、标记耦合 )。

· 启发规则 :深度、宽度、扇入、扇出都应适当。

深度深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度
宽度宽度是软件结构内同一个层次上的模块总数的最大值
扇入一个模块的扇入表明有多少个上级模块直接调用它
扇出扇出是一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂

· 层次图 :用于描述软件的层次结构,矩形框表示一个模块,矩形框之间的直线表示模块之间的调用关系,同结构图一样未指明调用顺序。

· 层次图加输入/处理/输出图(HIPO,Hierarchy plus Input-Process-Output) :是IBM 公司在层次图的基础上推出的一种描述系统结构和模块内部处理功能的工具。

· 结构图 :Yourdon提出的结构图和层次图类似,也是描绘软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。

· 数据流分为

变换型数据流 和

事物型数据流 两种。

· 面向数据结构的设计方法 是根据/数据结构/设计程序处理过程/的方法,如

Jackson图 。

· 结构化软件设计的工具 :程序流程图*、盒图(N-S图)、PAD图(二维树形结构)、判定表(一张判定表由4部分组成,左上部列出所有条件,左下部是所有可能做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作)、判定树*。

**· 过程设计语言(PDL,

Process Design Language** :也称伪码,又称为 程序描述语言

Program Description Language

),

它是一种用于描述模块算法设计和处理细节的语言

· 面向对象与面向过程

面向对象面向过程
定义面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,先设计组件,再完成拼装。面向过程是“自上而下”的设计语言,先定好框架,再增砖添瓦。通俗点,就是先定好main()函数,然后再逐步实现mian()函数中所要用到的其他方法。
特点封装、继承、多态算法+数据结构
优势适用于大型复杂系统,方便复用适用于简单系统,容易理解
劣势比较抽象难以应对复杂系统,难以复用
语言Java、C++、C#、Python等C

· 选择编程语言需要考虑的因素 :(1)

待开发系统的应用领域 、(2)

用户的要求 、(3)

软件开发人员的喜好和能力 、(4)

系统的可移植性要求 、(5)

算法和数据结构的复杂性 、(6)

平台支持 、(7)

避免大量使用循环嵌套和条件嵌套 。

· 良好的编码风格

程序内部的文档 、

数据说明 、

语句构造 、

输入/输出 、

效率 。

· 软件测试的目的 :软件测试的目的是为了发现软件产品中存在的软件缺陷,进而保证软件产品的质量。

· 软件测试的分类 :按照测试技术划分,软件测试可分为

白盒测试 、

黑盒测试 和

灰盒测试 ;按照开发阶段分,软件测试可分为

单元测试 、

集成测试 、

确认测试 、

系统测试 和

验收测试 。

· 黑盒测试 :黑盒测试又叫功能测试,它主要关注被测软件

功能 的实现,而不是其内部逻辑。

· 黑盒测试的技术 :等价类划分法(有效等价类、无效等价类划分、等价类划分表、有效等价类的测试用例、无效等价类的测试用例)、边界值分析法。

· 逻辑覆盖法 :逻辑覆盖法是常用的一类白盒动态测试方法,以程序内部逻辑结构为基础,通过对程序逻辑结构遍历实现程序测试的覆盖。从覆盖原程序语句的详尽程度,可以分为

语句覆盖 、

判定覆盖 和

条件覆盖 (满足条件覆盖不能满足判定覆盖,同理,满足判定覆盖也不能满足条件覆盖)。操作步骤:(1)画程序流程图;(2)在图上标出路径A.B.C;(3)设计测试用例满足语句/判断/条件覆盖。

· 白盒测试 :白盒测试关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。

· 基本路径法 :基本路径法是在

程序控制流图 的基础上,通过分析控制构造的

环路复杂性 ,导出基本可执行的路径集合,从而设计测试用例的方法。复杂性计算:

区域数+1 或

判定节点数+1 或

边数-节点数+2 。

· 白盒测试和黑盒测试的区别

黑盒测试白盒测试
不涉及程序结构考察程序逻辑结构
用软件规格说明书生成测试用例用程序结构信息生成测试用例
可适用于从单元测试到系统验收测试主要适用于单元测试和集成测试
某些代码段得不到测试对所有逻辑路径进行测试

· 单元测试 :单元测试是开发者通过编写代码检验被测代码的某单元功能是否正确而进行的测试。在进行单元测试时,被测试的单元本身不是独立的程序,需要为其开发駆动模块(也称驱动程序)和桩模块(也称存根程序)。驱动模块是用来模拟待测试模块的上级模块。驱动模块在集成测试中接受测试数据,将相关的数据传送给待测模块,启动待测模块,并打印出相应的结果。桩模块用来模拟待测模块工作过程中所调用的模块。柱模块由待测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验待测模块与下级模块的接口。

· 集成测试 :集成测试是在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的接口是否正确。集成测试是构造软件体系结构的系统化技术,同时也是进行一些旨在发现与接口相关的错误的测试。集成测试策略有:非增量式集成测试和增量式集成测试,自顶向下需要桩模块;自底向上需要驱动模块。

· 确认测试 :确认测试是通过检验和提供客观证据,验证软件是否满足特定预期用途的需求。它依据

软件需求规格说明书 。

· 性能测试 :性能测试是用来测试软件系统在实际的集成系统中运行的性能。

· 压力测试 :压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。

· 容量测试 :容量测试是为了确定测试对象在给定时间内能够持续处理的最大负载或工作量。

· 验收测试

以用户为主 的测试,应由用户、测试人员、软件开发人员和质量保证人员一起参与,确定产品是否能够满足合同或者用户所规定需求的测试。α测试是在受控的环境中进行的,β测试是软件在开发者不能控制的环境中的“真实”应用。

· 回归测试 :回归测试指软件系统被修改或扩充后重新进行的测试。

· 软件维护 :软件维护就是指在软件产品交付给用户之后,为了弥补软件测试阶段未发现的缺陷,改进软件产品的性能,补充软件产品的新功能等所进行的修改软件的过程。软件维护可以分为

纠错性维护 、

适应性维护 、

完善性维护 和

预防性维护 4种类型。

纠错性维护为了识别并纠正软件产品中所潜藏的错误,弥补软件在性能上的缺陷所进行的维护;
适应性维护为了使软件产品适应软硬件环境的变更而进行的维护;
完善性维护它是针对用户对软件产品所提出的新需求所进行的维护;
预防性维护主要是采用先进的软件工程方法对已经过时的、很可能需要维护的软件系统的某一部分进行重新设计、编码、测试,以达到结构上的更新,它为以后进一步维护软件打下了良好的基础。

· 面向对象建模的3种类型 :描述系统数据结构的

对象模型 、描述系统控制结构的

动态模型(状态图) 、描述系统功能的

功能模型(由一组数据流图DFD组成) 。

· 面向对象

序号名词概念
1对象在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象;
2类是对具有相同属性和行为的一组相似的对象的抽象;
3属性属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象;
4封装封装就是把数据和实现操作的代码集中起来放在对象内部;
5继承继承是子类自动地共享父类中定义的数据和方法的机制;
6多态在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为;
7实例实例就是由某个特定的类所描述的一个具体的对象;
8消息消息就是/要求某个对象执行/在定义它的那个类中/所定义的某个操作的规格说明;
9方法方法就是对象所能执行的操作,也就是类中所定义的服务;
10重载函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。

· 在UML中,用一端为空心三角形的连线表示

泛化(继承) 关系;用空心菱形表示

关联(共享聚集) 关系;用实心菱形表示

组成(组合) 关系。

· 用例图的4种主要元素 :系统(矩形方框)、用例(椭圆)、行为者(箭头)、用例之间的关系(线条人)。

· 建立对象模型 :找出候选的类与对象,把陈述中的

名词作为类 与对象的候选者,用

形容词作为 确定

属性 的线索,把

动词作为 服务(

操作 )的候选者,然后画出类图。

· 软件工程学/的主要内容是

软件开发技术 和

软件工程管理技术 。

· 软件工程管理是 通过计划、组织和控制等一系列活动,合理的配置和使用各种资源,以达到既定目标的过程。内容包括:(1)软件开发成本、(2)控制、(3)开发人员、(4)组织机构、(5)用户、(6)软件开发文档、(7)软件质量。

· 计算程序规模的估计值 ,最小规模a,最大规模b,最可能的规模m,分别计算出这3种规模的平均值。

· 代码行技术的优缺点

优点缺点
· 代码行是所有软件开发项目都有的“产品”,而且很容易计算· 源程序仅是软件配置的一个成分,用它的规模代表整个软件的规模不太合理
· 许多现有的软件估算模型使用LOC或KLOC作为关键的输入数据· 用不同语言实现同一个软件产品所需要的代码行数并不相同
· 已有大量基于代码行的文献和数据存在· 这种方法不适用于非过程语言

· 处理软件开发风险的策略应该包含3方面的内容

风险避免(或缓解) 、

风险监控 、

风险管理和意外事件计划 。

· 软件开发工作的范围包括 软件需求分析、设计、实现、测试、运行和维护。

· 软件工程标准可分为

国际标准 、

国家标准 、

行业标准 、

企业规范 及

项目(课题)规范 5个等级。

· 软件项目管理与软件工程的关系 :软件工程与软件项目管理都是围绕软件产品开发的管理。软件工程是软件开发方法论,是关于如何开发出好的软件产品;软件项目管理是软件产品的生产管理形式,项目目标是项目的绩效。软件工程对于任何软件项目具有指导性,而软件项目管理是落实软件工程思想的载体。

· 民主制程序员组 :如果一个小组有n个成员,则可能的通信信道有n(n-1)/2条。

· 主程序员组核心人员的分工 :主程序员、后备程序员、编程秘书。

第二部分:试卷

END.