array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 嵌入式系统——软件开发模型 - 爱码网

前言:产品开发生命周期通常使用过程模型表示。过程模型习惯上也称为开发模型,它是系统开发的全部过程、活动和任务的框架和结构。


开发模型

  之前看了书上介绍一大堆关于各种模型的术语及优缺点,都感觉云里雾里,下面尝试用自己的语言来阐述下对以下软件模型的理解。

1. 瀑布模型 ——“需求明确,阶段开发,一步到位”

  假设现在有甲方找你开发一个软件,他把需求说的清清楚楚,明明白白,并且拍着胸脯告诉你,你只要负责把需求说明书上的每个功能完成好,他立马付钱成交,一步到位。
  然后你根据需求说明说进行设计、实现、测试、交付,一整套操作下来行云流水,又如那庐山的瀑布倾泻而下,故又称瀑布模型。

1.1 优点

  瀑布模型的优点是容易理解便于管理,因为我们只要按照过程一步步做下去就行。它被应用于早期软件工程工作中,适合小型软件系统和小功能的开发。

1.2 缺点

  • 瀑布模型建立在客户能够正确、清晰表达他们的需求的条件上,如果客户对需求什么没有清晰明确的认识,那就可能对最终结果不满意
  • 在刚刚开始时候,难评估项目真正的进度,因为按部就班的实现,不知道哪个功能或者哪个阶段会出现要攻克的难点,所以常常会导致项目的延期
    嵌入式系统——软件开发模型

2. 原型模型 —— “多次迭代演化”

  假设甲方又来找你开发软件,这次他自己都不知道自己要什么功能,他说这边有个框,这边要个叉,这里加个点,后面的想到再加。你…#%&***4$#
  于是你照着他说的开发了最初的最简单的软件,他一看,给你提出了意见…于是,你又回去改,他一看,又给你提出了意见…于是,你又又回去改,他一看,又又又给你提出了意见…最后,双方终于达成一致,交付了软件,这就是原型模型。

2.1 优点

  由于并非所有的需求都能预先定义,在开发过程中,面对客户需求不断变更时,需要快速构建原型,搜集客户反馈意见,进行迭代修改。因此,这种模型适合用户需求不明确或经常变更的情况。

2.2 缺点

  要经常修改整个框架系统,对于复杂而又庞大的系统来说是一件很难事情,所以原型模型也只适合规模不大也不太复杂的系统
嵌入式系统——软件开发模型


3. 增量模型 —— “多版本并行”

   假设甲方找你开发软件,需求不明确,你做出一版改一版,又做一版又改一版…无止境。对于你来说,投入了大量人力物力,在软件真正交付前没有回报。对于甲方爸爸来说,如果急着用软件,时间也很长。那么一个比较折衷的办法是,将需求分解为一个个增量,后续可以添加。也就是先开发一个软件,交付给客户拿去用。针对这一版本搜集客户的反馈,再此基础上增加另一个增量,形成新版本,这就是增量模型。

3.1 优点

  增量模型由于将一系列需求变更为一个个增量,所以第一个可交付版本需要的成本和时间很少。并且开发由增量表示的小系统所承担的风险不大

3.2 缺点

  • 如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量不稳定
  • 如果需求不想像早期思考的那么稳定,那么一些增量重新开发需要的管理成本和配置复杂性可能会超出组织的能力。
    嵌入式系统——软件开发模型

4. 喷泉模型 —— “面向对象”

  针对甲方爸爸一直变更的需求,你发现其实不同的甲方爸爸需要的基本需求都差不多,都要求有个框框有个叉叉有个++,所以你想了一个好办法,采用面向对象的方法,将这些东西都封装起来,既能下次回收利用,又能给二次开发降低难度(如果需求变更,只需修改相关对象即可),这就是喷泉模型。

4.1 优点

  面向对象的方法能够很好支持软件重用,并且开发过程无间隙性,分析、设计编码无明显边界,可交叉迭代进行。

4.2 缺点

  • 由于喷泉模型在各个阶段是重叠的,即每个对象都有分析、设计和编码阶段,所以需要大量开发人员
  • 并且大量开发人员之间的交流沟通要求严格管理文档,使审核难度加大
    嵌入式系统——软件开发模型

5. 螺旋模型 ——“风险分析”

  甲方爸爸又又又来找你,他需要一个定制软件系统,并且这个系统很大,需要很稳定,他要一直使用下去,并且告诉你钱不是问题。你一想,用喷泉模型开发不划算,毕竟这是定制化功能,既然甲方爸爸都说不差钱了,不如搞个瀑布模型+原型模型,根据需求不断迭代更新,期间再加入两种模型都忽略的风险分析,岂不是美滋滋,这就形成了螺旋模型。
  螺旋模型将开发过程都分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合。

5.1 优点

  螺旋模型强调风险分析,对每个演化层出现的风险都所了解,继而做出应有反应。因此特别适合用于庞大、复杂并且具有高风险的系统。螺旋模型支持用户需求的动态变化有助于提高产品的适应能力。

5.2 缺点

  过多的迭代次数会增加开发成本延迟提交时间
嵌入式系统——软件开发模型


例题

例1

常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。其中 (1) 模型适用于需求明确或很少变更的项目, (2) 模型主要用来描述面向对象的软件开发过程。
1、A.瀑布模型 B.演化模型 C.螺旋模型 D.喷泉模型
2、A.瀑布模型 B.演化模型 C.螺旋模型 D.喷泉模型
解析:需求明确或很少变更的项目用瀑布模型,面向对象的软件开发过程用喷泉模型,选A,D

相关文章: