软件工程理论与实践第8期-5 结构化设计

目录

5 结构化设计

5-1 模块及模块化设计思想

第1关:模块化及模块化思想

第2关:内聚和耦合

第3关:启发规则

5-2 面向数据流的设计方法-1

第1关:数据流图-认识StarUML中的相关元素

第2关:数据流图-画出顾客外部实体以及加工

第3关:数据流图-画出顾客发送的数据流

第4关:数据流图-画出系统发送的数据流

第5关:数据流图-画出管理员外部实体

第6关:数据流图-画出管理员发送的数据流

第7关:数据流图-完成顾客系统一层图

第8关:数据流图-完成管理员系统一层图

5-3 面向数据流的设计方法-2

第1关:将数据流图转换为模块结构图-认识StarUML中的相关元素

第2关:将数据流图转换为模块结构图-画出主模块

第3关:将数据流图转换为模块结构图-画出输入部分

第4关:将数据流图转换为模块结构图-画出变换部分

第5关:将数据流图转换为模块结构图-画出输出模块

第6关:事务型结构图

5-4 软件详细设计-1

第1关:判定树-网上商城系统库存模块

第2关:判定表-网上商城系统库存模块

第3关:PAD图-网上商城系统购买商品模块

第4关:N-S图-网上商城系统登录购物模块(1)

第5关:N-S图-网上商城系统登录购物模块(2)

5-5 软件详细设计-2

第1关:绘制程序流程图-认识StarUML中的相关元素

第2关:绘制程序流程图-网上商城系统新建订单模块

第3关:绘制程序流程图-网上商城系统订单审核模块

第4关:McCabe方法

第5关:Halstead方法

5-6 软件设计规约及评审

第1关:软件设计规约

第2关:软件设计评审


5 结构化设计

5-1 模块及模块化设计思想

第1关:模块化及模块化思想

任务描述
本关考察模块与模块化知识点。为了完成本关任务,你需要掌握:

了解模块以及模块化的基本思想,理解模块化的原因;
理解抽象、逐步求精、信息隐藏的概念,理解抽象与求精之间的关系,理解信息隐藏与模块化、抽象的关系。
相关知识
什么是结构化设计

结构化设计(Structured Design, SD),是一种面向数据流的设计方法,目的在于确定软件的结构。

模块及模块化思想
系统的模块数目增加,每个模块的规模减小,开发单个模块的成本减小,但是,随着模块数目增加,设计模块间接口的工作量增也加。所以随着模块数目的增加,系统的总成本先降低后增加,总成本曲线出现一个最小成本区。如果一个大型程序仅有一个模块,它将很难被人所理解,模块化的目的之一是为了让一个大型的程序更容易被人所理解。

采用模块化原理可以使软件结构更加清晰,更加易于阅读和理解。程序错误通常出现在部分模块及它们间的接口,所以模块化思想使软件更加容易测试和调试,提高了软件的可靠性,模块化使得一个大型的程序分解成不同的模块,对难易程度不同的模块可以分配技术熟练程度不同的程序员编写,有助于软件开发的组织管理。模块化的缺点是会造成性能损耗,系统逐步分层,调用链长,模块间通信很耗性能。

逐步求精中每一层中的模块都是对系统抽象层次的一次精化。软件结构顶层的模块,控制系统的主要功能。软件结构底层的模块,完成对数据的一个具体处理,软件结构中,首先抽象出系统的主要功能,然后逐步实现低层细节采用自顶向下,由抽象到具体的方式分配控制,提高了软件的可理解性和可测试性。

信息隐藏与局部化。在软件结构中,各个模块间的信息应该彼此相对独立,隐藏模块的实现细节,仅允许访问其他模块中为了完成系统功能所需要的的信息,在模块中使用局部数据元素有助于实现信息隐藏。编写系统的不同模块时,可以根据实际需要自由命名局部变量。模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。

闯关要求
案例介绍
项目背景及介绍

电商系统致力于提供产品展示及订购,为核心的网上购物服务宣传自己商店的商品并将自己的产品展现给用户,让客户通过网站能自由地选择购买产品。
该网站是通过用户登录浏览商品、查看公告、购买、确定购买、实现用户模块功能。其中订单的生成,网站后台系统,通过系统管理员管理商品、订单、用户来实现。用户可以在商城前台进行浏览商品,加入购物车,下单等操作。后台管理模块可以对商品、订单、会员以及库存进行管理。

功能需求
功能块划分
网上商城共分两个部分,一部分是面向用户的部分,包括:顾客在线注册、购物、提交订单、付款等操作;另外一部分是商城管理部分,这部分的内容包括:产品的添加、删除、查询、订单的管理、操作员的管理、注册用户的管理等。三,商家(增,删,改)

