[笔记] 系统分析师 第八章 软件工程

文章目录

前言

8.1 软件的生命周期

8.1.1 软件生存周期过程

  1. 基本过程:
  2. 支持过程:
  3. 组织过程

8.1.2 软件的生命周期各阶段的任务

  1. 可行性研究和项目开发计划。通过分析用户提出的软件开发要求,确定软件项目的性质、目标和规模,得出可行性研究报告。如果可行性研究的结果是可行的,就要制定详细的项目开发计划。这两个活动通常被整合在一起进行,在实际工作中通常把它们归类到同一个阶段中。
  2. 需求分析。需求分析工作是软件生命周期中重要的一步,也是决定性的一步。只有通过需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。
  3. 概要设计。根据软件需求规格说明建立软件系统的总体结构和模块间的关系,定义各功能模块接口,设计全局数据库或数据结构,规定设计约束,制定组装测试计划。
  4. 详细设计。将各模块要实现的功能用相应的设计工具详细描述出来。
  5. 实现。写出正确的、易理解的和易维护的程序模块。程序员根据详细设计文档将详细
    设计转化为程序,完成单元测试。
  6. 组装测试(集成测试)。将经过单元测试的模块逐步进行组装和测试。
  7. 确认测试。测试系统是否达到了系统需求,按照规格说明书的规定,由用户(或在用户积极参与下)对系统进行验收。必要时,还可以再通过现场测试或并行运行等方法对系统进行进一步的测试。
  8. 使用。将软件安装在用户确定的运行环境中,测试通过后移交用户使用。在软件的使用过程中,客户和维护人员必须认真收集发现的软件错误,定期或阶段性地撰写软件问题报告和软件修改报告。
  9. 维护。通过各种必要的维护活动使系统持久地满足用户的需要。
  10. 退役。终止对软件产品的支持,软件停止使用。

8.2 软件的开发方法

  • 软件开发方法是指软件开发过程所遵循的办法和步骤,从不同的角度可以对软件开发方法进行不同的分类。
  • 从开发风范上看,可分为自顶向下的开发方法与自底向上的开发方法。

8.2.1 形式化方法

形式化方法概述

  • 在需求分析中,形式化方法的思想是利用形式化规格说明语言,严格定义用户需求,并采用数学推演的方法证明需求定义的性质,对于复杂的应用问题,尽管无法验证整个需求定义的完整性,但仍有可能为避免某些要点的疏漏而建立数学断言,然后予以形式证明或反驳。
  • 形式化规格说明语言包括严格的语法定义和语义定义,以及一系列的数学推演规则。这些规则不仅说明了某些数学性质在软件规格说明中是否成立,也说明了软件实现与软件规格说明之间的满足关系。
  • 形式化方法的主要优越性在于它能够数学地表述和研究应用问题及其软件实现。但是,它要求开发人员具备良好的数学基础。用形式化语言书写的大型应用问题的软件规格说明往往过于细节化,并且难于为用户和软件设计人员所理解。
  • 实用性:
    • 形式化方法与图形语言机制相结合。为图形语言机制赋予形式化的语法和语义,从而兼具了图形表示的直观、简洁,以及形式化方法的严谨、精确等优点。
    • 用CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具支持形式化软件开发。CASE工具不仅可以简化描述工作,而且可以利用自动证明技术,帮助开发人员验证软件的数学性质。

净室软件工程(CSE)

  • 软件开发的一种形式化方法

  • 使用盒结构归约进行分析和建模,并且将正确性验证作为发现和排除错误的主要机制,使用统计测试来获取认证软件可靠性所需要的信息。

  • CSE强调在规约和设计上的严格性,以及使用基于数学的正确性证明来对设计模型的每个元素进行形式化验证。

  • CSE的理论基础是函数理论和抽样理论,所采用的技术手段主要有以下4个方面:

    1. 统计过程控制下的增量式开发。
    2. 基于函数的规范、设计。CSE按照函数理论定义了三种抽象层次,分别是行为视图、有限状态机视图和过程视图。规范从一个外部行为视图(称为黑盒)开始,然后被转化为一个状态机视图(称为状态盒),最后由一个过程视图(明盒)来实现。盒结构是基于对象的,并支持软件工程的关键原则,即信息隐藏、接口与实现分离。
    3. 正确性验证。正确性验证是CSE的核心,正是由于采用了这一技术,软件质量才有了极大的提高。
    4. 统计测试和软件认证。
  • 主要缺点:

    • 对开发人员要求较高,CSE要求采用增量开发,盒结构和统计测试方法,开发人员必须经过强化训练才能掌握。
    • 正确性验证比较困难,且比较耗时。
    • 不进行传统的模块测试不现实。

