软件工程part01-软件工程概述及软件过程


在这里插入图片描述

课程简介

“软件工程”课程是软件工程专业的核心课程,是用工程化方法指导软件开发、维护与管理的一门综合性课程,内容涉及软件分析、设计、实现、维护及项目管理相关的理论、技术、方法和CASE工具。

考试大纲

重点掌握软件工程的基本概念基本原理
⚫结合当前我国软件企业对软件开发的需求,掌握并能运用软件工程的基本原理和实用的软件开发技术和基本的管理技术
了解软件工程学科的知识结构

⚫(一) 软件工程概念与软件工程的基本要素
⚫(二) 软件过程
⚫(三) 软件需求与软件需求规约
⚫(四) 系统规约及软件设计
⚫(五) 软件测试
⚫(六) 软件工程管理
⚫(七) 软件质量、质量特征以及软件质量保证
⚫(八) 计算机辅助软件工程CASE 工具与环境

在这里插入图片描述

软件工程概念与软件工程的基本要素

1.1 软件与软件危机

软件的概念

【软件】:程序、数据及开发、使用和维护程序所需要的所有文档。
其中

程序:计算事务的处理对象和处理规则的描述,为指令的集合;
数据:程序加工、处理的对象。
文档:有关计算机程序功能、设计、编制、使用的文字或图形资料。

特点:软件是一个逻辑产品

软件的分类

❖ 软件功能划分:系统软件;支撑软件;应用软件
❖ 软件工作方式划分:实时处理;分时处理;交互式;批处理
❖ 软件规模划分:微型;小型;中型;大型……
❖ 软件服务对象范围划分:定制软件;通用软件
❖ 软件失效影响划分:关键软件;非关键软件
❖ 收费模式分:商业软件;共享软件(有限使用);免费软件
❖ 源代码是否公开:闭源软件(源代码不公开);开源软件(源代码公开);自由软件(开源、自由使用)

软件危机

1968年,北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题 ,正式提出并使用了“软件工程”的概念,标志软件工程正式诞生。
【软件危机】:

在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机包含两方面的问题:

如何开发软件,以满足不断增长,日趋复杂的需求。
如何维护数量不断膨胀的软件产品

1.2 软件工程

软件工程定义

采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的技术方法结合起来,来指导软件的开发与维护。
软件工程技术的两个明显特点:

强调规范化
强调文档化

软件工程维度

软件工程的框架是由

软件工程目标、
软件工程活动
软件工程原则
三个方面的内容构成的。
在这里插入图片描述

软件工程目标维度

目标:生产具有正确性、可用性以及开销适宜的软件产品。
正确性:软件产品达到预期功能的程度。
可用性:软件基本结构、实现及文档为用户可用的程度。
合算性:软件开发、运行的整个开销满足用户要求的程度。
决定了:软件过程、过程模型和工程方法的选择。

软件工程活动维度

活动:生产一个最终满足需求且达到工程目 标的软件产品所需要的步骤。
1、需求问题分析:需求获取和定义,又称软件需求规约。需求分析:生成软件功能规约。
2、设计概要设计:建立整个软件的体系结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义等。详细设计:产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。
3、实现:把设计结果转换为可执行的程序代码。
4、确认:贯穿整个开发过程,对完成的结果进行确认,保证产品满足用户的要求。
5、支持: 修改和完善活动。

软件工程的四条基本原则:

采取适宜的开发模型:控制易变的需求;
采用合适的设计方法:需要软件模块化、抽象与信息隐藏、局部化、一致性以及适应性等,需要合适的设计方法的支持。
提供高质量的工程支持:软件工具和环境对软件过程的支持。
重视开发过程的管理:有效利用可用的资源、生产满足目标的软件产品、提高软件组织的生产能力等。

软件工程方法学

在软件生命周期全过程中使用的一整套技术、方法和工具的集合称为方法学。

方法 : 完成软件开发的各项任务(分析、设计等)的技术方法,回答“怎样做”的问题。
过程 :为了获得高质量的软件所需要完成的一系列任务的框架,规定了完成各项任务的工作步骤。
工具 : 为过程、方法提供的自动的或半自动的软件工程支撑环境。

1.3 软件生存周期过程

在这里插入图片描述

基本过程

生产直接相关活动活动

1.获取过程:为需方而定义的活动,启动,招标,合同,对供方监督,验收等 ;
2.供应过程:为供方而定义的活动,启动,准备投标,签订合同,编制计划,执行,交付和完成;
3.开发过程:为开发方而定义的活动:需求、设计、编码、测试、安装、验收;
4.运作过程:为操作方而定义的活动:运行测试,系统运行,用户支持 ;
5.维护过程:为维护方而定义的活动:问题和修改分析,修改实现,维护评审/验收,迁移,软件退役

支持过程

在这里插入图片描述

组织过程

在这里插入图片描述

1.4 软件生存周期模型

软件生存周期模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。亦称为:软件开发模型,软件开发过程模型。

1.4.1瀑布模型

在这里插入图片描述

在这里插入图片描述