功能块描述
(一)面向用户部分功能

1、注册功能。顾客首先要注册为网上商城的用户。注册时只要填写登录用户名、密码、联系电子信箱3项信息即可。注册后,用户可继续如实填写详细个人信息及收货人信息,同时可修改密码、查询及修改订单。
2、选择产品功能。顾客浏览网上商城,将自己需求的产品放入到购物车中(可在网上商城首页、专柜首页、产品小类、专卖店首页、搜索结果页面、产品详细信息页面进行该操作),可连续添加商品。
3、管理购物车。顾客选择完商品后可进入购物车页面,查看自己要购买的商品,可修改某一商品数量、取消购买某商品和清空整个购物车。
4、订单功能。顾客确定购物车中的商品后提交订单,如顾客已填写收货人信息,则页面显示该信息并由顾客确认。如尚未填写则显示相应表单请其填写,系统记录顾客提交的收货人信息以便其下次购物时使用。顾客提交订单后可在网上商城查询该订单,并可对尚未处理的订单进行取消、修改等操作。
5、付款功能。顾客在订单被销售方确认后,要选择付款方式,并付款给销售方,然后才可以收到货。
(二) 后台管理部分功能

1、管理人员部分。该部分的用户有一个超级管理员以及若干个普通管理员,超级管理员拥有最高权限,可访问所有订单,可浏览、查询订单,可浏览、修改普通管理员和会员的资料,普通管理员分两种,一种是订单管理员:主要负责订单管理,可浏览、修改订单状态,可浏览会员信息;另一种是界面管理员:主要负责界面管理,可增、删商品和广告等操作。
2、管理订单功能。顾客可通过Web方式取消、修改自己提交的订单(在管理员确认前),查询自己提交的订单(随时)。如订单的状态在一定时限(如12个小时)后仍没有发生变化(“订单关闭”状态除外),系统自动提醒管理员(如该订单变色,弹出提醒窗口等方式。订单状态发生变化,系统自动发E-mail给顾客,“无效订单”、“订单关闭”状态除外)。
3、管理商品功能。管理员可以添加、修改、删除商品。

C,C,A,CD,ABD,A

第2关:内聚和耦合

任务描述
本关考察内聚与耦合知识点。为了完成本关任务,你需要掌握:

        1.内聚与耦合的定义;
        2.常见的耦合与内聚类型。
相关知识
耦合定义
耦合(Coupling)是指不同模块之间相互依赖程度的度量。

常见耦合类型(由强到弱)
1、内容耦合:
定义:一个模块直接修改或操作另一个模块的数据。
举例:在模块A中定义了某个变量,在模块B中直接使用了该变量。
2、公共耦合:
定义:两个以上的模块共同引用一个全局数据项。
举例:我们定义了全局变量a,在模块、模块B和模块C中均使用到了此变量a。
3、控制耦合
定义:一个模块向另一模块传递一个控制信号,接收信号的模块将依据该信号值进行必要的活动。
举例:模块A实现了统计最近三天以及最近七天销量的功能,而具体执行哪种统计由传入的控制参数决定,则该模块具有控制耦合。逻辑内聚的模块调用就是典型的控制耦合。
4、标记耦合
定义:两个模块至少有一个通过界面传递的公共参数,包含内部结构,如数组、字符串等。
举例:模块A向模块B传递数组类型数据。
5、数据耦合
定义:模块间通过参数传递基本类型的数据。
举例:模块A实现两个数的加法操作,模块B实现数字的初始化,模块B将数字传递给模块A,由模块A完成加法。
耦合原则
如果模块间必须存在耦合,就尽量使用数据耦合、少用控制耦合、限制公共耦合的范围以及坚决避免使用内容耦合。

内聚定义
内聚(Cohesion)是指一个模块之内各成分之间相互依赖程度的度量。

常见内聚类型(由低到高)
1、偶然内聚
定义:一个模块之内各成分之间没有任何关系,只是把分散的功能整合到了一起。
举例:A模块中有三条语句(一条赋值,一条求和,一条传参),表面上看不出任何联系,但是B、C模块中都用到了这三条语句,于是将这三条语句合并成了模块A。模块A具有偶然内聚。
2、逻辑内聚
定义:几个逻辑上相关的功能放在同一模块中。
举例:模块A实现了统计最近三天以及最近七天销量的功能,而具体执行哪种统计由传入的控制参数决定,则模块A具有逻辑内聚。
3、时间内聚
定义:一个模块完成的功能必须在同一时间内完成,而这些功能只是因为时间因素关联到一起。
举例:模块A实现了全部全局变量的初始化操作。模块A这种初始化模块就具有时间内聚。
4、过程内聚
定义:处理成分必须以特定的次序执行。
举例:模块A依次读取用户的用户名、密码和地址信息,并且这个次序是事先规定的,则模块A具有过程内聚。
5、通信内聚
定义:各成分都操作在同一数据集或生成同一数据集。
举例:模块A根据员工生日分别计算员工年龄和退休日期,则模块A具有通信内聚。
6、顺序内聚
定义:各成分与一个功能相关,且一个成分的输出作为另一成分的输入。
举例:模块A根据员工生日计算员工年龄,再根据员工年龄计算退休日期,则模块A具有顺序内聚。
7、功能内聚
定义:模块的所有成分对完成单一功能是最基本的,且该模块对完成这一功能而言是充分必要的。
举例:模块A根据员工生日计算员工年龄。
闯关要求
案例介绍

