目录
目录
软件工程基础知识
软件工程首次提出:
1968年德国召开的NATO会议
软件工程包括:
软件需求、软件设计、软件构建、软件测试和软件维护
软件工程生命周期:
软件需求、软件设计、软件构建、软件测试、软件维护
软件工程的专门领域:
软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量
软件工程的理论基础:
计算基础、数学基础、工程基础
软件生存周期
可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码和单元测试、综合测试及维护阶段
(1)可行性分析与项目开发计划阶段的主要任务:
确定软件的开发目标及可行性,确定研究问题的范围,探索这个问题是否值得去解,是否有可行的解决方法。给出关于问题定义、可行性分析和项目开发计划。考虑的关键问题是:“要解决的问题是什么”“对这些问题有可行的解决方法吗?”
(2)需求分析:
准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面的要求,确定系统的逻辑模型
(3)概要设计:
将确定的功能需求转换成相应的体系结构。概要设计就是设计软件的结构,明确软件有哪些模块组成,模块的层次以及功能,应用系统的总体数据结构和数据库结构
(4)详细设计主要任务:
对每个模块完成的功能进行具体描述,设计出程序的详细规格说明。通常采用HIPO(层次加输入/处理/输出图)或PDL语言(过程设计语言)描述详细设计的结果
(5)编码和单元测试:
把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单,并详细测试编写出的每一个模块
(6)综合测试关键任务:
通过各种类型的测试使软件达到预定的要求。最基本的测试是集成测试和验收测试。
①集成测试:根据设计的软件结构,把经过单元测试的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试
②验收测试:按照规格说明书的规定,由用户对目标系统进行验收
(7)维护关键任务:
通过各种必要的维护活动使系统持久地满足用户的需要,每一项维护活动都应该准确地记录下来。维护阶段是软件生存期中时间最长的阶段
软件生存周期模型
(1)瀑布模型:
将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行和维护。规定的次序为由前至后、相互衔接、逐级下落
①优点:容易理解、管理成本低;强调开发的阶段性早起计划及需求调查和产品测试
②缺点:项目风险可控性低,项目常常出现延迟,开发预算容易超出
(2)增量模型:
融合了瀑布模型的基本成分和原型实现迭代特征,假设可以将需求分段为一系列增量产品,每个增量可以分别开发。模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的增量
①优点:包括瀑布模型的优点;可交付版本成本和时间少,开发小系统所承担的风险低,开发时间少减少用户需求的变更,运行增量投资
②缺点:对用户需求规划不好的话后来增量会不稳定;管理成本、进度和配置的复杂性可能会超出组织的能力
(3)演化模型:
针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本,最终得到用户满意的软件产品
①优点:方便验证产品是否符合需求,提高产品的质量
②缺点:如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及会产生负面影响
(4)螺旋模型:
螺旋模型是瀑布模型和演化模型的结合。
①螺旋模型的周期:
a、制定计划:确定软件的目标,选定实施方案,明确项目开发的限制条件
b、风险分析:分析所选的方案,识别风险、消除风险
c、实施工程:实施软件开发,验证阶段性产品
d、用户评估:评价开发工作,提出修正建议,建立下一个周期的开发计划
②优点:软件适应能力高,管理决策调整方便,软件开发风险低
③缺点:过多迭代增加开发成本,延迟提交时间
(5)喷泉模型:
以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法,开发过程机油迭代性和无间隙性。允许各开发活动交叉、迭代进行
①优点:提高软件项目开发效率,节省开发时间
②缺点:开发过程需要大量的开发人员,不利于项目的管理,要求严格管理文档,使得审核的难度加大
典型的软件开发方法
(1)结构化开发方法:
由结构化分析、结构化设计、结构化程序设计构成,是一种面向数据流的开发方法;根据分解和抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能模型,来完成需求分析工作
结构化方法的指导思想:自顶向下、逐层分解
结构化方法的基本原则:分解和抽象
结构化方法适合领域:数据处理
(2)原则化开发方法
首先确定用户需求,开发原始模型,征求用户对初始原型的改进意见,并根据意见修改原型
原型化方法适合于用户需求不清,业务理论不确定,需求经常变化的情况
(3)面向对象开发方法:
基本出发点:尽可能按照人类认识世界的方法和思维方法来分析和解决问题
基本元素:对象。对象也是分析问题解决问题的核心
面向对象开发方法:面向对象分析、面向对象设计、面向对象实现
(4)敏捷方法
敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”是客户满意
①极限编程(XP):是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式
极限编程的核心价值观:沟通、简单、反馈、勇气、谦逊。
组成:价值观、原则、实践、行为
XP原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作
XP12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编 程、集体代码所有制、持续集成、每周工作40个小时、现场客户和编码标准
②水晶法:每个不同的项目都需要一套不同的策略、约定和方法论
③并列争求法:使用迭代方法,把每30天一次的迭代称为一个冲刺,并按需求的优选级来实现产品。
④自适应软件开发
软件项目管理
软件项目管理对象:软件项目
(1)成本估算
①方法
a、自顶向下估算方法
b、自顶向上估算方法
c、差别估算方法
d、其他估算方法 专家估算法、类推估算法、算式估算法
②成本估算模型:
a、putnam模型:动态多变量模型,假设在软件开发的整体生存期中工作量的特定的分布
b、COCOMO模型:最精确、最易于使用的成本估算模型之一
[1]:基本COCOMO模型:静态单变量模型,对整个软件系统进行估算
[2]:中级COCOMO模型:静态多变量模型,将软件系统模型分为系统和部件两个层次,系统有部件构成,把软件开发所需人力看作是程序大小和一系列"成本驱动属性"的函数
[3]:详细COCOMO模型:将软件系统模型分为系统、子系统和模块三个层次,除了包括中级模型所考虑的因素外,还考虑了在需求分析,软件设计等每一步的成本驱动属性的影响
(2)风险分析
①组成:建立表示风险概念的尺度,描述风险引起的后果,估计风险影响的大小,确定风险估计的正确性
②不同活动:风险识别、风险预测、风险评估、风险控制
(3)进度管理
进度的合理安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据,因此进度安排是管理工作的一个重要组成部分
进度安排方式:
①系统最终交付日期已经确定,软件开发部门必须在规定期限内完成
②系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定
进度安排图形描述方法:甘特图、项目计划评审技术图
(4)人员管理
系统分析基础知识
系统分析的目的:为项目团队提供对触发项目的问题和需求更全面的理解
系统分析概述
(1)系统分析的任务
是对现行系统进一步详细调查,将调查中所得到的文档资料集中,对组织内部整体管理状况和信息处理过程进行分析,为系统开发提供所需资料,并提交系统方案说明书
(2)系统分析的主要阶段
主要包括:范围定义、问题分析、需求分析、逻辑设计、决策分析阶段
需求分析
需求分析任务:
①确定软件系统系统的综合要求
②分析软件系统的数据要求
③导出系统的逻辑模型
④修正项目开发计划
⑤可开发一个原型系统
需求的分类
①功能需求:所开发的软件必须具备什么样的功能
②非功能需求:指产品必须具备的属性或品质,如可靠性、性能、响应时间、容错性和扩展性
③设计约束(限制条件、补充规约):通常是解决方案的一些约束说明
结构化分析方法
是一种面向数据流的需求分析方法,适用于分析大型数据处理系统,是一种简单、实用的方法,现在得到广泛的使用
结构分析方法组成:数据流图、数据字典、说明(加工逻辑说明)、补充材料
(1)数据流图
①基本成本:数据流、加工、数据存储、外部实体
(2)数据字典
为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明
①数据字典的内容:数据流、数据项、数据存储、基本加工
(3)加工描述
①结构化语言
外层:顺序结构、选择结构、重复结构
内层
②判定表
③判定树
面向对象分析方法
面向对象的基本概念
(1)对象
在面向对象的系统中,对象基本是运行是的实体,包括数据(属性)、作用于数据的操作(行为)。在对象内的操作成为方法。一个对象由对象名,属性和操作三部分组成
(2)消息:
对象之间进行通信的一种构造叫作消息
(3)类
类是在对象之上的抽象,对象是类的具体化,是类的实例
(4)继承
继承是父类和子类之间共享数据和方法的机制
(5)多态
不同对象收到同一消息可以产生完全不同的结果
(6)动态绑定
统一建模语言(UML)概述
是面向对象软件的标准化建模语言
①构成要素:构造块、规则、公共机制
②事物:结构事物、行为事物、分组事物、注释事物
③关系:依赖、关联、泛化、实现
④UML中的图:类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图、计
时图
⑤面向对象分析活动:认定对象、组织对象、描述对象的相互作用、定义对象的操作、定义对象的内部信息
系统设计基础知识
系统设计内容和步骤
系统设计的目的
为系统制定蓝图,设计详细方案
系统设计的主要内容
性系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计
步骤
概要设计和详细设计
概要设计的基本任务
①设计软件系统总体结构
②数据结构及数据库设计
③编写该概要设计文档
④评审
详细设计的基本任务
①对每个模块进行详细的算法设计
②对模块内的数据结构进行设计
③对数据库进行物理设计
④其他设计:代码设计、输入输出设计、用户界面设计
⑤编写详细设计说明书
⑥评审
系统设计的基本原理
①抽象:一种设计技术,重点说明一个实体的本质方面,忽略或者掩盖不是很重要或非本质的方面
②模块化:将待开发的软件分解成若干个小的简单的部分——模块
③模块独立:高内聚、低耦合
内聚
耦合
结构化设计方法
一种面向数据流的设计方法,与SA方法衔接。基本思想是将系统设计成有相对独立、功能单一的模块组成的结构
面向对象设计方法
是OOA模型基础上运用面向对象方法,主要解决与实现有关的问题,目标是产生一个符合具体实现条件的OOD模型
系统测试基础知识
测试的目的:
以最少的人力和时间发现潜在的各种错误和缺陷
基本原则
①尽早并不断进行测试
②测试工作应避免开发软件的人和小组完成
③设计测试方案不仅确定输入的数据而且还要根据系统功能确定预期输出结果
④在测试实例时不仅要测试正确的条件也要测试不符合失效的条件
⑤应该检验到该做和不该做的事情
⑥严格按照测试计划来进行,避免测试的随意性
⑦妥善保管测试计划、测试用例
⑧测试例子应该经过设计,避免重复测试
测试过程
①制定测试计划
②编制测试大纲
③根据测试大纲设计和生成测试用例
④实施测试
⑤生成测试报告
软件测试分类
①测试阶段分类:单元测试、集成测试、确认测试和系统测试
②测试方法分类:白盒测试、黑盒测试
测试的阶段:
①单元测试(模块测试)针对软件设计的最大单位(模块)进行正确性检验的测试工作,一般使用白盒测试方法
②集成测试(组装测试、联合测试),将已通过单元测试的模块集成在一起,主要测试模块之间的协作性,一般采用黑盒测试
③确认测试(有效测试)包括验证软件的功能、性能及其特性是否与用户要求(需求)一致。在需求分析阶段成为
④系统测试:将已经在确认的软件、计算机硬件、外设、网络等其他元素结合起来,进行信息系统的各种组装测试和确认测试。在需求分析阶段完成
测试的类型分类:
静态测试和动态测试
动态测试
黑盒测试
又称功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性
主要发现的错误:
①是否有错误的功能或遗漏的功能
②界面是否有误,输入是否正确接收,输出是否正确
③是否有数据结构或外部数据库访问错误
④性能是否能够接受
⑤是否有初始化或终止性错误
黑盒测试技术:等价类划分、边界值分析、错误推测、因果图
白盒测试
灰盒测试
静态测试
桌面检查
代码审查
代码走查
系统运行与维护基础知识
软件维护
各种维护占比
影响维护工作的因素:
系统大小
程序设计语言
系统年龄
数据库技术的应用
先进的软件开发技术