• 软件工程

在上个世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。

  • 软件开发方法

目前常用的开发方法有四种,分别是结构化方法、原型法和面向对象方法。接下来我们会一一叙述这些软件开发方法的实现过程和其中的特点以及优缺点。

  1. 结构化方法

结构化方法:结构化方法是应用最为广泛的一种开发方法。按照信息系统生命周期,应用结构化系统开发方法,把整个系统的开发过程分为若干阶段,然后一步一步她依次进行,前一阶段是后一阶段的工作依据;每个阶段又划分详细的工作步骤,顺序作业。

每个阶段和主要步骤都有明确详尽的文档编制要求,各个阶段和各个步骤的向下转移都是通过建立各自的软件文档和对关键阶段、步骤进行审核和控制实现的。它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。

它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。结构化方法具有如下特点。

(1)遵循用户至上原则。

(2)严格区分工作阶段,每个阶段有明确的任务和取得的成果。   

(3)强调系统开发过程的整体性和全局性。   

(4)系统开发过程工程化,文档资料标准化。 

结构化分析方法是一种面向数据流而基于功能分解的分析方法, 在该阶段主要通过采用数据流程图、编制数据字典等工具, 描述边界和数据处理过程的关系, 力求寻找功能及功能之间的说明。

该方法的优点是:理论基础严密,它的指导思想是用户需求在系统建立之前就能被充分了解和理解。由此可见,结构化方法注重开发过程的整体性和全局性。

该方法的缺点是:开发周期长;文档、设计说明繁琐,工作效率低;要求在开发之初全面认识系统的信息需求,充分预料各种可能发生的变化,但这并不十分现实;若用户参与系统开发的积极性没有充分调动,造成系统交接过程不平稳,系统运行与维护管理难度加大。 

结构化设计方法的局限性:

i.不能直接反映问题域: 结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。

ii.数据和代码缺乏保护机制: 一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。

iii.分析和设计体系不一: 结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。 二者的表示体系不一致, 分析文档很难与设计文档对应, 所以从分析到设计的“ 转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。

iv.开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。 对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序, 而且往往不能对数据的安全性进行有效的控制。 如果程序进行扩充或升级, 也需要大量修改函数, 因此结构化程序的可重用性不好。 要使数据与程序始终保持兼容, 已成为程序员的一个沉重的负担。

  1. 面向对象方法

面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。随着应用系统日益复杂庞大和面向对象程序设计语言的日益成熟,面向对象的系统开发方法以其直观、方便的优点获得广泛应用。 是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 

由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不一致带来的问题。简言之,面注重软件开发中人的作用。 

面向对象设计基本步骤:

  • 根据概念层类图,进行实体类设计。

  • 设计实体类的操作入口,如管理器类和容器类。

  • 根据GRASP九大原则,进行业务逻辑类的设计。涉及到活动图。

  • 用例实现。一般会涉及到类图和协作图。

基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

面向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建立起问题域的简洁、精确、可理解的面向对象模型, 为后续的面向对象设计和面向对象编程提供指导。面向对象分析通常建立三种模型: 对象模型、动态模型、功能模型。其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表示瞬时的、行为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。

面向对象方法的局限:

i.开发过程管理要求高:在面向对象分析过程中,需要多次迭代,开发过程要经过“修改-评价-再修改”的多次反复

ii.系统复用性低:面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障代价大,对于需求变化频繁的系统,很难得到一个高度可复用的面向对象软件系统设计。

iii.开发人员易将原型取代规范系统分析:缺乏规范化的文档资料,不易于后期维护。

面向对象方法学的优点:

i.与人类习惯的思维方法一致。

ii.稳定性好。传统方法所建立起来的软件系统的结构紧密依赖于系统要完成的功能。当功能需求发生变化时将引起软件结构的整体改变。面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。当功能需求发生变化时,往往仅需要一些局部性的修改。

iii.可重用性好,重用是提高生产效率的最主要的方法。对象是比较理想的模块和可重用的软件成分。类重用的方法,创建该类的实例,派生。

iiii.较易开发大型软件。

iiiii.可维护性好面向对象的软件稳定性比较好。面向对象的软件比较容易修改,面向对象的软件比较容易理解,易于测试和调试

  1. 原型法

原型法的基本思想与结构化方法不同,原型法认为在很难一下子全面准确地提出用户需求的情况下,首先不要求一定要对系统做全面、详细的调查、分析,而是本着开发人员对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求。是在投入大量的人力,物力之前,在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止。 

适用范围:处理过程明确、简单系统;涉及面窄的小型系统不适合于:大型、复杂系统,难以模拟;存在大量运算、逻辑性强的处理系统;管理基础工作不完善、处理过程不规范;大量批处理系统   

原型应当具备的特点如下。   

(1)实际可行。   

(2)具有最终系统的基本特征。   

(3)构造方便、快速,造价低。   

原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的,系统分析、设计与实现都是随着对一个工作模型的不断修改而同时完成的,相互之间并无明显界限,也没有明确分工。

系统开发计划就是一个反复修改的过程。适于用户需求开始时定义不清的系统开发,开发方法更宜被用户接受;但如果用户配合不好,盲目修改,就会拖延开发过程。 

  • 总结