阶段划分与基本任务
  1. 问题定义:通过对系统实际用户和使用部门负责人的访问调查,明确要解决问题性质、工程目标和规模。
  2. 可行性研究:导出系统的高层逻辑模型(数据流图),并在此基础上更准确、更具体的确定工程的规模和目标;更准确的估计系统的成本和效益。
  3. 需求分析:和用户密切配合,充分交流信息,以得到用户确认的系统逻辑模型(数据流图、数据字典及简要的算法表示的系统逻辑模型)
  4. 总体设计:
    1)提出几种可能的解决方案,权衡各种方案的利弊,并推荐出最佳方案;
    2)设计软件的结构,确定软件的模块构成及模块之间的关系。
  5. 详细设计:把解决问题的方案具体化,设计出程序的详细规格说明,并包含必要的细节信息。
  6. 编码和单元测试:将详细设计的结果翻译成高级程序设计语言的源程序,并仔细测试编写的每一个模块。
  7. 综合测试:通过各类型的严格测试与调试,使软件达到预定的要求。
    1)集成测试:各模块装配后测试;
    2)验收测试:按规格说明书。
  8. 软件维护:通过必要的维护工作使得系统持久的满足用户的需要:
    1)改正性维护;2)适应性维护;
    3)完善性维护;4)预防性维护

1.4.2 增量模型(递增模型、增殖模型)

开发策略:

分子系统(组件)逐次开发,直到完成整个系统。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

开发过程:

定义总体需求
确定开发增量
设计系统体系架构
开发系统增量
最终系统

主要优点:

核心功能率先开发,降低项目失败风险;
软件可以逐次交付,用户早日使用并获得收益;
早期增量可作为原型,有助于获取后续增量的需求。

主要缺点:

系统体系架构必须最先确定且保持稳定

瀑布模型或快速原型模型目标是一次就把一个满足所有需求的产品提交给用户。
增量模型把整个软件产品分解成许多个增量构件,分批地逐步向用户提交产品。

1.4.3 演化模型

开发策略:

多次迭代,由粗到细、逐步求精。

在这里插入图片描述

主要优点:

核心功能率先开发;
软件逐次交付,用户早日使用并获得收益;
用户反馈导向下次迭代方向。

主要缺点:

设计缺乏整体性,复用上次
迭代开发成果需要更多代价

增量模型VS演化模型

在这里插入图片描述

1.4.4 原型模型(快速成型模型)

开发策略:

原型(Prototype)是软件系统的初期版本, 用于展示、验证设计方案,发现存在的问题和寻找可能的解诀方法。
在这里插入图片描述

主要优点:

启发和验证系统需求;
探索和验证设计方案;
抛弃 or 最终产品发布。

主要缺点:

忽略健壮性、可靠性、性能等非功能需求;
缺乏必要文档,不利维护。

适用领域:

需求不确定领域

1.4.5 螺旋模型

开发策略:

螺旋模型= 瀑布模型+ 原型模型+ 风险分析
在这里插入图片描述

主要优点:

分阶段构造;
风险驱动;
客户全程参与。

主要缺点:

开发周期长。

应用领域:

大型高风险软件。

1.4.6 喷泉模型

在这里插入图片描述

主要特点:

主要用于支持面向对象开发过程,体现了软件创建所固有的迭代和无间隙的特征

喷泉模型的优点:

喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

喷泉模型的缺点:

由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

举例:

某企业的App开发项目采用喷泉模型进行开发,开发团队每2周进行一次迭代开发,每次迭代前会对需求进行重新评估和调整,以确保最终产品符合用户需求。

1.4.7 Rational 统一过程(RUP)

在这里插入图片描述

RUP核心工作流

RUP包含6个过程工作流(Process Workflow)和3个支持工作流(Supporting Workflow)。

1.商业建模(Business Modeling):对系统的商业环境和范围进行建模,确保所有参与人员对开发系统有共同的认识。
2.需求分析(Requirements):定义系统功能及其他非功能需求,成果是软件需求说明书(SRS)。
3.分析与设计(Analysis and Design):根据系统需求给出实现方案,成果为软件设计说明书(SDS)。
4.实施(Implementation):定义代码的组织结构、实现代码、单元测试、系统集成
5. 测试(Test) :验证各子系统的交互和集成。测试分别从可靠性、功能性和系统性能来进行。
6. 部署(Deployment):成功的生成版本并将软件分发给最终用户
7. 配置和变更管理(Configuration and Change Management):管理并行开发、分布式开发;自动化创建工程;记录产品修改原因、时间、人员、审计记录 。
8. 项目管理(Project Management):为计划、执行和监控软件开发项目提供有效支持
9. 环境(Environment):为组织提供过程管理和工具的支持。

RUP的四个阶段

RUP将软件的生命周期分成多个单独的开发周期,
并划归为初始、细化、构造和交付四个阶段。 。

  1. 初始阶段(Inception)

主要任务是构思未来系统的概貌、确定项目的必要性和可行性。
需要建立商业用例(Business Case),建立基本的用例模型、项目计划、初始风险评估和项目描述。
该阶段的焦点是业务建模和需求

  1. 细化阶段(Elaboration)

主要任务是进一步分析问题领域,捕获系统大部分的功能需求,建立系统的基本框架,找出项目实施会遭遇的风险和应对措施,确定开发的技术措施,确定资金和资源的配置,制定项目的开发计划。
细化阶段约占整个项目开发过程1/5时间。当开发人员能够精确估计对每一个用例需要投入的人力,重要的风险已经被确认,并有应对方法时,细化阶段就可以结束了。
该阶段的焦点是需求、分析和设计工作流

  1. 构造阶段(Construction)

主要任务是完成所有的需求、分析和设计。所有剩余的构件和应用程序功能被并发并集成为产品,所有的功能被详细测试。

  1. 交付阶段(Transition)

主要任务是将开发的软件发布给用户,在用户的实际生产环境安装部署开发好的软件,进行用户培训,获取用户的反馈意见,并对软件做必要的调整和优化

总结

本系列博客是软件工程的相关博客,本文是第一部分软件工程概述及软件过程。

猜你喜欢

转载自blog.csdn.net/m0_38139250/article/details/129924836