网上商城系统致力于提供产品展示及订购,为核心的网上购物服务宣传自己商店的商品并将自己的产品展现给用户,让客户通过网站能自由地选择购买产品。
用户可以在商城前台进行浏览商品,加入购物车,下单等操作。后台管理模块可以对商品、订单、会员以及库存进行管理。

第3关:启发规则

任务描述
本关考察常见的启发规则。为了完成本关任务,你需要掌握:

        1.启发式概念;
        2.常见的七条启发规则;
相关知识
什么是启发式
启发式是根据设计准则,从长期的软件开发实践中,总结出来的规则。它既不是设计目标,也不是设计时应普遍遵循的的原理。

常见的启发规则
1.改进软件结构提高模块独立性
设计出软件的初步结构以后,应该审查分析这个结构,通过模块分解或合并,力求降低耦合提高内聚。例如,多个模块公有的一个子功能可以独立成一个模块,由这些模块调用;有时可以通过分解或合并模块以减少控制信息的传递及对全程数据的引用,并且降低接口的复杂程度。

2.模块规模应该适中
过大不易理解;太小则接口开销过大。
经验表明,一个模块的规模最好能写在一页纸内(通常不超过60行语句)。

3.深度、宽度、扇出和扇入都应适当
深度:表示软件结构中控制的层数。
深度能粗略地标志一个系统的大小和复杂程度,深度和程序长度之间有粗略的对应关系
宽度:表示软件结构中控制的总跨度。
宽度是同一个层次上的模块总数的最大值,宽度越大系统越复杂;对宽度影响最大的因素是模块的扇出。
扇出:表示一个模块直接控制(调用)的模块数目扇出为3-4,上限扇出为5-9。
扇入:表示有多少个上级模块直接调用该模块扇入越大则共享该模块的上级模块数目越多。

4.模块的作用域应该在控制域之内
模块的控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。
模块的作用域:受该模块内一个判定影响的所有模块的集合。
在一个设计得很好的系统中,所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。

5.力争降低模块接口的复杂程度
模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系),是紧耦合或低内聚的征兆,应该重新分析这个模块的独立性。接口复杂可能表明模块的独立性差。

6.设计单入口单出口的模块
这条启发式规则警告软件工程师不要使模块间出现内容耦合。当从顶部进入模块并且从底部退出来时,软件是比较容易理解的,因此也是比较容易维护的。

7.模块功能应该可以预测
模块的功能应该能够预测,但也要防止模块功能过分局限。

相同输入必产生相同输出
反例:模块中使用全局变量或静态变量,则可能导致不可预测。

5-2 面向数据流的设计方法-1

第1关:数据流图-认识StarUML中的相关元素

任务描述
本关考察绘制数据流图。为了完成本关任务,你需要掌握:

        1.什么是数据流图;
        2.数据流图组成部分以及基本图形符号。
相关知识
数据流图
数据流图(Data Flow Diagram, DFD)是一种便于用户理解和分析系统数据流程的图形工具,他摆脱了系统和具体内容,精确的在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。

数据流图组成部分
数据流:是由一组固定成分的数据组成,表示数据的流向。值得注意的是,数据流图中描述的是数据流,而不是控制流。除了流向数据存储或从数据存储流出的数据不必命名外,每个数据流必须要有一个合适的名字,以反映该数据流的含义。

加工:加工描述了输入数据流到输出数据之间的变换,也就是输入数据流经过什么处理后变成了输出数据。每个加工都有一个名字和编号。编号能反映该加工位于分层的数据流图的哪个层次和哪张图中,能够看出它是由哪个加工分解出来的子加工。

数据存储:数据存储表示暂时存储的数据。每个数据存储都有一个名字。

外部实体:外部实体是存在于软件系统之外的人员或组织,他指出数据所需要的发源地或系统所产生的数据的归属地。

基本图形符号
方框:表示数据的源点或终点


图1 数据流图-方框

圆或椭圆:表示加工


图2 数据流图-椭圆

箭头:表示数据流


