软件文档,例如需求分析文档、设计文档、代码卷宗、测试用例和测试报告、用户手册等,是进行软件开发过程的重要中间产品。编写文档是软件工程工作者的重要任务之一,其重要性甚至高于编程。
在软件文档的编写中,不仅仅要像写书一样,要求条例清晰,更重要的要用图示化符号表达思想,而不仅仅是文字。软件产业界流行的是统一建模语言(UML,Unified Modelling Language)给出了大量的图示符号,以及语法和语义的规定。作为软件工程专业人员必须掌握这些图的表达方式、理解其语义,并能够熟练地用这些图描述一个系统的需求模型、设计方案、代码流程或关系、数据库的设计以及测试等工作。一般可以从表4-2所示的课程中学习到。
限于篇幅,本节最主要论述流程图。流程图、程序之间的调用关系图。UML 的其他图示化符号和语义会在后续的课程中(表4-2)学到。
表4-2 软件工程常用的图形符号
① 王安生.软件工程化.北京:清华大学出版社,2014.ISBN 978-7-302-35111-5.
1.流程图
流程图用来描述一个(子)程序的执行流程,包括:开始、终止、赋值类语句、判断、循环、输入/输出语句等。然后用有向箭头把这些图形符号连接起来。现在的字处理软件,例如,微软公司的MS-Words有较丰富的流程图符号。表4-3是常见的图形符号和含义,打勾的是需要记忆和常用的。
表4-3 软件工程常用图形符号
续表
作为程序员,可以先画出流程图,然后再编写程序,这样能直观地进行评审,避免代码执行流程的错误。(www.xing528.com)
2.程序之间的调用关系图
表达一个由多个子程序组成的大规模程序时,对于像C 语言这样的过程型语言,很有必要理清各个子程序、主程序之间的调用关系,或数据传递关系。对于面向对象语言,需要理清类与类之间的关系。这里将重点讨论程序间的调用关系。
每个程序都可以用一个矩形表示,用有向或无向箭头连接这些矩形,就表达了其相互调用关系,如图4-12所示。
图4-12 程序间的调用关系
在图4-12中,A 是主程序,分别调用子程序B1、B2、B3。而B1调用C1和C2。在很容易分清楚调用者和被调用者关系时,可以不用有向箭头。如果无法分清楚,可以用有向箭头分表示,箭头指向被调用者。从图4-12中,还可以看出:
(1)E2是十分重要的,它被多个程序B2、C3、D2、B3、D3调用,因此,这个程序的错误会牵扯到许多程序。
(2)调用的层次有点乱,优秀的代码设计是分层次调用,避免跨层,例如,分为A、B、C、D、E几个层,只让A 层调用B层的程序,B层调用C层的程序等。
(3)这里存在一个(间接)递归调用的情况,B1调用了C2,C2调用了D1,D1 又调用了E1,而E1又调用B1(为清晰起见,用虚线表示)。
用递归调用,程序的编写效率会高一些。像C 语言这样的语言,支持递归调用和自递归调用,自递归是指一个程序直接调用自己。
但是,在安全关键系统中,要避免用递归调用(不管是间接或自递归),这样可以知道程序返回被调用者的条件,防止程序进入死循环或不停机。一般来讲,递归调用程序都可以改写为多次循环结构。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。