系统开发方法和开发模型

系统生命周期分为四个阶段。

系统规划
系统开发
系统运维
系统更新或消亡

其中重头戏是系统开发阶段。系统开发阶段可以进一步细化为:

总体规划 
系统分析 
系统设计 
系统实施 
系统验收

系统分析是系统分析师的活,系统设计则有 系统分析师 + 系统架构师。

系统开发阶段的基本套路有 开发方法 和 开发模型。 但是书本上没有阐明二者之间的关系,比较割裂,读起来不容易把握。我尝试总结一下。

一、开发方法

主要有结构化方法面向对象方法

其实开发方法有很多种分类,不同标准有不同的分类:

1、从开发风范分,可分为自顶向下和自底向上的开发方法
1)自顶向下
强调开发过程由问题到解答,由总体到局部,有一般到具体;

2)自底向上
由系统实现的最基础部分着手,由简单到复杂,逐层向上构造,直至得到所需的软件。

2、从开发性质看,可分为形式化方法和非形式化方法
形式化,严格的数学语言进行定义。

3、从适用范围看,可分为整体性方法和局部性方法。
自顶向下,自底向上都是。

但基本上,通常是分为结构化方法面向对象方法

(一)结构化方法
结构化方法属于自顶向下的开发方法,基本思想是“自顶向下,逐步求精”,强调开发方法的结构合理性及所开发系统的结构合理性。

结构化开发方法提出了一系列准则:

分解与抽象 
模块独立性
信息隐蔽

对应不同阶段,有
1、结构化分析(SA)
对应需求分析阶段,用于需求建模,包含3层建模:

1)数据建模,出ER图
2)功能建模,出数据流图(DFD)
3)行为建模,出状态迁移图(STD)

核心:数据字典

2、结构化设计(SD)
3、结构化程序设计(SP)
4、优缺点及适用范围
(1)优点:从系统整体出发,强调在整体优化的条件下“自上而下”地分析和设计,保证了系统的整体性和目标的一致性;遵循用户至上原则;严格区分系统开发的阶段性;每一阶段的工作成果是下一阶段的依据,便于系统开发的管理和控制;文档规范化,按工程标准建立标准化的文档资料。

(2)缺点:用户素质或系统分析员和管理者之间的沟通问题;开发周期长,难于适应环境变化;结构化程度较低的系统,在开发初期难以锁定功能要求。

(3)适用范围:主要适用于规模较大、结构化程度较高的系统的开发

(二)面向对象方法
同样地,分为

面向对象分析(OOA)
面向对象设计(OOD)
面向对象程序设计(OOP)

1、面向对象分析
OOA以UML(统一建模语言)为代表。工作内容包括

1)结构建模:类图、部署图、构件图
2)功能建模:用例图
3)行为建模:活动图

2、面向对象设计
3、面向对象程序设计
4、优缺点
面向对象方法是当前的主流开发方法。从内部结构上模拟客观世界,认为系统由对象构成,属性和操作是基本单位。面向对象方法兼具自顶向下分解和自底向上抽象两种特性。

(1)优点
软件系统看成各种对象的集合,更接近人类的自然思维方式;

需求变动往往是功能的变动,而功能的执行者(对象)一般不会有大的变化,按照对象设计出来的系统结构比较稳定;

对象封装了行为和数据,提高了子系统的独立性,从而提高了可维护性

封装、抽象、继承和多态,提高了软件的重用性、可维护性和扩展性。

(2)缺点
不易于大系统的开发

(3)适用范围
中小系统?或者结构化方法和面向对象方法相结合,将大系统进行分解成小系统或模块,再使用面向对象方法。

除此之外,比较有代表性的开发方法还有

(三)原型
抛弃型原型,演化型原型。

【优点】
1)有助把握需求,缩短开发周期
2)用户参与感强,积极性高,满意度高
3)起到提前培训的作用
4)应变能力强

