软件生命周期( 包括各开发模型的优缺点)知识点全面

简介: 软件生命周期( 包括各开发模型的优缺点)知识点全面

软件生命周期

指软件产品从计划到软件交付使用,直到最终退出为止的过程。包括计划阶段、分析阶段、实现阶段、测试阶段和运行维护阶段


软件开发模型

瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型


瀑布模型:严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一阶段,适用于结构化开发方法。瀑布模型是文档驱动的。


 瀑布模型:软件计划、需求分析、软件设计、程序编码、软件测试、运行维护


                             定义阶段                             开发阶段                         维护阶段


传统的瀑布模型过于理想化了,瀑布模型是一种线性的开发模型,具有不可回溯性。事实上,人在工作过程中不可能不犯错误。如果在软件生命周期的后期发现并要改正前期的错误,那么需要付出很高的代价。



实际的瀑布模型是带“反馈环”的,如图所示:



瀑布模型的优点:


1、为项目提供按阶段划分的检查点。


2、当前阶段完成后,只需关注后续阶段。


3、可在迭代模型中应用瀑布模型。


4、适用于大规模系统项目。


缺点:


1、各阶段划分完全固定,阶段之间产生大量文档,增加了工作量。


2、用户直到工程末期才能见到开发成果,增加了开发风险。


3、不适应用户需求变化。


瀑布模型适用于以下特征的软件开发项目:


(1)在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以次性获取到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。


(2)软件开发人员具有丰富的经验,对软件应用领域很熟悉。


(3)软件项目的风险较低。瀑布模型不具有完善的风险控制机制。


快速原型模型:开发人员对用户提出问题进行总结,就主要需求达成一致意见,快速地建立一个原型系统并运行,然后对原型进行反复修改,使之完善。衡量原型化模型开发人员能力标准是快速获取需求能力。


图中实线箭头表示开发过程,虚线箭头表示维护过程。



优点:用户需求清楚,降低开发风险与成本,用户参与决策,减少项目管理。快速原型模型是不带反馈环的,这是这种过程模型的主要优点,因为已经获得了用户全面准确的需求了。软件产品的开发基本上是线性顺序进行的。


能基本做到线性顺序开发的主要原因:

(1)原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。


(2)开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。


缺点:不适用大型系统,系统难于维护。


快速原型模型适用于具有以下特征的软件开发项目:

1.已有产品或产品的原型( 样品),只需客户化的工程项目。

2.简单而熟悉的行业或领域。

3.有快速原型开发工具。

4.进行产品移植或升级


增量模型:增量模型也称为渐增模型。增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户而是可以分批次进行提交。



在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

例如,使用增量模型开发字处理软件。可以考虑


第一个增量发布基本的文件管理、编辑和文档生成功能;


第二个增量发布更加完善的编辑和文档生成功能;


第三个增量实现拼写和文法检查功能;


第四个增量完成高级的页面布局功能。


优点:

1.将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。

2.以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。

3.开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。


4.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减小一个新的软件可能给客户组织带来的冲击。


缺点


1.如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。


2.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。


3.必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。


增量模型适用于具有以下特征的软件开发项目:

1.软件产品可以分批次地进行交付。


2.待开发的软件系统能够被模块化。


3.软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。


4.项目管理人员把握全局的水平较高。


螺旋模型:螺旋模型是一种用于风险较大的大型软件项目开发的过程模型。该模型将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了的风险分析。它把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。



优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;同时,将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。在螺旋模型中维护只是模型的另一个周期,因而在维护和开发之间并没有本质区别,

缺点:螺旋模型是风险驱动的,这种模型的控制和管理较为复杂,可操作性不强,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,对项目管理人员的要求较高。开发成本会提高。


喷泉模型:喷泉模型是一种过程模型,同时也支持面向对象开发。在面向对象的方法中,分析模型和设计模型采用相同的符号标示体系,各阶段之间没有明显的界限,而且常常重复、迭代地进行“喷泉”一词体现了面向对象方法的迭代和无间隙性。迭代是指各阶段需要多次重复,例如,分析和设计阶段常常需要多次重复进行,以更好的实现需求。无间隙性是指各个阶段之间没有明显的界限,并常常在时间上互相交叉,并行进行。


喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。



需求分析

任务:确定软件系统的功能需求;分析软件系统的数据要求;导出系统逻辑模型;修正项目开发计划。


