一、软件工程概念
1.名词解释
软件:能完成预定功能、性能,并对相应数据进行加工的程序和描述数据及其操作的文档。
软件工程: 是采用工程的概念、原理、技术和方法,并结合正确的管理技术和当前能够得到的最先进的技术方法,经济高效地开发和维护软件的一门工程学科。
软件过程: 软件过程是指软件开发人员为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件生命周期:一个软件从定义、开发、使用和维护直至最后被废弃要经历的漫长时期。
软件危机:是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。
2.软件生命周期各阶段及其任务:
3.软件开发过程及软件生命周期模型
1,瀑布模型
2,快速原型模型
3,增量模型
特点:把软件产品作为一系列的增量构件来设计,编码,集成和测试。每个构件有多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
优点:
1),能够在较短的时间内向用户提交可完成部分工作的产品;
2),逐步增加产品功能可以使用户有较充裕的时间学习适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
缺点:
1),较难把每个新的增量构件集成到现有的软件体系结构中,而又不破坏原来已经开发出的产品。
2),增量模型本身是自相矛盾的,它一方面要求开发人员把软件当做一个整体,另一个方面又要求开发人员把软件构件序列,每个构件本质上都独立于另一个构件,除非开发人员有足够的技术能力协调好这一明显的矛盾,否则增量模型开发出来的产品可能并不能令人满意。
适用范围:软件开发周期较长的软件,有持续的合作。
4,螺旋模型
特点:螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险,即是在每个阶段之前都增加了风险分析过程。
优点:
1),对可选方案和约束条件的强调有利于已有软件的重用,也有利于把软件质量作为软件开发的一个重要目标;
2),减少了过多测试(浪费资金)或者不足(产品故障多)所带来的风险;
3),在螺旋中维护的只是模型的另一个周期,在维护和开发之间没有本质的区别;
缺点:除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险,当项目实际上正在走向灾难时,开发人员可能还认为一切正常。
使用范围:内部软件开发的大规模软件项目。
5,喷泉模型
特点:面向对象的软件开发
优点:
1),对生命周期各阶段的区分变得不重要,不明显了;
2),分析阶段得到的对象模型也适用设计阶段和实现阶段;
3),提高软件项目开发效率,节省开发时间
缺点:
1),开发过程过分无序;
2),面向对象范型本身要求经常对开发活动进行迭代或求精;
3),在开发过程中需要大量的开发人员,因此不利于项目的管理。
适用范围:面向对象的软件开发过程
二、可行性分析
1.技术可行性
对要开发项目的功能、性能和限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目能否实现。
2.经济可行性
经济可行性研究的内容是进行开发成本的估算以及进行效益的评估确定要开发的项目是否值得投资开发。
3.操作可行性
在这个应用范围内,系统的操作方式是否行得通
4.社会可行性
社会可行性主要研究开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质和操作方式是否可行。
5.法律可行性
新系统开发是否会侵犯他人、集体或国家利益,是否违反国家法律。
三、需求分析
需求分析阶段分成四个方面:
- 对问题的识别
- 分析与综合
- 制定规格说明
- 评审
需求分析的三个基本原则:
- 必须能够表达和理解问题的数据域和功能域;
- 必须按自顶向下、逐步 分解的方式对问题进行分解和不断细化;
- 要给出系统的逻辑视图和物理视图。
如何建立软件的逻辑模型
1.数据模型 --> 实体联系图(ER图)
2.功能模型 --> 数据流图 结构化分析
2.行为模型 --> 状态转换图
五、总体设计
设计过程包括系统设计阶段和结构设计阶段
1. 系统设计阶段
2. 结构设计阶段
名词概念
-
模块
能够单独命名,由边界元素限定的程序元素的序列,是构成程序的基本构件。
-
模块化
把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
-
逐步求精
为了能集中精力解决主要问题而 尽量推迟对问题细节的考虑 逐步揭露出底层细节。
-
耦合
耦合是对一个软件结构内不同模块之间互连程序的度量。
耦合强度取决于模块接口的复杂程度、通过接口的数据等耦合性越高,模块独立性越弱。
耦合分类(程度从低->高):
无直接耦合 =>数据耦合 =>标记耦合(特征耦合) =>控制耦合 =>外部耦合 =>公共耦合
-
内聚
是用来度量一个模块内部各个元素彼此结合的紧密程度的。
内聚分类(程度从低->高):
偶然内聚 =>逻辑内聚 =>时间内聚 =>过程内聚 =>通信内聚 =>顺序内聚 =>功能内聚
六、详细设计
1. 详细设计目的:
确定怎样具体地实现所要求的系统。得出对目标的精确描述。
2. 详细设计任务:
过程设计:即设计软件体系结构中所包含的每个模块的实现算法。
数据设计:设计软件数据结构。 接口设计:设计软件内部各模块之间的接口
3. 结构程序设计
只用三种基本的控制结构就能实现任何单入口单出口的程序。
三种基本控制结构:
- 选择结构
- 顺序结构
- 循环结构
4. 人机界面设计
设计人机界面过程常遇到的4个问题:
-
系统响应时间
重要属性:长度和易变性
-
用户帮助设施
-
出错信息处理
-
命令交互
5. 过程设计工具
描述程序处理过程的工具
- 程序流程图
- 盒图(N-S图)
- PAD图
- 判定表
- 判定树
- (PDL)过程设计语言
七、测试
软件测试的目标
软件测试是为了发现错误而执行程序的过程
编码阶段(单元测试)
测试阶段(各种综合测试)
软件测试的方法
黑盒测试法:
将软件看作一个黑盒子,不考虑其内部结构和处理过程,只按照规格说明书的规定,测试软件是否能够正确接收输入数据,产生正确的输出数据。即测试程序是否正确的实现了其功能。又称为“功能测试”。
白盒测试法:
完全知道程序的内部结构和处理算法,因此可以将程序看作一个透明的白盒子,根据程序内部的逻辑结构测试程序内部的主要执行通路是否能够按照预定的要求正确工作。又称“结构测试
软件测试的步骤
-
单元测试(模块测试):将每个模块作为一个单独的实体进行测试。发现的错误编码和详细设计阶段的错误
-
子系统测试:将模块集成为一个子系统进行测试。着重测试模块的接口。
-
系统测试:将子系统组装为一个完整的系统进行测试。子系统测试和系统测试总称为“集成测试”。
-
验收测试(确认测试):在用户的参与下,往往使用实际的数据进行的测试。发现需求说明中的错误
-
平行运行: 同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。
单元测试
测试依据:详细设计文档
测试技术(设计测试用例的方法):白盒测试技术
着重点:
- 模块接口
- 局部数据结构
- 重要的执行通路
- 出错处理通路
- 边界条件
集成测试
名词解释
回归测试:
重新执行已经做过测试的某个子集,以保证程序的变化没有带来非预 期的副作用。
调试
调试(也称为纠错)是在测试发现错误之后排除错误的过程
软件可靠性
程序在给定时间间隔内,按照规格说明书的规定成功运行的概率。
软件可用性
程序在给定时间点,按照规格说明书的规定成功运行的概率。
八、维护
软件维护是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软 件的过程。
维护分类:
- 改正性维护: 诊断和改正错误的过程
- 适应性维护: 为了和变化了的环境适当地配合而进行的修改软件的活动
- 完善性维护 : 为了满足在用户提出的增加新功能或修改已有功能的要求和一般性的改进要求
- 预防性维护(软件再工程):为了改进未来的可维护性或可靠性,主动修改软件
决定软件可维护性的因素
- 可理解性:读者理解软件的难易程度
- 可测试性:论证程序正确性的容易程度。
- 可修改性:程序容易修改的程度。
- 可移植性:把程序从一种计算环境(硬件配置和操作系统)转移到另一种计算环 境的难易程度。
- 可重用性:同一个软件不做修改或稍加改动,就可以在不同环境中多次重复使用。
九、面向对象方法学
对象
在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,包 括具体的物理实体 的抽象、人为的概念、任何有明确边界和意义的东西。
对象的两个基本要素
- 属性:用来描述对象静态特征的一个数据项;
- 服务:用来描述对象动态特征(行为)的一个操作序列。 对象的属性和所有操作封装在一起,构成一个统一体。 属性一般只能通过执行对 象的操作来改变。
相关名词
类: 具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽 象描述。
实例: 是某个特定类所描述的一个具体对象。
消息: 对象之间通信的手段,是一个对象要求另一对象执行类中定义的某个操作的规格说 明。
十、软件重用
十一、软件项目管理
CMM能力成熟度模型
1概念
能力成熟度模型CMM是用于评价软件机构的软件过程能力成熟度模型,用于帮助软件开发机构建立一个有规模的,成熟的软件过程。
2五个等级(从低到高):
初始级、可重复级、已定义级、已管理级、优化级。
更新中...