【缺点】
1)工作量大,需要反复修改
2)不适合所有情况,比如比较大的系统,或者是逻辑性很强的系统、批处理系统等
3)容易将原型代替系统分析
4)用户误以为就是系统,容易产生失望情绪,进而影响后续的工作
5)缺乏规范化文档

(四)面向服务方法
(五)逆向工程
不是反编译。而是指重构,或者对现有系统进行分析、解构、提炼、抽象,按照软件开发的步骤反向倒推,按照不同层次,直至还原回到UML的设计图,也就是系统分析的产物去。

1、相关概念

【设计恢复】
design recovery,指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。

【逆向工程】
Reverse Engineering,是指分析程序,力图在比源代码更高抽象层次上建立程序的表示过程。逆向工程是设计的恢复过程。从可运行程序一直逆向倒推出设计图。

【重构】
restructuring,是指在同一抽象级别上转换系统描述形式。

【正向工程】
forward engineering,指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。

【再工程】
re-engineering,在逆向工程所获得的信息基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。

2、逆向功能的完备性
一般认为,凡是在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。逆向工程的完备性可以用在某一个抽象层次上提供信息的详细程度来描述。抽象级别由高到低,逆向工程应该能导出:

过程设计模型(实现级,一种底层抽象)

程序和数据结构信息(结构级)

对象模型、数据和控制流模型(功能级)

UML状态图和部署图(领域级)

逆向工程不仅应用于软件开发,也应用于软件维护。

二、开发模型

开发模型,简单而言,就是你这个项目要的大致开发方式和步骤是什么样的。它是一种规划和套路,包括需求、设计、编码、测试等几个阶段都有处置方法。常用的开发模型有

1、瀑布模型

2、螺旋模型
螺旋模型(Spiral model)是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。 螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。 同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。

螺旋模型是瀑布型 + 原型 + 迭代。最大特点是风险分析,每一轮迭代都有原型和风险分析。(类似的还有快速应用开发RAD,也是瀑布模型的高速变种,最大的特点也是风险控制做得好)

在这里插入图片描述
开发步骤(迭代)
1)制定计划
2)风险分析
3)实施工程
4)客户评估

3、构件组装模型
Component-Based Software Development, CBSD,有时也称为基于构件的软件工程CBSE)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是COTS(Commercial-Off-the-Shelf,翻译为“商用现成品或技术”或者“商用货架产品”,指可以采购到的具有开放式标准定义的接口的软件或硬件产品,可以节省成本和时间)构件,也可以是通过其它途径获得的构件(如自行开发)。CBSD体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担 ,从而降低软件开发的费用。

【开发流程】
1)需求分析与定义
2)体系结构设计
3)建立构件库
4)构件软件
5)测试和发布

【优点】
1)利用线程构件系统,提高开发效率,节省开发成本
2)构件定义和实现可以分离,并且可以并行开发,一方面可以缩短开发周期,另一方面不同构件可以使用不同技术栈,技术上有灵活性
3)构件可以为多个项目共用,降低开发成本,提高系统可维护性

【缺点】
1)构件缺乏通用标准,风险较大
2)软件质量依赖构件库质量
3)对系统分析师和开发人员要求高

4、敏捷开发
敏捷开发方法是一种以人为核心、迭代、循序渐进的开发方法。

在敏捷方法中,软件项目的构建被切分成多个子项目,各个子项目成果都经过测试,具备集成和可运行的特征。

敏捷方法中,从开发者角度看,主要关注点有短平快会议、小版本发布、较少的文档、合作为重、客户直接参与、自动化测试、适应性计划调整和结对编程。

从管理者角度看,主要关注点有测试驱动开发、持续集成和重构。

5、统一过程(UP/RUP)
RUP(统一过程)

6、快速应用开发(RAD)
快速应用开发

三、开发模型 与 开发方法

开发模型与开发方法不是同一类事物。开发模型是一种规划,对系统开发阶段的不同环节有不同的流程。
而开发方法是一种方法学,主要是针对开发模型中的设计和编码进行实现。

但实际应用中,二者往往重叠得很厉害,边界不是非常清晰。

详见拙作:软件开发方法和开发模型的比较

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值