8.2.2 逆向工程

逆向工程是设计的恢复过程。

1.相关概念

  1. 重构
  2. 设计恢复
  3. 再工程
  4. 正向工程

2. 完备性

  • 逆向工程的完备性可以用在某一个抽象层次上提供信息的详细程度来描述。
  • 逆向工程过程应该能够导出过程的设计模型(实现级,一种底层的抽象)、程序和数据结构的信息(结构级,稍高层次的抽象)、对象模型、数据和控制流模型(功能级,相对高的层次)和UML状态图和部署图(领域级,高层抽象)
  • 逆向工程不仅应用于软件开发,也应用于软件维护。

8.3 软件开发模型

参考

8.3.1 传统软件开发模型概述

软件开发模型大体上可分为三种类型:

  • 第一种是以软件需求完全确定为前提的瀑布模型;
  • 第二种是在软件开发初始阶段只能提供基本需求时采用的迭代式或渐进式开发模型,例如,喷泉模型、螺旋模型、统一开发过程和敏捷方法等;
  • 第三种是以形式化开发方法为基础的变换模型。

1. 瀑布模型

特点:

  • 每个阶段执行一次,线性顺序的软件开发模型
  • 需求分析和设计特别重要

2.演化模型

演化模型主要针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在调用原型的过程中提出的反馈意见和建议,对原型进行改进,获得原型的新版本,重复这一过程,直到演化成最终的软件产品。

特点:

  • 先一个原型,根据用户反馈,再反复步骤迭代

3.螺旋模型

螺旋模型=瀑布模型+演化模型

螺旋模型沿着螺旋线进行若干次迭代,每次迭代都包括制订计划、风险分析、实施工程和客户评估4个方面的工作。螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应。因此,它特别适用于庞大、复杂并具有高风险的系统。

特点:

  • 严格的风险识别、风险分析和风险控制,将会大大消耗人力、资源
  • 软件建设周期长

4.喷泉模型

5.变换模型

6.智能模型

7.V模型

  • V 模型是在快速应用开发模型的基础上演变而来的

8.3.2 快速应用开发(模型)

1.RAD基本思想

  1. 让用户更主动地参与到系统分析、设计和构造活动中来。
  2. 将项目开发组织成一系列重点突出的研讨会,研讨会要让项目投资方、用户、系统分析师、设计人员和开发人员一起参与。
  3. 通过一种迭代的构造方法,加速需求分析和设计阶段。
  4. 让用户提前看到一个可工作的系统。

2.RAD的开发阶段

  1. 业务建模。
  2. 数据建模。
  3. 过程建模。
  4. 应用生成。
  5. 测试与交付。

3.RAD的特点

  1. 模块化要求比较高,RAD采用基于构件的开发方法,复用已有的程序结构。
  2. 开发者和客户必须在很短的时间完成一系列的需求分析,任何一方配合不当,都会导致 RAD 项目失败。
  3. RAD只能用于管理信息系统的开发,不适合技术风险很高的情况。例如,当一个新系统要采用很多新技术,或当新系统要与现有系统有较高的互操作性时,就不适合使用RAD。

8.3.3 统一过程(模型)

  • 统一过程(Unifed Process,UP)是一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。
  • UP是基于构件的,在为软件系统建模时,UP使用的是 UML。

与其他软件过程相比,UP具有三个显著的特点:

  1. 用例驱动。
  2. 以架构为中心。
  3. 迭代和增量。

1.RUP概述

2.初始阶段

初始阶段的任务是为系统建立业务模型并确定项目的边界

