软件工程笔记

第3章 软件计划与管理

 


实训三,数据流图(DFD,分层结构设计)

数据流图的定义:一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变形。

作用:作为信息交流的工具。

           作为分析和设计的工具

           对更详细的设计步骤有帮助。

数据流图的四种基本符号:

数据的源点和终点:是本软件系统外部环境中的实体(包括人员,组织或其他软件系统),统称外部实体。

加工或处理:对数据流进行某些操作或变换。

数据存储(静止状态):指暂时保存的数据,它可以时数据库文件或任何形式的数据组织。

数据流(运动状态):表示数据沿箭头方向的流动。

数据流图的分层:

数据流图设计原则:1.自内向外,自顶向下,逐层细分(顶层数据流图,一层数据流图,.....)

                                 2.保持父图与子图的平衡

                                 3.保持数据守恒。(要有输入,输出,加工处理)

                                 (1)外部实体与外部实体之间不存在数据流

                                 (2)数据存储与数据存储之间不存在数据流

                                 (3)外部实体与数据存储之间不存在数据流

                                 4.加工细节隐藏

                                 5.简化加工的关系

                                 6.均匀分解

                                 7.忽略枝节

                                 8.表现的是数据流不是控制流

  数据字典

                        :数据信息的集合;

数据字典的内容:

                数据流词条,数据元素词条,数据存储文件词条,数据源点及数据终点词条,加工词条

定义数据的方法:

    定义数据的描述:在数据字典的编制中,分析员最常的描述数据结构的方式定义式,Warnier图等。

    定义式:一种严格的描述方法,采用自定向下方式,逐级给出定义式。

   Warnier图:Warnier图是表示数据结构的另一种图形工具,它用树形结构来描述数据结构。

 定义式中的符号:

加工规格说明:

  在度数据流图的分解中,位于层次树最低层的加工也称为基本加工原子加工,为于每一个基本加工都需要进一步说明,这称为加工规格说明

 在编写基本加工的规格说明时,主要目的是表达“做什么”而不是“怎么做”。

工规格说明应满足如下的要求:

(1) 对数据流图的每一个基本加工,必须有一个加工规格说明。

(2) 加工规格说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则。

(3) 加工规格说明必须描述实现加工的策略而不是实现加工的细节。

(4) 加工规格说明中包含的信息应是充足的,完备的,有用的,没有重复的多余信息。 

决策表:

决策表由4个部分组成:

左上部分是条件茬,在此区域列出了各种可能的单个条件;

左下部分是动作茬,在此区域列出了可能采取的单个动作;

右上部分是条件项,在此区域列出了针对各种条件的每一组条件取值的组合;

右下部分是动作项,这些动作项与条件项紧密相关,它指出了在条件项的各组取值的组合情况下应采取的动作。

决策树:

            决策树(decision tree)也是用来表·达加工逻辑的一种工具,有时侯它比决策表更直观。    

状态转换图:
          
