分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
总结重点:
v Unit1
v 软件危机包含两方面的问题:一是如何开发软件,怎样满足人们对软件日益增长的需求?二是如何维护软件,使它们持久地满足人们的要求。
v 软件工程学定义:把软件当作一种工业产品,采用工程学的原理来管理和组织软件的开发和维护,称为软件工程。
v 软件是指程序、数据和文档三者共同构成的配置。
v 包含与数据处理系统操作有关的程序、规程、规则以及相关文档的智力创作称为软件。文档是描述程序开发过程的,是智力创作的真实记录,是创作活动的历史档案和结晶。
v 软件的描述性定义:软件由计算机程序,数据结构和文档组成。
v 软件质量定义为“与软件产品满足规定的和隐含的需求能力有关的特征和特性的全体”
具体来说: 1)软件产品中能满足给定需求的性质和特性的总体;
2)软件具有所期望的各种属性的组合程度。
v 将软件质量属性划分为六个特性(功能性、可靠性、易用性、效率、维护性和可移植性),这六个属性是面向用户的观点——面向管理的观点,且是定性描述的。
v 软件质量度量体系:内部度量可用于开发阶段的非执行软件产品,外部度量只能在生存周期过程中的测试阶段和任何运行阶段使用。
v 软件工程项目的基本目标:(1)低成本;(2)满足功能要求;(3)高性能;(4)易移植;(5)易维护。
v 软件工程方法学就是要从技术和管理上提供如何去设计和维护软件。
v 软件开发方法:面向数据流(约旦)方法、面向数据结构方法、面向对象方法。
v 结构程序设计是进行以模块功能和处理过程设计为主的详细设计的基本原则。它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。
v 用来辅助软件开发、运行、维护、管理、支持等过程中活动的软件称为软件工具(CASE)。
v 软件生存周期定义:软件产品从形成概念开始,经过开发、使用和维护,直到最后不再使用的整个过程。各阶段的任务彼此间尽可能的相对独立,同一阶段内各项任务的性质尽可能的相同。软件的开发就是“按软件顺时间发展的过程分阶段进行”的。
v 软件生存周期模型:
瀑布模型(阶段间具有顺序型和依赖性,清楚地区分逻辑设计与物理设计、尽可能推迟程序的物理实现,是文档驱动模型,遵循结构化设计);
原型模型(软件产品的开发是线性顺序进行的,本质是快速,用途是获知用户的真正需求,一旦需求确定,原型将被抛弃)。
其核心都是将软件开发划分为:分析、设计、编码、测试和维护。
v 软件生存周期划分为以下几个阶段:可行性研究与计划、需求分析、总体设计、详细设计、实现、组装测试、确认测试、使用和维护。
v 软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤
v 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型
v 软件工程过程是软件生存周期中各个可能的过程,这些过程可进一步划分成为了提供或获得软件产品或服务,或是为了完成软件工程项目需要完成的有关软件工程活动,每一项活动又可分解为一些软件工程任务。标准定义了21个过程分属三类:基本过程(include获取、供应、开发、运作、维护过程)、支持过程和组织过程。
v 软件工程三要素:方法、工具和过程。
v 软件工程管理
目的:为了按照进度及预算完成软件计划,实现预期的经济和社会效益。
内容:成本估算、进度安排、人员组织、质量保证、配置管理等等。
怎么强调软件工程管理的极其重要性都不会过分
Ø Unit2
Ø 可行性研究
任务和目的:用最小的代价在尽可能短的时间内确定问题是否能够在一定规模之内解决。(确定这一问题是否存在值得去做的解)
过程和步骤:
实质:进行一次大大压缩简化了的系统分析和设计过程,也就是在较高层次上以抽象方式进行的系统分析和设计过程。
技术和工具:DFD+DD
Ø 主要内容
(1)澄清问题定义 ——规模、约束和限制
(2)导出新系统的逻辑模型
(3)导出若干个供选择的物理解法(物理模型),并分别研究它们的可能行:
Ø 数据流图符号
Example:
Ø 数据流图的基本目的是 利用它作为交流信息的工具,另一个主要目的是作为分析和设计的工具。
Ø 数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合,它是通过对数据元素和数据结构的定义,来描述数据流和数据存储的逻辑内容的。
Ø 数据流和数据字典共同构成系统的逻辑模型。
Ø 数据字典的内容:
数据流、数据元素、数据存储、处理
Ø 数据字典最重要的用途是作为分析阶段的工具。
v Unit3
v 需求分析:
目的:精确地定义系统必须做什么,也就是对目标系统提出完整、准确、清晰、具体的要求。——为目标系统提出精确的逻辑模型。
任务:确定对系统的综合要求,包括功能需求、性能需求、可靠性和可用性需求、运行要求、将来可能提出的要求。
过程:处理逻辑的分解:自顶向下逐步分解直到每个处理逻辑已是不可再分的“功能单元”为止。
书写文档:软件需求规格说明
工具:状态图、IPO图、层次方框图、Warnier图
v 结构化分析设计技术是70年代中期由E.Yourdon等人提出来的一种面向数据流的方法;要求系统的开发工作在结构化和模块化的基础上进行,它系统的运用了描述模型的概念,按照软件内部数据传递和变换的关系,自顶向下逐层分解,直到找出满足要求的可实现的软件。
在这个方法里,“抽象”,“分解”,“模块化”,“结构化”是它的主要手段;面向数据传递、变换所形成的数据流(Dataflow)和数据流程图(DFD)是它的主要依据。
这个方法的关键工作是:画分层的DFD和确定数据定义与加工策略。
v Yourdon方法(对应的瀑布模型)的缺陷:
其实Yourdon方法是建立在三个假设之上的:
假设1:所有的需求都是可以预先定义的;
假设2:需求在较长一段时间内是不变的(相对稳定的);
假设3:运用所提供的工具可以做到项目参与者之间清晰、准确、有效的沟通。
这三个假设往往是很难成立的:
“逻辑模型”的精确描述依赖于“自顶向下的求精过程”,而“自顶向下的求精过程”的顺利进行又依赖于精确的“逻辑模型”,这二个问题互相缠绕依赖而构成方法学上的“死锁”。
v 原型法(原型模型):
原型就是模型的意思(原型=模型),它指的是模拟某种产品的原始模型。
运用原型的策略:抛弃策略&附加策略
对原型的逐步求精过程是一个迭代过程
相对于Yourdon方法来说原型法是一个非线性的系统开发方法。
不再强调高质量的阶段性文档。
v 螺旋模型:沿螺线自内向外每旋转一圈便开发出一个更为完善的软件版本
v Yourdon方法适合于“预先指定的系统”;
v 原型法适合于“用户驱动的系统”。
v 通常用“范式”定义消除数据冗余程度。第一范式数据冗余程度最大,第五范式数据冗余程度最小。
v 状态转换图:
状态时可以被观察到的系统行为模式,一个状态代表系统的一种行为模式,它规定了系统对事件的响应方式。一张状态图有一个初态和0至多个终态。
事件:在某个特定时刻引起系统做动作和(或)状态转换的控制信息。
v 验证软件需求的正确性:
一致性、完整性、现实性、有效性
Ø Unit4
Ø 总体设计:
目的:确定系统的具体物理实现方案(系统结构设计),确定组成每一个程序的模块,以及模块间的关系(软件结构设计)。
任务:软件结构设计(过程设计是详细设计阶段的任务)
过程:
设想供选择的方案
选取合理方案(每份方案有 系统流程图、组成系统的物理元素清单、成本/效益分析、实现这个系统的进度计划 4份资料)等9步(P92)
Ø 在软件开发早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
Ø 总体设计阶段书写的文档:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果。
Ø 总体设计过程中,推荐最佳方案后进入“软件结构”设计:设计出组成这个系统的所有程序、文件和数据库,以及它们之间的联系。软件结构:由模块组成的层次系统。模块:数据说明、可执行语句等程序。
Ø C/S(Client/Server)结构是软件系统体系结构
Ø “结构化设计”概括地说就是:用一组标准的工具和准则来确定系统应该由哪些模块、用什么方式联结在一起,才能构成一个最好的软件结构。
Ø 模块化就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
Ø 模块: 具有四种属性的一组程序语句称为一个模块,这四种属性分别是:输入和输出、逻辑功能、运行程序、内部数据。(前两个是模块外部属性,后两个是内部属性,总体设计完成外部属性设计、详细设计完成内部属性设计)
Ø 软件结构图中,模块用一矩形表示。
Ø 模块间调用:用→连接
Ø 开发具有独立功能而且和其它模块之间没有过多相互作用的模块,可以做到模块独立。
Ø 影响模块独立的因素:
耦合(不同模块间互联程度)
内聚(同一模块内各元素紧密程度)
Ø 力争高内聚、低耦合。
Ø 5种耦合形式:
数据耦合、控制耦合、特征耦合、公共耦合、内容耦合(从左到右耦合程度递增)
最弱的耦合是非直接耦合
Ø 7种内聚形式:
功能内聚、顺序内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚(从左到右程度依次递减)
Ø 模块的扇出与扇入:
模块的扇出是指一个模块拥有的直接下级模块的个数。
模块的扇入是指一个模块的直接上级模块的个数。
模块的扇出系数应控制在7以内,尽可能的加大模块的扇入系数。
Ø 作用域应该是控制域的子集;
Ø 模块的控制域和作用域:
模块的控制域(控制范围):是指这个模块本身以及所有直接或间接从属于它的模块的集合。
模块的作用域(判断作用范围):是指受该模块内一个判断影响的所有模块的集合。(也就是该模块内存在着判断调用语句,而所有受到该判断逻辑影响的模块,就是该模块的作用域。)
作用域应该是控制域的子集;理想的是作用域都是直接下属模块。
Ø 数据流类型——数据在DFD中流径特征
变换流:进入系统中的数据所流经的路径几乎是一样的。
事务流:进入系统中的数据所流经的路径不完全是一样的。
Ø
Ø 事务中心往往包含多个处理逻辑。
Ø
Ø “事务”是指一组输入数据。
v Unit5
v 详细设计:
目的:完成模块的过程设计 (为SC中每个模块确定采用的算法和块内数据结构,用某种选定的表达工具给出详细清晰的描述。)
模块的逻辑设计(模块的过程描述)
主要内容:
1)为每个模块确定采用的算法
2)确定每个模块使用的内部数据结构
3)确定模块的接口细节
4)制定模块的测试计划
完成模块的“内部属性”设计,即给出系统中各个模块的“运行程序”和“内部数据”;由此可见详细设计的结果基本上决定了最终软件的质量。
详细设计的目标更重要的是便于维护。
工具:
1.程序流程图(流程图)
2.N-S图(盒图)
3.PAD图(问题分析图)
4.伪代码和PDL语言
v 逻辑设计应遵循的理念:
1.从效率第一到清晰第一
2.结构化的控制结构:结构化程序设计=仅使用单入口单出口的三种基本控制结构
3.逐步细化的实现方法
[例] 在一组数中找出其中的最大数 分别用程序流程图、N-S图和PAD图描述
用“结构化”保证程序的清晰易读,用“逐步细化”实现程序的正确可靠,它们导致了一条自然的结论:模块的逻辑设计必须用结构化程序设计的原理来指导。(结构化分析设计在详细设计阶段)
v Yourdon方法的技术途径:DFD→DFD+DD→SC→PDL
v Yourdon方法在分析阶段,我们用DFD来表示软件的逻辑模型;在设计阶段,又按照数据流类型,分别用变换分析或事务分析将它们转换成相应的软件结构。
v 面向数据结构设计方法的根据和基本思想:
算法和数据结构是程序设计中不可分割的侧面,算法的结构依赖于它要处理的数据结构。只要事先知道一个问题的数据结构,就可以由此导出它的程序结构。
v 基于数据流还是基于数据结构的出发点不同,最终目标也不同。SADT(结构化分析设计工具)方法的目标是得出软件的最终SC图,它把注意力集中在模块的合理划分上;面向数据结构的设计则要求得出程序的过程性描述,并不明确也提出软件应该先分成模块等概念。
v SADT方法:DFD ->SC(软件结构图)->模块的过程性描述(PDL等)
|<-------总体设计-------> | |<--------详细设计------->|
Jackson方法(面向数据结构):数据结构 ->程序结构->程序的过程性描述(伪代码等)
|<-----总体设计-----> | |<----------详细设计--------->|
v 程序复杂程度的定量度量:
1.程序图(流图)(用任何方法表示的详细设计结果都可以变换成程序图)
流程图中的各种处理框均简化成一个结点
2.环域复杂度
程序的结构复杂度可用强连通的有向图中线性无关环的个数来度量
V(G)= 判定结点数 + 1
Ø Unit6
Ø 编码(也称实现)
任务:把模块的过程性描述翻译为用该语言书写的源程序(或源代码)。
Ø 编码的风格
1.程序要清晰直观,不要过于巧妙
2.用一定的原则指导控制结构的使用(避免使用容易引起混淆的结构和语句)
3.有规律地使用GOTO语句
不得不把效率的考虑放在首位的时候,而结构化程序又不能满足时间要求时,就可用GOTO语句来减少重复的代码段;
4.实现源程序的文档化(软件=程序+文档)<有意义的变量名称、适当注释、标准的书写格式>
v Unit7:
v 软件测试:
定义:程序测试是为了发现错误而执行程序的过程。
纠错(调试)是为了确定错误的性质,并且加以纠正。
v 软件测试包括机器测试(动态测试)(黑盒测试&白盒测试)和人工测试(代码复审)(代码走查+会审+办公桌检查)
程序编译通过后,应该先人工测试(发现逻辑错误)后机器测试(在设定的测试数据上执行被测程序).
v 动态测试是一个包括:①设计“测试用例”→②执行被测程序→③分析测试结果并发现错误的过程。(①设计“测试用例”是最关键)
测试用例={ 输入数据 + 期望结果 }
按照在设计“测试用例”时,是否涉及程序的内部结构,把动态测试分为:
白盒测试:从程序的内部逻辑入手,按照一定原则设计测试用例。
黑盒测试:仅以程序外部功能为依据来设计测试用例。检查程序是否完成应做的和是否做了不该做的。(按规格说明书的规定)
v 软件测试的的步骤:[见笔记本上图]
单元测试:在编码阶段完成;以模块为单位,(主要白盒)发现的往往是编码和详细设计的错误
综合测试:(模块组装测试、集成测试)以软件的设计信息为依据,主要用黑盒,发现设计错误,也可能发现需求说明错误。
确认测试(验收测试):以软件的需求信息为依据,用黑盒,发现需求说明书中的错误,验证软件的有效性
系统测试:指整个计算机系统(包括软件与硬件)的测试。
v 代码复审
1.代码会审:开会逐句朗读和讲解程序,精力集中于发现错误,会后改正错误
2.走查:与会者扮演“计算机”的角色
3.办公桌检查:一个人参加的代码会审
v 黑盒测试方法:
v 等价分类法:
按测试结果“等价”把被测程序的输入域划分为若干个等价类,每一个等价类都选择一例“测试用例”,与“应做的事情”相对应的是“有效等价类”,而与“不应该做的事情”相对应的称之为“无效等价类”。
设计等价类的测试用例分为两步:
1.划分等价类并给出定义;
2.选择测试用例的原则:有效等价类的测试用例尽量公用;无效等价类必须每类一例。
[例]某城市的电话号码……[看笔记]
v 边界值分析法(边值法)
v 错误猜测法(猜错法)
v 因果图法
v 白盒测试方法:[见笔记]
合理的白盒测试,就是要选取足够的测试用例,以实现对源程序比较充分的覆盖。
v 逻辑覆盖法:(按照由低到高对程序逻辑覆盖程度的顺序)
语句覆盖:每条语句至少执行一次;
判定覆盖:不仅每条语句至少执行一次,而且每一分支至少执行一次;
条件覆盖:不仅语句覆盖,而且每个条件均按“真”、“假”两种结果至少执行一次;
条件组合覆盖:不仅语句覆盖,而且每个条件的所有可能组合都至少执行一次。
v 路径覆盖法:(按照由低到高对程序逻辑覆盖程度)
结点覆盖:每个结点走一次;相当于语句覆盖
边覆盖:每条边走一次;相当于判定覆盖
路径覆盖:每条路径走一次;(不需要考虑程序的循环)
Ø Unit8
Ø 面向对象基本原理:使描述问题的问题空间和在计算机上解决问题的解空间在结构上尽可能一致。
Ø 基本概念:
(1)对象:由数据以及可以施加在这些数据上的操作(或服务、方法、处理)所构成的统一体,它是面向对象软件的基本模块。
(2)类:对具有相同数据和相同操作的一组相似对象的定义(抽象)。
(3)不同的对象彼此之间只能通过消息相互作用、相互联系
(4)继承:处于下一层次上的派生类自动继承了位于上一层次基类的属性(数据)和行为(操作)
Ø 面向对象就是既使用对象又使用类和继承等机制,而对象之间仅能通过传递消息实现彼此间的通信。
Ø UML 用视图来表示被建模系统的各个方面,它把软件模型分成5个视图,每一个视图代表完整系统的一个特定方面。每一个视图又由一种或多种模型图构成。
1. 用例视图:用来支持需求分析,也就是说系统将提供的功能是在用例视图中描述的。
2. 逻辑视图:定义系统的实现逻辑,重点关注的是系统的静态结构(类、对象及它们之间的关系),也描述系统内部的动态协作关系。它的模型图包括类图、对象图、状态图、顺序图、协作图及活动图等。
3. 组件视图
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。2
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section 现有任务
已完成 :done, des1, 2014-01-06,2014-01-08
进行中 :active, des2, 2014-01-09, 3d
计划一 : des3, after des2, 5d
计划二 : des4, after des3, 5d
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