工作:需求获取;需求分析与综合;编写需求规格说明书;需求评审。


需求分类:功能需求;非功能需求;设计约束。


需求工具:数据流图DFD、数据字典、判定表、判定树、E-R图


软件设计

模块设计原则:高内聚,低耦合


对于耦合和内聚的方法,可以看我写的这一篇文章:


http://t.csdnimg.cn/9SDMv


软件设计的工具(概要设计和详细设计都能使用):UML图:用例图,类图,协作图,顺序图,状态图,活动图

如果想要了解这些工具:


http://t.csdnimg.cn/xkH7H


软件开发方法

结构化的方法:

结构化软件设计方法更关注于系统的功能,采用自顶向下、逐步求精的设计过程,以模块为中心来解决问题,按照工程标准和严格的规范将目标系统划分为若干功能模块。


面向数据流的方法和面向数据结构的方法是两种常用的结构化软件设计方法。


面向数据流的方法:

面向数据流的设计方法多在概要设计阶段使用,它借助于数据流图(用于描述数据流从输入到输出的变化流程,由加工、数据流、文件和外部实体构成。)来进行设计工作。


优点:从系统整体出发,强调整体优化的条件下,自上而下的分析和设计;遵循用户至上原则;严格区分系统开发的阶段性;每个阶段的成果作为下一阶段的依据,便于系统开发的管理与控制;文档规范化,按照工程标准建立规范化的文档资料。


缺点:开发周期长,难于适应环境变化。


面向数据结构的方法:

面向数据结构的设计方法通常在详细设计阶段使用,它按输入、输出以及计算机内部存储信息的数据结构进行软件结构的设计,从而把对数据结构的描述转换为对软件结构的描述。常用的结构化软件设工具有流程图、N-S图和PAD图等。

面向数据结构的开发方法:Jackson


面向对象的方法

与结构化软件设计方法相比,面向对象软件设计方法的使用范围更广。与传统的软件工程方法不同的是,面向对象的方法不强调需求分析和软件设计的严格区分。从分析到设计的过渡,是一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。面向对象的设计可以分为系统设计和对象设计两个阶段。系统设计关注于确定实现系统的策略和目标系统的高层结构,而对象设计是对需求分析阶段得到的对象模型的进一步完善、细化或扩充。


面向对象的软件开发方法有:Booch方法、coad方法,jocobson方法,对象建模技术OTM等


统一建模语言UML是面向对象软件的标准化建模语言。它的词汇表中包含了3种构造块


事物、关系和图:

事物是对模型中最具代表性的成分的抽象


关系把事物结合在一起,包括依赖、关联、泛化和实现。泛化关系是一种一般/特殊关系,利用这种关系子类可以共享父类的结构与行为。


聚集了相关事务,包括类图、对象图用例图等。


软件测试

目的:尽可能多的发现软件产品的错误和缺陷。


测试方法:


白盒测试:需要了解程序内部结构,测试用例是根据程序内部逻辑来设计。白盒测试用于软件的单元测试。


黑盒测试:对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试不关心内部逻辑结构,只根据程序的功能说明来设计测试用例。黑盒测试用于软件的功能测试。


对于黑盒测试和白盒测试相关测试方法,可以看我的另一篇文章:


http://t.csdnimg.cn/Hftf8


灰盒测试:关注输出对于输入的正确性,同时也关注内部表现,但不像白盒那样详细完整。


测试的步骤:单元测试、集成测试、系统测试、验收测试



软件发布前的用户参与测试阶段:α测试和β测试


α测试:α测试是由软件开发公司或组织的内部用户进行的测试。它通常在软件的开发周期的后期阶段进行,目的是在软件发布之前发现和修复潜在的问题。α测试有助于获得对软件的初步反馈,并确保软件符合用户需求和预期。


注:α测试不能由程序员或测试员完成。

β测试:β测试是由一小部分外部用户(通常是公众)进行的测试。它旨在模拟真实环境中的使用情况,并允许用户提供反馈和建议。β测试有助于进一步验证软件的稳定性和可用性,并提供改进和优化的机会。


对于这个知识点,也可以看看这篇文章:


http://t.csdnimg.cn/QqKSc


项目管理

