1. 软件开发模式有哪些
. 边做边改模型(Build-and-Fix Model)
好吧,其实现在许多产品实际都是使用的“边做边改”模型来开发的,特别是很多小公司产品周期压缩的太短。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。
在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户和测试等等满意为止。
这是一种类似作坊的开发方式,边做边改模型的优点毫无疑问就是前期出成效快。
对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:
缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;
忽略需求环节,给软件开发带来很大的风险;
没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。
2. 瀑布模型(Waterfall Model)
瀑布模型是一种比较老旧的软件开发模型,1970年温斯顿·罗伊斯提出了著名的“瀑布模型”,直到80年代都还是一直被广泛采用的模型。
瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。
瀑布模型优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。
瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
各个软件生命周期衔接花费时间较长,团队人员交流成本大。
瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。
3. 迭代模型(stagewise model)
迭代模型(也被称作迭代增量式开发或迭代进化式开发)是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。
教学中,对迭代和版本的区别,可理解如下: 迭代一般指某版本的生产过程,包括从需求分析到测试完成; 版本一般指某阶段软件开发的结果,一个可交付使用的产品。
与传统的瀑布模型相比较,迭代过程具有以下优点:
降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。
降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。
由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。因此复用性更高
4. 快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。
快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
快速原型模型有点整合“边做边改”与“瀑布模型”优点的意味。
5、增量模型(Incremental Model)
与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:
由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。
例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。
6. 螺旋模型(Spiral Model)
1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:
制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
风险分析:分析评估所选方案,考虑如何识别和消除风险;
实施工程:实施软件开发和验证;
客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。但是,螺旋模型也有一定的限制条件,具体如下:
螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。
如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。
软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险
一个阶段首先是确定该阶段的目标,完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。最后,评价该阶段的结果,并设计下一个阶段。
7. 敏捷软件开发 (Agile development)
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发小组主要的工作方式可以归纳为:作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果,关注业务优先级,检查与调整。
敏捷软件开发要注意项目规模,规模增长,团队交流成本就上去了,因此敏捷软件开发暂时适合不是特别大的团队开发,比较适合一个组的团队使用。
8. 演化模型(evolutionary model)
主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。
在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。
“演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为适当的长度。
9. 喷泉模型(fountain model, (面向对象的生存期模型, 面向对象(Object Oriented,OO)模型))
喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
10. 智能模型(四代技术(4GL))
智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。4GL不同于三代语言,其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。
11. 混合模型(hybrid model)
过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。
2. 晶体的层生长与螺旋生长
晶体的生长一般是先生成晶核,尔后再逐渐长大。晶核的形成是一个复杂的过程。对于从液相中生成晶体的情况而言,通常,当溶液达到过饱和或熔体达到过冷却时,体系内相应组分的质点将按照格子构造形式首先聚合成一些具有一定大小、但实际上是极其微小的微晶粒,这些微小的晶粒便称为晶核或晶芽。晶核是晶体生长的中心。
晶核形成以后,围绕晶核的生长,实际上就是溶液或熔体中的其他质点,按照格子构造规律不断地堆积在晶核上,使晶核逐渐长成晶体的过程。那么质点是如盯肢何堆积到晶核上长成晶体的呢?下面重点介绍两个有关的理论模型。
图2-1层生长模型
(据潘兆橹等,1993)
1.层生长理论
层生长(layer growth)理论又称科塞尔-施特兰斯基二维成核(two-dimensional nucleation)理论,是由科塞尔(W.Kossel)提出后经施特兰斯基(I.N.Stranski)发展而成的晶体生长模型。该理论认为,质点在光滑的晶核表面堆积时,存在着3种不同的占位位置1和2及3(图2-1),分别称为三面凹角、二面凹角和一般位置。每种位置周围分布着数量不等的质点,这些质点对欲进入该位置的外来质点具有一定的吸引作用。三面凹角周围分布的相邻质点数多于二面凹角,二面凹角周围分布的相邻质点数多于一般位置。这样质点进入3种位置后与周围质点成键的数量多少就不相同。三面凹角周围分布的相邻质点数最多,进入该位置的质点与周围相邻质点之间形成的化学键最多,释放的能量也最大,结构最稳定。因此,质点优先进入三面凹角,其次是二面凹角,最后是一般位置。由此可以推出,在理想情况下,晶体在晶核基础上生长时,应先生长一条行列,然后生长相邻的行列,在长满一层面网后,再开始生长第二层面网,这样晶体面网一层一层地逐渐向外平行推移,最外层的面网便发育成晶体的晶面。这就是层生长理论。
图2-2 石英纵切面上的环带构造
(据李胜荣等,1996)
晶体表面微形貌的扫描电镜观察表明,实际晶体的生长并不严格按照简单的逐层外推的方式进行。因为在晶体的生长过程中,常常粘附在晶核表面的不是一个质点,而是按格子构造聚合而成的质点团,其厚度可达几万或几十万个原子层。另外,晶体表面不一定是平坦的晶面,而可能出现晶面阶梯,表明质点向晶核上堆积时也不一定是在一层堆满以后才开始堆积第二层,晶核表面可有多个层同时在堆积。
尽管如此,晶体的生长在许多情况下还是按层进行的。例如,晶体断面上常常可以见到环带构造(zoning,图2-2);晶体常生长成为面平、棱直的多面体形态(晶体的自限性);同种物质的晶体上对应晶面间的夹角不变(面角守恒定律);形成生长锥(图2-3)等。所有这些现象都证明了晶体在较理想指滑条件下生长时,晶面是平行向外推移的。
图2-3 晶体的生长锥
(据南京大学岩矿教研室,1978)
a—各晶面生长速度保持恒定时形成的棱锥状生长锥;b和c—各晶面相对生长速度有变化时形成的复杂生长锥
2.螺旋生长理论
层生长理论虽然较好地阐述了理想条件下晶体的生长机制,但也存在一定的缺陷。因为当晶体的第一层面网生长完成以后,再在其上开始第二层面网生长时,三面凹角和二面凹角已经消失,这时已长好的面网上仅存在一般位置,该位置对溶液中质点的引力较小,质点就不易克服热振动而进入该位置。因此,开始生长第二层面网时需要较高的过冷却度和过饱和度。显然,层生长理论还凯逗世不能很好地解释低过饱和度和低过冷却度条件下晶体面网的连续生长问题。为此,基于实际晶体结构中常见的位错现 象,伯顿(W.K.Burton)、卡夫雷拉(N.Cabrera)、弗兰克(F.C.Frank)等人又提出了晶体的螺旋生长模型,亦称BCF模型。
按照螺旋生长(spiral growth)理论,杂质在晶格中的不均匀分布可使晶格内部产生应力,
图2-4 晶格中的螺旋位错和螺旋生长模型
(据潘兆橹等,1993)
a—f示不同生长阶段
当应力积累超过一定限度时,晶格便沿某一面网发生相对剪切位移,形成螺旋位错(screw dislo-cation)。螺旋位错的出现使平滑的界面上出现沿位错线分布的凹角(图2-4),从而使介质中的质点优先向凹角处堆积。显然,随着质点在凹角处的堆积,凹角并不会消失,只是凹角所在的位置随质点的堆积而不断地螺旋式上升,导致生长界面以螺旋层向外推移,并在晶面上留下成长过程中形成的螺旋纹(图2-5)。这便是晶体的螺旋生长。
层生长理论是母相的过饱和度及过冷却度较大而能满足二维成核所需成核能时较适合的
晶体生长模型,螺旋生长理论是解释母相的过饱和度及过冷却度较小甚至很小时较适合的晶体生长模型。
图2-5 晶面上的螺旋纹
(据王文魁,2002)
3. 数控铣床螺旋式下刀与直接下刀的编程方式有什么区别
这个可以从两方面来体现。
1.为何采用螺旋下刀?相信你知道我国使用的刀具中有立铣刀与键念辩槽刀的分别,由于制造工艺的原因键槽刀可以直接下刀因为刀具中心可以切削,而立铣刀磨削时采余慧用一夹一顶所以刀头那面有个中竖高答心孔无法下刀(会崩的),所以采用立铣刀加工内轮廓是一般采用螺旋下刀的方法,这时总是刀尖切削就不会崩刀了,但螺旋半径不能过小否则和直下没区别,另外不能过快,刀尖虚且受多向力易坏。
2.采用螺旋下刀的优点还在于,若直接铣削深孔时,高速钢刀具易变形,造成孔有锥度,所以沿孔壁螺旋铣削可明显减小锥度。
但螺旋下到对刀具磨损严重,且易崩刃,所以建议通过打落刀孔,或用键槽刀扎个孔再进行铣削。
4. ug型腔铣 层优先和深度优先的区别
有几个型腔的话 深度优先是一个圆尘型腔铣完在铣第二个 。。。。。。层优先是同样橘桥禅的深度 把所有的型腔铣完 就是一层一层的铣 这样抬刀的次数特别多 直消冲到加工完成
5. 软件工程中的瀑布模型和螺旋模型有什么异同点
螺旋模型就是在没一个阶段中,都迭代使用了瀑布模型。也就是说,在螺旋模型这四个阶段(需求定义、风险分析、工程实现、评审)的每一个阶段内,都实施瀑布模型(可行性研究与计划、需求分析、系统设计、软件编程、软件测试、软件维护6个阶段)开发,这样做会产生大量的中尺伍间版本,但同时也降低了项目的风险,是一种风险驱动的模陵码或式。螺旋模型模颤可以说是瀑布模型和快速原型法的结合体。瀑布模型,由于是线形开发,得等到最后成果物出来了,才知道质量如何,从而带来风险较高。
6. 即层优先和深度优先的加工轨迹有何不同
层优腊侍先是将垂直于刀具的加工区域分为好多片层,每次加工一层,分层进给,信局悉整体逐步逼近最终加工尺寸;
深度优先则是沿着刀轴方向,首先在深度方向进给,在局部达到目标加工尺滑乎寸,一圈一圈的加工。
7. cad/cam走刀类型层优先和深度优先的区别
数控单个区域加工层优先和深度优先是没有区别的芹亮。
多个区域同时加工才会有区别,
层优先:如果你选择每刀切削深度为1mm,那就是1层1mm,每个区域必枯首碧须按选择加工的顺序完成1mm,再从头开始加工第2层没举,如此类推
深度优先:第1个区域直接加工到需要的深度,再加工第2个区域,如此类推
一般选择加工区域比较多的情况下,首先考虑深度优先,因为层优先提刀特别多,加工所需的周期也就长。
8. 自动编程中层优先的含义是什么
优先级(priority)是计算机分时操作系统在处理多个作业程序时,决定各个作业程序接受系统资源的优先等级的参数。
逻辑运算符中,逻辑非运算符和所有的单目运算符同级,高于双目的算术族型运算符、关系运算符、逻辑运算符与和逻辑运算符兆橡猜或,与运算高于或运算,它们都低于算数运算符和关系运算符。
在创建的时候,我们可如磨以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。