软件工程 张海藩 期末/考研知识点

软件工程(详细版)

 根据《软件工程导论》第六版 张海藩 所编写

第一章 概述

1. 软件的概念

软件 = 程序 + 数据 + 文档

程序 是能够完成预定功能和性能的可执行的指令序列。

数据 是使程序能够适当地处理信息的数结构

文档 是开发、使用和维护程序所需要的图文资料

2. 软件的特点

软件是一个抽象的逻辑产品

  • 复杂的脑力劳动的结果

  • 没有明显的制造过程

  • 不会磨损,老化

  • 维护困难

3. 软件危机

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

软件危机包括一下两个问题:

  • 如何开发软件,以满足对软件日益增长的需求;

  • 如何维护数量不断膨胀的已有软件。

软件危机的一些典型表现:(估不准、不满意、靠不住、难维护、缺文档、成本高、需求大

  • 软件开发成本和进度估计常常很不准确

  • 用户对”已完成“的软件系统不满意

  • 软件产品的质量往往靠不住

  • 软件常常是不可维护的

  • 软件通常没有适当的文档资料

  • 软件成本在计算机系统总成本中所占比例逐年上升

  • 软件生产率的提高跟不上硬件和需求的发展,供不应求

4. 软件危机产生的原因

  • 软件本身的特点

    • 智力密集型的复杂的逻辑产品,规模庞大。

    • 功能和实现的多样性,能见度低。

  • 开发与维护的方法不正确

    • 软件与程序混为一谈。

    • 没有软件生命同期(即生产与维护的阶段性)的概念。

5. 消除软件危机的途径

  • 正确地认识计算机软件,即软件是程序、数据及相关文档的完整集合

  • 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目

  • 应该推广使用从实践中总结出来的成功的技术和方法,并不断地探索和研究

  • 应该开发和使用更好的软件工具。

6. 软件工程的概念、方法学

(1)概念:软件工程是知道计算机软件开发和维护的一门工程学科

采用工程的概念、原理、技术和方法开发与维护软件,把经过实践考研而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发发出高质量的软件并有效地维护它,这就是软件工程

管理+技术----------> 开发+维护

一个基本目标:经济地开发发出高质量的软件并有效地维护它。

(2)方法学:通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。

包含三个要素:工具、方法、过程

  • 方法:是完成软件开发的各项任务的技术方法,回答”怎样做“的问题

  • 工具:是为了使用方法而提供的自动或半自动的软件工程支撑环境

  • 过程:是为了获得高质量的软件所需要完成的一系列任务的任务框架

1).传统方法学 --------又称生命周期方法学或结构化范型

  • 分阶段并顺序完成

  • 每阶段结束ian进行技术审查和管理复查(文档资料)

  • 保证了软件的质量,提高了软件的可维护性,大大提高了软件开发的成功率与生产率。

2).面向对象方法学

  • 把对象作为融合了数据及在数据上的操作行为的统一的软件构件

  • 把所有对象划分成类,每个类包括数据和操作

  • 继承

  • 用消息通信

面向对象方法=对象+类+继承+用消息通信

  • 封装:对象彼此间仅能通过发送消息互相联系

  • 三大特性:继承、封装、多态

使用最广泛的是传统方法学和面向对象方法学。

7. 软件工程的基本原理

  1. 用分阶段的生命周期计划进行严格管理。

  2. 坚持进行阶段评审。(尽早现错)

  3. 实行严格的产品控制。(配置管理)

  4. 采用现代程序设计技术。

  5. 结果应能清楚地审查。(质量标准)

  6. 开发小组的人员应该少而精。

  7. 承认不断改进软件工程实践的必要性。(技术创新)

8. 软件生命周期

指软件从定义、开发、使用和维护,到废弃的过程。(问可需总,详编综维)

1)问题定义:要解决什么问题

2)可行性研究:对问题有可行的办法吗

3)需求分析:软件系统要做什么,有什么功能

4)总体设计:如何解决这个问题

​    1.考虑几种可能的解决方案

​    2.设计软件结构,即确定程序由哪些模块组成一级模块间的关系

5)详细设计:怎样能具体实现这个系统

6)编码和单元测试:写出正确的容易理解的、容易维护的程序模块

7)综合测试:通过各类测试使软件达到预定要求

8)软件维护:通过各种必要的维护活动使系统持久的满足用户的要求