范围管理,时间管理,成本管理,质量管理,人力资源管理,沟通管理,风险管理,采购管理,整体管理,这里重点讲一下时间管理和风险管理:

时间管理

甘特图:用水平线段表示任务的工作阶段;线段的起点和终点对应任务的开始和完成;线段的长度表示完成任务所需时间。


优点:清晰的描述每个任务从何时开始到何时结束以及各任务之间的并行性。


缺点:不能反映任务之间的依赖关系,难以确定任务关键所在,也不能反映任务中有潜力部分。


PERT:是一个有向图,途中用有向弧表示任务,可以标上任务完成所需时间;图中的节点表示流入节点的任务结束,并开始流出节点任务,把这些节点称为事件。事件本身不消耗时间和资源,它仅表示某个时间点。


优点:Pert图不仅给出了任务开始时间、结束时间和完成任务所需时间,还给出了任务之间关系,以及如期完成整个工程的关键路径。


缺点:不能反映任务之间的并行关系。


对于关键路径的相关计算,可以看这篇文章:


http://t.csdnimg.cn/Ep2pK


关键要点:


1.最晚开始时间取最小,最早开始时间取最大。

2.关键路径上的最早开始时间和最晚开始时间的点是相等的。




风险管理


风险具有不确定性损失两大特性


分类:项目风险,技术风险,商业风险


风险曝光度:风险的概率乘风险可能造成的损失。


软件成熟度模型CMM

分为5个等级,初始级、可重复级、定义级、管理级和优化级,每一级都为下一级提供基础。


•初始级:软件过程的特点是无秩序的,有时甚至是混乱的。软件过程定义几乎处于无章法和步骤可循的状态,软件产品所取得的成功往往依赖于极个别人的努力和机遇。


•可重复级:已建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。对类似的应用项目,有章可循并能重复以往所取得的成功。


•已定义级:用于管理的和工程的软件过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。全部项目均采用与实际情况相吻合的、适当修改后的标准软件过程来进行操作。


•已管理级:软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。


•优化级:通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续地对促进过程进行改进。


除第一级外,每一级都设定了一组目标,如果达到了这组目标,则表明达到了这个成熟级别,自然可以向下一级别迈进。CMM体系不主张跨级别的进化。因为从第二级开始,每一个低级别的实现均是高级别实现的基础。

文档的编制在开发过程中占有突出地位。文档作为检查项目进度和设计质量的依据;是设计人员在一定阶段的工作成果和结束标识;有助于提高设计效率。


知识产权

著作权:作者对其创作的作品享有的人身权和财产权


自软件开发完成之日起,保护期为50年,期满后,除人身权外其他权利终止。


人身权包括:署名权、发表权、修改权和保护作品完整权


财产权包括:发行权、出租权、展览权、表演权和信息网络传播权


合理使用是指可不经著作权人许可,也无需支付报酬,使用其作品。


著作权归属:


  1、职务开发软件著作权归单位。包括:本职工作明确的开发目标或从事本职工作活动的结果。


  2、利用单位资金、专用设备、未公开的信息等物质技术条件,并由单位承担责任的软件,著作权归单位。


  3、合作开发软件著作权一般为共同所有,如果有软件著作权协议,按协议确定著作权归属。


  4、委托开发的软件,著作权归属由委托人和受托人通过合同约定,如果未明确,著作权归属受托人。


  5、接受任务开发的软件,著作权归属在合同中明确约定的一方,未明确的,属于软件开发单位。


  6、只进行组织、提供咨询意见、物质条件或其他辅助工作不享有著作权。


  侵权判定:


  1、中国公民、法人和组织的作品,不论发表是否发表均享有著作权。


  2、开发软件所用思想、处理过程、操作方法及数学概念不受保护。


  3、法规、决定、命令、立法文件、官方译文、新闻和通用数表不受保护。


  以下属于合理使用:


  1、个人学习、研究或欣赏,适当引用不构成侵权。


  2、为介绍、评论某一作品或说明某一问题,在作品中适当引用他人已发表的作品。


  3、公开演讲内容、免费表演他人作品、不够成侵权


  4、用户教学或科学研究不构成侵权


  5、将汉语译成少数民族语言作品或盲文出版不构成侵权


专利权:由国务院相关部门授予的,对发明创造者在规定的时间内享有的独占使用权。


发明专利的保护时限为自申请日起20年,实用新型专利和外观设计专利为自申请日起10年


