通知
关于网站更多信息请加whimurmur模板/jpress插件QQ群(1061691290)            网站从因情语写改为晴雨            这个网站的模板也从calmlog_ex改为 whimurmur

软件工程概论学习笔记一

237人浏览 / 0人评论 / | 作者:whisper  | 分类: 软件工程  | 标签: 软件工程  | 

作者:whisper

链接:https://www.proprogrammar.com/article/876

声明:请尊重原作者的劳动,如需转载请注明出处


1 软件工程概述

软件:程序+数据+文档

按功能:系统软件,支撑软件,应用软件

按工作方式:实时软件,分时软件,交互式软件,批处理软件

按服务对象:订制软件,产品软件

软件阶段

50年代—60年代初:程序设计阶段

60年代初—70年代初:程序系统阶段

70年代— 90年代:软件工程阶段

90年代至今:网络时代

软件的基本模型:实体元素+连接和交互方式

软件危机:软件在开发和维护过程中遇到的一系列问题。

软件危机的表现

1、成本高

2、软件质量得不到保证

3、进度难以控制

4、维护非常困难

软件危机的解决途径

技术途径:提出有效的方法和工具支持软件开发

管理途径:开发一个具有一定规模和复杂性的软件系统应该是分阶段、分步骤完成任务,同时进行过程管理,大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动。

软件工程:软件工程是研究软件开发和软件管理的一门工程学科。

传统软件工程,现代软件工程

软件工程基本原则

1)严格按照软件生命周期各阶段的计划进行管理。
2)坚持阶段评审
3)实施严格的产品控制
4)采用现代程序设计技术。
5)开发小组的成员应该少而精
6)结果应能清楚地审查
7)认识不断改进软件工程实践的必要性
8)二八定律

软件工程的作用

克服软件危机
控制软件进度
节约开发成本
提高软件质量

2 软件生存周期及软件过程

软件生存周期:软件产品从考虑其概念开始,到该软件产品不再能使用为止的整个时期。

概念阶段 需求阶段 设计阶段 实现阶段 测试、安装和验收阶段 运行与维护阶段 退役

提出软件生存周期的意义

降低整个软件开发工程的难度
便于不同人员分工协作
便于在各个阶段采用先进的开发方法和技术
便于对软件开发的全过程的组织和管理

软件过程:软件过程就是为建造高质量软件所需完成的任务的框架,即形成软件产品的一系列步骤,包括中间产品、资源、角色及过程中采取的方法、工具等范畴。

过程是活动的集合,活动是任务的集合,任务则起到把输入加工成输出的作用

软件过程:基本过程 支持过程 组织过程

过程要素

任务功能

产品工程功能:需求分析、设计、编码、集成、转换、排错、调试、产品支持、软件维护

验证确认功能:评审和审计、产品分析、测试

技术管理功能:过程管理、产品管理、资源管理

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

软件过程模型

瀑布模型 原型模型、增量模型、螺旋模型 基于构件的软件过程模型、统一 过程模型

瀑布模型

适用场景

产品需求确定、技术解决方案成熟

开发队伍的技术力量比较薄弱或缺乏经验

质量需求高于成本需求和进度需求的时候

希望降低管理费用

V模型-瀑布模型变种

阶段重叠的瀑布模型

快速原型模型

原型:软件开发过程中,软件的一个早期可运行的版本, 它反映了最终系统的部分重要特性

抛弃型原型 进化型原型

适用场景

项目的需求在项目开始时不明确

开发新产品,验证技术可行性

增量模型

增量:满足用户需求的一个子集,是能够完成一定功能的、小而可用的软件

融合了瀑布模型的基本成分和原型的迭代特征,采用随着日程时间的进展而交错的线性序列

增量形式:增量方式 迭代方式

适用场景

项目中明确了大部分需求,但需求可能发生变化。

市场和用户把握不准确,希望尽早进入市场。

螺旋模型

螺旋模型综合了传统的瀑布模型和快速原型模型的优点, 同时增加了风险分析(risk analysis)

