文章较长,以下是简要目录
| 序号 | 文章内容 |
|---|---|
| 1 | 设计E-R图,转关系模式 |
| 2 | 系统数据流图 |
| 3 | 程序流程图 |
| 4 | N-S盒图 |
| 5 | 状态图 |
| 6 | 活动图 |
| 7 | 用例图 |
| 8 | 程序图 |
| 9 | 软件危机 |
| 10 | 结构化设计方法的步骤 |
| 11 | 软件设计的过程 |
| 12 | 黑盒测试法 |
| 13 | 软件设计的原则 |
| 14 | 软件设计的目的 |
| 15 | 题目练习 |
| …… | 未完待续…… |
首先要了解,矩形,椭圆,菱形分别对应ER图中的实体、属性和关系,根据题意画图,具体操作略

其次,转换关系模式分为1:1、1:n、n:m三种。我们来分别举例说明。
E-R图

关系模式:
职工(职工号,姓名,年龄)
产品(产品号,产品名,价格)
负责(职工号,产品号)
E-R图

关系模式:
仓库(仓库号,地点,面积)
产品(产品号,产品名,价格)
仓储(产品号,仓库号,数量)
E-R图

关系模式:
学生(学号,姓名,年龄,性别)
课程(课程号,课程名,学时数)
选修(学号,课程号,成绩)
方法:把1端实体主码加入n和m(eg:课程号)
E-R图

关系模式:
课程(课程号,课程名,学分,学时)
教师(教师号,教师名,性别,职称,课程号)
参考书(书号,书名,出版社,主编,课程号)
E-R图

关系模式:
供应商(供应商号,供应商名,地址)
零件(零件号,零件名,单价)
产品(产品号,产品名,型号)
供应(供应商号,零件号,产品号,数量)
例题:设有商店和顾客两个实体。“商店”有属性:商店编号、商店名、地址、电话,“顾客”有属性:顾客编号、姓名、地址、年龄、性别。假设一个商店有多个顾客购物,一个顾客可以到多个商店购物,顾客每次去商店购物有一个消费金额和日期,而且规定每个顾客在每个商店里每天最多消费一次。
①试画出ER图,并注明属性和联系类型。(5分)

②将E-R图转换成关系模型 ,并注明主码和外码 (5分)
商店(商店编号,商店名,地址,电话)
顾客(顾客编号,姓名,地址,年龄,性别)
消费(商店编号,顾客编号,消费金额,日期)
先要了解基本构图元素
圆角的矩形表示变换数据的处理

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

解题目标:找到源点、终点、数据处理、数据存储、数据流动方向
分析题干,工厂有采购部,采购部需要订单报表,那就需要生成报表的订单系统。零件出入库,库存会随之变化,自然需要库存管理系统。
流程如下:
零件通过库存系统,出库,经订单系统生成报告,最后送到采购部。
则顶层流图如下

订货过程涉及两块数据流动,零件库存量的增减和订单报表的生成。
所以,需要两个数据处理模块,处理事务和产生报表,将其替代原来的订货系统,如下图。

数据有两个处理模块,分别是处理事务和产生报表。
处理事务对应的数据是零件库存量,数据存储是库存清单。
产生报表对应的数据是订货的信息,数据存储是订货清单。

根据题干:“零件入库或出库称为事务”
处理事务就是处理库存变化,变化通过仓库清单和库存清单双向流通体现,库存变化后需要在订货信息中有所体现,故产生订货信息的输出。
产生报表的前提是要有订货信息的输入,故添加输入流

至此,大体轮廓已经出现,开始画数据流图!
画数据流图想要一招解决很难,步步为营才是最好的选择。
首先画出顶层数据流图;其次对顶层数据流图进行分析,把抽象模型细化,体现模块的功能,画出0层数据流图;最后对0层进行功能再细化,画出1层数据流图。
这里很重要的一点,画数据流图重点是描绘“做什么?”而不是“怎么做?”。
举个例子,张三去超市买菜,可以展示张三是通过乘车前往超市,但他怎么找到出租车,怎么坐到超市门口,以及怎么挑菜,这些不必体现。
分为三块,数据源点,数据过程,数据终点。

对订货系统的功能进行细化。
首先要对仓库管理员发出的事务进行处理,即处理事务功能。
其次对采购员接收的订货报表进行功能分配,即产生报表功能。
最后,处理事务功能分为两块,从库存中取货和填写订货信息,从而产生两个数据流,库存清单和订货信息;产生报表的前提是有订货信息,故有订货信息输入流。