图3 数据流图-箭头

双杠:表示数据存储


图4 数据流图-双杠矩形

StarUML中的相关元素
在StarUML中新建数据流图后,在界面左侧会显示出相应的Toolbox,里面包含绘制数据流图所需的相关元素,相关元素图例及名词解释如图5所示。


图5 Toolbox中的数据流图元素

另外,StarUML数据流图中的数据流默认是折线的形式,若想要将其改为直线或者曲线,需要选中数据流后,在界面右侧的Editors中做出修改,具体如图6所示,红框中的按钮分别代表直线和曲线。

图6 Editors

闯关要求
题目
请认真学习以上描述,并模仿图7,在StarUML中绘制出数据流图。


图7 数据流图

将答案保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_1/”目录下,文件命名为“step1.mdj”。

答案是

第2关:数据流图-画出顾客外部实体以及加工

闯关要求
案例介绍

网上商城系统共分为两个部分,一部分是面向顾客的部分:包括顾客在线注册、购物、提交订单、付款等操作,顾客会收到订单信息以及付款信息等;另一部分是商城管理员部分,这部分内容包括:商品的修改、订单管理、用户管理等操作。

题目
请分析案例描述,画出顾客外部实体以及网上商城系统加工。并将答案保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_2/”目录下,文件命名为“step2.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第3关:数据流图-画出顾客发送的数据流

闯关要求
案例介绍

网上商城系统共分为两个部分,一部分是面向顾客的部分:包括顾客在线注册、购物、提交订单、付款等操作,顾客会收到订单信息以及付款信息等;另一部分是商城管理员部分,这部分内容包括:商品的修改、订单管理、用户管理等操作。

题目
请在前一关卡的基础上,画出数据流的流向,主要包括顾客发送的以下四条数据流(注意数据流方向):

        用户名及密码
        购物请求
        购买商品信息
        付款请求

请将文件保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_3/”目录下,文件命名为“step3.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第4关:数据流图-画出系统发送的数据流

闯关要求
案例介绍

网上商城系统共分为两个部分,一部分是面向顾客的部分:包括顾客在线注册、购物、提交订单、付款等操作,顾客会收到订单信息以及付款信息等;另一部分是商城管理员部分,这部分内容包括:商品的修改、订单管理、用户管理等操作。

题目
请在前一关卡的基础上,画出网上商城系统发给顾客的数据流:

        订单信息
        付款信息

请将文件保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_4/”目录下,文件命名为“step4.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第5关:数据流图-画出管理员外部实体

题目
请在前一关卡的基础上,画出管理员外部实体。请将文件保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_5/”目录下,文件命名为“step5.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第6关:数据流图-画出管理员发送的数据流

题目
请在前一关卡的基础上,画出数据流的流向,主要包括管理员发送的以下三条数据流(注意数据流方向):

        修改后的商品信息
        订单管理请求
        用户管理请求

第7关:数据流图-完成顾客系统一层图

闯关要求
案例介绍

网上商城面向用户的系统具有如下功能:
顾客若想使用系统,首先要注册为网上商城的用户。
(1)未登录用户在注册时需要填写用户个人信息,通过注册验证系统后,用户个人信息将被保存至“会员信息记录文件”。
(2)注册成功后,用户需进入登陆验证系统填写用户名及密码进行登录验证。若用户名及密码填写错误,将会收到“验证失败信息”。
(3)经过登录验证系统的验证后,用户收到验证成功信息,未登录用户成为已登录用户,可通过个人信息管理系统继续如实填写或修改详细个人信息及收货人信息,同时可通过订单管理系统来发送查询或修改订单请求,并可以收到订单反馈结果。

题目
请按照描述画出数据流图(顾客系统一层图)。请将文件保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_7/”目录下,文件命名为“step7.mdj”。

第8关:数据流图-完成管理员系统一层图

闯关要求
案例介绍

网上商城管理员系统具有如下功能流程:
该系统的用户有一个超级管理员以及若干个普通管理员,都有权限访问管理员信息管理系统,来修改个人信息:
(1)超级管理员拥有最高权限,可通过订单管理系统获取到历史订单记录,也可通过用户管理系统查看用户信息;
(2)普通管理员分两种,一种是订单管理员,主要负责订单管理,其通过订单管理系统可查看订单信息,也可修改订单状态;另一种是界面管理员,可以对界面管理系统进行操作,可在该系统中录入新增的商品和广告信息。
(3)订单管理系统有权限访问到订单文件,用户管理系统有权限访问到用户信息文件。

题目
请按照描述画出数据流图(管理员系统一层图)。请将文件保存至“/home/headless/Desktop/workspace/myshixun/数据流图/submit/step_detail_8/”目录下,文件命名为“step8.mdj”。

