系统生命周期分为四个阶段。
系统规划
系统开发
系统运维
系统更新或消亡
其中重头戏是系统开发阶段。系统开发阶段可以进一步细化为:
总体规划
系统分析
系统设计
系统实施
系统验收
系统分析是系统分析师的活,系统设计则有 系统分析师 + 系统架构师。
系统开发阶段的基本套路有 开发方法 和 开发模型。 但是书本上没有阐明二者之间的关系,比较割裂,读起来不容易把握。我尝试总结一下。
一、开发方法
主要有结构化方法和面向对象方法。
其实开发方法有很多种分类,不同标准有不同的分类:
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)适用范围
中小系统?或者结构化方法和面向对象方法相结合,将大系统进行分解成小系统或模块,再使用面向对象方法。
除此之外,比较有代表性的开发方法还有
(三)原型
(四)面向服务方法
(五)逆向工程
不是反编译。而是指重构,或者对现有系统进行分析、解构、提炼、抽象,按照软件开发的步骤反向倒推,按照不同层次,直至还原回到UML的设计图,也就是系统分析的产物去了。
二、开发模型
开发模型,简单而言,就是你这个项目要的大致开发方式和步骤是什么样的。它是一种规划和套路,包括需求、设计、编码、测试等几个阶段都有处置方法。常用的开发模型有
1、瀑布模型
2、螺旋模型
3、构件组装模型
4、敏捷开发
5、统一过程
三、开发模型 与 开发方法
开发模型与开发方法不是同一类事物。开发模型是一种规划,对系统开发阶段的不同环节有不同的流程。
而开发方法是一种方法学,主要是针对开发模型中的设计和编码进行实现。
但实际应用中,二者往往重叠得很厉害,边界不是非常清晰。