软工UML画图

x33g5p2x  于2022-07-01 转载在 其他  
字(6.3k)|赞(0)|评价(0)|浏览(1298)

学习如何画图,如类图,顺序图,流程图,E-R图和类代码等

一个一个来

数据流图(功能模型)

基本符号

加工:命名要用动宾词组;
外部实体、数据存储、数据流:命名要用名词;

题目说明解法

下面用个题来说明:

假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。

采购部是数据起点,然后最后仓库是数据终点。中间是订货系统。

所以基本的画图是

然后确定好目标后再进行细化:

确定处理

  1. 原文中:
    零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。

“事务的后果是改变零件库存量,实时统计定货情况” →必须有一个用于处理事物的处理

工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。

“采购部需要报表”→必须有一个用于产生报表的处理

确定数据存储:

  1. 原文中
    对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。

当某种零件的库存数量少于库存量临界值时就应该再次定货。

“在某个地方要有零件库存量和临界值数据” →必须有一个用于保存库存清单的数据存储

“产生报表和处理事务这两个处理在时间上明显不匹配”→必须有一个用于存放定货信息的数据存储

分析完上面画图

刚开始画出来框架:(把系统,起始点和终点画好)

然后把处理和数据流和数据结构画上

这里解答下为啥库存清单是双向的,因为处理事务(进货)需要看库存清单,所以会产生一个指向处理事务的箭头

细化(第二层)

到这里还可以继续细化
因为你看

当某种零件的库存数量少于库存量临界值时就应该再次定货。

这句话中缺货-》订货-》修改库存量等没有体现出来

所以:
细化处理事务

  • 接收事务
  • 按照事务去修改库存清单
  • 如果更新后的库存量少于临界值,则应填写订货信息,这就需要一个处理定货的加工

我画的不太好,我用下ppt的

这里说明下定货信息(货物的名字啥的,数量)。因为处理事务(需要看数量)生成报表(需要看货物信息)都用上,所以这样画。

然后二层要进行合并

合并

数据流图中的信息提取

结束其他

我感觉这个视频讲解的还行:

软件工程数据流图画法 我在tyut

链接:

然后我使用的ppt:

其他例题:
高考录取统分子系统

结构化系统分析——交通违章处理
/
/
/

/
/
/

软件结构图(模块层次图(H图)和模块结构图)

模块结构图

模块结构图三大成分:模块、调用、接口数据(纯数据和控制信息)

基本符号

三大成分:模块,调用,数据(纯数据◎、控制信息◉)

模块结构图中的主要成分有:

  • 模块:用长方形表示
  • 调用:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用
  • 纯数据:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)
  • 控制信息:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息

所以模块结构图中的调用是有箭头指向的

题目分析解法

高考录取统分子系统有如下功能:

(1) 计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件;

(2) 计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。

看上面视频链接,数据流图已经画出来了。。(后面加个数据终点(->考生))

那么看结构图

先画一个基本结构:

一般上面三个是输入,处理,输出

他把原始分传过去,那么下面咋样计算原始分之类的还要细分

根据原始分得到标准分,说明在分数处理里面使用了,再细分

那么如果使用分数处理,也得细分。
下面加个计算标准分,把原始分传过去,再标准分传给分数处理

我们还要计算录取线等
我们看右边,先把标准分传过来

结果输出要把标准分存入考生分数文件

还差个录取线,要计算录取线。
根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线件。

招生人数传给分数处理

然后根据标准分和招生人数计算录取线

分数处理得到录取线,返回给系统

分数处理如何得到录取线?
要来个计算录取线模块
传入标准分
传入招生人数
传回录取线给分数处理模块

系统把录取线,存入录取线文件。

加一个存入录取线文件模块
把从系统来的录取线0-》结果输出-》存入录取线文件

最后自己美化下

其他东西

标准答案见这篇文章高考录取统分子系统

借用视频:
数据流图转软件结构图方法tyut

链接:

其他例题:
也可以不像上面那样输入输出处理三个模块
自己设置模块
比如这个题:
“工资处理”子系统的结构图

/
/
/
/
/
/

模块层次图(H图)

这个就比较简单了
就按照功能模块往下分层

注意: 模块层次图(H图)二大成分:模块和调用(调用不要画箭头)

还是拿上面那个题为例:

这样写就行,如果还有得话可以细化

/
/
/
/
/
/

数据流图+结构图综合题

高考录取统分子系统

基于Web的房屋中介系统

用例图