5-3 面向数据流的设计方法-2

第1关:将数据流图转换为模块结构图-认识StarUML中的相关元素

闯关要求
题目

请认真学习以上描述,并模仿图7,在StarUML中绘制出模块结构图。将答案保存至“/home/headless/Desktop/workspace/myshixun/模块结构图/submit/step_0/”目录下,文件命名为“step0.mdj”。

第2关:将数据流图转换为模块结构图-画出主模块

任务描述
本关考察将数据流图转换为模块结构图。为了完成本关任务,你需要掌握:

        1.什么是模块结构图;
        2。数据流图转换为模块结构图的流程。
相关知识
模块结构图

模块结构图(Module Structure Diagram, MSD)是用来表示系统的模块划分与层次分解关系,表示模块的调用关系、模块间数据流与控制流的传递关系以及模块与外界或数据存储的信息接口的规范化图形,是结构化系统设计的一种重要的图表描述工具。

组成元素
方框:内有名称,表示模块;
直线:表示上层模块对下层模块的调用;
尾部带空心圆的箭头:表示按方向传递的数据信息;
尾部带实心圆的箭头:表示按方向传递的控制信息。
作用
描述模块间参数交换情况、评价模块间耦合情况、确定模块间的接口。结构图一般不列入设计文档,只用于设计阶段检查模块设计的正确性和模块独立性。

变换设计
变换设计就是从变换型数据流图映射出软件模块结构的过程,也称以变换为中心的设计。 
变换设计的基本方法有两步:

分解第一层模块结构,就是把整个变换分解成输入控制模块Ci、输出控制模块Co和变换中心控制模块Ct,由主控模块控制;

图1 变换设计


图2 变换设计

分别设计输入、输出和处理的下层模块结构,方法是:从变换中心边界向两侧移动,分别把输入通路和输出通路的每个处理映射成输入控制模块Ci和输出控制模块Co的下属模块。变换中心的下层模块,是把每个处理映射成变换中心控制模块Ct的一个直接下属模块。

图3 变换设计

事务设计
事务设计就是从事务型数据流图映射出软件模块结构的过程,也称为以事务为中心的设计。
事务设计的基本方法有两步:

建立主控模块、接收输入类型分析模块和事务调度模块;

图4 事务设计

分别设计输入类型分析模块和调度模块的下层模块结构。方法是:将输出的每条通路作为调度模块的一个判断分支,而输入类型分析模块的下层模块与变换设计类似。

图5 事务设计


图6 事务设计

闯关要求
案例介绍

网上商城订单系统具有如下功能流程:
(1)顾客提交订单至订单管理系统审核,在系统审核完成后会向用户反馈订单状态。在订单入库后即为“提交成功、尚未审核”状态,此时更新 订单文件;订单管理员在后台浏览到顾客提交的订单(订单文件),在审核订单并确认订单信息有效后,将订单的状态更改为“订单已审核,尚未付款”,若未通过审核,则将“订单无效”信息发给顾客。
(2)若系统读取 货物库存文件,得知商品无货信息,则向管理员通知商品无货。
该系统的数据流图如下:


图7 订单系统数据流图

题目
本题中我们将该订单子系统看作为一个独立系统,请完成下述题目:
请分析该数据流图和案例描述,找出模块结构图的主模块,在 StarUML 中画出该主模块。请将文件保存至“/home/headless/Desktop/workspace/myshixun/模块结构图/submit/step_1/”目录下,文件命名为“step1.mdj”。

第3关:将数据流图转换为模块结构图-画出输入部分

题目
本题中我们将该订单子系统看作为一个独立系统,请完成下述题目:
请分析该数据流图和案例描述,找出模块结构图的输入部分,在上一关的基础上,画出该输入部分。请将文件保存至“/home/headless/Desktop/workspace/myshixun/模块结构图/submit/step_2/”目录下,文件命名为“step2.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第4关:将数据流图转换为模块结构图-画出变换部分

题目
本题中我们将该订单子系统看作为一个独立系统,请完成下述题目:
请分析该数据流图和案例描述,找出模块结构图的变换部分,在上一关的基础上,画出该变换部分。请将文件保存至“/home/headless/Desktop/workspace/myshixun/模块结构图/submit/step_3/”目录下,文件命名为“step3.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第5关:将数据流图转换为模块结构图-画出输出模块

题目
本题中我们将该订单子系统看作为一个独立系统,请完成下述题目:
请分析该数据流图和案例描述,找出模块结构图的输出部分,在上一关的基础上,画出该输出部分。请将文件保存至“/home/headless/Desktop/workspace/myshixun/模块结构图/submit/step_4/”目录下,文件命名为“step4.mdj”。
File下的“Save As”是“另存为”按钮,可以直接将打开的文件另存到指定目录下。