初始阶段的实现过程如下:

  1. 明确项目规模。建立项目的软件规模和边界条件,包括验收标准;了解环境及重要的需求和约束,识别系统的关键用例。
  2. 评估项目风险。软件过程主要关心的是软件开发的已知方面,只能准确描述、计划、分配和评审那些已经知道将要完成的事情。风险管理则主要关心未知方面。在基于RUP的选代式软件过程中,很多决策要受风险决定。要达到这个目的,开发人员需要详细了解项目所面临的风险,并对如何降低或处理风险有明确的策略。
  3. 制订项目计划。估计整个项目的总体成本、进度和人员配备。综合考虑备选架构,评估设计和自制/外购/复用方面的方案,从而估算出成本、进度和资源。在这个过程中,要通过对一些概念的证实来证明可行性,可以采用可模拟需求的模型形式或用于探索高风险区的初始原型。初始阶段的原型设计工作应该限制在确信解决
  4. 阶段技术评审。初始阶段结束时要进行一次技术评审,检查初始阶段的目标是否完成并决定继续进行项目还是取消项目。在评审过程中,需要考虑项目的规模定义、成本和进度估算是否适中、估算根据是否可靠、需求是否正确、开发方和用户方对软件需求的理解是否达成一致、是否已经确定所有风险且有针对每个风险的规避策略等问题。

3.细化阶段

  1. 确定架构。确保架构、需求和计划足够稳定,充分减少风险,从而能够有预见性地确定开发所需的成本和开发进度。通过处理架构中的关键场景,建立一个已确定基线的架构,并验证其将在适当时间、以合理的成本支持系统需求。
  2. 制订构建阶段计划。为构建阶段制订详细的过程计划,并为其建立基线。
  3. 建立支持环境。包括开发环境、开发流程、支持构建团队所需的工具和自动化/半自动化支持。
  4. 选择构件。评估现有的构件库和潜在构件,充分了解自制/外购/复用决策,以便有把握地确定构建阶段的成本和进度。集成所选构件,并按主要场景进行评估。
  5. 阶段技术评审。评审时,需要检验详细的系统目标和范围、架构的选择,以及主要风险的解决方案。

在细化阶段,可执行的原型依赖于项目的范围、规模、风险和先进程度。必须至少处理初始阶段中识别的关键用例,因为关键用例通常揭示了项目的主要技术风险。

4.构建阶段

  • 在构建阶段,要开发所有剩余的构件和应用程序功能,把这些构件集成为产品,并进行详细测试。
  • 构建阶段的主要任务是通过优化资源和避免不必要的报废和返工,使开发成本降到最低;完成所有所需功能的分析、开发和测试,快速完成可用的版本;确定软件、场地和用户是否已经为部署软件做好准备。
  • 构建阶段结束时也要进行技术评审,评审产品是否可以在试环境中进行安装和运行。

5. 移交阶段

  • 移交阶段的主要任务是进行测试,制作产品发布版本:对最终用户支持文档定稿:按用户的需求确认新系统:培训用户和维护人员;获得用户对当前版本的反馈,基于反馈调整产品,例如,进行调试、性能或可用性的增强等。移交阶段结束时也要进行技术评审,评审目标是否实现、是否应该开始演化过程、用户对交付的产品是否满意等。

8.3.4 敏捷方法(模型)

1.敏捷宣言

敏捷方法强调:

  • 让客户满意和软件尽早增量发布;
  • 小而高度自主的项目团队;
  • 非正式的方法;
  • 最小化软件工程工作产品以及整体精简开发。

主要敏捷方法有:

  • 极限编程
  • 自适应软件开发
  • 水晶方法
  • 特性驱动方法
  • 动态系统开发方法
  • 测试驱动方法
  • Scrum
  • 敏捷数据库技术
  • 精益软件开发

2.敏捷方法的特点

难以实施的几个方面:

  1. 客户参与往往依赖于客户参与的意愿和客户自身的代表性。
  2. 团队成员的性格可能不适合激烈的投入,可能无法做到与其他成员之间的良好沟通。
  3. 对系统的变更做出优先级排序可能是极端困难的。
  4. 维护系统的简洁性往往需要额外的工作,但迫于时间表的压力,可能没有时间执行系统简化过程。