​    维护类型:改正性维护、适应性维护、完善性维护、预防性维护。

9. 软件过程

软件工程过程是为了获得高质量的软件所需要完成的一系列任务的任务框架 ,它规定了完成各项任务的工作步骤。

包括----可行性研究、需求分析、软件设计、编码、软件测试、软件维护-----概括为    **who、when、what、how**

通常使用**生命周期模型**描述软件过程。生命周期模型也叫**过程模型**

1)瀑布模型

规范的,基本上是文档驱动的模型,问题是最终开发出的软件产品可能并不是用户真正需要的。

(1)阶段的顺序性和依赖性

(2)推迟实现的观点

(3)基于文档驱动(阶段文档的书写和评审)的质量保证的观点

(4)适用于有一个稳定的产品定义和很容易被理解的技术解决方案时

特征:

- 接受上一阶段的结果作为本阶段的输入。
- 利用这一输入实施本阶段应完成的活动。
- 对本阶段的工作进行评审。
- 将本阶段的结果作为输出,传递给下一阶段

缺点:

- 缺乏灵活性,难以适应需求不明确需求经常变化的软件开发。
- 开发早期存在的问题往往要到交付时才发现,维护代价大。

 2)快速原型模型

​        所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能一般是最终产品能完成的功能的子集。

​    用途是获知用户的真正需求,需求一旦确定原型将被抛弃,广泛使用第四代语言(4GL)

特征:

  • 用户驱动

  • 尽快展现未来面貌

  • 在使用中进行需求分析

  • 贴近用户,分析确切

演化模型

可以在获取了一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,称之谓原型 演化模型的开发过程就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程

3)增量模型

每个线性序列产生软件的一个可发布的增量版本,后一个版本是对前一版本的修改和补充

增量模型融合了瀑布模型基本成分演化模型的迭代特征。

不同于瀑布模型与原型模型,分批逐步向用户提交产品,体系结构必须是开放的。

特征:

  • 模块化,组件化

  • 适用于需求经常变化、边用边开发的系统

增量模型能有计划地管理技术风险,如早期增量版本中避免采用尚未成熟的技术。

4)螺旋模型

是瀑布模型和演化模型的结合,并增加了风险分析

使用原型及其他方法来降低风险,可看作每个阶段之前都增加了风险分析过程的快速原型模型;属于风险驱动型

四个象限:

  • 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。

  • 风险分析:评价所选的方案,识别风险,消除风险。

  • 工程实施:实施软件开发,验证工作产品。

  • 客户评估:评价开发工作,提出修正建议。

特征:

  • 适用于内部开发的大规模项目

5)喷泉模型

特征:

  • 适用于面向对象方法。

  • 迭代:始终使用同一的”对象“概念,表现出步骤的反复迭代(求精)。

  • 无间隙:概念和方法的一致性保证了各活动之间的”无缝“衔接。

6)Rational统一过程(RUP)

(1).最佳实践:

  • 基于UML的面向对象软件开发模型

  • 迭代式开发

  • 管理需求:用例分析来获取需求,并由它们驱动设计和实现

  • 使用基于构件的体系结构

  • 可视化建模

  • 验证软件质量

  • 控制软件变更

(2)开发生命周期

  • a.纵轴代表核心工作流

    • 核心过程工作流

      • 业务建模

      • 需求

      • 分析与设计

      • 实现

      • 测试

      • 部署

    • 核心支持工作流

      • 配置与变更管理

      • 项目管理

      • 环境

  • b.横轴代表工作阶段

    • 初始阶段:建立业务模型,定义最终产品视图,确定项目范围

    • 精华阶段:设计并确定系统的体系结构,指定项目计划,确定资源需求

    • 构建阶段:开发出所有构件和应用程序,把它们即称为客户需要的产品,并且详尽地此时所有的功能

    • 移交阶段:把开发出的产品提交给用户使用

  • RUP迭代式开发:采用迭代和渐增的方式,每次循环都经历一个完整的生命周期,每次循环结束都向用户交付产品的一个可运行的版本。

7)敏捷过程Agile

  • 讲究高效工作和快速响应变化

  • 敏捷软件开发宣言

    • 个体和交互胜过过程和工具

    • 可工作的软件胜过面面俱到的文档

    • 客户合作胜过合同谈判

    • 响应变化胜过遵循计划

  • 包括 XP(极限编程)、Scrum、Sprint等等