第6关:事务型结构图

闯关要求
案例介绍

网上商城首页(购物界面)的数据流图如下:


图7 购物界面数据流图

题目
请分析该数据流图,思考下如何将其转换为模块结构图。完成选择题,补全图2中的空缺部分。


图8 事务流结构图

A,B,C,D,ABCD,ABC

5-4 软件详细设计-1

第1关:判定树-网上商城系统库存模块

任务描述
本关考察判定树。为了完成本关任务,你需要掌握:

        1.什么是判定树;
        2.判定树的绘制流程。
相关知识
判定树
判定树(Decision Tree)是一种描述加工的图形工具,适合描述问题处理中具有多个判断,而且每个决策与若干条件有关。使用判定树进行描述时,应该从问题的文字描述中分清哪些是判定条件,哪些是判定的决策,根据描述材料中的联结词找出判定条件的从属关系、并列关系、选择关系,根据它们构造判定树。

闯关要求
案例介绍

在网上商城系统中,管理员可以查看具体库存情况。详细描述如下:
若库存量小于等于0,则按缺货处理;否则,若库存量小于等于库存下限,则按下限报警处理;若库存量大于库存下限,而又小于等于储备定额,则按订货处理;若库存量大于库存下限,小于库存上限,而又大于储备定额,则按正常处理;若库存量大于等于库存上限,而又大于储备定额,则按上限报警处理。

题目
请根据网上商城系统库存量监控功能的处理逻辑,完成判定树的填空。

第2关:判定表-网上商城系统库存模块

任务描述
本关考察判定表。为了完成本关任务,你需要掌握:

        1.什么是判定表;
        2.判定表的绘制流程。
相关知识
判定表
判定表(Decision Table)分为四部分:

1.判定表的左上部,会列出各种可能的条件;
2.判定表的左上部,称为基本动作项,它列出了所有的操作;
3.判定标的右上部,称为条件项,它列出了各种可能的条件组合;
4.判定标的右下部,称为动作项,它列出在对条件组合下所选的操作。
闯关要求
案例介绍

商城管理员根据用户欠款时间长短和现有库存情况处理用户订货的方案。对于欠款时间小于等于30天的客户,若其需求量小于库存量,则立即发货;若库存量不足,则按库存发货,进货后再补发。对于欠款时间大于30天且小于等于100天的客户,若其需求量小于库存量,则通知其先付款再发货;若库存量不足,则不发货。对于欠款时间大于100天的客户,通知其先付欠款再议。

第3关:PAD图-网上商城系统购买商品模块

第4关:N-S图-网上商城系统登录购物模块(1)

任务描述
本关考察判定表。为了完成本关任务,你需要掌握:

        1.什么是 N-S 图;
        2.N-S 图的绘制流程。
相关知识
N-S图
N-S图,也被称为盒图或 NS 图(Nassi Shneiderman图),是结构化编程中的一种可视化建模。

N-S图特点
NS图形象直观,功能域明确,具有良好的可见度;
很容易确定局部和全局数据的作用域;
不可能任意转移控制;
很容易表示嵌套关系及模块的层次关系;
复杂度接近代码本身,修改需要重画整个图;
它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量。
N-S图解结构
1、顺序结构
所有语句顺序执行。


图1 N-S图 顺序结构

2、选择结构
P成立的情况下执行A,不成立的情况下执行B。


图2 N-S图 选择结构

3、当型循环结构
先判断后执行,当P1条件成立的情况下,反复执行A语句,直到P1条件不成立为止。


图3 N-S图 当型循环结构

4、直到型循环结构
先执行后判断,当P1条件不成立的情况下,反复执行A语句,直到P1条件成立为止。


图4 N-S图 直到型循环结构

闯关要求
案例介绍

用户进入用户登陆界面后,系统会提示用户曾经是否注册过账号。若未注册过账号,则需进行新用户注册,之后再进行登陆操作;若注册过账号,则直接填写完用户密码即可。之后点击登录按钮,通过密码审核即登录成功,否则重新执行用户登录操作。登陆成功后,即进入购物界面,在购物界面中,用户可以选择关键字检索、分类商品、最新商品、推荐商品功能。
该模块的程序流程图如下:


图5 程序流程图

第5关:N-S图-网上商城系统登录购物模块(2)

闯关要求
案例介绍

用户进入用户登陆界面后,系统会提示用户曾经是否注册过账号。若未注册过账号,则需进行新用户注册,之后再进行登陆操作;若注册过账号,则直接填写完用户密码即可。之后点击登录按钮,通过密码审核即登录成功,否则重新执行用户登录操作。登陆成功后,即进入购物界面,在购物界面中,用户可以选择关键字检索、分类商品、最新商品、推荐商品功能。
该模块的程序流程图如下:


