软件工程
定义
采用工程概念、原理、技术、方法来开发、维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,经济开发出高质量软件并有效的维护
基本目标
目标
可用性 正确性 合算性
原则
采用适合的开发范型、开发方法、工程支持、工程管理
活动
需求 设计 实现 确定 支持
本质特征
控制复杂性、软件经常变化、开发效率要高、软件有效支持用户、具有一种文化背景的人替具有另一种文化背景的人创造产品
基本原理
分阶段 生命周期计划严格管理
阶段评审
产品控制
现代 程序设计技术
结果清楚地审查
开发小组人员少而精
不断改进软件工程实践
软件工程方法学
软件生命周期全过程中使用的一套技术方法的集合称为方法学
传统方法学 面向对象方法
== 软件工程方法学包括方法、工具、过程 三个要素==
软件过程
1.基本过程 软件开发人员所从事的一切活动
2.支持过程 软件需求方和软件开发方各类支持人员所从事的一切活动
3.组织过程 管理人员所从事的一切活动
软件生存周期模型
瀑布模型
特点
阶段间有顺序性和依赖性
推迟实现的观点
质量保证的观点
优点
开发人员只能使用规范的方法
严格规定每个阶段必须提交的文档
每个阶段提交的产品都必须经过质量保证小组的仔细验证
对文档的约束 使软件维护较容易 降低软件预算
缺点
瀑布模型以文档驱动的
缺乏对需求变更和项目变化的适应性
快速原型模型
快速模型不带反馈环
增量模型
把软件作为多个增量构建来设计、编码、集成、测试
优点
能够短时间向用户提交可完成部分工作的产品
逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品
缺点
需要软件体系必须时开放的
本身是自相莫顿的
灵活性很容易退化为边做边改模型,从而使软件过程控制失去整体性
螺旋模型
每个阶段都增加了风险分析过程的快速原型模型
主要适用内部开发的大规模软件项目
优点
利于软件的重用 有助于把软件质量作为软件开发的重要目标
减少过多测试、或测试不足所带来的风险
维护只是模型的另一个周期,在开发和维护之间没有本质的区别
缺点
螺旋模型是缺点驱动的 要求软件开发人员具有丰富的风险苹果经验和这方面的专业知识
喷泉模型
以用户需求为动力,以对象为驱动的模型
体现面向对象软件开发过程迭代和无缝的特征
软件生存周期过程的规划和监控
是项目管理的一项重要工作,没有过程规划就没有技术上和管理上的后续工作,没有过程控制就不可能是有效的 软件过程
规划
1。 选取适合该项目特点的软件生存周期模型
2. 确定项目需要的过程 活动 任务 ,并将它们映射到所选取软件的生存周期中,形成软件项目生存周期过程和相应文档
3. 配置合适的组织过程资产 使软件项目生存周期过程成为一个可实施的过程
监控
检查软件项目过程中执行情况,并与规划的过程比较,在发现问题时采取相应的措施
能力成熟模型 (CMM)
由于问题是由人们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量
作用
有助于软件开发机构建立一个有规律的、成熟的软件过程
改进后的软件过程将开发出质量更好的软件避免时间延误和费用超支
划分能力成熟的原因
软件过程的改进是在完成一个又一个小的改进步骤基础上不断进行的渐进过程
成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力
成熟度等级帮助软件机构把应做的改进工作排除优先次序
成熟度等级是妥善定义,在向成熟软件组织前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶
成熟等级 | 关键过程域 | 特征 |
---|---|---|
初始级 | 以个人主观认为合适的方法开发 | |
可重复级 | 需求管理 项目规划 跟踪监督 质量控制 配置管理 | 不存在组织范围过程 利用已存在的项目管理实践和经验开发 |
已定义级 | 组织过程焦点 组织过程定义 培训方案 集成软件过程 软件生产工程 组间协调 相互评审 | 定义好的组织范围过程 按照过程有效的进行开发 |
已管理级 | 软件质量管理、定量过程管理 | 过程能力进行量化,根据量化来预测和控制一个项目的过程绩效 |
优化级 | 过程变更管理 技术变更管理 故障预防 | 过程能力可控 可改进 并可以以量化的方式来评估改进 |
软件需求分类
需求分类 | 具体细节 |
---|---|
功能需求 | 规约系统或系统构件必须要执行的功能 |
性能需求 | 规约了一个系统或系统构建在性能方面必须具有的一些特性,隐含了一些满足功能需求的设计方案 |
外部接口需求 | 系统和系统构建必须与之交互的用户、硬件、软件或数据袁术 其中也可能规约交互格式 时间或其他因素等,分用户接口、硬件接口、软件接口、通信接口、内存约束、运行和地点要求 |
设计约束 | 限制软件系统的设计方案范围 需要考虑各个方面的问题 如法规政策、硬件限制、并发操作、审计功能、控制功能、高级语言要求、握手协议、应用关键程序、安全和保密等 |
质量属性 | 软件产品所具有的一个性质必须在质量方面达到一个所期望的水平,如可靠性、存活性、可维护性 用户友好性 |
常用需求发现技术
需求发现技术 | 具体细节 |
---|---|
自悟 | 把自己作为系统的最终用户,审视该系统并提出问题 |
交谈 | 确定系统应该提供的功能,需求人员通过提出问题、用户回答的方式直接询问用户需要的系统 |
观察 | 通过观察用户执行其现行任务和过程或观察用户如何操作与所期望的新系统有关的现有系统,了解系统运行的环境 |
小组会 | 举行客户和开发人员的联席会议,与客户组织的一些代表共同开发需求 |
提炼 | 复审技术文档并提取相关的信息 |
软件测试过程
测试过程 | 定义 | 目的 |
---|---|---|
单元测试 | 主要使用白盒测试技术,发现编码和详细设计的错误 | 保证每个模块作为一个单元能正确运行 |
子系统测试 | 子系统测试把经过单元测试的模块放在一起形成一个子系统来测试,属于集成测试 | 着重测试模块的接口 |
系统测试 | 系统测试是把经过测试的子系统装配成一个完整的系统来测试 | 发现设计和编码的错误 并验证系统确实能提供需求说明书中指定的功能 |
验收测试 确认测试 | 用户参与下把软件系统作为一个单一的实体,使用实际的数据进行测试 通常为黑盒测试 发现系统需求说明中的错误 | 验证系统确实能够满足客户的需求 |
白盒测试
逻辑覆盖
逻辑覆盖 | 含义 |
---|---|
语句覆盖 | 测试程序每个语句都执行一次 |
分支覆盖 | 每种case 都执行一次 |
条件测试 | 判断表达式每个条件都取到各种可能的结果 |
点覆盖 | 足够多的测试数据 使得程序执行路径至少经过流通的每个结点一次 |
边覆盖 | 足够多的测试数据 使程序执行路径至少经过流图中每条边一次 |
路径覆盖 | 足够多的测试数据,使得程序每条可能路径都至少执行一次,如果程序图中有环,则要求每个环至少经过一次 |
控制结构测试
条件测试
循环测试
软件质量因素定义
因素 | 定义 |
---|---|
正确性 | 满足规格说明和用户目标程度,特定环境正确完成预期功能程度 |
健壮性 | 硬件发生故障、输入的数据无效、操作错误等意外环境下 系统能做出适合响应的程度 |
效率 | 完成预定的功能,系统需要的资源 |
完整性 | 对未授权的人使用软件或数据的企图、系统能够禁止的程度 |
可用性 | 完成功能时令人满意的程度 |
风险 | 预定的成本和进度把系统开发出来,并且为用户所满意的概率 |
可理解性 | 理解和使用该系统的容易程度 |
可维护性 | 诊断和改正在运行现场发现的错误需要的工作量大小 |
灵活性 | 修改和改进正在运行的系统需要的工作量 |
可测试性 | 软件同一测试的程度 |
可移植性 | 把程序从一种硬件配置或软件系统环境转移到另一种配置和环境时,需要的工作量多少,有一种定量度量的方法:把原来程序设计和调试的成本移除移植需要的费用 |
可再用性 | 在其他应用中该程序可以被再次使用的程度 |
互运行性 | 把该系统和另一个系统结合起来需要的工作量 |
1.搜索 启发式搜索 最短路径问题
2.推理
a基本概念
b命题逻辑
c谓词逻辑
线性归结 支持策略归结 单元归结
d归纳方法
3.知识表示
a 基本概念
b 专家系统 医疗诊断系统,产生式
c 产生式规则
d 推理
基于案例推理
构建医疗诊断系统
4.不确定性推理
简历不确定推理机制 MYCI系统
5.机器学习 数据挖掘
常用的数据挖掘算法
研究热点、趋势
SVM求解的关键点
6.自然语言处理 —相对比较少
7.神经网络 神经网如何应用于求解问题
8.优化算法 —常用的优化算法
9agent 技术
启发式搜索
1.深度优先
要点:选择深度最深的节点进行优先扩展 如何操作确保?
效果: 不能保证找到最优解 也不能保证一定找到
缺点: 容易陷入搜索深渊 死循环如何解决
2.宽度 广度搜索优先
要点 :选择 深度最浅的节点 优先扩展 如果操作确保?
效果: 当问题有解时,一定能找到解,并且单位耗散的情况下,可以保证找到最优解
缺点: 效率比较低
3.启发式搜索–贪心算法 A 爬山法 分支界限法 动态规划法 最佳图搜索算法
A 算法: 定义一个评价函数f 对当前的搜扫状态进行评估,找出一个最有希望的节点进行扩展。
目的: 利用知识来引导搜索,达到减少搜索范围,降低问题复杂度的目的,属于深度+宽度的会合体,是一个使用经验知识的搜索算法
定义评价函数
f(n) = g(n)+h(n) f(n) 评价函数 h(n) 启发函数
g(n) 从s到n的最短路径的耗散值 h*(n) 从n到g的最短路径的耗散值。
要点 h(n) 的定义 :指针修改(动态规划中非常重要 令 h(n) = 0)
效果 ** 当问题有解时,一定能找到解 但非最优解
爬山法: f(n) = h(n)
分支界限法: 优先扩展当前最优最小耗散值分支路径的端节点n,其评价函数为f(n) = g(n).
动态规划法:A 算法中,令h(n) = 0,即为动态规划法, 时分支算法的改进,记录起点到当前点的最小值, 以便剪枝。
最佳图搜索算法 : 当算法A 的评价函数中,使用启发函数h(n)是处在h(n)的下届范围,即满足h(n)<=h(n) 则把这个算法称为算法A*。 是分支界限法和动态规划原理及使用下届范围的h 相结合的算法。当问题有解时,A* 一定能找到一条到达目标节点的最佳路径。
推理
A → B ⇔ ¬ A ∪ B A\to B \Leftrightarrow \lnot A \cup B A→B⇔¬A∪B
归结原理
子句 简单析取式
子句集 合取范式中的所有简单析取式
归结式
线性归结 -----每次归结子句参与下次归结
单元归结 ------不完备的 每次归结都有一个子句时单元子句
输入归结 -------不完备 归结的两个子句必须有一个时S的原始子句
Skolem 标准型
需要消除存在量词,前面有
∀
\forall
∀时,需要将存在量词转换成
∀
\forall
∀的函数
¬
D
(
a
)
∨
F
(
a
)
与
F
(
a
)归结
\lnot D(a) \lor F(a) 与F(a) 归结
¬D(a)∨F(a)与F(a)归结
$\not D(a) $
¬
C
(
a
)
∨
D
(
a
)
∨
E
(
f
(
a
)
)
\lnot C(a) \lor D(a) \lor E(f(a))
¬C(a)∨D(a)∨E(f(a))
¬
C
(
a
)
∨
E
(
f
(
a
)
)
\lnot C(a) \lor E(f(a))
¬C(a)∨E(f(a))
E
(
f
(
a
)
)
E(f(a))
E(f(a))
¬
G
(
a
,
f
(
a
)
)
\lnot G(a,f(a))
¬G(a,f(a))
¬
C
(
a
)
∨
D
(
a
)
\lnot C(a) \lor D(a)
¬C(a)∨D(a)
D
(
a
)
D(a)
D(a)
不确定性推理
条件概率
联合概率
事件独立性
叶贝斯定理
P
(
x
∣
y
)
=
P
(
x
,
y
)
p
(
y
)
=
P
(
y
∣
x
)
P
(
x
)
P
(
y
)
P(x|y) = \frac{P(x,y)}{p(y)} = \frac{P(y|x)P(x)}{P(y)}
P(x∣y)=p(y)P(x,y)=P(y)P(y∣x)P(x)
¬
∃
x
P
(
x
)
=
∀
x
¬
P
(
x
)
\lnot \exists xP(x) = \forall x \lnot P(x)
¬∃xP(x)=∀x¬P(x)
¬
∀
x
P
(
x
)
=
∃
x
¬
P
(
x
)
\lnot \forall xP(x) = \exists x \lnot P(x)
¬∀xP(x)=∃x¬P(x)
1.规则和证据的不确定性表示
2.不确定性的予以,尤其是一些特殊情况下,证据的不确定性的值。
3.不确定的传播和更新计算。
知识表示法
产生式表示法
产生式表示法时专家系统的第一选择的知识表示方式
推理方法: 正反双向等
特点缺点
如果构建一个专家系统,给定知识库 一系列的产生式规则、输入证据、通过推理机,应用规则库,直到得到某个结论
脚本表示只能顺序执行。
专家系统
1.知识获取和知识库的建设
2.常用表示法 产生式表示法
基于案例的推理CBR
基于规则的推理逻辑 Rule-based Resoning —通过前因后果链或其他规则链演绎出结论的过程,对于抑郁表示成启发式规则像是问题来说RBR 比较合适,如分类问题的诊断问题
案例推理 主要是通过记忆或范例库中找到与当前问题最相关的范例。
1.RBR 接近人类决策 ,是自然的方法
2.范例库比知识库更容易构建 易于维护
3.CBR 比
机器学习 --数据挖掘
无监督聚类进行分析
有监督分类问题—人工进行分类
决策树:从一类无序、无规则的事物中推理出决策树表示的分类规则
从根节点到 叶子节点 不能再分类时 结束
已信息熵为度量熵值下降最快的树
C4.5
信息熵的增益率
CART
基尼指数,分出的子集不要失衡
SVM
支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane) [1-3]。
SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器 [2] 。SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一 [4] 。
a) 目标函数:
b) 求解问题关键点
7 K-means
8、 数据挖掘:数据挖掘是从大量的不完全的,有噪声的模糊的,随机的数据中,提取隐含在其中的,人们事先不知道的但又是潜在有用的信息和知识过程。它通常采用机器自动识别的方式,不需要更多的人工干预。可以说数据挖掘就是知识发现技术在数据库领域的应用,其在一个已知状态的数据集上通过设置一定的学习算法,发掘出数据间隐含的一些内在的规律,即获取所谓的知识。
9、 常用数据挖掘方法:括决策树、相关规则、神经元网络、遗传算法,以及可视化、OLAP 联机分析处理等。另外也采用了传统的统计方法。
神经网络
1、 与符号机制的区别:符号化即是用“一种只作整体认读的记号(signs)”——符号(symbols)表示量、数及数量关系;符号机制认为人类智能的基本单元是符号,认知过程就是符号计算;连接机制(神经网络):认为人类智能的基本单元是神经元,认知过程是由神经元组成的神经网络构成的并行分布计算。
2、 神经元
3、 转移函数:神经细胞的输出对输入的反映。典型的转移函数是非线性的。
4、 前馈网络:每层只与前层相连接
5、 输入输出有反馈的前馈网络(BP):输出层上存在一个反馈回路,将信号反馈到输入层。而网络本身还是前馈型的
6、 前馈内层互联网络:外部看还是一个前向网络,内部有很多自组织网络在层内互联着。
7、 反馈型全互联网络:所有计算单元之间都有联接。如:Hopfield网络
8、 求解问题过程
多层BP网络:
n层网络可以以n-1个超曲面构成一个符合曲面,弥补了单层感知器的缺陷。基于BP算法,依据大量样本通过逐步调整神经元之间的联接权重来构造网络。理论上,多层前馈网络在不考虑结果规模的前提下,可以模拟任意的输出函数。
自然语言处理
1、 词法分析:①:能正确的把一串连续的字符切分成一个一个的词 ②:能正确地判断每个词的词性,以便于后续的句法分析的实现。
2、 句法分析:语法树,产生式模型,上下文无关文法。确定句子的语法结构或句子中词汇之间的依存关系。
3、 语义分析:语义文法,格文法
4、 语用分析
优化算法
9、 常用的优化计算方法:蚁群算法、粒子群算法、遗传算法、模拟退火法等
10、 工作机制:贪心算法、随机性、跳出局部最优
Agent
1、 Agent 是某个环境下的计算机系统,具有在该环境下自动行动来实现目标的能力(自主性)。还具有与其他Agent 交互共同完成问题求解的能力(交互性)。
2、 Agent是具有自主性、社会性、反应性及能动性等特性的计算机软件或硬件系统。
3、 Agent除了具有弱定义下的特性外,还应该具有某些人类的特性,例如知识、信念、意图等,有的学者甚至认为Agent应具有某些人类的情感。
4、 多Agent系统MAS:研究如何在一群自主的Agent之间进行智能行为的协调。采用自底向上的设计方法,先定义各自分散自主的Agent,后研究怎样完成实际任务的求解问题;各个Agent之间的关系并不一定是协作的,也可能是竞争甚至是对抗的关系。
5、 MAS主要研究内容:包括Agent的概念、理论、分类、模型、结构、语言、推理和通信等。
6、 使用的描述Agent 的逻辑模型BDI 模型:B 是信念、D 是愿望、I 是意图,使用这种模型带来的问题是逻辑全知(需知道所有为真的知识),这是不符合实际的。
7、 移动Agent:除了自主性、反应性、主动性和交互性外,还具有移动性,即它可以在网络上从一台主机自主地移动到另一台主机,代表用户完成指定的任务。