通过对这几种方法的实现简介和它们的优缺点介绍,不同的方法适用于不同的软件开发。如果说想要找一个统一的,合适所有软甲开发工程的开发方法,在目前阶段是不合适的,因为如果你用原型法去做大型软件,其中的花费,会拖垮大部分的公司,而且系统的使用大概率的会出现不能正常使用的状态,所以,开发软件用合适的开发方法,才是软件开发人员的主要作用。

浅谈《软件工程》常用的几种软件开发方法相关推荐

  1. 软件工程与软件开发模型、软件开发方法

    什么是软件工程? 软件工程一直以来都缺乏一个统一的定义. IEEE给出的定义是:软件工程是:1.将系统化的.严格约束的.可质量化的方法应用于软件的开发.运行和维护,即将工程化应用于软件:2.在1中所述 ...

  2. 浅谈计算机实用教学工具应用的体会,浅谈计算机常用工具软件教学心得.doc

    浅谈计算机常用工具软件教学心得 浅谈计算机常用工具软件教学心得 摘 要:随着计算机技术的普及,社会对掌握计算机技术的人才不断提出新的要求,人们所需要掌握的计算机技术也越来越多.<计算机常用工具软 ...

  3. 搞懂分布式技术16:浅谈分布式锁的几种方案

    搞懂分布式技术16:浅谈分布式锁的几种方案 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景, ...

  4. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  5. python算法程序_浅谈python常用程序算法

    一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...

  6. 浅谈Oracle RAC --集群管理软件GI

    浅谈Oracle RAC --集群管理软件GI基本架构 今天周五,想想可以过周末,心情大好.一周中最喜欢过的就是周五晚上,最不喜欢过的是周日晚上和周一,看来我不是个热爱劳动的人啊.趁着现在心情愉悦,赶 ...

  7. php动态网站开发论文,浅谈《基于PHP的动态网站开发》课程的项目案例设计

    电子论文 浅谈<基于PHP的动态网站开发>课程的项目案例设计 时间:2020年05月25日 所属分类:电子论文 点击次数: [摘要]在教学资源建设中,案例设计建设是非常重要的资源之一.运用 ...

  8. 漫谈软件工程(1)——回顾十年软件开发经历

    软件工程专业毕业,从事软件开发工作将近十年了,近来我重看一些软件工程书籍,回顾着这些年的软件开发经历,越发有一种冲动:结合这些年软件开发的经历,倾述当前软件过程管理中的行业现状.当然我所说的并不一定就 ...

  9. 浅谈三层架构 通过这个,+Java开发模式经验。终于相通了,动软到底是为什么这么做...

    浅谈三层架构 收藏 自己理解的原理 http://www.cnblogs.com/mahaisong/archive/2011/05/12/2044665.html 浅谈三层架构  通过这个,+Jav ...

  10. laytpl语法_浅谈laytpl 模板空值显示null的解决方法及简单的js表达式

    浅谈laytpl 模板空值显示null的解决方法及简单的js表达式 laytpl 模板语法 {{ d.field }} 输出一个普通字段,不转义html 官方的说明 但d.field 为空时会显示nu ...

最新文章

  1. Qt 打印时间 毫秒级
  2. react native 的底部导航栏以及跳转页面带参数
  3. php多个参数伪静态,伪静态技术与页面多参数传送的处理办法
  4. ubutnu16.04搭建LAMP环境(搭建wordpress博客)
  5. 利用python来解析html
  6. CF594D. REQ
  7. 408计算机组成原理有汇编吗,2021考研408计算机组成原理习题:计算机系统概述
  8. 基于tcp的网络程序_【CVPR 2020 Tutorial】基于神经网络的符号化视觉推理和程序合成(2)...
  9. sql服务器时间不正确,使用更改 CPU 频率的实用工具或技术时,SQL Server 计时值可能不正确...
  10. 洛谷——[USACO07OCT]Bessie‘s Secret Pasture S
  11. IS-IS快速收敛调优(一)——IS-IS收敛机制
  12. MongoDB副本集学习(三):性能和优化相关
  13. OpenCasCade由一个基础形状拉伸形成其它形状的问题
  14. 360 os3.0 android7.1,【360 N6 Pro】360OS安卓7.1系统V3.0.087付费纯净版ROOT刷机包
  15. ARM嵌入式核心板介绍
  16. easyui mysql_Easyui 添加查询功能_EasyUI 教程
  17. django orm原理_django 动态创建一个模型的多个table name, 并通过 Django ORM 操作
  18. 微信小程序 - 页面跳转传参 JSON.parse 解析失败报错(SyntaxError: Unexpected end of JSON input)解决方案
  19. 太离谱了!一行Python代码写的游戏,我能这样玩一天!
  20. OpenGL入门示例8——图形平移、旋转、缩放

热门文章

  1. 哈理工OJ 1147 重生(水DP)
  2. 几行Java解决图片提取文字功能
  3. Drools规则引擎
  4. 2019年,微信营销软件排行榜
  5. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验03 模块化程序设计(2021级)
  6. 常用Linux命令--CPU和GPU查看
  7. 下载 安装 破解Axure
  8. Axure rp 9 的汉化破解版
  9. docker配置mysql文件位置_Docker安装MySQL并挂载数据及配置文件
  10. 线性代数中的克莱姆法则与几何解释