软件工程之程序编码

编码设计的目的

程序编码的目的
1.编码的目的是使用选定的程序设计语言,把模块的过程描述翻译为用该语言书写的源程序 。
2.源程序应该正确可靠、简明清晰,而且具有较高的效率。 
3.在编程的步骤中,要把软件详细设计的表达式翻译成为编程语言的构造,编译器接受作为输入的源代码,生成作为输出并从属于机器的目标代码,然后编译器把输出目标代码进一步翻译成为机器代码,即真正的指令。 
程序编码的要求
1.软件工程项目对代码编写的要求,不仅仅是源程序语法上的正确性,也不只是源程序中没有各种错误,还要求源程序具有良好的结构性和良好的程序设计风格。 
2.写出的源程序既要便于阅读,又要便于测试和排除所发现的程序故障,使之能够有效地在开发期间消除绝大多数在程序中隐藏的错误,使得程序可以做到正常稳定的运行,极大地减少了运行期间软件失效的可能性,大大提高了软件的可靠性 
 

程序设计语言

一、程序设计语言的分类
1、可分为汇编语言和高级语言二大类。
①机器语言、汇编
   第一、第二代计算机用
②高级语言
    同一个问题,高级语言编码可比汇编少3~7倍
按软件工程的分类,语言的发展大致分4代,3阶段
软件工程之程序编码
 
2.从语言的内在特征看,高级语言可分为系统实现语言、静态高级语言、块结构高级语言和动态高级语言四大类
①系统实现语言
②静态高级语言
③块结构高级语言
④动态高级语言
 
一、语言的选择
1.应用领域的不同决定选择的语言
软件工程之程序编码
 
2.系统用户的要求决定
   用户使用他们熟悉的语言
3.可以使用的编译程序
   运行目标系统的环境中可以提供的编译程序往往限制了对语言的选择。
4.程序员的经验和知识(编程者对语言的熟悉程度)
5.软件可移植性要求
6.当工程规模很大时,而又没有完全合适的语言,可编一个专用的语言。
7.算法与计算复杂性、软件的可靠性
8.数据结构的复杂性,软件的可维护性
9.效率的考虑
10.了解语言的发展前景
总之,选择语言的原则为:
①最少的工作量原则
②最少技巧性原则
③最少错误原则
④最少维护原则
⑤减少记忆原则
一、总原则:
1.先求正确后求快
2.先求清晰后求快
3.求快不忘保持程序正确
4.保持程序整洁以求快
5.不要因效率而牺牲清晰
二、好程序标准
1.易于测试和调试
2.易于维护
3.易于修改
4.设计简单
5.高效率
   据统计,一个典型的程序的50%的执行时间被3%的语句所占用,故这部分代码的效率很重要
 
结构化程序实际
结构化程序设计主要包括两方面:
(1)在编写程序是,强调使用几种基本控制结构。
(2)在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。
 
结构化程序设计的主要原则
1.使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。
2.选用的控制结构只准许有一个入口和一个出口。
3.复杂结构应该用基本控制结构进行组合嵌套来实现。
 

程序设计风格

程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格。
软件=程序+文档 
1.源程序文档化
2.数据说明
3.语句结构
4.输入/输出方法
 
源程序文档化
标识符的命名
安排注释
程序的视觉组织
 
数据说明
为了使程序中数据说明更易于理解和维护,必须注意以下几点。
1.数据说明的次序应当规范化
2.说明语句中变量安排有序化
3.使用注释说明复杂数据结构
 
数据说明的次序应当规范化
数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。
 
说明语句中变量安排有序化
当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列
 
使用注释说明复杂数据结构
如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。
 
 
语句结构
语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。
1.在一行内只写一条语句
2.程序编写首先应当考虑清晰性
3.程序要能直接了当的说明程序员的用意
4.除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二
5.首先要保证程序正确,然后才要求提高速度。
6.避免使用临时变量而使可读性下降。
7.让编译程序做简单的优化
8.尽可能使用库函数
9.避免不必要的转移。同时如果能保持程序可读性,则不必用GO TO语句。
10.尽量只采用三种基本的控制结构来编写程序。
11.避免使用空的ELSE语句和IF...THEN IF...的语句。这种结构容易使读者产生误解
12.避免采用过于复杂的条件测试
13.尽量减少使用“否定”条件的条件语句
14.尽可能用通俗易懂的伪代码来描述程序的流程,然后再翻译成必须使用的语言。
15.数据结构要有利于程序的简化。
16.要模块化
17.利用信息隐蔽,确保每一个模块的独立性。
18.从数据出发去构造程序,要重新编写。
19.不要修补不好的程序
20.对太大的程序,要分块编写、测试,然后再集成。
 
输入和输出
输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽可能方便用户的使用。
满足运行工程学的输入输出风格。
①输入:
    输入格式力求简单、一致,并尽可能采用*格式输入;
    使用数据结束或文件结束标志来终止输入,不要让用户来计算输入的项数或记录数;
②输出:
    标志所有的输出数据,加必要的说明;
    当用户使用程序时,可对用户做到“在线”帮助;
    对可能产生重大后果的请求,先给出提示;
    对所有输出的数据加标注;
    发生错误时,能迅速恢复正常。
 
效率
先使程序正确,再试程序有效率;
先使程序清晰,再使程序有效率。
写程序前先简化表达式;
尽量避免使用多维数组;
尽量避免使用指针和复杂表;
不要要混合使用不同的数据类型;
尽量使用整数运算和布尔表达式; 
使用执行时间短的算术运算。

 
程序设计质量评价
一、正确性。
1、程序中没有语法错误;
2、程序运行时没有发现明确的运行错误;
3、程序中没有不适当的语句;
4、用有效的测试数据,得到程序的正确结果;
5、用无效的测试数据,得到程序的正确结果;
6、用任何可能的数据,使程序在运行时得到正确的结果。

二、结构清晰性
1、是否用三种结构化格式表示程序的控制逻辑
2、是否有一个入口,一个出口
3、是否严格控制GOTO语句
 
三、易修改性
 
四、易读性
 
五、简单性
 
软件工程之程序编码
 
 
程序复杂性度量
程序复杂性主要指模块内程序的复杂性。
 
代码行度量法
方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。
 
McCabe度量法
McCabe度量法,又称环路复杂性度量,是一种基于程序控制流的复杂性度量方法。