基本符号

  1. 参与者(Actor)(活动者)——与应用程序或系统进行交互用户、组织或外部系统。用一个小人表示。

  1. 用例(Use Case)——用例就是外部可见的系统功能,对系统提供的服务进行描述。(用户能做什么事情)用椭圆表示。

  1. 子系统(Subsystem)——用来展示系统的一部分功能,这部分功能联系紧密。

关系

用例图中涉及的关系有:关联、泛化、包含、扩展。

借用这篇博客的图片
UML建模——用例图(Use Case Diagram)

关于它们的具体介绍一定要看上面那篇文章,理解很清楚

这里要特别说明下,我们老师讲的关联是有箭头指向的,指向用例。
还是要看具体情况的(一般关联实线无箭头)

然后来画用例图

题目分析解法

可以看一下上面链接的文章下面的例题

下面我们看道例题:

学生成绩管理系统

需求陈述:
某高校欲开发学生成绩管理系统,其基本功能包括:
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(2) 学生选课
学生登录系统后,根据教学计划进行选课。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。

附:学生成绩管理系统的“分配任课教师”用例的描述。
主事件流:
(1) 管理员登录到“学生成绩管理”系统的分配任课教师页面,如果登录失败,转A1。
(2) 管理员查询课程库,查询符合条件的课程,然后查询教师信息,为符合条件的课程分配任课教师,并打印任课通知单给教师。如果没有合适的人选,则放弃则转入A2。用例结束。
扩展事件流:
A1:管理员身份验证不合法
若管理员账号不存在或无效,显示提示信息,可以重新输入或终止该用例。。
A2:取消
如果没有符合条件的课程,则放弃;没有合适的教师,则按取消按钮放弃。
要求:用面向对象方法学对该成绩管理系统进行分析与设计,分别完成以下工作:

(1) 给出成绩管理系统的用例模型 (10分)

1. 先找参与者,从题目中看出有三个参与者(教师,管理员,学生)

先画上三个小人

2. 一个一个参与者分析用例

先分析管理人员
这里要从大方面考虑,所以从题目主事件流看出
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。

管理信息,分配任课教师,管理成绩

再分析教师
看题目得到,好像也就这句话提到过教师干嘛
成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;

所以教师用例为录入成绩

最后分析学生
看题目得到,好像也就这句话提到过学生干嘛
(2) 学生选课
学生登录系统后,根据教学计划进行选课。

所以学生用例为选课

这样基本的用例和参与者画好了

3. 补全关系和漏的东西

看题目:
这几个功能都涉及到了登录
某高校欲开发学生成绩管理系统,其基本功能包括:
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(2) 学生选课
学生登录系统后,根据教学计划进行选课。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。

那么这些用例中包含了登录系统,就选用包含关系

这里为啥录入成绩不包含登录系统呢?我们往下看就知道了

看题目:
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。

成绩管理包含了录入成绩
所以它们二个是包含关系

但是我们还有其他漏的关系,还有扩展事件流
继续分析
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。

这里说明分配任课教师包含打印任课通知单

/

继续分析
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。

这里说明管理成绩包含生成成绩单,成绩统计表

最后画出大致:

其他

  • 注意参与者和用例规范化的图形表示,用例之间的《include》、《extend》关系的识别和表示,不要搞反了。尤其虚线箭头的方向,表示依赖关系,《include》、《extend》的依赖关系是相反的,所以箭头的指向也是相反的,画图时不要画反了。
  • 参与者要命名成名词用例要命名成动宾词组。
  • 参与者与用例之间用实线连接

文章:UML建模——用例图(Use Case Diagram)

其他题目:
图书馆系统的用例图
用例图——门诊挂号
用例图——客户提出申请要求贷款…
用例图——空调公司维修服务流程

类图

借鉴教学视频:

uml图做题方法(上)tyut

基本符号

这里简单介绍下
详细的看类图详解

  • 名称
  • 特性 (类似于string name这种)
  • 操作 (类似于函数方法 void add()这种)

注意类特性操作前面有符号的 + -

”+“ :Public 公有
”-“ : Private 私有
”#“:Protected 保护

接口《interface》

​ 一组操作的集合,只有操作的声明而没有实现
接口名称
接口方法

例如: 飞翔接口
public 飞方法()

或者还有另外一种写法(”棒棒糖表示法“)关联其他接口

例如:唐老鸭接口
public 讲话

但是它会讲话是讲人话的,需要接口讲人话

关系

继承关系

