程序员教程-5章-软件工程基础知识
Posted liunianfeiyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员教程-5章-软件工程基础知识相关的知识,希望对你有一定的参考价值。
先给出目录结构
5.1 软件工程概述
5.1.1 软件生存周期
1 问题定义
2 可行性分析
3 需求分析
4 总体设计
5 详细设计
6 编码和单元测试
7 综合测试
8 维护
5.1.2 软件生存周期模型
1 瀑布模型
2 增量模型
3 演化模型
4 螺旋模型
5 喷泉模型
6 统一过程
7 敏捷方法
5.1.3 软件过程评估
1 软件能力成熟度模型
2 能力成熟度模型集成
5.1.4 软件工具
1 软件开发工具
2 软件维护工具
3 软件管理和软件支持工具
5.1.5 软件开发环境
5.2 软件需求分析
5.2.1 软件需求的定义
5.2.2 软件需求分析的基本任务
5.2.3 需求建模
5.3 软件设计
5.3.1 软件设计的基本任务
1 软件概要设计的基本任务
2 软件详细设计的基本任务
5.3.2 软件设计原则
1 抽象
2 模块化
3 信息隐蔽
4 模块独立
5.4 结构化分析与设计方法
5.4.1 结构化分析方法
1 结构化分析的过程
2 数据流图
3 数据字典
4 加工逻辑的描述
5.4.2 结构化设计方法
1 结构图
2 数据流图到软件体系结构的映射
3 数据流图映射到结构图的步骤
5.4.3 结构化程序设计方法
5.5 面向对象分析与设计方法
5.5.1 面向对象的基本概念
1 对象
2 消息
3 类
4 继承
5 多态
6 动态绑定
7 面向对象原则
5.5.2 面向对象分析与设计
1 面向对象分析
2 面向对象设计
3 面向对象编程
5.5.3 UML概述
1 事务
2 关系
3 UML中的图
5.5.4 设计模式
1 创建型设计模式
2 结构型设计模式
3 行为型设计模式
5.6 软件测试与运行
5.6.1 软件测试的目的及原则
1 软件测试的目的
2 软件测试的原则
3 测试过程
4 测试工具
5.6.2 软件测试方法
1 静态测试
2 动态测试
3 测试用例的设计
5.6.3 软件测试过程
5.6.4 软件测试设计和管理
5.6.5 软件调试
5.6.6 软件运行与维护
1 系统运行概述
2 系统维护概述
3 软件的可维护性
5.7 软件项目管理
5.7.1 管理范围
5.7.2 成本估算
5.7.3 风险分析
5.7.4 进度管理
5.8 软件质量与软件质量保证
5.8.1 软件质量特性
5.8.2 软件质量保证
软件是计算机系统中的重要组成部分,它包括程序、数据及相关文档。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,以目的是提高软件生产率、提高软件质量、降低软件成本。
5.1 软件工程概述:1968年在德国提出以克服软件危机
5.1.1 软件生存周期
同任何事务一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡的许多阶段,一般称为软件生存周期。
1、问题定义,2、可行性分析,3、需求分析,4、总体设计,5、详细设计,6、编码和单元测试,7、综合测试,8、维护
5.1.2 软件生存周期模型
1 瀑布模型:将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。
2 增量模型:增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别地开发。
3 演化模型:针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。
4 螺旋模型:对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
5 喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。
6 统一过程:将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程定义了5个阶段及其制品
1)起始阶段
2)精化阶段
3)构建阶段
4)移交阶段
5)生产阶段
7 敏捷方法:总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。
敏捷过程的方法:极限编程(XP),水晶法(Crystal),并列争求法(Scrum),自适应软件开发(ASD)
5.1.3 软件过程评估
1 软件能力成熟度模型(CMM):目的是提供一种评价软件承接方能力的方法,同时它可用于帮助软件组织改进其软件过程。
5个成熟度级别:(1)初始级,(2)可重复级,(3)已定义级,(4)已管理级,(5)优化级
2 能力成熟度模型集成(CMMI)
5.1.4 软件工具:用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具
1 软件开发工具:有需求分析工具,设计工具,概要设计工具,编码与排错工具,测试工具
2 软件维护工具:版本控制工具,文档分析工具,开发信息库工具,逆向工程工具,再工程工具
3 软件管理和软件支持工具:项目管理工具,配置管理工具,软件评价工具
5.1.5 软件开发环境:是支持软件产品开发的软件系统。它由软件工具集和环境集成机制构成,前者用来支持软件开发的相关过程、活动和任务,后者为工具集成和软件开发、维护和管理提供统一的支持,它通常包括数据集成、控制集成和界面集成。
5.2 软件需求分析
在需求分析阶段,通过开发人员与用户之间的广泛交流,不断澄清一些模糊的概念,最终形成一个完整的、清晰的、一致的需求说明。
5.2.1 软件需求的定义:(1)功能需求,(2)非功能需求,指产品必须具备的属性或品质,如可靠性、性能、响能时间、容错性和扩展性(3)设计约束,也称为限制条件、补充规约,这通常是对解决方案的一些约束说明
5.2.2 软件需求分析的基本任务
需求分析主要是确定待开发软件的功能、性能、数据和界面等要求。
(1)确定软件系统的综合要求
(2)分析软件系统的数据要求
(3)导出系统的逻辑模型
(4)修正项目的开发计划
(5)如有必要,可开发一个原型系统
在此需要强调的是,需求分析阶段主要解决“做什么”的问题,而“怎么做”则是由设计阶段来完成
5.2.3 需求建模:通常情况下,分析人员用图形符号来创建模型,将信息、处理、系统行为和其他相关特征描述为各种可识别的符号,同时与符号图形相配套,并辅助于文字描述,可使用自然语言或某种特殊的专门用于描述需求的语言来提供辅助的信息描述。
常用的需求分析方法:面向数据流的结构化分析方法(SA),面向数据结构的分析方法,面向对象的分析方法(OOA)
5.3 软件设计
常用的设计方法有以下两种:面向数据流的结构化设计方法,面向对象的设计方法
5.3.1 软件设计的基本任务
1 软件概要设计的基本任务
1)设计软件系统总体结构,2)数据结构及数据库设计,3)编写概要设计文档,4)评审
2 软件详细设计的基本任务
(1)对每个模块进行详细的算法设计
(2)对模块内的数据结构进行设计
(3)对数据库进行物理设计
(4)其他设计:代码设计,输入输出设计,用户界面设计
(5)编写详细设计说明书
(6)评审
5.3.2 软件设计原则
1 抽象:抽象是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。主要手段是过程抽象(功能抽象)和数据抽象
2 模块化:模块是可组合、可分解和可更换的单元模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程
(1)划分模块时,尽量做到高内聚、低耦合
(2)一个模块的作用范围应在其控制范围内
(3)软件结构的深度、宽度、扇入和扇出应适当
(4)模块的大小要适中
3 信息隐蔽:指在设计和确定模块时,使得一个模块内包含的信息对于不需要这些信息的其他模块来说,是不能访问的
4 模块独立:指模块只完成系统要求的独立的子功能,并且与其他模块的接口简单,符合信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可能小。
(1)内聚:内聚性由低到高:偶然内聚(巧合内聚),逻辑内聚,时间内聚,过程内聚,通信内聚,顺序内聚,功能内聚
(2)耦合:耦合性由低到高:无直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合
5.4 结构化分析与设计方法
是面向数据流的传统软件开发方法,以数据流为中心构建软件的分析模型和设计模型。结构化分析,结构化设计,结构化程序设计构成了完整的结构化方法
5.4.1 结构化分析方法:基本思想是将系统开发看成工程项目,采用“自顶向下,逐层分解”的开发策略
结构化分析的结果由以下几部分组成:
(1)一套分层的数据流图
(2)一本数据字典
(3)一组小说明(也称加工逻辑)
1 结构化分析的过程:略
2 数据流图(Data Flow Diagram DFD)是结构化方法中用于表示系统逻辑模型的一种工具,描述系统的输入数据流如何经过一系列的加工,逐步变换成系统的输出数据流。实际是反映系统的某种功能或子功能
3 数据字典:数据字典用来定义数据流图中各个成分的具体含义的
4 加工逻辑:也称小说明,用以下3种工具描述
(1)结构化语言(2)判定表(3)判定树
5.4.2 结构化设计方法:结构化设计是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法,强调模块化、自顶向下逐步求精、信息隐蔽、高内聚、低耦合。在结构化方法中,软件设计分为概要设计和详细设计两个步骤。
1 结构图:描述软件系统的体系结构,指出一个软件系统由哪些模块组成,以及模块之间的调用关系。基本成分有模块、调用和数据。
结构图的形态特征:深度,宽度,扇出,扇入
2 数据流图到软件体系结构的映射
在需求分析阶段,用结构化分析方法产生了数据流图。面向数据流的设计能方便地将DFD转换成软件的体系结构(结构图)。
DFD的信息流大体上可以分为两种类型:一种是变换流,一种是事务流
3 数据流图映射到结构图的步骤:略
5.4.3 结构化程序设计方法
基本要点:(1)自顶向下、逐步求精(2)使用3种基本控制结构构造程序
5.5 面向对象分析与设计方法
面向对象方法以客观世界的对象为中心,采用符合人们思维方式的分析和设计思想,分析和设计的结果与客观世界的实际情况比较接近,容易被人们接受。
5.5.1 面向对象的基本概念
1 对象 2 消息 3 类 4 继承 5 多态 6 动态绑定 7 面向对象的原则
5.5.2 面向对象分析与设计
1 面向对象分析:略
2 面向对象设计:略
3 面向对象编程:略
5.5.3 UML概述
统一建模语言(Unified Modeling Language,UML):由3个要素构成:UML基本构造块,支配这些构造块如何放置在一起的规则和运用于整个语言的一些公共机制
UML词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物
1 事务:UML中有4种事物:结构事物,行为事物,分组事物和注释事物
2 关系:UML中有4种关系:依赖,关联,泛化和实现(其实有依赖,关联,聚集,组合,泛化(继承),实现:软件设计之UML—UML中的六大关系)
3 UML中的图:图是一组元素的图形表示,大多数情况下把图画成顶点(代表事物)和弧(代表关系)的连通图。UML2.0提供了13种图,分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图和计时图。序列图、通信图、交互概览图和计时图均被称为交互图。
5.5.4 设计模式:核心在于提供了相关问题的解决方案
设计模式一般有如下4个要素:模式名称,问题,解决方案,效果
1 创建型设计模式:与对象的创建有关,抽象了实例化过程,它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式例用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象
2 结构型设计模式:结构型模式处理类或对象的组合,涉及如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。
3 行为型设计模式:行为模式对类或对象怎样交互和怎样分配职责进行描述,涉及算法和对象间职责的分配。
5.6 软件测试与运行
5.6.1 软件测试的目的及原则
1 软件测试的目的:测试的目的就是希望以最少的人力和时间发现潜在的各种错误和缺陷。
2 软件测试的原则:略
3 测试过程:(1)拟定测试计划(2)编制测试大纲(3)根据测试大纲设计和生成测试用例(4)实施测试(5)生成测试报告
4 测试工具:略
5.6.2 软件测试方法
1 静态测试:静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测
2 动态测试:动态测试是指通过运行程序发现错误。
3 测试用例的设计:测试用例由测试输入数据和与之对应的预期输出结果组成。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
1)用黑盒法设计测试用例
黑盒测试也称为功能测试。这种方法将软件看成黑盒子,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性
2)用白盒法设计测试用例
白盒测试也称为结构测试,这种方法将软件看成透明的白盒。根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要
5.6.3 软件测试过程
软件测试实际上分成4步进行:(1)单元测试(2)集成测试(3)确认测试(4)系统测试:常见的系统测试主要有恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试
5.6.4 软件测试设计与管理:软件测试活动大致可以分为测试计划、测试设计、测试执行和测试总结
5.6.5 软件调试:调试的任务就是根据测试时所发现的错误,找出原因和具体的位置,进行改正。(1)试探法(2)回溯法(3)对分查找法(4)归纳法(5)演绎法
5.6.6 软件运行与维护
1 系统运行概述:当系统开发完成并交付到实际生产环境中使用时,就进入运行。系统运行包括系统的日常操作、维护等
2 系统维护概述:系统维护主要是指根据需求变化或硬件环境的变化对已交付并投入运行的系统进行部分或全部的修改。
1)软件维护的类型
根据目的的不同:正确性维护,适应性维护,完善性维护,预防性维护
根据内容的不同:程序维护,数据维护,代码维护,设备维护
2)软件维护的副作用:编码副作用,数据副作用,文档副作用
3)软件维护技术:面向维护的技术和维护支援的技术
5.7 软件项目管理
要考虑软件开发的工作范围,花费的工作量(成本),可能遇到的风险,进度的安排,要实现的任务,经历的里程碑以及需要的资源(人、硬/软件)
5.7.1 管理范围:有效的项目管理集中于4P,即人员(People),产品(Product),过程(Process)和项目(Project)
5.7.2 成本估算:主要靠分解和类推的手段进行。常见的分解技术有基于问题的估算,基于代码行估算,基于功能点的估算,基于过程的估算,基于用例的估算
基本的成本估算方法有如下几种:
(1)自顶向下估算方法(2)自底向上估算方法(3)差别估算方法
5.7.3 风险分析:关注3个方面,一是关心未来,二是关心变化,三是必须解决需要做出选择的问题。
风险分析实际上是贯穿软件工程中的一系列风险管理步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监控
5.7.4 进度管理:进度安排包括把一个项目的工作分解为若干个独立的活动,并描述这些活动之间的依赖关系,估算完成这些活动所需的工作量,分配人力和其他资源,制定进度时序。
(1)Gantt图
(2)PERT图
5.8 软件质量与软件质量保证:软件质量是指反映软件系统或软件产品规定或隐含需求的能力的特征和特性全体
1)ISO/IEC 9126软件质量模型
2)Mc Call软件质量模型
5.8.2 软件质量保证
软件质量保证是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动,其目的是生产高质量的软件。强调3个要点:满足用户规定的需求,遵循规定标准所定义的一系列开发准则,满足某些隐含的需求
以上是关于程序员教程-5章-软件工程基础知识的主要内容,如果未能解决你的问题,请参考以下文章
CISP 考试教材《第 5 章 知识域:安全工程与运营》知识整理
全国软考数据库系统工程师教程(第2版) 第1章 计算机系统知识