敏捷方法主要适用于以下场合:

  1. 小团队小项目
  2. 项目经常发生变更。敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合。
  3. 高风险项目的实施。
  4. 从组织结构的角度看,组织结构的文化、人员、沟通性决定了敏捷方法是否适用。与这些相关联的关键成功因素有组织文化必须支持谈判、人员彼此信任、人少但是精干、开发人员所做的决定得到认可、环境设施满足团队成员之间快速沟通的需要

3.极限编程(XP方法)

特点:

  1. 在更短的周期内,更早地提供具体、持续的反馈信息。
  2. 迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
  3. 依赖于自动测试程序来监控开发进度,并尽早捕获缺陷。
  4. 依赖于口头交流、测试和源程序进行沟通。
  5. 倡导持续的演化式的设计。
  6. 依赖于开发团队内部的紧密协作。
    7 尽可能达到程序员短期利益和项目长期利益的平衡。

XP的5个原则是:

  • 快速反馈
  • 简单性假设
  • 逐步修改
  • 提倡更改
  • 优质工作。

而在XP方法中,贯彻的是"小步快走"的开发原则,因此工作质量决不可打折扣,通常采用测试先行的编码方式来提供支持。

8.4 软件开发环境与工具

软件开发环境应支持多种集成机制,例如:

  • 平台集成
  • 数据集成
  • 界面集成
  • 控制集成
  • 过程集成等。

软件开发环境应支持小组工作方式,并为其提供配置管理,环境的服务可用于支持各种软件开发活动,包括分析、设计、编程、调试和文档等。

8.4.1 软件开发环境

软件开发环境的分类

  1. 按软件开发模型与开发方法分类,有支持瀑布模型、演化模型、螺旋模型和喷泉模型等不同模型,以及结构化方法、面向对象方法等不同方法的软件开发环境。
  2. 按功能与结构特点分类,有单体型、协同型、分散型和并发型等多种类型的软件开发环境。
  3. 按应用范围分类,有通用型和专用型软件开发环境。其中,专用型软件开发环境与应用领域有关。
  4. 按开发阶段分类,有前端开发环境(支持系统规划、分析、设计等阶段的活动)、后端开发环境(支持编程、测试等阶段的活动)、软件维护环境和逆向工程环境等。

集成机制

集成机制根据功能的不同,可划分为:

  • 环境信息库
    • 分析文档、设计文档和测试报告等;
    • 另一类是环境提供的支持信息,例如,文档模板、系统配置、过程模型和可复用构件等
  • 过程控制与消息服务器:控制集成使各工具之间进行并行通信和协同工作
  • 环境用户界面:

集成计算机辅助软件工具

ICASE的最终目标是实现应用软件的全自动开发,即开发人员只要写好软件的需求规格说明书,ICASE 就能自动完成软件开发工作,即自动生成供用户直接使用的软件和有关文档。

类似通过数据库表的设计自动生成java的类,MVC层这些,直接可以使用的程序代码和相关文件的工具,比如mybatisplus。

8.4.2 软件开发工具

软件工具的分类

开发工具的选择

快速开发工具

8.5 软件过程管理

8.5.1 软件能力成熟度模型(CMM)

关键域的分类

8.5.2 软件过程评估

总结

相关推荐
yangzhi_emo5 小时前
ES6笔记4
前端·笔记·es6
星梦清河6 小时前
宋红康 JVM 笔记 Day16|垃圾回收相关概念
java·jvm·笔记
誰能久伴不乏6 小时前
Modbus 速查与实战笔记(功能码、帧结构、坑点)
笔记
easy20206 小时前
从机器学习的角度实现 excel 中趋势线:揭秘梯度下降过程
笔记·机器学习·线性回归
Hóng xīng qiáo7 小时前
swVBA自学笔记014、Lisp适合对SolidWorks进行二次开发吗 ?
开发语言·笔记·lisp
Magnetic_h8 小时前
【iOS】block复习
笔记·macos·ios·objective-c·cocoa
带娃的IT创业者8 小时前
《AI大模型应知应会100篇》第68篇:移动应用中的大模型功能开发 —— 用 React Native 打造你的语音笔记摘要 App
人工智能·笔记·react native
wan5555cn15 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
雁于飞17 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github