详细设计工具之盒图(N-S图)

简介: 详细设计工具之盒图(N-S图)

软件的详细设计


详细设计工具盒图


2868c05bef004048844f7632012b5a7d.png


N-S图,也被称为盒图或NS图(Nassi Shneiderman图)。是结构化编程中的一种可视化建模。1972年,美国学者I.Nassi 和 B.Shneiderman提出了一种在流程图中完全去掉流程线,全部算法写在一个矩形阵内,在框内还可以包含其他框的流程图形式,即由一些基本的框组成一个大的框,这种流程图又称为N-S结构流程图。


依从上到下的设计,待处理的问题会分解成一些较小的副程序,最后只有简单的叙述及控制流程结构,NS图对应了上述的思维,利用嵌套的方块来表示副程序。NS图中没有对应Goto指令的表示,和结构化编程中不使用GOTO的理念一致。NS图的抽象层次接近结构化的代码,若程序重写,NS图就需重新绘制,不过NS图在简述程序及高级设计时相当方便。


NS图几乎是流程图的同构,任何的NS图都可以转换为流程图,而大部分的流程图也可以转换为NS图。其中只有像Goto指令或是C语言中针对循环的break及continue指令无法用NS图表示。


NS图的特点:

1. 功能域(即一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来;


2. 不可能任意转移控制;


3. 很容易明确局部和全局数据的作用域;


4. 很容易表现嵌套关系,也可以表示模块的层次结构。


由于NS图没有箭头,因此不允许随意转移控制。坚持使用NS图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。


N-S图包括顺序、选择(CASE型是多分钟选择)和循环(一种是while一种是until)三种基本结构。


以C语言描述的程序为例:


A、Ai(i∈[1,n])、B和S分别是C语句段(由1-N条C语言语句组成);


P是逻辑表达式,T表示true,F表示false,即当逻辑表达式P的结果为true时,后继程序执行A,否则B;


↓表示没有语句;


WHILE重复型表示先对逻辑表达式P求值,为true时,执行S,否则跳出;


UNTIL重复型表示先执行S,然后在对逻辑表达式P求值,为true时,继续运行S,否则跳出;


CASE型对应C语言中的Switch-Case情况,先计算逻辑表达式P,结果为1时执行A1,为2时执行A2,依次类推。


现需要一个能够利用NS图进行建模的工具,将某算法(如采用C语言描述)表示为NS图。


【基本要求】


通过人机界面,能够手工绘制包含顺序型、选择型的NS图,为每个类型的NS图可以输入C语言源代码文本,各类型的图可以相互嵌套组合,并能够将绘制好的NS图转换为C语言代码描述的程序。

【扩展要求】


1. 支持WHILE型、UNTIL型和CASE型的绘制

2. 能够保存绘制好的NS图,并可以再次打开和重新编辑该NS图

3. 能够将C语言代码描述的程序文本自动转换为NS图(对于学有余力的同学,需要查阅一些编译方面的知识)


【实现提示】


各个类型的图之间是相互嵌套组合的,因此它们之间的嵌套关系需要进行存储,不能丢失实现将C语言转换为NS图时,可以利用开源的C语言的解析器(lexer和parser)将C语言程序文本转换为文法树,在文法树的基础上识别里面各个表达式或语句来进行NS图的生成。也可以自己编写解析器(可以借助flex+bison,ANTLR开源工具编写),只要求支持必要的文法即可,无需支持C语言全集。

【检查计划】


第一次检查:问题需求理解分析,系统的功能设计,包括:

数据结构设计;

程序结构原型;

第二次检查:使用自带的数据,演示系统的初步功能实现(代码,测试数据);

第三次检查:系统最终的全面检查,包括:

文档齐全;

根据测试数据,运行程序;演示时适当地讲解,并且回答问题;

【举个栗子】


盒图(N-S图):


d2c4397e82b1b43df3933c9c6c99b626.png


PAD图:


fc59e71fb158cbf1cda79bdd832329c7.png

伪码如下:


s1;
if (x<=5)
    s2;
i: =1;
while(i>=3)
{
     s3;
     i:=i+i;
}
if(y<0)
     s4;
else
     s5;


目录
相关文章
|
5月前
|
测试技术 开发者
设计文档中的流程图,靠得住吗?
本文讨论了软件开发设计文档中图形化设计图的重要性,如流程图、思维导图等,它们有助于清晰传达设计意图和提高沟通效率。然而,当面临迭代更新、人员变动时,基于截图的图形设计图可能会带来协作难题。作者提倡使用简单文字格式搭配标签和符号作为替代方案,分享了团队内部实践,通过表格来实现类似思维导图和流程图的功能,以增强文档的可维护性和协作性。同时,作者强调这不是反对使用设计图,而是提出在某些场景下的一种有效补充方法。
114 7
|
5月前
|
数据可视化 测试技术 uml
如果更好的绘制UML图
如果更好的绘制UML图
42 0
|
6月前
|
数据可视化
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
|
uml C++
UML——实现图(组件图、部署图)
在进行完前面的系统逻辑设计之后,下一步我们就需要定义设计的物理实现,如可执行文件、库、表、文件和文档等。UML的实现图又分为了:组件图和部署图两部分
|
算法 测试技术 uml
【UML图】行为图
【UML图】行为图
|
Java uml
【UML图】实现图
【UML图】实现图
|
数据库
设计分E-R图的步骤
设计分E-R图的步骤
224 0
|
uml C++
VS工具使用——代码图
引用: 《论语·卫灵公》中,子贡问为仁。子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”大概的意思是:子贡问怎样修养仁德。孔子说:“工匠要做好工作,必须先磨快工具。住在一个国家,要侍奉大夫中的贤人,与士人中的仁人交朋友。” 今天我将用我的工具——VS2013为大家介绍一下我对“工欲善其事,必先利其器”的理解。
132 0
|
Prometheus 数据可视化 前端开发
Kiali图的生成流程
Kiali图(Graph)的生成过程。Kiali是一款服务网格拓扑可视化工具,本文基于Kiali源码对图的生成流程进行了探索。
Kiali图的生成流程
|
存储 C++
C++实现图 - 01 图的概述及实现
前面我们讲的数据结构都是针对于一对一或一对多的情形,如果涉及到多对多的复杂情况就要用到我们接下来讲解的图了,这一讲我们重点讲解邻接表、邻接矩阵、十字链表以及邻接多重表的代码实现。如果已经对图的概念比较熟悉的小伙伴,可以拉到下面看相关的代码实现。
322 0
C++实现图 - 01 图的概述及实现