天天看点

软件开发方法结构化方法Jackson方法原型方法面向对象方法敏捷方法总结

结构化方法

      由结构化分析、结构化设计、结构化程序设计组成,是一种面向数据流的开发方法。

      结构化分析是根据分解与抽象的原则,按照系统中数据处理的流程,用数据流图来建立系统的功能类型,从而完成需求分析工作。

      结构化设计是根据模块独立性准则、软件结构优化准则将数据流图转换为软件的结构体系,用软件结构图来建立系统的物理模型,实现系统的概要设计。

      结构化程序设计使用3种基本控制结构构造程序,任何程序都可以由顺序、选择和重复3种基本控制结构构造。

      系统开发的生命周期分为系统规划、系统分析、系统设计、系统实施、系统运行和维护五个阶段。

基本思想

      结构化系统开发方法的基本思想是:用系统工程的思想和工程化的方法,按用户至上的原则,结构化,模块化,自顶向下地对系统进行分析与设计。具体来说,就是先将整个信息系统开发过程划分出若干个相对独立的阶段,如系统规划、系统分析、系统设计、系统实施、系统运行与维护等。在前三个阶段坚持自顶向下地对系统进行结构化划分。在系统调查或理顺管理业务时,应从最顶层的管理业务人手,逐步深人至最基层。在系统分析,提出新系统方案和系统设计时,应从宏观整体考虑人手,先考虑系统整体的优化,然后再考虑局部的优化问题。在系统实施阶段,则应坚持自底向上地逐步实施。也就是说,组织人力从最基层的模块做起(编程),然后按照系统设计的结构,将模块一个个拼接到一起进行调试,自底向上、逐渐地构成整体系统。

特点

      (1)  自顶向下整体性的分析与设计和自底向上逐步实施的系统开发过程。

      (2)  用户至上。

      (3)  深入调查研究。

      (4)  严格区分工作阶段。

      (5)  充分预料可能发生的变化。

      (6)开发过程工程化

优缺点

      结构化系统开发方法是在对传统的自发的系统开发方法批判的基础上,通过很多学者的不断探索和努力而建立起来的一种系统化方法。这种方法的突出优点就是它强调系统开发过程的整体性和全局性,强调在整体优化的前提下来考虑具体的分析设计问题,即自顶向下的观点。它强调的另一个观点是严格地区分开发阶段,强调一步一步地严格地进行系统分析和设计,每一步工作都及时地总结,发现问题及时地反馈和纠正。从而避免了开发过程的混乱状态,是一种目前广泛被采用的系统开发方法。

      但是,随着时间的推移这种开发方法也逐渐地暴露出了很多缺点和不足。最突出的表现是它的起点太低,所使用的工具(主要是手工绘制各种各样的分析设计图表)落后,致使系统开发周期过长,带来了一系列的问题(如在这段漫长的开发周期中,原来所了解的情况可能发生较多的变化等)。另外,这种方法要求系统开发者在调查中就充分地掌握用户需求、管理状况以及预见可能发生的变化,这不大符合人们循序渐进地认识事物的规律性。因此在实际工作中实施有一定的困难。

Jackson方法

      Jackson方法是面向数据结构的设计方法。因为一个问题的数据结构与处理数据结构的控制结构有着惊人的相似之处,该方法就是根据这一思想形成了最初的JSP(Jackson System Programming)方法。

      JSP方法定义了一组以数据结构为指导的映射过程,它根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,即程序结构,而不是软件的体系结构,因此该方法适用于详细设计阶段。

