软件工程(笔记)

一、绪论

软件是计算机系统中与硬件相互依存的另一部分,它保存程序、数据及其相关文档的完整集合。

是按事先设计的功能和性能要求执行的指令序列;

是使程序能正常操纵信息的数据结构,具体来说包括使系统初始运行所必须的数据如数据库和表的结构及初始的数据,系统运行中所需要的各种代码表、各种标志等。

是与程序开发,维护和使用有关的图文材料(是有关于管理、开发、用户、维护人员使用的文档)

  • 规模、复杂性、生产率

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做软件危机

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

用户对“已完成的”软件系统不满意的现象经常发生

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

软件常常是不可维护的

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

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

软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

软件开发无计划性,项目没有被很好地理解;计划不周,最终导致进度拖延,经费预算上升。

软件需求不充分,开发的软件不能满足用户的需求。

软件开发过程无规范,没有充分的文档资料。

软件可靠性缺少度量的标准,质量无法保证。

软件难以维护,易升级。

组织管理——工程项目管理方法

技术措施——软件开发技术与方法、软件工具

按工程化的原理和方法组织软件开发是软件开发中的问题的一个主要出路。

软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件和有关技术及管理方法

把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件

软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科

方法、过程、工具

把软件当做一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”

确保软件产品质量和开发效率的原理的最小集合

个性化方法 – 机构化方法 – 面向对象方法 – 软件复用

过程式编程范型:程序 = 数据结构 + 算法

面向对象编程范型:程序 = 对象 + 消息

基于构件技术的编程范型:程序 = 构件 + 架构

结构化分析 – 结构化设计 – 面向过程的编码 – 软件测试

面向对象基本概念:对象 + 类 + 继承 + 消息通信

OO分析与对象抽取 – 对象详细设计 – 面向对象的编码和测试

领域分析和测试计划定制->领域设计->建立可复用构件库->查找并集成构件

二、软件生存周期与软件过程

一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。

软件生存周期被分为计划、开发、运行三个时期。

由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。

计划 – 需求分析 – 软件分析 – 软件设计 – 编码 (测试) – 软件测试 – 运行维护

软件工程(笔记)

“逼真”的原型可以使用户迅速做出反馈

循环回溯和迭代:非线性模型

使用快速开发工具

渐进型:对原型补充和修改获得最终系统

抛弃型:原型废弃不用

舍不得抛弃,从而影响软件质量

软件工程(笔记)

瀑布模型(顺序性、边开发边复审)+ 快速原型(迭代性)

风险分析 – 发现、控制风险

确定目标、选择方案,选定完成目标的策略

从风险角度分析该策略

启动一个开发活动

评价前一步的结果,计划下一轮的工作

软件工程(笔记)

确定形式化需求规格说明书

进行自动的程序变换

针对形式化开发记录进行测试

形式化软件开发方法

形式化需求规格说明

变换技术

程序自动生成技术

确保之前

软件工程(笔记)

线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发

用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发

每次迭代完成一个增量,可用于OO开发,适合容易分块的大型软件开发

典型迭代模型,重视风险分析,可用于OO开发,适合具有不确定性大型软件开发

软件开发与构件开发平行进行,适用于领域过程、行业的中型软件开发

形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持

形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。

描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动

基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”

:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确认业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。

制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品;

:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确认技术实现的可行性和系统架构的稳定性。提交结果包括系统结构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。

制品:补充需求分析、软件架构描述、可执行的架构原型

:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增长式开发一个可以交付用户的软件产品。

制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。

:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。

软件工程(笔记)
DFD数据流图、PSPEC加工规格说明/加工策略、STD状态转换图、DD数据字典、CSPEC控制规格说明

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换,描述对数据流进行变换的功能和子功能

软件工程(笔记)

包含数据设计、接口设计、过程设计、体系结构设计

体系结构设计是用来确定软件结构的,其描述工具是结构图,简称SC图

过程设计主要指模块内部的详细设计

软件工程(笔记)
例:在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B,当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D

软件工程(笔记)

  • 自顶向下对系统进行功能分解,画出分层DFD图

  • 由后向前定义系统的数据和加工,编制DD和PSPEC

最终写出SRS

好处:便于实现,便于使用

通常把整个系统当作一个大的加工标明系统的输入和输出,以及数据的源点和终点(统称为“外部项”)

  • 顶层DFD:

    软件工程(笔记)
  • 第三层DFD:

    软件工程(笔记)
  • 数据定义DD

  • 加工策略PSPEC

  • 需求规格说明书SRS