适用场景

需求不明确或可能发生变化的大型复杂软件系统

支持面向过程、面向对象开发方法,具有广阔前景

统一过程(RUP)

统一过程是一个通用的过程框架。可用于各种不同类型的软件系统、各种不同的应用领域、各种不同功能级别以及各种不同的项目规模

最佳实践

迭代地开发软件 管理需求 应用基于组件的架构 为软件建立可视化的模型 不断地验证软件质量 控制软件的变更

4个阶段 初始阶段 细化阶段 构造阶段 交付阶段

3 问题定义及可行性研究

问题定义

建立项目范围、确定要开发的新系统的问题域。

对项目进行功能性分割。

解析问题:初始状况 目标状况 处理状况

问题定义报告

软件名称 项目提出背景 软件目标及任务 项目性质 软件服务范围 基本需求 软件环境 主要技术

可行性研究

用最小的代价,在尽可能短的时间内,确定问题是否 有可行的解决方案。

四个方面 经济是否可行性 技术是否可行性 操作是否可行性 社会是否可行性

步骤

1.复查系统规模和目标

2.研究目前正在使用的系统

3.确定新系统的高层逻辑模型

4.重新定义问题

5.推荐行动方针

6.草拟软件项目开发计划

7.书写可行性研究报告,并提交审查

系统流程图

系统流程图SFD(System Flow Diagram)用于在可行性研究阶段描述系统的物理模型。

成本/效益分析

成本/效益分析从经济角度分析开发一个新系统是否合算,从而帮助客户组织的负责人正确地做出是否投资开发软件。

成本估算:成本估算主要估算工作量。

1.代码行估算技术

2.任务分解技术

3.自动化估计技术

软件的成本还包括: 运行费用和维护费用。

成本/效益分析方法

1.货币的时间价值

2.投资回收期

3.纯收入

4 需求分析

需求

软件开发的第一步是

调研、确定待开发的软件所处的系统环境,确定软件所在的系统需求。

调研、确定待开发软件的需求

在任何软件开发活动中需求是软件开发工作的基础

需求定义

用户解决某一问题或达到某一目标所需的软件功能。

系统或系统构件为了满足合同、规约、标准或其他正式 实行的文档而必须满足或具备的软件功能。

5个基本性质

必要的。(Necessary)是必须的吗?

无歧义的。(Unambiguous)只能用一种方式定义吗?

可测的。(testable)可以对它进行测试吗?

可跟踪的。(Traceble)从一个开发阶段到另一个开发阶 段可以对它进行跟踪吗?

可测量的。(Measurable)可以对它进行测量吗?

需求分类

业务需求 用户需求 软件功能需求 非功能需求

三个层次的需求之间的关系

业务需求是需求定义的产物;

用户需求是需求捕获的结果;

软件功能需求是需求分析和建模的综合。

非功能需求

性能需求 对外接口 设计约束

需求获取

访谈 现场考察 问卷调查 小组会 提炼

需求任务

建立分析模型 编写需求规格说明书

需求规格说明书

引言 综合描述 外部接口需求 系统特性 其他非功能需求 其他需求

软件开发方法

软件开发过程所遵循的办法和步骤

结构化开发方法

结构化分析方法(Structured Analysis 简称SA)。

结构化设计方法(Structuresd Design 简称SD)。

结构化程序设计方法(Structured Programmin 简称SP)。

结构化分析方法是面向数据流的需求分析方法,也是一种建模的活动,主要是根据软件内部的数据传递、变换关系、自顶向下逐层分解,描绘 出满足功能要求的软件模型。

基本思想:分解和抽象

结构化分析方法描述工具:实体 属性 联系

实体-关系图( Entity-Relationship)

数据流图

是结构化分析方法(SA)中描述系统的逻辑模型的工具

分层数据流图

顶层图

确定外部项(源或宿):

顶层图唯一的加工:

系统确定数据流:

0层图

确定0层图上的加工

将顶层的系统按按处理输入输出数据功能的不同分解成不同的子加工。