对功能再细化,我们对上图进行分析,以上出现两个功能模块,分别是处理事务和产生报表。
产生报表的唯一前提是有订货信息,而订货信息来自处理采购员订单的结果,故新增处理订货功能;
订货功能的前提是库存增减的结果体现,故新增更新库存清单功能;
更新库存功能的前提是接收到执行事务的命令,故新增接收事务功能。
通过对单一影响变量逆推的过程,进一步完善数据流图。







例题:根据下面程序画出程序流程图和N-S盒图
START
IF p THEN
WHILE q DO
f
END DO
ELSE
BLOCK
G
N
END BLOCK
END IF
STOP
程序流程图:

N-S盒图:

先执行A后执行B

如果条件P成立,执行A,否则执行B
成立(T)(Y)
不成立(F)(N)

先判断后执行,当P1条件成立的情况下,反复执行A语句,直到P1条件不成立为止

先执行后判断,当P1条件不成立的情况下,反复执行A语句,直到P1条件成立为止

例题:输入三角形三边长,判断三遍构成的是等边,等腰,还是一般三角形,画出N-S盒图

状态图有三种状态,分别是初态,中间态和终态


例题:公交车状态图

和状态图类似,初态用实心表示,终态用环形表示,圆角矩形代表活动,菱形代表分支,横线黑线代表并发。

可以参考这张图,更为直观

例题:下面的文字描述了某大学新生报到的过程:
新生首先要填一张新生注册表单。如果填写不正确,则在别人的帮助下重新填写,直至填写正确,然后进行注册。注册成功之后,要进行开学典礼,同时在新生选课系统中注册,然后交齐第一个学期的学费。 画出活动图。

用例图由三个基本元素和四个关系构成。
三个元素:参与者、用例、容器
四个关系:关联、泛化、包含、扩展

适用于参与者和用例之间,通常由参与者指向用例。
用单向实箭头表示

适用于于用例与用例之间或参与者与参与者之间。它和面向对象中的继承关系类似,子用例继承父用例的所有功能。
用空心三角箭头表示

适用于用例和用例直接,由复杂用例分解出简单用例
用虚线箭头表示

适用于用例与用例直接,对基础用例的功能扩展
用虚线箭头表示

例题:在火车票预订系统中,客户可以进行购买车票、退订车票、查询余票和查询列车时刻四个操作。不管是购买车票还是退订车票,用户都必须先进行登录系统操作。其中查询列车时刻主要包括按站站查询和按车次查询两种方式。如果在登录系统的过程中忘记密码,则还可使用找回密码功能。画出用例图。

例题:系统拥有注册功能,顾客注册后进行登录,才能在系统中购买商品;顾客可以通过系统浏览商品,查看商品的详细信息,购买自己喜欢的商品;顾客付费方式要多样化,既可以通过银行的在线支付功能付款,也可通过汇款方式付款;系统拥有商品的促销功能,对于某些系统指定的商品或用户购买的商品金额超过一定数量时,在顾客结账时给予优惠;
用例图顾客登录后,可以使用留言功能对商品或服务留言评价;
系统的管理员可以使用留言功能对顾客提出的疑问做出解答,还可以管理注册的用户;录入员能够更新商品信息,包括增加新商品和对现有商品信息的更新;系统允许多人同时在线,进行商品的浏览和购买操作。

类图由类的名称、字段和属性、方法,三部分构成。
其中“+” 表示public;“-“ 表示private;”#"表示protected
比如
第一层“动物”是类的名称;
第二层“+有生命”是动物的属性;
第三层“+新陈代谢+繁殖”是动物具有的方法。

鸟属于动物,可以继承动物属性
表示方法:实线+空心箭头

飞翔实现了“飞行”方法
表示方法:虚线+空心箭头

企鹅的生活和气候息息相关
表示方法:实线箭头

动物需要水和氧气才能生存
表示方法:虚线箭头

一个雁群中有很多大雁,即包含关系
表示方法:空心菱形 + 实线箭头

鸟和它的翅膀体现了部分和整体的关系,即组合关系
表示方法:实心菱形 + 实线箭头

根据以下描述,画出相应的UML类图
- 神舟六号飞船是神州飞船系列的一种,它由轨道舱、返回舱、推进舱和逃逸救生塔等组成。
- 航天员可以在返回舱内驾驶飞船,轨道舱是航天员工作和休息的场所。在紧急的情况下,可以利用逃逸救生塔逃生。
- 在飞船两侧有多个太阳能电池翼,可以为飞船提供电能

程序图可以将程序流程图,N-S图,PAD图映射到图形中。
注意:
比如下图,可以将2,3分为两个圆表示,也可以合在一起