状态转换图(简称状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的

           状态的表示:初态用实心圆表示,终态用牛眼图形表示,中间态用圆角矩形表示。

          活动部分的语法: 事件名(参数表)/动作表达式 3种标准事件: (1)entry (2)exit (3)do


第四章 需求分析

可行性分析:

目的:研究项目值不值得开发,问题能否解决。

任务:

可行性分析的内容:

1.经济可行性

2.技术可行性:

(1)风险分析

   目的: 找出风险,评判风险的大小,并有效的控制和缓解风险。  

(2)资源分析

(3)技术分析

3.社会可行性

(1)法律可行性

(2)用户操作可行性

4.方案的选择

可行性分析的步骤:

 确定项目的规模和目标

 研究当前正在运行的系统

 建立新系统的高层逻辑模型

 导出和评估各种方案

 推荐可行的方案

  编写可行性研究报告

可行性研究报告的主要内容:

引言

可行性研究的前提

对当前系统的分析

技术可行性研究

经济可行性研究

社会因素可行性研究

其他可供选择的方案

结论意见

需求:

       用户标软件系统在功能,行为,性能,设计约束等方面的期望.

软件需求分析的目标:

    调查分析,准确理解用户的要求。

   撰写需求,将用户的非形式的要求转化为完整的,形式的规格说明。

软件需求分析的任务:

功能需求分析:指定系统必须提供的服务。

性能需求分析:指定系统必须满足的定时约束或容量约束

质量需求分析:明确软件的质量需求,如可靠性,可行性等

外部接口需求:描述应用系统与它的环境通信的格式

出错处理需求:系统对环境错误应该怎样响应。

软件需求的作用:

软件开发的基础和前提

指定软件开发计划的基础

最终目标软件系统验收的标准

需求工程 (Requirement Engineering)

需求获取的方法和渠道:

A:用户(用户调研)和用户反馈(问卷调查)

B:市场(市场调研)

C:竞品

D:老板

需求分析:

完整性:每项获取的需求都应给出清楚的描述。

正确性 :获取的每项需求必须是准确无误的。 

合理性:各类需求之间是协调一致的。  

可行性:技术可行性,经济可行性,社会可行性。  

充分性:获取的需求是否全面,周到。

常用的建模方法:面向数据流方法  面向对象方法

需求的描述

 保持语句和段落的简短

 采用主动语态的表达方式

编写具有正确的语法和标点的完整句子

使用的语术应该和词汇表中定义的一致

需求陈述应该具有一致的式样

为了减少不确定性,避免采用模糊的,主观的语术

避免使用比较性的词汇

软件需求规格说明书(SRS):

       需求规格说明书是分析任务的最终产物,通过建立完整的信息描述,详细的功能和行为描述,性能需求和设计约束的说明,合适的验收标准,给出对目标软件的各种需求。

     需求规格说明书作为用户和开发者之间的一个协,在之后的软件工程各个阶段发挥重要作用。

需求验证

需求验证的方法:

需求评审

原型建立

测试用例生成

自动的一致性分析

编写用户手册

需求评审:

    需求评审是需求分析阶段工作的最后一步,是由软件工程师和用户一起进行并完成的。

目的:发现软件需求规格说明中的错误,二义性,和遗漏的需求。

需求管理

需求变更的管理:(需求变更说明书)

需求跟踪的方式(需求跟踪矩阵):

   正向跟踪

   逆向跟踪

   双向跟踪


实训 四 UML(统一建模语言)

一,基本概念

UML 是面向对象的建模语言 (独立于开发过程,独立于程序设计语言)

二,UML的特点

(1)统一标准                                       OO(Object-Oriented):面向对象

(2)面向对象                                       OP(Procedure-Oriented:面向过程

(3)可视化,表达能力强                     OOA(Object Oriented Analysis):面向对象分析

(4)独立于过程                                   OOP(Object Oriented programming:面向对象编程

(5)易于掌握使用                                OOD(Object Oriented Design):面向对象设计

(6)与编程语言的关系

三,UML的构成

四,UML静态建模——用例图

用例图(功能建模):描述外部参与者与系统的交互来表达系统功能即,系统提供的服务。

主要元素:用例和参与者

       用例:代表系统某一完整的功能,用椭圆表示。

   参与者:与系统交互的人或物,代表外部实体(如用户,硬件设别,或其他软件系统)

无向连接线来表示用例与参与者的关系。

用例图中的关系:泛化,包含,扩展

泛化关系(空心箭头连接线):参与者与参与者之间的关系

               :   用例与用例之间的关系

包含关系(<<include>>):一个基本基本用例行为包含另一个用例行为

扩展关系(<<extend>>):允许一个用例扩展另一个用例提供的功能

五,静态建模——类图

类图是面向对象建模最常用的图,描述类与类间的静态关系。

 public class Person{  

       private int id;  

      private String name;

       public void setName(String name){  

          this.name = name;  

       }    

     public String getName(){    

        return name;  

       }

   }

类属性的语法: [可见性] 属性名[:类型][=初值]

可见性:公有(+)、私有(-)、保护(#)

公有(public):可被外部对象访问

私有(private):不可为外部对象访问,只能为本类对象使用

保护(protect):可为本类对象和子类对象访问。

类图中涉及的关系有:依赖、关联、泛化(继承)、实现。

(1)依赖 两个事物之间的语义关系,一个事物发生变化会影响到另一个事物的语义。

        A.如果一个类中的方法的返回值类型是另一个类。(public  B  mothede(){})

        B.如果一个类中方法的传递参数是另一个类。  (public void  funda(C c){})

        C. 如果一个类中方法里面使用到另一个类。(public void show(){  C c = new C() })


第五章 系统设计

结构化开发方法

1.结构化分析(SA)

2.结构化设计(SD)——(中心:数据字典){数据模型,功能模型,行为模型}

软件设计的重要性:

软件设计是软件设计开发阶段质量保证关键,影响软件实现的成败和维护的难易。

传统的软件设计的过程:

总体设计(概要设计):将软件需求转化为数据结构和软件的系统结构。

1.数据设计(数据字典,E-R)

2.软件体系结构设计(数据流图)

3.接口设计(数据流图)

详细设计:对数据表示进行细化,得到软件详细的数据结构和算法。

 1.过程设计(加工规格说明书,状态转换图,控制规格说明书)

软件设计的任务:需求分析模型到设计的转换

软件设计原则:

(1)抽象性(Miller法则)(主要抽象手段:过程抽象(功能抽象),数据抽象)

(2)逐步求精

(3)信息隐藏隐藏每一个模块的实现细节其他模块可以调用

(4)模块化 模块划分,目的:降低软件的复杂性)例如,过程、函数、子程序、宏等

        模块的特征: 接口,模块的输入输出;

                              功能,指模块实现什么功能,有什么作用;

                              逻辑,描述模块内部如何实现需求及所需数据;

                              状态,该模块的运行环境,模块间调用与被调用关系

(5)模块独立性:

    模块完成独立的功能

    与其他模块的接口简单

    符合信息隐蔽和信息局部化原则

    模块间关联和依赖程度尽可能小

模块独立的重要性

功能被划分,并且接口被简化,所以具有有效模块化的软件更易于开发

由于因设计和编码修改引起的副作用受到局限,错误传播被减小,并且模块复用成为可能,所以独立的模块更易于维护和测试

模块独立性的度量

耦合(coupling):是模块之间的相对独立性(互相连接的紧密程度)的度量

内聚(cohesion):是一个模块内部各个元素彼此结合的紧密程度的度量

耦合性

非直接耦合: 两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现。

数据耦合: 两个模块之间通过参数交换数据信息。

标记耦合 :一组模块通过参数表传递记录信息(实质是:共享某一数据结构的子结构

控制耦合 :一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。实质是:在单一接口上选择多功能模块中的某项功能。

外部耦合 :一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息

公共耦合: 一组模块都访问同一个公共数据环境(全局数据结构、共享的通信区、内存的公共覆盖区等) 公共耦合的复杂程度随耦合模块的个数增加而增加

内容耦合:   一个模块直接访问另一个模块的内部数据 一个模块不通过正常入口转到另一模块内部 两个模块有一部分程序代码重迭 一个模块有多个入口

原则: 尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合

内聚性

巧合内聚(偶然内聚): 几个模块内凑巧有一些程序段代码相同,又没有明确表现出独立的功能,把这些代码独立出来建立的模块即为巧合内聚模块

逻辑内聚: 把几种相关的功能组合在一起;每次被调用时,由传送给模块的控制参数来确定该模块应执行哪一种功能。

时间内聚 :多功能模块,但要求模块的各个功能必须在同一时间段内执行 一般情形下,各部分可以以任意顺序执行

过程内聚 :模块代码相关,以特定顺序执行

通信内聚 :模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据 通常,通信内聚模块通过数据流图来定义

顺序内聚: 模块完成多个功能,各个功能在同一数据结构上操作,每一项功能有一个唯一的入口点

功能内聚: 模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割 内聚性最强的

软件结构的启发式设计准则与优化

1.改进软件结构,降低耦合并提高内聚,以提高模块独立性。

2.模块规模应该适中(模块的总行数应控制在10到100行的范围内,最好为30至60行)

3.保持适当的扇入和扇出(通常扇出数3—4为宜,最好不超过5—7)

    深度:软件结构控制层数,标志系统大小和复杂程度。

    宽度:软件结构同一层模块数最大值,越大系统越复杂。

    扇出:一个模块直接控制(调用)的模块数。

    扇入:有多少上级模块直接调用它,越大共享该模块上级模块越多。

4 模块的作用域应该在控制域之内。

    作用域:受该模块内判定影响的所有模块集合。

    控制域:模块本身及所有直接或间接从属它的模块集合。

5 降低模块接口的复杂程度冗余并提高一致性

6.定义功能可以预测的模块,但要避免过分限制性的模块。

7.设计单入口单出口的模块

二,结构化设计方法

1.面向数据流的设计方法

2.面向数据结构的设计方法

面向数据流的设计要解决的任务,就是将软件需求 分析阶段生成的逻辑模型数据流图映射(Mapping)表 达软件系统结构的软件结构图。  结构化设计属于面向数据流的设计方法。

面向数据流设计方法-信息流类型

1.变换流

信息沿输入通路进入系统,由外部形式变换成内部形式,通过 变换中心加工处理后再沿输出通路变换成外部形式离开软件系统

变换型模块结构图

2.事务流

  信息沿输入通路到一处理,由处理根据输入信息类型在若 干动作序列中选一个执行。   处理称事务中心,

  完成任务:  (1)接收输入信息(又称事务);  (2)分析每个事务确定类型;  (3)根据事务类型选取一活动通路。

事务流示意图

 

 

 

 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梦谁先觉i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值