选择一种程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序。
标识符名包括模块名、变量名、常量名、标号名、子程序名、缓冲区名等。
这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。
名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。
夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。
注释决不是可有可无的。
一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。
注释分为序言性注释和功能性注释。
恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如 ,将表达式 (A<-17)ANDNOT(B<=49)ORC写成 (A<-17) AND NOT (B<=49) OR C
自然的程序段之间可用空行隔开。
对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行(向右缩格)。使程序的逻辑结构更加清晰。
应该遵循的原则是:
在设计和编写程序时应该考虑下述有关输入输出风格的规则:
①对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性。
②检查输入项的各种重要组合的合法性,必要时报告输入状态信息。
③使得输入的步骤和操作尽可能简单,并保持简单的输入格式。
④输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。
⑤在交互式输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明格式和取值范围。
⑥给所有的输出加注解,并设计输出报表格式.
程序的效率是指程序的执行速度及程序所需占用的内存存储空间。
提高程序效率的几条准则:
软件测试的工作量约占整个项目工作量的40%以上,对于人命关天的系统测试工作量还要成倍增加(成本是其他部分的成本的3~5倍)。
尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。


基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。
通过运行软件来检验软件的动态行为和运行结果的正确性。
动态测试的两个基本要素:
动态测试方法:

(1)输入的实际参数与形式参数的个数是否相同;
(2)输入的实际参数与形式参数的属性是否匹配;
(3)输入的实际参数与形式参数的量纲是否一致;
(4)输入的实际参数与形式参数的次序是否一致;
(5)是否存在特征耦合;
(6)全局变量的定义和用法在各个模块中是否一致等。
局部数据说明、初始化、默认值等方面的错误:
(1)不合适或不相容的类型说明;
(2)变量无初值;
(3)变量初始化或省缺值有错;
(4)不正确的变量名(拼错或不正确地截断)等。
由于不能穷举测试,因此,选择最有代表性、最可能发现错误的执行通路进行测试十分关键。在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。
一般这种测试着重检查下列问题:
由于软件常常在它的边界上失效,因此,边界测试是单元测试中最重要的任务。
代码审查的步骤:
小组成员先研究设计说明书,力求理解这个设计。
由设计者扼要地介绍他的设计。
审查会上程序的编写者逐个语句地解释是怎样用程序代码实现这个设计的。
审查会上对照程序设计常见错误,分析审查这个程序。
当发现时,记录错误,继续审查。
)
该方法每次将一个要测试的模块同已经测试好的那些模块结合起来进行测试,如此反复,直到所的模块都测试完毕。
渐增式测试包括:自顶向下集成和自底向上集成。
不足:因为存根代替了低层次的模块,因此在软件结构中没有自底向上的数据流。
解决办法:可将测试推迟到用真实的模块代替存根模块以后再进行,或自底向上进行组装软件。
混合法:
对软件的顶部两层模块使用自顶向下方法,以减少驱动程序;
对软件结构中较下层使用自底向上方法相结合。以早期发现低层模块的错误,并充分利用人力。
确认测试也称为验收测试,它的目标是验证软件的有效性。
需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。
白盒测试:也叫结构测试,它允许测试人员利用程序内部的逻辑结构及有关信息,设计测试用例,对程序的逻辑路径进行测试。
测试用例:为测试设计的数据。主要由测试输入数据和预期的输出结果两部分组成。
黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,它是与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型的错误。
黑盒测试力图发现下述类型的错误:
调试(也称为纠错)作为成功测试的后果出现,也就是说,调试是在测试发现错误之后排除错误的过程。

对于软件可靠性有许多不同的定义,其中多数人承认的一个定义是:
软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
如果在一段时间内,软件系统故障停机时间分别为td1,td2,…,正常运行时间分别为tu1,tu2,…,则系统的稳态可用性为:
Ass=Tup/(Tup+Tdown) (7.1)
其中Tup=∑tui,Tdown=∑tdi
如果引入系统平均无故障时间MTTF和平均维修时间MTTR的概念,则(7.1)式可以变成
Ass=MTTF/(MTTF+MTTR)
经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即
MTTF=1/[K(ET/IT-Ec(τ)/IT)] (7.5)
其中K为常数,它的值应该根据经验选取。美国的一些统计数字表明,K的典型值是200。
由(7.5)式可得
Ec=ET-IT/(K×MTTF) (7.6)
因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。
example:
对一个长度为100,000条指令的程序进行测试,记录下来的数据如下:
测试开始,发现错误个数为0;
经过160小时的测试,累计改正100个错误,此时, MTTF = 0.4小时;
又经过160小时的测试,累计改正300 个错误(表示自始至目前),此时,MTTF = 2小时;
给出估计程序中固有的错误总数ET的公式并估算ET和经验常数K的数值。
解:MTTF=1/[K(ET/IT-Ec(τ)/IT)]
0.4=1/[k(ET/100000-100/100000)]
2=1/[k(ET/100000-300/100000)]
得到: K=1000, ET=350
下一篇:图像压缩原理-JPEG