图5 程序流程图

图6 N-S图

5-5 软件详细设计-2

第1关:绘制程序流程图-认识StarUML中的相关元素

题目
请模仿图5的程序流程图,使用StarUML重新绘制一遍,并将答案保存至“/home/headless/Desktop/workspace/myshixun/程序流程图/submit/step_1/”目录下,文件命名为“step1.mdj”。

第2关:绘制程序流程图-网上商城系统新建订单模块

闯关要求
案例介绍

开始之后,进入到购物界面。在购物界面中,用户可以挑选商品,并且将商品加入购物车中。之后用户可以选择是否继续购物,选择Y会返回购物界面;选择N会进入确认订单页面,然后结束。至此新建订单操作完成。

题目
请根据描述,完成程序流程图。并将答案保存至“/home/headless/Desktop/workspace/myshixun/程序流程图/submit/step_2/”目录下,文件命名为“step2.mdj”。

第3关:绘制程序流程图-网上商城系统订单审核模块

闯关要求
案例介绍

开始之后,进入订单审核界面。若用户通过订单审核(即分支为Y),则会进入到付款界面,完成付款后即完成订单,然后结束;若未通过订单审核(即分支为N),则直接结束。

题目
请根据描述,完成程序流程图。并将答案保存至“/home/headless/Desktop/workspace/myshixun/程序流程图/submit/step_3/”目录下,文件命名为“step3.mdj”。

第4关:McCabe方法

任务描述
本关考察 McCabe 方法。为了完成本关任务,你需要掌握:

        1.掌握程序复杂程度的定量度量方法 McCabe 方法;
        2.能用 McCabe 方法画出程序流程图的流图,并计算程序复杂程度。
相关知识
McCabe 方法
McCabe 方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。
为了突出表示程序的控制流,人们通常使用流图(也称为程序图)。所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。