确定0层图上加工的数据流

继承顶层图中的输入数据流和输出数据流。

分解后的子加工之间如果有需要可以增添新数据流表示加工过程中的中间数据。

如果某些中间数据需要保存以备后用,那么可以成为流向数据存储的数据流。

确定数据存储

1...n层图

确定加工

将父图中某加工分解成由多个子加工组成

画数据流图的步骤

画顶层图,描述清楚系统的输入和输出。

画系统内部0层图。

画0层图内的某个加工内部1层图。

重复第3步,直至每个尚未分解的加工都足够简单 (即不必再分解)

数据字典

对数据流图图中所有元素的定义称为数据字典

数据字典的内容

数据字典由字典条目组成,每个条目描述数据流图中的一个元素。

数据字典条目包括:数据流、数据存储、数据项(组成数据流和数据存储的数据)、加工、外部项

数据字典的符号

数据字典描述

1.数据流条目

2.数据存储条目

3.外部项条目

4.加工条目

(1)结构化语言

(2)判定表

(3)判定树

面向对象

基本概念: 对象(object) + 类(classification) + 继承(inheritance) + 通过消息的通信(communication with messages)

对象: 属性值(attribute) 操作(operation)

关联: 类之间的静态联系称作关联

聚合: 聚合表示类与类之间的关系 是整体与部分的关系

聚集: 如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失(或失去存在价值了),则 该聚合称为聚集或组合。

面向对象基本特征

1. 封装(encapsulation)

2. 继承(inheritance)

3. 多态性(polymorphism)

面向对象开发方法认为客观世界是由对象组成的, 对象由属性和操作组成,对象可按其属性进行分类, 对象之间的联系通过传递消息来实现,对象具有封 装性、继承性和多态性。

面向对象开发方法

面向对象开发方法是以用例驱动的、以体系结构为中心的、 迭代的和渐增式的开发过程,主要包括面向对象分析、面向对象设计和面向对象实现等几个阶段,但是各个阶段的 划分不像结构化开发方法那样清晰,而是在各个阶段之间迭代进行的。

面向对象软件开发

面向对象分析

面向对象设计

面向对象分析: 面向对象分析就是抽取和整理用户需求 并建立问题域精确模型的过程。

基本步骤

1. 获取客户对系统的需求

2. 用基本的需求为指南,确定初步的业务类和对象。

3. 定义类之间的关系

类之间的关系有:关联、依赖、泛化或继承、实 现、聚合、聚集等。

4. 建造初步的类对象模型图

5. 建造动态模型

6. 最后根据用例/场景来复审分析模型

用例模型

主要元素: 参与者 用例 参与者和用例间的关系 用例和用例之间的关系 系统

建立用例模型的过程

(1)确定业务参与者──标识目标系统将支持的不同类型 的用户,可以是人、事件或其他系统。

(2)确定业务需求用例──参与者需要系统提供的完整功能。

(3)创建用例图──标识参与者与用例之间、用例与用例 之间的关系。

(4)用例描述

确定参与者的启发式问题

谁使用系统的主要功能(主执行者)

谁需要从系统中得到对他们日常工作的支持

谁需要维护、管理和维持系统的日常运行

系统需要控制哪些硬件设备

系统需要与哪些其它系统交互

哪些人或哪些系统对系统产生的结果(值)感兴趣

确定业务需求用例

环境图(又称顶层数据流图)是分析参与者和发现潜在用例 的极好来源,它不仅可以用在结构化分析方法中,也可以用 于面向对象的分析方法中。

对象模型

在面向对象分析阶段,对象建模的主要任务是建立问题 域的概念模型。

这个模型描述了现实世界中的“类与对象”以及它们之 间的关系。

在UML中,通过建立类图来表示对象模型。

划分主题 

确定候选类与对象 

确定类之间的关联 

确定类之间的聚合或聚集关系 

确定关联类

确定泛化关系

确定类与对象的属性 

确定类与对象的服务

分析参与用例的类对象模型

实体类(业务类) 边界类 控制类


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告