JSP方法一般通过以下五个步骤来完成设计:

      (1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson结构图来表示这些数据结构。

      (2)找出输入数据结构和输出数据结构中有对应关系的数据单元。

      (3)按一定的规则由输入、输出的数据结构导出程序结构。

      (4)列出基本操作与条件,并把它们分配到程序结构图的适当位置。

      (5)用伪码写出程序。

      特点:以数据结构为驱动的,适合小规模项目,

      局限性:当输入数据结构与输出数据结构之间没有对应关系时,难以应用此方法。

      基于JSP方法的局限性,又发展了JSD(Jackson System Development)方法,它是JSP方法的扩充。它是一个完整的系统开发方法。首先建立现实世界的模型,再确定系统的功能需求,对需求的描述特别强调操作之间的时序性。它是以事件作为驱动的,是一种基于进程开发方法,所以适用于时序特点较强的系统,包括数据处理系统和一些实时控制系统。

原型方法

基本思想

      开发人员对用户提出的问题进行总结,就系统的主要需求取得一致意见后,开发一个原型(原型是由开发人员与用户合作,共同确定系统的基本要求和主要功能,并在较短时间内开发的一个实验性的、简单易用的小型系统。原型应该是可以运行的,可以修改的。)并运行之,然后反复对原型进行修改,使之逐步完善,直到用户对系统完全满意为止。

优点

      (1)需求表示清楚,用户满意度较高

      (2)降低开始风险和开发成本

缺点

      (1)原型法不适用于开发大型的信息系统

      (2)系统难于维护

      (3)如果用户合作不好,盲目纠错,会拖延开发进程

适用范围

      (1)用户需求不清,管理及业务不稳定,需求经常变化

      (2)规模小,不太复杂

      (3)开发信息系统的最终用户界面

面向对象方法

      面向对象方法的基本出发点是尽可能地按照人类认识世界的方法和思维方式来分析和解决问题。

组成

      (1)面向对象分析OOA

      (2)面向对象设计OOD

      (3)面向对象程序设计OOP

特点

      (1)封装性

      (2)抽象性

      (3)继承性

      (4)动态链接性

      (5)多态

基本思想

      客观世界是由各种各样的对象组成的,每种对象都有各自的内部状态和运动规律,不同对象之间的相互作用和联系就构成了各种不同的系统。

      在设计和实现一个客观系统时,在满足需求的条件下,把系统设计成一些不可变的(相对固定)部分组成的最小集合(最好的设计)。这些不可变的部分就是所谓的对象。

      以对象为主体的OO方法的进一步解释。

在大型管理信息系统开发中,若不经自顶向下的整体划分,而是一开始就自底向上地采用OO方法开发系统,会造成系统结构不合理、各部分关系失调等等问题。OO方法和结构化方法在系统开发中相互依存、不可替代。

敏捷方法

      敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期或改变需求

敏捷过程的典型方法有很多:

1、极限编程(XP)

      XP是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式。

      组成:价值观、原则、实践、行为

      4大价值观:沟通、简单性、反馈和勇气

      5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作

12个最佳实践:

      (1)计划游戏:快速制定计划、随着细节的不断变化而完善

      (2)小型发布:系统的设计要能过尽可能早地交付

      (3)隐喻:找到适合的比喻传达信息

      (4)简单设计:只处理当前的需求,使设计保持简单

      (5)测试先行:先写测试代码,然后编写程序

      (6)重构:重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求

      (7)持续集成:可以按日甚至按小时为客户提供可运行的版本

      (8)结队编程

      (9)集体代码所有制

      (10)每周工作40小时

      (11)现场客户

      (12)编码标准

2、水晶法

      水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论。

水晶项目开发核心特征:

  经常交付;

  --项目主办者根据团队的工作进展获得重要反馈;

  --用户有机会发现他们原来的需求是否是他们真正想要的, 有机会将观察结果反馈到开发当中

  --团队得以调整开发和配置的过程, 并且可以鼓舞士气

  --规定Timing Box确定最终的迭代交付时间点

3、并列争求法

      并列征求法使用迭代的方法,其中,把每30天一次的迭代成为一个“冲刺”,并按需求的优先级别来实现产品。多个自组织和自治的小组并行地递增实现产品。协调是通过简短的日常情况会议来进行,就像橄榄球中的“并列争球“。

4、自适应软件开发

6个基本原则:

      (1)有一个使命作为指导

      (2)特征被视为客户价值的关键点

      (3)过程中的等待很是重要的,因此"做”与“重做”同样关键

      (4)变化不被视为改正,而是被视为对软件开发实际情况的调整

      (5)确定的交付时间迫使开发人员认真考虑每一个生产的版本的关键需求

      (6)风险也包含其中

其它敏捷方法还有:软件开发节奏,Software Development Rhythms

                  敏捷数据库技术,AD/AgileDatabase Techniques

                  敏捷建模,AM/AgileModeling

                  特性驱动开发,FDD/FeatureDriven Development

                  动态系统开发方法,DSDM/DynamicSystems Development Method

                  精益软件开发,LeanSoftware Development

                  AUP(AgileUnified Process)

                  Scrum

                  XBreed

                  探索性测试

有关敏捷开发的文章(1)http://www.cnblogs.com/taven/archive/2010/10/17/1853386.html

                                 (2)http://wiki.mbalib.com/wiki/敏捷开发

总结

      花费2个小时总结软件开发方法,希望对软考有用吧。这些大部分都是软考课本上的,网上资料很少。我觉的敏捷开发不错,但是开发系统时,必须综合各种条件,寻找合适的开发方法。

继续阅读