面向数据流设计和面向数据设计

  • 面向数据流:数据流是考虑一切问题的触发点
  • 面向数据:以数据结构作为分析与设计的基础

结构化设计的描述工具:SC图

从分析模型导出设计模型

软件工程(笔记)

一条接收路径 — 一个事务中心 — 若干条动作路径

软件工程(笔记)

软件工程(笔记)
软件工程(笔记)
软件工程(笔记)
深度:5层;宽度(广度):7层;

注意:必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计;在设计下层模块时,应考虑模块的耦合和内聚问题;使用“黑箱”技术,先把这个模块的所有下层模块定义成“黑箱”,不考虑其内部结构和实现;一个模块的直接下属模块一般在五个左右,如果直接下属模块超过10个,可设立中间层次。

在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径)

画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块

分解和细化接受分支和发送分支,完成初始的SC图

软件工程(笔记)

软件工程(笔记)

四、面向对象与UML

类和对象的关系

客观世界是有各种对象组成的

数据以及在其上的操作的封装体

类是一组客观对象的抽象

实现抽象数据类型的工具

抽象与具体的关系

组成类的每个对象都是该类的实例

实例是类的具体事物

类是各个实例的综合抽象

面向对象的基本特征

抽象、封装、继承、多态

面向对象开发的优点

可复用性、可扩展性、可维护性

通用的可视化的建模语言

目前在软件工程里主要用于系统分析与系统设计

软件生存周期:RUP(统一过程)

软件建模方式:可视化的语言

软件文档规范:文档由UML建模工具自动产生

软件人员分工:岗位界面逐渐趋向模糊

  • 类图:类以及类之间的相互关系
  • 对象图:对象以及对象之间相互关系
  • 构件图:构件及其相互依赖关系
  • 部署图:构件在各节点上的部署
  • 时序图:强调时间顺序的交互图
  • 协作图:强调对象协作的交互图
  • 状态图:类所经历的各种状态
  • 活动图:对工作流建模

用例图:需求捕获,测试依据

类、对象、构件、用例、结点、接口、包、注释

关联、泛化、依赖、实现、聚集、组合

软件工程(笔记)

  • 用例图
  • 静态图:类图、对象图
  • 实现图:构件图、部署图

  • 行为图:状态图、活动图
  • 交互图:时序图、协作图

  • 用例视图(用例图【活动图】)
    从用户角度看到的系统应有的外部功能

  • 逻辑视图(静态:类图,对象图;动态:状态图,时序图,协作图,活动图)
    描述系统的静态结构和对象间的动态协作关系

  • 进程视图(状态图、时序图、协作图、活动图、构件图、部署图)
    展示系统的动态行为及其并发性

  • 构件视图(构件图)
    展示系统实现的结构和行为特征

  • 部署视图(部署图)
    显示系统的实现环境和构件被部署到物理结构中的映射

  • 统一标准
  • 面向对象
  • 表达功能强大、可视化
  • 独立于过程
  • 易掌握、易用

软件工程(笔记)
软件工程(笔记)
软件工程(笔记)
用例之间的关系

①扩展关系

根据指定的条件,一个用例中有可能加入另一个用例的动作

如果一个用例明显地混合了两种或者两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样可能会使描述更加清晰。扩展用例为基用例添加新的行为,可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断是否执行自己。但是扩展用例对基用例不可见。

是扩展关系的构造型,箭头指向基本用例。

软件工程(笔记)
软件工程(笔记)
②包含关系

一个用例的行为包含另一个用例的行为

当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。
是包含关系的构造型,箭头指向抽象用例。

软件工程(笔记)
软件工程(笔记)
软件工程(笔记)
软件工程(笔记)

软件工程(笔记)
二元关联
  • 表示为在两个类之间用一条直线连接,直线上可写上关联名
    软件工程(笔记)
  • 允许一个类与自身关联
    软件工程(笔记)
    软件工程(笔记)
    • 特殊的关联:表示类之间具有整体与部分的关系
    • 特征是“部分”对象可以是多个任意“整体”对象的一部分,“部分”可以参与到多个“整体”中,部分可以脱离整体

    软件工程(笔记)
  • 又称继承
  • 普通泛化,限制泛化

来源:f(me)

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月25日
下一篇 2022年10月25日

相关推荐