两个以上申请人分别对同样的发明创造申请专利,专利权授予最先申请的人。同时申请专利,在收到国务院专利行政部门通知后,自行协商确定申请人,协商不成的均予以驳回。

同样的发明创造,只能授予一项专利。


强制实施许可:法律规定,允许第三方在法定情况下,可以不经专利权人的许可而实施其专利,且其实施行为并不构成侵权


专利权归属 :

下列情况专利权归属单位:


1、履行本单位交付的本职工作外的任务所作出的发明。


2、离职、退休或调动工作1年后与原单位相关的发明


3、职务发明创造


4、利用本单位的物质技术条件完成发明创造,其专利权依据合同约定。


商标法:


商标注册年限为10年,注册人死亡或倒闭1年未转移可以注销,期满后6个月内可以续注。


商标谁先申请谁拥有,但知名商标非法抢注的除外。


同时申请,谁先使用谁拥有(需提供证据)


无法提供证据、协商归属无效时抽签确定(但不可不确定)


公民作品保护期限:作者终身及死后50年,合作的作品,以最后一名作者死亡为准。


标准是对重复性事物和概念所做的统一规定。它以科学、技术和实践经验的综合成果为基础,经有关方面协商一致,由主管机构批准,以特定形式发布,作为共同遵守的准则和依据。


我国家标准的有效期一般为5年


标准编号


国际标准代号:标准代号+专业类号+顺序号+年代号


我国标准代号:标准代号+标准发布顺序号+标准发布年号


强制性标准代号GB


推荐性标准代号GB/T


指导性标准代号GB/Z


实物标准代号GSB


行业标准代号:汉语拼音大写字母


地方标准代号:由DB加省级行政区代码前两位


企业标准代号:由Q/XXX加企业代号组成


国际标准:IEC  ISO  ITU


国家标准:ANSI  GB


行业标准:IEEE  


商业秘密:不为公众所知,具有经济利益和实用性,并且已采取了保密措施的技术信息和经营信息。


目录
相关文章
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
4月前
|
运维
开发与运维编程问题之命令式编程的优点如何解决
开发与运维编程问题之命令式编程的优点如何解决
|
4月前
|
开发框架 前端开发 关系型数据库
Winform开发的快速、健壮、解耦的几点建议
Winform开发的快速、健壮、解耦的几点建议
|
6月前
|
存储 算法 安全
软件系统设计步骤与原理
软件系统设计步骤与原理
|
6月前
|
存储 分布式计算 Java
深入探究JAVA编程语言:概念、应用与实例分析
**JAVA**是广泛应用的高级编程语言,以其易学性、跨平台能力和高效的性能著称。它采用面向对象编程,强调封装、继承和多态,且具备平台无关性、内置安全性和多线程支持。JAVA广泛应用于Web开发(如JSP、Servlet)、移动应用(Android开发)、大数据处理(Hadoop、Spark)和桌面应用。通过一个计算两数之和的简单示例,展示了JAVA的易读性和面向对象特性,帮助读者理解JAVA在实际开发中的运用。
|
6月前
|
设计模式 移动开发 安全
构建高效Android应用:探究LiveData的优势与实践
【4月更文挑战第7天】随着移动开发技术的不断演进,Android开发者面临着构建更加高效、响应式和可维护应用的挑战。在众多解决方案中,LiveData作为一种观察者模式的实现,已经成为Google推荐的数据持有架构组件。本文将深入探讨LiveData的核心优势,通过具体实例展现其在Android应用中的实现方式,并分析其如何简化UI组件与数据源之间的通信,提升应用的健壮性和可测试性。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【A I 软件开发】一文讲清交互应用的实现原理
【A I 软件开发】一文讲清交互应用的实现原理
230 0
|
设计模式 网络协议 Java
《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式
《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式
113 0
|
存储 网络协议 安全
WEB服务端开发必懂的概念和底层原理,通过对比的方式让大家更好的理解和使用
golang 源码级别支持协程,实现简单。协程使用,当底层遇到阻塞会自动切换,也就是逻辑层通过同步方式实现异步,充分利用了系统资源,同时避免了异步状态机的反人类异步回调,实现方式更为直观简单。golang 协程是通过多线程维护,所以避免不了锁的使用,但也极大解决了研发效率问题。
200 0