就是泛化关系,这里叫做继承关系

  • 三角形连接大的方向

比如鸟类属于动物类

实现关系(类和接口)

实现关系——对应于类和接口之间的关系

例如:大雁飞方法需要接口飞翔

关联关系(类与类)

关联关系——描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关联关系语义较弱。

例如:大雁下单与气候关联

其实这样的关联很弱,如果不确定可以不写

聚合关系(整体部分)

特殊关联关系,指明一个聚集(整体)和组成部分之间的关系

  • 菱形:连接大的方向

例如:雁阵飞包含大雁飞

组合关系(拥有)(声明周期一样)

组合关系——语义更强的聚合,部分和整体具有相同的生命周期

  • 菱形:连接大的方向

严谨的按照声明周期一样

例如:鸟的翅膀和鸟

依赖关系

依赖关系——※描述了一个类的变化对依赖于它的类产生影响的情况。有多种表现形式, 例如绑定(bind)、友元(friend)等

比如:动物依赖水

多重性

题目分析解法

一本书有一个封面、一个目录、一个前言、若干章、每章有若干节、每节有若干段,有若干句子,有0个或多个插图,还有0个或多个表格,书最后有一个附录。试建立该书的对象模型。

  1. 找出所有的类
    书,封面,目录、前言,前言,节,段,句子,插头,表格,附录

  2. 建立关系
    组合关系
    书包含封面,目录,前言,章,附录
    章包含节
    节包含段
    段包含句子,插图,表格

  3. 多重性加上

多重性加上:这里书有若干章,一对多- 1… 1…*
章有若干节 ,一对多- 1… 1…*
节有若干段,一对多- 1… 1…*
段有若干句子,一对多- 1… 1…*
有0个或多个插图,1… 0… * …
还有0个或多个表格 1… 0… * …

其他

/

N-S图(盒图)+类C语言PDL

五种结构:顺序结构、条件选择、多重分支选择、当循环、直到循环。
详细看这篇文章:
N-S图详解

注意:盒图没有开始和结束标志,默认从图的顶部开始,到图的底部结束,单入口单出口。注意直到循环until的条件,千万不要搞反了。

题目分析解法

N-S图

阅读下面的程序流程图,试分别用N-S图和PDL(类C语言描述)表示。

其实前面的都好看,就最后那个结束时候要注意下
你看这个题目
直到i>=50条件成立时候才结束循环

所以使用直到型循环结构 (先执行后判断,当P1条件不成立的情况下,反复执行A语句,直到P1条件成立为止)

下面画好:

PDL类c语言

注意:使用类C语言的伪代码形式,注意,直到循环do…while,直到循环的条件,千万不要搞反了。

比如上面这题

i = 1
  do
 {
   if  ( g >=80 )
      输出n、 g
   i = i + 1
  }while(i<50)

比较难的也就是最后一点,直到循环do…while
关键在于这里的条件

学过C其实懂的
直到循环do…while
只要后面那个while的条件符合就继续执行那个框{}里面的内容
所以是while(i<50)
其他题目可以仿照这个写

其他

基本路径测试

这个我就直接用题目讲解了

int  isLeap(int year){
	  if ( year % 4= =0)   ----------------------------------------①
      {
	      if ( year % 100= =0)  -------------------------------- ②
          {
	          if ( year %400= =0) ----------------------------- ③
                  leap=1;      ----------------------------- ④  
              else
                  leap=0;      ------------------------------⑤ 
             //endif            -----------------------------○6
          }
          else
	          leap=1;         --------------------------------○7
          //endif              -------------------------------○8
       }
       else
	      leap=0;            -------------------------------- ○9  
      // endif                ---------------------------------○10
   return leap;             ---------------------------------○11
}

请用基本路径测试技术完成该程序的测试,分别实现:
(1)画出上述程序的有向流图,并计算该程序的环形复杂度。(各占5分,共10分)
(2)给出基本路径集,并给出测试用例。(各占5分,共10分)
注:不能修改程序中已有的程序行号,否则不给分。

流图

注意:

  • 一般流图给的序号都要用上,
  • 记得画T,F (对错)
  • 那些没用的当作中转节点,还要最后终点,最后一个,且路径一定要写到程序结束,不要漏掉最后的节点,否则独立路径写不完整。
  • 有向流图的路径一定要画箭头

环形复杂度

看有几个环
最后+1(整体是一个环)

基本路径集+测试

测试用例设计既要写输入数据,也要写预期的输出数据,

其他

相关文章