8)微软过程

微软软件生命周期

  • 规划阶段:市场调研------项目的目标得到认可

  • 设计阶段------软件设计完成

  • 开发阶段------代码开发完成

  • 稳定阶段------可发布版本准备就绪

  • 发布阶段-----最终产品发布

第二章 可行性研究

1. 可行性研究

概述:以最小的代价最短的时间内确定该项目是否可能开发 、是否值得开发,从而能够避免盲目投资,减少不必要的损失

可行性研究的主要内容:

  • 技术可行性

  • 经济可行性

  • 操作可行性

  • 战略可行性

  • 计划可行性

  • 社会可行性

  • 市场可行性

2.可行性研究的过程

  1. 复查系统规模和目标

  2. 研究正在使用的系统(如果存在的话)

  3. 导出新系统的高层逻辑模型(忽略细节)

  4. 进一步定义问题,直到提出的逻辑模型完全符合系统的目标

  5. 导出和评价供选择的解法

  6. 推荐行动方针,即确定是否要将项目进行下去。如果要的话,用什么解决方案,并说明理由

  7. 草拟开发计划(进度、资源、成本)

  8. 书写文档提交审查

3.系统流程图

是描绘物理系统的传统工具。其基本思想是用图形符号以黑盒子行式 描绘系统里的每个部件(程序、文件、数据库、表格、人工过程等)表达的是数据在系统各部件之间流动的情况,而不是对数据进行加功处理的控制过程;尽管系统流程图的某些符号和程序流程图符号形式相同,但它却是物理数据流图而不是程序流程图。

系统流程图中的常用符号

4.数据流图(DFD)

描绘做什么,而不是怎样做。

描绘信息流和数据从输入移动到输出结构中所承受的交换;没有物理部件,只有逻辑过程。

基本符号:

其中的数据存储和数据流都是数据,仅仅所处状态不同。

怎样画数据流图:

  • 从问题描述中提取数据流的4种成分

  • 考虑源点和汇点(可能重合,可分可合)

  • 考虑处理

  • 考虑数据流和数据存储

用途:

  • 作为信息交流的工具:功能级数据流图来描绘系统的整体逻辑概貌。

  • 作为分析和设计的工具

分层数据流图自顶向下 逐步求精

5.数据字典(DD)

数据字典是描述数据的信息的集合,是对系统中使用的所有的数据元素的定义的集合。

数据字典可以通过人工卡片或者CASE工具来建立、组织和管理。

1)数据字典内容:

  • 数据流

  • 数据流分量,即数据元素

  • 数据存储

  • 处理 IPO图或PDL

IPO图:输入处理输出图

IPO图是一种结构化分析和设计方法,用于描述软件系统的输入、处理和输出。IPO代表输入(Input)、处理(Processing)和输出(Output),图表展示了系统的三个主要组成部分及其之间的关系。IPO图通常用于软件工程师进行需求分析和设计,以确保系统能够正确地处理输入并生成正确的输出。此外,IPO图还可以用于测试和验证系统的功能是否符合要求。

PDL:程序描述语言

PAD:问题分析图

2)基本类型:

  • 顺序:以确定次序链接两个或多个分量

  • 选择:从两个或多个kennel的元素中选取一个

  • 重复:把指定的分量重复零次或多次

  • 可选:即一个分量是可有可无的

符号表示:

  • =:等价于或定义为

  • +:和 即 联接两个分量

  • []:或 ,从方括号内列出的若干分量重选择一个

  • {}:重复,即重复花括号内的分量

  • ( ):可选,即圆括号内的分量可有可无

  • 上下限、左右限,表示重复的次数

3)用途:作为分析阶段的工具

4)实现:数据字典卡片(名字,别名,描述,定义,位置)

6.成本/效益分析

目的:从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织负责人正确地做出是否投资于项目的决定。

成本估计:

  • 代码行技术 (每行代码平均成本x行数)

  • 任务分解技术 (分解任务分别计算成本,再累加成本)

  • 自动估计成本技术 (自动评估成本软件)

方法:

  • 货币的时间价值

  • 投资的回收期

  • 纯收入

  • 投资回收率

第三章 需求分析

1.概述 准确回答“系统必须做什么”

弄清用户对目标软件系统在功能和非功能(性能、环境、界面、接口、设计约束等)方面的全面确切要求,写出最终的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值