1.6 详细设计和编码
在总体设计阶段,已经确定了软件系统的总体结构,给出了软件系统中各个组成模块的功能和模块间的接口。下一步详细设计的任务就是在此基础上,为软件功能模块结构图中的每个模块确定所采用的算法、数据结构和接口细节,生成详细设计说明书。
算法要用某种表达工具进行清晰的描述,直到对每个模块都给出了足够详细的过程描述。表达工具可以自由选择,但工具必须具有描述过程细节的能力,而且能够便于程序员在编程时直接翻译成程序设计语言的源程序。可以选择的工具有程序流程图、盒图、PAD图、IPO图等,选择合适的工具并且正确地使用是十分重要的。面向数据结构设计方法(Jackson方法)是进行详细设计的形式化方法。其中用得最普遍的还是流程图。
例如,1.5节介绍的电子投票软件的系统流程图就可以这样画,如图1-6所示。
图1-6 电子投票软件的系统流程图
在软件详细设计结束时,软件详细设计说明书通过复审形成正式文档,作为下一个阶段的工作依据。详细设计的下一各阶段是编码,任务是将上一阶段得到的处理过程的描述转换为用某种计算机语言书写的、并且最终可以运行的源程序。因此,软件详细设计的结果基本上决定了最终的程序代码质量。编程时要注意程序的结构良好、清晰易读,并具有良好的程序设计风格。
良好的格式能使程序结构一目了然,帮助自己和别人理解、发现程序中不正常的地方,使程序中的错误更容易被发现;良好的程序设计风格是程序员成功的保障,它有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,改善软件的质量。良好的程序设计风格包括标志符按意取名,程序应该加注释,注意程序的书写格式,语句构造简单直接,输入/输出简单有效,有一定的交互性,程序界面友好,等等。具体如下:
(1)标志符按意取名
变量名并非越短越好,要选择有实际含义的标志符作为变量名、过程名或函数名。全局变量用具有描述意义的名字,局部变量可用短名字,函数采用动作性的名字,保持一致性。推荐使用英文大小写字母混合形式标志符,它能表达更为丰富的信息。当然,也可以使用下画线分开英语词汇。标志符如果是由几个单词组成的,则每个单词的第一个字母要大写或用下画线分开。
(2)程序应该加注释
注释是程序员与读程序人员通信的重要工具,一般用自然语言或伪码表示。程序的注释一般放在程序的关键部位或需要解释的地方,包括子程序、代码块(行)和模块接口等处。
(3)注意书写格式
让代码的形式反映出其内在的意义结构。注重程序的版面布局、空格、空行及缩格书写。
① 一般一条语句应单独占一行,同一过程的子句应聚集在一起。
② 过程之间加空行,便于分隔模块。
③ 空白的使用也有讲究,包含若干空白行和一行中由若干空格符组成的空白区。前者可用以划分一个程序中的若干段落,使段落分明,后者则可使文字、数据、符号之间不至于挤在一起而难以辨认。
④ 缩进形式显示程序结构,使用一致的缩行和加括号风格。随着程序结构的渐趋复杂化和语句数目大幅度地增加,按缩进格式书写并输入程序所带来的好处会越来越明显。必须时刻想到,程序仅写一次,但却可以被使用多次。
(4)语句构造简单直接
语句构造的原则是简单直接,不能为了追求效率而使代码复杂化。可注意以下几点:避免使用复杂的条件测试;排除测试条件“非”;用括号清晰地表达逻辑表达式和算术表达式;避免大量的循环嵌套和条件嵌套。
(5)输入/输出简单有效,使程序具有一定的交互性和友好的程序界面
输入的步骤和格式尽量简单;应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息;输入一批数据时,使用数据或文件结束标志,而不要用计数来控制;在需要等待输入的地方要给出输入的提示;输出数据表格化、图形化等;贴切地安排输出格式,应尽量使输出的结果包括数据和文字信息等明确直观的内容;在耗时操作完毕给出结束的提示。
另外,在编程中应仔细研究编译程序给出的错误信息和警告信息,弄清楚每条信息的确切根源并予以解决。特别不要忽略那些警告信息,许多警告信息源自隐含的严重错误。