计算环形复杂度的方法
在流图中用圆表示结点,一个圆代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句(实际上相当于一个空语句)。由边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。
有了描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。
(1) 流图中的区域数等于环形复杂度。
(2) 流图G的环形复杂度V(G)=E−N+2,其中,E是流图中边的条数, N是结点数。
(3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

闯关要求
案例介绍

用户在完成登陆后,可以进入到购物界面。在购物界面中,用户可以挑选商品,并且将商品加入到购物车中。之后用户可以选择是否停止购物,选择是会返回购物界面;选择否会进入确认订单页面。至此新建订单操作完成。
该模块的程序流程图如下:


图1 程序流程图

B,ABCD

第5关:Halstead方法

任务描述
本关考察 Halstead 方法。为了完成本关任务,你需要掌握:

        1.掌握 Halstead 方法;
        2.能用 Halstead 方法预测程序长度和程序中包含错误的个数。
相关知识
Halstead 方法
Halstead 方法根据程序中运算符和操作数的总数来度量程序复杂度。


​其中:

        N定义为程序长度;
        N 1为程序中运算符出现的总次数;
        N 2为操作数出现的总次数。
Halstead给出预测程序长度的公式为:

其中:

        H定义为程序预测长度;

        n 1 为程序中使用的不同运算符(包括关键字)的个数;
        n2为程序中使用的不同操作数(变量和常量)的个数。
多次验证都表明,程序的预测长度H和实际程序长度N非常接近。
Halstead还给出了预测程序中包含错误的个数的公式:

闯关要求
案例介绍

有如下代码片段


题目
请根据以上代码片段,完成题目。

5-6 软件设计规约及评审

第1关:软件设计规约

任务描述
本关考察软件设计规约。为了完成本关任务,你需要掌握:

        1.了解软件设计规约的定义及组成;
        2.能够制作软件设计说明书。
相关知识
什么是软件设计规约
软件设计规约对软件的组织或其组成部分的内部结构的描述,满足系统需求规约所指定的全部功能及性能要求。

软件设计规约组成
软件设计规约通常有概要设计规约和详细设计规约,分别为相应设计过程的输出文档。

概要设计规约
概要设计规约指明软件的组织结构,其主要内容包括:

系统环境:
硬件、软件接口与人机界面
外部定义的数据库
与设计有关的限定条件
设计描述:
软件模块的结构
模块之间的接口
数据流和主要数据结构
对每个模块的描述:
处理过程外部行为
界面定义
数据结构
必要的注释
文件结构和全局数据
文件的逻辑结构、记录描述以及访问方式
交叉引用信息
详细设计规约
详细设计规约是对软件各组成部分内部属性的描述,它是概要设计的细化。即在概要设计规约的基础上,增加以下内容:

各处理过程的算法
算法所涉及的全部数据结构的描述,特别地,对主要数据结构往往包括与算法实现有关的描述
设计规约格式
 1. 引言
  1.1 编写目的
      说明编写本软件设计说明书的目的。
  1.2 背景说明
     (1)给出待开发的软件产品的名称;
     (2)说明本项目的提出者、开发者及用户;
     (3)说明该软件产品将做什么,如有必要,说明不做什么;
  1.3 术语定义
      列出本文档中所用的专门术语的定义和外文首字母组词的原词组。
  1.4 参考文献
        列出本文档中所引用的全部资料,包括标题、文档编号、版本号、出版日期及出版单位等,必要时注明资料来源。
2. 总体设计
  2.1 需求规定
      说明对本软件的主要输入、输出、处理等功能及性能要求。
  2.2 运行环境
      简要说明对本软件运行的软件、硬件环境和支持环境的要求。
  2.3 处理流程
      说明本软件的处理流程,尽量使用图、文、表的形式。
  2.2 软件结构
      在 DFD 图的基础上,用模块结构图来说明各层模块的划分及其相互关系,划分原则上应细到程序级(即程序单元),每个单元必须执行单独一个功能(即单元不能再分了)。
3. 运行设计
  3.1 运行模块的组合
    说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块的组合,说明每种运行所经历的内部模块和支持软件。
  3.2 运行控制
    说明各运行控制方式、方法和具体的操作步骤。
4. 系统出错处理
  4.1 出错信息简要说明每种可能的出错或故障情况出现时,系统输出信息的格式和含义。
  4.2 出错处理方法及补救措施
        说明故障出现后可采取的措施,包括:
        (1)后备技术。当原始系统数据万一丢失时启用的副本的建立和启动的技术,如周期性的信息转储;
        (2)性能降级。使用另一个效率稍低的系统或方法(如手工操作、数据的人工记录等),以求得到所需结果的某些部分;
        (3)恢复和再启动。用建立恢复点等技术,使软件再开始运行。
5. 模块设计说明
    以填写模块说明表的形式,对每个模块给出下述内容:
    (1)模块的一般说明,包括名称、编号、设计者、所在文件、所在库、调用本模块的模块名称和本模块调用的其他模块名;
    (2)功能概述;
    (3)处理描述;
    (4)引用格式;
    (5)返回值;
    (6)内部接口,说明本软件内部各模块间的接口关系,包括:
        (a)名称;
        (b)意义;
        (c)数据类型;
        (d)有效范围;
        (e)I/O 标志;
    (7)外部接口,说明本软件同其他软件及硬件间的接口关系,包括:
        (a)名称;
        (b)意义;
        (c)数据类型;
        (d)有效范围;
        (e)I/O 标志;
        (f)格式,指输入或输出数据的语法规则和有关规定;
        (g)媒体;
    (8)用户接口,说明将向用户提供的命令和命令的语法结构,以及软件的回答信息,包括:
        (a)名称;
        (b)意义;
        (c)数据类型;
        (d)有效范围;
        (e)I/O 标志;
        (f)格式,指输入或输出数据的语法规则和有关规定;
        (g)媒体;
闯关要求
题目

请学习完相关知识点后,完成题目。

第2关:软件设计评审

任务描述
本关考察软件设计评审相关知识点。为了完成本关任务,你需要掌握:

        1.理解软件设计评审的概念,评审目标、评审原则;
        2.能够用软件设计评审方法进行评审。
相关知识
软件设计评审

设计评审(Design Review),就是对设计文档的评审。对于软件设计来说,评审与其技术设计方法本身是一样重要,评审对于研制项目的成功而言是绝对必要的。对设计进行评审是为了尽早发现软件的欠缺,尽可能把这些缺欠在进入下一阶段工作之前,予以纠正,从而避免后期付出更多的代价。

设计评审方法
目前存在着两种不同的设计评审方法:

        1.非正式评审
        2.正式技术评审
软件设计评审指南
概要设计评审和详细设计评审应该分开进行,不允许合并为一次复审;
概要设计评审评价从需求到设计数据和体系结构的变换
详细设计评审,通常叫详细设计走查,注重算法过程的正确性;
建立一个议事日程并遵循它;
评审设计文档,不评审设计者;
评审中提出的问题应详细记录,但不要谋求当场解决;
限制参与人数和坚持充分准备;
除软件开发人员外,概要设计评审必须有用户代表参加,必要时还可邀请有关领域的专家到会;
详细设计评审一般不邀请用户和其他领域的代表;
为设计文档开发一个检查表,以帮助评审人员集中在重要问题上;
为了提高评审的效率,所有评审的参加者应接受一定的正规的培训;
评审结束前,应作出本次评审能否通过的结论。
闯关要求
题目

请在学习完知识点后,完成题目。

A,A,A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值