环形复杂度V(G)=E-N+2,其中,E是程序图中边数,N是结点数
上图中V(G)=11-9+2=4
有人可能要问,如果将图中2、3两个节点和4、5两个节点分开结果依然正确吗?
可以自己试试,不影响复杂度,V(G)=13-11+2=4
| 模型名称 | 技术特点 | 适用范围 |
|---|---|---|
| 瀑布模型 | 简单,分阶段,阶段间存在因果关系,各个阶段完成后都有评审,允许反馈,不支持,用户参与,要求预先确定需求 | 需求易于完善定义且不易变更的软件系统 |
| 快速原型模型 | 型 不要求需求预先完备定义,支持用户参与,支持需求的渐进式完善和确认,能够适应用户需求的变化 | 需求复杂、难以确定、动态变化的软件系统 |
| 增量模型 | 软件产品是被增量式地一块块开发的,允许开发活动并行和重叠 | 技术风险较大、用户需求较为稳定的软件系统 |
| 迭代模型 | 不要求一次性地开发出完整的软件系统,将软件开发视为一个逐步获取用广需求、完善软件产品的过程 | 需求难以确定、不断变更的软件系统 |
| 螺旋模型 | 结合瀑布模型、快速原型模型和迭代模型的思想,并引进了风险分析活动 | 需求难以获取和确定、软件开发风险较大的软件系统 |
| RUP | 可改造、扩展和剪裁:可以对它进行设计、开发、维护和发布;强调迭代开发 | 复杂和需求难以获取和确定的软件系统;软件开发项目组拥有丰富的软件开发和管理经验 |
软件危机是指在计算机软件开发和维护时所遇到的一系列问题。
下图显示了某程序的逻辑结构。试为它设计足够的测试用例,分别实现对程序的:判定覆盖、条件覆盖、条件组合覆盖

答案:

某三角形程序的功能为:读入代表三角形边长的3个整数,判断它们能否组成三角形。如果能够,则输出三角形是等边、等腰或任意三角形的识别信息。试为此程序设计一组测试用例。(本例将先用黑盒法设计测试用例,然后用白盒法进行检验与补充)

答案:
第一步:根据题干,在黑盒法中首先可用等价分类法划分输入的等价类,然后用边界值分析法和猜错法作补充。

边界值法:2数之和等于第3数
猜错法:输入3个零、输入3个负数
第二步:提出一组初步的测试用例,

第三步:用白盒法验证第三步产生的测试用例的充分性。结果表明,上表中的前8个测试用例,已能满足对被测程序图的完全覆盖,不需要再补充其他的测试用例。
设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在1990年1月~2003年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。
答案:
第一步:划分等价类并编号,下表等价类划分的结果
| 输入等价类 | 有效等价类 | 无效等价类 |
|---|---|---|
| 日期的类型及长度 | ①6位数字字符 | ②有非数字字符 ③少于6位数字字符 ④多于6位数字字符 |
| 年份范围 | ⑤在1990~2049之间 | ⑥小于1990 ⑦大于2049 |
| 月份范围 | ⑧在01~12之间 | ⑨等于00 ⑩大于12 |
第二步:设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为①、⑤、⑧,设计的测试用例如下:
| 测试数据 | 期望结果 | 覆盖的有效等价类 |
|---|---|---|
| 202211 | 输入有效 | ①、⑤、⑧ |
| 202301 | 输入有效 | ①、⑤、⑧ |
| 203512 | 输入有效 | ①、⑤、⑧ |
第三步:为每一个无效等价类设计一个测试用例,设计结果如下:
| 测试数据 | 期望结果 | 覆盖的无效等价类 |
|---|---|---|
| 95June | 无效输入 | ② |
| 20036 | 无效输入 | ③ |
| 2001006 | 无效输入 | ④ |
| 198912 | 无效输入 | ⑥ |
| 200401 | 无效输入 | ⑦ |
| 200100 | 无效输入 | ⑨ |
| 200113 | 无效输入 | ⑩ |
某城市的电话号码由3部分组成,这3部分的名称和内容为:
地区码:空白或3位数字;
前 缀:非‘0’或‘1’开头的3位数字;
后 缀:4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,试用等价分类法设计它的测试用例。
答案:
第一步:划分等价类。
下表列出了划分的结果,包括4个有效等价类,11个无效等价类。在每一等价类之后均加有编号,以便识别

第二步:确定测试用例。

已知有一段代码实现了 “输出ABC三个数中的最大值”,要求完成下列问题:
(1)画出代码的流程图
(2)根据该程序流程图画出该程序的流图
(3)计算该流图的环形复杂度
答案:
(1)流程图:

(2)程序图:

(3)
环形复杂度:
V(G) = 边数 - 节点数 + 2 = 9 - 7 + 2 = 4