一.基本定义
软件开发是根据用户的需求构建一个软件系统或系统的软件部分的产品开发过程 。软件开发是一项系统工程 , 包括需求获取、开发规划、需求分析与设计、编程、软件测试和版本控制 。换句话说 , 软件开发是一系列最终构建软件产品的活动 。
第二 , 阶段划分
1.计划
对所要解决的问题进行总体界定 , 包括了解用户的需求和现实环境 , 从技术、经济、社会因素等三个方面研究和论证本软件项目的可行性 , 编写可行性研究报告 , 讨论解决问题的方法 , 估算可用资源(如计算机硬件、系统软件、人力等)的成本 。) , 可获得的收益和开发进度 , 并制定实施计划完成开发任务 。
2.分析
软件需求分析是对开发什么样的软件进行系统的分析和假设 。是对用户的需求进行去粗取精 , 去伪存真 , 正确理解 , 然后用软件工程开发语言(形式化功能规格说明 , 即需求规格说明)表达出来的过程 。这一阶段的基本任务是与用户确定要解决的问题 , 建立软件的逻辑模型 , 编写需求规格说明文档 , 最终得到用户的认可 。需求分析的主要方法包括结构化方法、数据流程图和数据字典 。这一阶段的工作是根据需求说明书的要求 , 设计并建立相应的软件系统架构 , 将整个系统分解为若干个子系统或模块 , 定义子系统或模块之间的接口关系 , 定义各子系统的具体设计 , 编写软件概要设计和详细设计说明书 , 数据库或数据结构设计说明书 , 组装测试计划 。在任何软件或系统开发的初始阶段 , 都需要充分把握用户的需求 , 以便在后续的系统开发过程中优先考虑应该实现哪些功能 , 采用哪些规范 , 设置哪些限制 。系统工程师将在此基础上最终完成设计方案 , 并在此基础上定义后续的程序开发、系统功能和性能的描述和限制 。
3.设计
软件设计可以分为两个阶段:概要设计和详细设计 。实际上 , 软件设计的主要任务是将软件分解成模块 , 然后设计模块 。模块是指能够实现某种功能的数据和程序描述 , 以及可执行程序的程序单元 。它可以是一个函数、一个过程、一个子程序、一个独立的程序和带有程序描述的数据 , 也可以是一个可以组合、分解和替换的功能单元 。大纲就是结构设计 , 其主要目标是给出软件的模块结构 , 用软件结构图来表示 。详细设计的首要任务是设计模块的程序流程、算法和数据结构 , 次要任务是设计数据库 。常用的方法是结构化编程方法 。
4.编码
软件编码是指将软件设计转换成计算机可接受的程序 , 即以某种编程语言表达的“源程序清单” 。了解软件开发语言、工具的特点和编程风格有助于开发工具的选择和软件产品的质量 。
5.测试
软件测试的目的是用较少的成本发现尽可能多的错误 。实现这一目标的关键是设计一组优秀的测试用例(测试数据、功能和预期输出结果构成测试用例) 。如何设计一套优秀的测试用例 , 取决于对测试方法的理解 。不同的测试方法有不同的测试用例设计方法 。两种常用的测试方法是白盒法和黑盒法 。白盒法测试源程序 , 根据程序内部逻辑结构发现软件编程错误、结构错误和数据错误 。结构错误包括逻辑、数据流、初始化和其他错误 。白盒用例设计的关键是用较少的用例覆盖尽可能多的内部程序逻辑结果 。黑盒方法是基于软件功能或软件行为的描述 , 在软件接口、功能和结构中发现错误 。接口错误包括内部/外部接口、资源管理、集成和系统错误 。黑盒用例设计的关键是用较少的用例覆盖模块输出和输入接口 。
6.保持
维护是指软件开发(分析、设计、编码和测试)完成并投入使用后 , 软件产品的一些软件工程活动 。即根据软件的运行情况 , 对软件进行适当的修改以满足新的要求 , 并对运行中发现的错误进行修正 。撰写软件问题报告和软件修改报告 。
三 。典型的软件开发模型
软件开发模型是指软件开发的整个过程、活动和任务的结构框架 。它能够清晰、直观地表达软件开发的全过程 , 指定要完成的主要活动和任务 , 作为软件项目工作的基础 。
1.边做边构建并修复模型 。
在这种模式下 , 开发人员拿到项目后立即根据需求编写程序 , 调试后生成软件的第一个版本 。提供给用户后 , 如果程序出现错误 , 或者用户提出新的需求 , 开发者会再次修改代码 , 直到用户满意为止 。
这种开发方式对于写几百行的小程序来说还不错 , 但是对于任何规模的开发都不尽如人意 。主要问题是:
(1)、缺乏规划设计环节 , 软件的结构随着不断的修改越来越差 , 导致无法继续修改;
(2)忽视需求环节 , 给软件开发带来很大风险;
(3)不考虑测试和程序的可维护性 , 没有任何文档 , 维护软件是非常困难的 。
2.瀑布模型
温斯顿·罗伊斯在1970年提出了著名的“瀑布模型” 。直到20世纪80年代早期 , 它是唯一广泛使用的软件开发模型 。
瀑布模型将软件生命周期分为规划、需求分析、软件设计、编程、软件测试、运维等六个基本活动 。 , 并规定了它们自上而下的固定顺序 , 彼此相连 , 像瀑布一样 , 一步一步地落下来 。
在瀑布模型中 , 软件开发的所有活动都是严格以线性方式进行的 , 当前活动接受前一个活动的工作结果 , 并实现所需的工作内容 。需要验证当前活动的工作结果 。如果验证通过 , 结果将作为下一个活动的输入 , 继续下一个活动;否则 , 修改将被返回 。
瀑布模型强调文档的作用 , 并要求在每个阶段进行仔细的验证 。但是这种模型的线性过程过于理想化 , 已经不适合现代软件开发模式 , 几乎已经被业界所抛弃 。它的主要问题是:
(1)、每个阶段的划分完全固定 , 阶段之间产生大量文档 , 大大增加了工作量;
⑵由于开发模型是线性的 , 用户只能看到开发结果 , 直到整个过程结束 , 增加了开发的风险;
(3)早期的错误可能要到开发后期的测试阶段才能发现 , 会带来严重的后果 。
3.快速原型模型(快速原型模型)
快速原型模型的第一步是建立一个快速原型 , 实现客户或未来用户与系统的交互 。用户或客户将评估原型 , 并进一步细化要开发的软件的需求 。通过逐步调整原型以满足客户的要求 , 开发人员可以确定客户的真实需求是什么;第二步是在第一步的基础上开发出让客户满意的软件产品 。显然 , 快速原型法可以克服瀑布模型的缺点 , 降低软件需求不明确带来的开发风险 , 效果显著 。快速原型的关键是尽可能快地构建软件原型 。一旦确定了客户的真实需求 , 搭建好的样机就会被丢弃 。因此 , 原型系统的内部结构并不重要 。重要的是 , 原型必须快速建立 , 然后修改以反映客户的需求 。
4.增量模型
像建豪宅一样 , 软件是一步一步建起来的 。在增量模型中 , 软件作为一系列增量组件来设计、实现、集成和测试 , 每个组件都由代码片段组成 , 这些代码片段提供由各种交互模块形成的特定功能 。
增量模型并不在每个阶段交付完整的可运行产品 , 而是满足客户需求的可运行产品的子集 。整个产品被分解成几个组件 , 开发人员逐个交付产品 。这样做的好处是软件开发可以更好地适应变化 , 客户可以不断地看到开发出来的软件 , 从而降低开发风险 。然而 , 增量模型也有以下缺陷:
(1)随着各个组件逐渐融合到现有的软件架构中 , 添加的组件不得破坏已经构建好的系统部分 , 这就要求软件具有开放的架构 。
⑵在开发过程中 , 需求的变化是不可避免的 。增量模型的灵活性可以使其适应这种变化的能力远胜于瀑布模型和快速原型模型模型 , 但也容易退化为边做边改的模型 , 从而失去软件过程控制的完整性 。
5.螺旋模型
1988年 , Barry Boehm正式发表了软件系统开发的“螺旋模型” , 该模型将瀑布模型与快速原型模型相结合 , 强调了被其他模型忽略的风险分析 , 特别适用于大型复杂系统 。
螺旋模型由风险驱动 , 强调支持软件复用的替代方案和约束 , 有助于将软件质量作为一个特殊的目标融入产品开发 。然而 , 螺旋模型也有一定的局限性 , 如下:
(1)螺旋模型强调风险分析 , 但很多客户并不容易接受和相信这种分析并做出相关反应 。因此 , 这种模型通常适合于内部的大型软件开发 。
⑵如果风险分析会极大地影响项目的利润 , 那么进行风险分析是没有意义的 。因此 , 螺旋模型只适用于大型软件项目 。
(3)软件开发人员要善于发现可能存在的风险并准确分析 , 否则会带来更大的风险 。
6.进化模型 。
主要针对不能完全提前定义需求的软件开发 。用户可以给出待开发系统的核心需求 , 当看到核心需求的实现时 , 可以有效地给出反馈 , 以支持系统的最终设计和实现 。软件开发人员首先根据用户的需求开发核心系统 。当核心系统投入运行后 , 用户对其进行测试 , 完成他们的工作 , 并提出完善系统和增强其能力的要求 。软件开发人员根据用户反馈实现开发的迭代过程 。第一次迭代过程由需求、设计、编码、测试、集成等阶段组成 , 为整个系统增加一个可定义、可管理的子集 。在开发模式上 , 采用批量循环开发的方法 , 部分功能的每次循环开发都成为该产品原型的新功能 。因此 , 设计不断演变成新的系统 。实际上 , 这个模型可以被看作是许多重复执行的“瀑布模型” 。
7.喷泉模型(面向对象的生命周期模型 , 面向对象(OO)模型))
与传统的结构化生命周期相比 , 喷泉模型具有更多的递增性和迭代性 , 生命周期的每个阶段可以多次重叠和重复 , 子生命周期可以嵌入到项目的整个生命周期中 。就像水往上喷 , 往下掉 , 要么在中间 , 要么在底部 。
8.智能模型(第四代技术(4GL))
智能模型有一套工具(如数据查询、报告生成、数据处理、屏幕定义、代码生成、高级图形功能、电子表格等 。) , 而且每个工具都可以让开发者在高层次上定义软件的一些特性 , 自动将开发者定义的软件生成源代码 。这种方法需要四代语言的支持(4GL) 。GL不同于三代语言 , 其主要特点是用户界面极其友好 , 即使没有经过培训的非专业程序员 , 也可以用来编写程序;它是一种声明式、交互式和非过程化的编程语言 。GL还具有高效的程序代码、智能的默认假设、完整的数据库和应用程序生成器 。目前流行的4GL(如Foxpro等 。)在市场上都不同程度地具有上述特征 。然而 , 4GL目前主要局限于交易信息系统的中小型应用的开发 。
9.混合模型
【软件开发的主要任务是 什么是软件工程】流程模型也称为混合模型 , 或元模型 。它将几个不同的模型组合成一个混合模型 , 允许项目沿着最有效的路径发展 。这就是过程开发模型(或混合模型) 。事实上 , 一些软件开发单位使用几种不同的开发方法来形成他们自己的混合模型 。
推荐阅读
- 裸睡会患上尿路感染吗 裸睡会引起尿路感染吗
- 什么是黑色素瘤,有什么症状呢 什么是黑色素瘤?
- 作文怎么批改 作文批改标准
- 闲不住的奶奶作文 名为闲不住的奶奶作文
- 女性黑色素瘤一般长在哪里 恶性黑色素瘤一般长在哪里
- 合资经营协议书范本 投资协议书范本
- 生物菌的作用 生物菌肥的作用
- 房地产结构性过剩 结构性过剩
- 大蒜泡酒的功效和作用 「独头蒜治什么病最快」