导航:首页 > 编程语言 > 程序设计单元测试7

程序设计单元测试7

发布时间:2022-07-06 20:49:05

Ⅰ 汇编语言程序设计题

汇编语言程序设计模拟题

一、填空:
1、CPU的指令指针寄存器为: ,它与 寄存器联用确定下一条指令的物理地址。
2、若要将所有数据及代码都放在一个段内,应建立 存储模型。
3、操作数:ES:TABLE[DI]、FEES[EBX*2]、MSAK[EAX][EBX]分别采用 、
、 寻址方式。
4、读取当前光标位置可使用BIOS INT 10H的 号功能调用,作为出口参数,光标的行号及列号将从 寄存器中获得。
5、通常用CPU的 寄存器间接寻址端口地址。
6、如果在宏定义体设置局部标号,应使用 伪操作以避免在宏展开时出现标号的多重定义。
7、设(CS)=2A31H,(DS)=9300H,(SS)=25F0H,(BP)=0131H,(SI)=0110H,(DI)=0102H,则指令MOV AX,[BP+SI+8]的源操作数有效地址为________________,物理地址为_________________。
8、设(AX)=1000H,(BX)=2340H,则在执行了指令CMP AX,BX后,CF标志值为___________,ZF标志值为______________。

9、外设的发出中断请求若被CPU响应,有两个条件必不可少,即 和 。

10、显示字符串可使用DOS 9号功能,它要求被显示的字符串最后一个字符必须是 。

11、中断发生时,保存现场将 、 、 寄存器的内容存入堆栈。

12、n位二进制补码数的表数范围为: 。
13、将两个不同模块中的同名段重叠成两个段中较大的一个段,在定义段时应采用 组合属性。
14、操作数:ES:STRING[SI]、COUNT[ESI*4]、MSAK[EBX][ECX]分别采用 、 、 寻址方式。
15、设置光标位置可使用BIOS INT 10H的 号功能调用,作为入口参数,光标的行号及列号应存入 寄存器。
16、通常用CPU的 寄存器间接寻址端口地址。
17、若在模块1中引用模块2中定义的外部符号,则在模块1和模块2中的开头分别使用
、 伪指令。
18、设(CS)=25FFH,(DS)=2140H,(SS)=2510H,(BP)=02D0H,(SI)=0010H,(DI)=0206H,则指令MOV AX,[BP+SI+2]的源操作数有效地址为_________________,物理地址为____ __________。
19、有数据定义如下:
V1 DB 4 DUP(2),2
COUNT EQU 10
V2 DD COUNT DUP(8,5 DUP(?))

则:为变量V1分配____________个字节存贮空间;V2分配____________个字节存贮空间.

20、外设的发出中断请求若被CPU响应,有两个条件必不可少,即 和 。

21、子程序之间传递参数可使用 、 和 三种方式。

22、若中断类型为4AH,则中断向量的地址为 。

23、CPU的指令指针寄存器为: ,它与 寄存器联用确定下一条指令的物理地址。
24、当端口号≥256时,使用IN或OUT指令,必须先将端口号放到 寄存器。
25、操作数:ARY[EAX*2]、ES:[TABLE+SI]、SUM[EBX][EDX]分别采用 、
、 寻址方式。
26、变量有三属性,分别为: 、 、 。
27、如果在宏定义体设置局部标号,应使用 伪操作以避免在宏展开时出现标号的多重定义。
28、宏定义必须由伪指令 开始,伪指令 结束。
29、设(CS)=9896H,(DS)=9100H,(SS)=25F0H,(BX)=0111H,(SI)=0810H,(DI)=0102H,则指令MOV [BX+SI+8],CX的目的操作数有效地址为___ ________,物理地址为____ _________。
30、读取当前光标位置可使用BIOS INT 10H的 号功能调用,作为出口参数,光标的行号及列号将从 寄存器中获得。

31、中断发生时,保存现场将 、 、 寄存器的内容存入堆栈。

32、若:FEES DW 10 DUP(10,5 DUP(?)),则指令:MOV CX,LENGTH FEES执行后,(CX)= .

二、选择题

1、 下列寄存器中,( )可作为基址寄存器。
A、AX B、BX C、CX D、DX

2、 下列指令序列中,清除当前中断请求(EOI)命令为:( )
A、MOV AL,20H B、MOV AL,20H C、MOV AL,21H D、MOV AL,21H
OUT 20H,AL IN AL,20H OUT AL,21H IN AL,21H

3、 段定义时,使用( )定位类型,则该段必须从小段的边界开始。
A、BYTE B、WORD C、DWORD D、PARA

4、 若:(BX)=4336H,(CX)=0136H指令:SUB BX,CX 执行后,SF、ZF、OF、CF标志分别为( )
A、0,0,0,0 B、0,1,0,0 C、1,0,0,0 D、0,0,0,1

5、 若:FEES DW 10 DUP(100,?)

指令:MOV CX,LENGTH FEES执行后,CX的内容为:( )

A、1000 B、1 C、10 D、2000

6、 在循环指令中作为计数器的是( )寄存器。
A、AX B、BX C、CX D、DX

7、 在执行除法指令时,若除数为零则产生一个类型号为( )的中断。
A、0 B、1 C、3 D、4

8、 段定义时,使用( )定位类型,则该段必须从字的边界开始。
A、PARA B、WORD C、DWORD D、BYTE

9、 若:(BX)=4336H,(CX)=0136指令:SUB BX,CX 执行后,SF、ZF、OF、CF标志分别为:( )
A、0,0,0,1 B、0,1,0,0 C、1,0,0,0 D、0,0,0,0

10、若:FEES DW 100 DUP(?),

则指令:MOV CX,LENGTH FEES执行后,CX的内容为:( )

A、100 B、1 C、10 D、0

11、下列寄存器中,( )不能作为变址寄存器。
A、EAX B、EBP C、ECX D、ESP

12、 下列指令序列中,哪条指令与SUB AX,AX效果相同:( )
A、AND AX,AX B、OR AX,AX C、XOR AX,AX D、NOT AX

13、 将两个不同模块中的同名段重叠成两个段中较大的一个段,应采用( )组合属性。
A、PUBLIC B、COMMON C、PRIVATE D、MEMORY

14、 若:(AX)=0F365H,(CX)=0E024H指令:ADD AX,CX 执行后,SF、ZF、CF、OF标志分别为:( ).
A、1,0,1,0 B、0,1,0,0 C、0,0,0,0 D、0,0,0,1

15、 显示字符串可使用DOS 9号功能,它要求被显示的字符串最后一个字符必须是( ).

A、& B、$ C、% D、@

三、判断下列指令及伪指令是否正确(在括号中打“√”或“×”):
1、DIV 20H ( )

2、XCHG BX,ES ( )

3、CMP [BX],TABLE[SI] ( )

4、IN AL,DX ( )

5、MOV BYTE PTR[BX],25H ( )

6、MOV CS,0200H ( )

7、RET 8 ( )

8、LEA TABLE,BX ( )

9、ACL1 MACRO A,B,C ( )


ACL1 ENDM

10、NEWP PROC ( )



NEWP ENDP

11、MUL 20H ( )

12、MOV BX,[SI][DI] ( )

13、CMP [BX],TABLE[SI] ( )

14、OUT DX,AL ( )

15、MOV [DX],25H ( )

16、POP CS ( )

17、RET 8 ( )

18、LEA TABLE,BX ( )

19、MOVE EQU MOV ( )

20、FEED MACRO X,Y,Z ( )



FEED ENDM

21、ADD ES:BX,20H ( )

22、XCHG DX,DS ( )

23、CMP [BX],TABLE[SI] ( )

24、OUT DX,AL ( )

25、RET 8 ( )

26、DATA1 DB DATA0 ( )

27、MOVE EQU MOV ( )

四、完成下列指令序列:

1、将数据段中字串STRING1(长度为N),传送到附加段中以BUFF为首地址的缓冲区:



MOV SI,

MOV DI,

MOV CX, N

CLD

REP

2、分别用一条语句实现下述指明的功能

(1)变量AYD存放的地址指针送ES和SI

(2)AX的内容加1,要求不影响CF

.CODE

MAIN PROC FAR

MOV AX,@DATA

MOV DS,AX1、设置中断向量(中断例行程序为INTERHAND,中段类型号为N)



MOV AX,SEG INTERHAND

MOV DS,AX

MOV DX,

MOV AL,N

INT 21H



INTERHAND:



IRET

3、清除全屏幕



MOV AX,

MOV BH,7

MOV CX,

MOV DX,

INT 10H



4、分别用一条语句实现下述指明的功能

(1)字变量LIST存放的地址指针送ES和DI.

(2)将AX的内容加1,要求不影响CF.

(3)将BX的高4位置1,其余位不变.

(4)将SI指向的字单元内容存入堆栈.

(5)比较两个带符号数,若前者≥后者,则转向NEXT.

5、清除屏幕右半区域:



MOV AX,

MOV BH,7

MOV CX,0

MOV DX,

INT 10H


6、 MOV CL,8

SHL AX,CL

SHR BX,CL

ADD AX,BX

MOV WORD PTR DATA1,AX

问:上述指令序列的功能是什么?

7、 ┆

MOV AL,N

MOV AH,35H

INT 21H

PUSH ES

PUSH BX

PUSH DS

MOV AX,SEG INTERHAND

MOV DS,OFFSET INTERHAND

MOV AL,N

MOV AH,25H

INT 21H

POP DS



问:上述指令序列的功能是什么?

8、分别用一条语句实现下述指明的功能:

① 栈顶内容弹出送字变量MG1.

② 变量MG2类型属性送AH.

③ AX的内容加1,要求不影响CF.

④ 将EBX的低4位取反.

⑤ 若(CX)=0则转移至NEXT.

五、分析计算题:

1. 设(AX)=201BH,(BX)=110CH,(DI)=0001H,(DS)=4000H,(4110CH)=0AH,(4110DH)=81H,(4110EH)=70H;

则:① MOV AX,[BX]指令执行后,(AX)= ;

② MOV BH,BYTE PTR[BX+DI+1],指令执行后,(BX)= .

2.
MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL AX,CL
MOV BL,AH
OR DL,BL
试问上述程序段运行后,
(AX)=
(BL)=
(DX)=

3、

DATA1 DW 1000H
DATA2 DW 2000H

PUSH DATA1
PUSH DATA2
POP DATA1
POP DATA2
问:①上述程序段执行后,(DATA1)= ,(DATA2)= .
②设执行前(SP)=200H,执行后(SP)= .

4、 BUFF DB 7 , 6 , '56' ,?

ARRAY DW 0 , 67H , 7

BASUB EQU ARRAY-BUFF

问:BASUB的值是多少?它表示什么意义?

5、

MOV CL,3

MOV BX,0B7H

ROL BX,1

ROR BX,CL

问:上述程序执行完毕,BX寄存器的内容是什么?

6、



.DATA

STRING1 DB 50,?,50 DUP(?)

NEXT:

LEA DX,STRING1

MOV AX,0AH

INT 21H

CMP STRING1+2,0DH

JE EXIT

JMP SHORT PTR NEXT

EXIT:

MOV AX,4C00H

INT 21H

MAIN ENDP

END MAIN

说明上述指令序列的功能。

7.设(AX)=9A6CH,(BX)=710BH,(DI)=0002H,(DS)=6000H,(6710BH)=09H,(6710CH)=87H
(6710EH)=5EH;

则:① MOV AX,[BX]指令执行后,(AX)= ;

② MOV BL,BYTE PTR[BX+DI+1],指令执行后,(BX)= .

8. OPER1 DB 1,2

OPER2 DW 1234H,5678H

则: 指令 ① MOV AX,WORD PTR OPER1+1执行后,(AX)= .

② MOV AL,BYTE PTR OPER2执行后,(AL)= .

③ MOV AH,SIZE OPER2执行后,(AH)= .

六:叙述题:

调用程序和子程序之间参数传递有哪几种主要方式? 各自的特点是什么?

简述8086CPU的中断响应过程。

简述子程序调用与宏调用工作方式的区别。

七:程序设计:

1、设X、Y、Z、W均为16位带符号数单元地址,写出执行下述计算的子程序。
Z=│X+Y-W│

2、编写汇编语言源程序:测试ALPHA字节变量单元中的ASCII码字符串,进行如下操作:
(1)若为数字字符,送入NUM字节单元中,置标记FLAG为0;

(2)若为大写字母字符,送入BICCHR字节单元中,置标记FLAG为0;

(3)若为小写字母字符,送入SMLCHR字节单元中,置标记FLAG为0;
(4)否则,置标记FLAG为1.

(字符0,9,A,Z,a,z的ASCII分别为30H,39H,41H,5AH,61H,7AH)

3、设X、Y、Z均为16位带符号数单元地址,写出执行下述计算的子程序。

X+Z ,X≥Z

Y=

X-Z ,X<Z

4、已知有256个字节整数a1,a2,a3,...,a256存放在以NUMBER为首地址的数据区中。编一程序将其中的负数去除后将剩下的正数重新顺序存放在以PLUS开始的数据区中。

5、 编写程序段。用串处理指令,比较两个有10个字符的字符串变量CHR1和CHR2,如果两者全不相同则执行子程序OTHER,否则,顺序执行。

6、编写汇编语言源程序: 设在字单元A、B和C中存放有三个数,若三个数都不为0,则求出三个数之和存入字单元D中,若有一个为0,则将其他两个单元也清零。

Ⅱ 谈一谈程序设计全过程的各个阶段,及各阶段我们需遵循的原则有哪些或者结合自身程序设计经历来谈。

一、问题定义
问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”因此,分析员通过对系统的实际用户和使用部门负责人的访问调查,扼要地写出他们对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不清的地方,改正理解不正确的地方,最后得到一份双方都满意的文档,此文档中系统分析员应该写明问题的性质、工程目标和规模。
问题定义阶段是软件生存周期中最简短的阶段,一般只需一天甚至更少的时间。
二、可行性研究
此阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解决,
是否有可行的解决办法。在这个阶段,系统分析员应该导出系统的高层逻辑模型,并且在此基础上更准确、更具体地确定工程规模和目标。然后分析员更准确地估计系统的成本和效益,对建议的系统进行仔细的成本/效益分析,这是这个阶段的主要任务之一。
可行性研究的结果是使用部门负责人做出是否继续进行这项工程的决定的重要依据。
三、需求分析
这个阶段的任务,主要是确定目标系统必须具备哪些功能。因此,系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图濑据字典和简要的算法描述表示系统的逻辑模型。需求分析阶段确定的系统逻辑模型,是以后设计和实现目标系统的基础,因此必须准确完整地体现用户的要求。
四、总体设计
这个阶段必须回答的关键问题是:“应该如何解决这个问题?”
首先应该考虑几种可能的解决方案,一般包括:
1.低成本的解决方案。系统只能完成最必要的工作,不能多做一点额外的工作。
2.中等成本豹解决方案,这样的系统不仅能够很好地完成预定的任务,使用起来很方便,
而且可能还具有用户没有具体指定的某些功能和特点。
3.高成本的“十全十美”的系统。这样的系统具有用户可能希望有的所有功能和特点。
系统分析员应该使用系统流程图或其他工具描述每种可能的系统,估计每种方案的成本
和效益;还应该在充分权衡各种方案利弊的基础上,推荐一个较好的系统,并且制定实现所推荐的系统的详细计划。
要完成上述任务,通常采用结构设计的一条基本原理就是程序应该模块化,因此,总体设计还应设计软件的结构,通常用软件结构图表示。
五、详细设计
详细设计阶段的任务就是把解法具体化,设计出程序的详细规格说明,包括必要的细节,
程序员可以根据它们写出实际的程序代码。
通常用程序流程图,N—S图,PAD图,}{IPO图或PDI_.语言描述详细设计的结果。
六、编码和单元测试
这个阶段的任务是程序员根据目标系统的性质和实际环境,选取一种适当的高级程序设
计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。
程序员在书写程序模块时,应使它的可读性、可理解性和可维护性良好。
七、综合测试
这个阶段的任务是通过各种类型的测试,使软件达到预定的要求。
最基本的测试是集成测试和验收测试。集成测试是根据设计的软件结构,把经单元测试的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试是按照需求规格说明书的规定,由用户对目标系统进行验收。
通过对软件测试结果的分析可以预测软件的可靠性;反之,根据对软件可靠性的要求也可以决定测试和调试过程什么时候可以结束。
在进行测试的过程中,应该用正式的文档把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一部分。
八、软件维护
维护阶段的任务,是通过各种必要的维护活动使系统持久地满足用户的需要。
通常维护活动有四类:改正性维护,即诊断和改正在系统使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。
每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。
软件的生存周期划分为上述8个阶段,前3个阶段称为软件的定义阶段,第4至第7个阶段称为软件的开发阶段,最后一个阶段称为软件的维护阶段。在软件开发期间,测试的工作量最大,约占总开发量的40%;而软件的维护阶段周期最长,工作量非常大。
软件系统的研制工作,不可能是直线进行,研制人员常常需从后面阶段回复到前面。为了减少返工现象,研制人员通常在各个阶段进行阶段复审,以确保研制工作顺序进行。
在软件生存周期的各个阶段完成研制任务后,应提交各阶段的格式文档资料。
§1.4软件工程方法学
软件开发的目标就是在规定的投资和时间限制内,开发出符合用户需求的高质量软件。软件开发是一种高智能的活动,必须用软件工程的方法和技术指导软件开发的全过程。

Ⅲ 软件测试

软件测试知识点
一.软件测试基本概念
1.软件质量的概念
功能性:软件提供明确与隐含功能的能力
可靠性:维持规定性能的能力
易用性:被理解学习使用和吸引用户的能力
效率:相对于所用资源的数量,软件产品可提供适应性能的能力
可维护性:纠正错误,改进功能,适应环境的能力
可移植性:迁移到另一种环境的能力
2.软件测试目标和原则
目标:以最少的时间和人力,系统地找出软件潜在的各种错误和缺陷
原则:1.尽早和不断地进行软件测试;
2.测试用例应该由测试输入数据和预期输出结果构成;
3.程序员尽量避免测试自己的程序(最好是独立于开发组和客户的第三方测试组和机构)
4.测试应包括合理的和不合理的输出条件,
5。注意测试中的集群现象(测试后的程序残存的错误数目与已经发现的成正比)
6.严格执行测试计划,排除随意性7.对每一个结果做全面检查
8.妥善保管测试计划用例出错统计和分析报告
3.软件测试心理学
1)程序测试过程具有破坏性:测试是为了发现错误而执行程序的过程
2)程序员尽量避免测试自己的程序
3)程序设计组织不应测试自己的程序
4.软件测试的经济学:不能发现”所有”的缺陷和错误
1.黑盒测试(数据驱动测试/输入输出驱动测试):测试人员完全不考虑程序内部的特性,和逻辑结构,只根据程序的需求规格说明书,检查程序是否符合他的功能说明
2.白盒测试(逻辑驱动测试):对程序的逻辑结构进行检查
5.软件质量保证’

二.软件测试类型以其地位
1.软件开发阶段:
1.生存周期:制定规划(功能需求可靠性接口可行性资源,可行性报告)——系统与软件需求定义——软件设计(技术核心)——编程和单元测试——系统与集成测试——运行和维护
2.测试信息流:软件配置,测试配置,测试工具
2.规划阶段的测试:目标阐述(不太详细也不具体),需求分析,功能定义,规划阶段的测试
3.设计阶段的测试:外部设计(用户界面),内部设计(结构设计,数据设计,逻辑设计),伪代码分析
4.编程阶段的测试:白盒测试与黑盒测试,结构测试与功能测试,路径测试:覆盖准则,增量测试与大突击测试
三.代码检查、走查和评审
1.桌面检查:程序员检查自己编写的程序,是在进行单元测试之前对代码进行分析
2.代码检查:以小组为单位阅读代码,
1.协调人:主持、引导代码检查的过程
2.开发人员:检查项目的生产者
3.检查人员:检查小组每一个人都可以认为是一个检查人员,可以兼任不同的角色。
4.解说员5.记录员
项目:变量是否喂赋值或者初始化?上下标是否在界限之内?是不是整数?是否分配了数值的内存单元?变量的数据类型是否与编译器所预期的一致?
3.走查:与代码检查类似,以小组为单位进行,进行一些列规程的错误检查技术的集合
4.同行评审:通过作者的同行来确认缺陷和需要变更区域检查的方法
评审的方法和技术:
1. 临时评审:一位程序员临时请另一位花几分钟时间查找一个缺陷
2. 桌上检查或轮查:多人进行的并行桌上检查
3. 结对评审:作者请另一位同行进行桌上检查
4. 走查:5.小组评审。6.正式审查
四.覆盖率测试
1.概念:度量测试完整性的手段
覆盖率=被执行的项目数/项总数 ×100%
2.逻辑结构的覆盖测试
◇判定,□语句,○程序的开始或者结束,
1.语句覆盖率=被评价用到的语句数/可执行的语句总数 ×100%
2.指令块:不存在(会引起分支)的控制语句,IB
IB覆盖率=被执行的语句块数量/程序中的指令块总数 ×100%
3.判定覆盖率=被执行的分支数量/程序中的分支总数 ×100%
DDP覆盖率=被评价到的判定路径数量/程序中的判定路径总数 ×100%
5. 条件覆盖=被评价到的条件取值数量/条件取值总数 ×100%
3.路径测试覆盖:
1.分支结构的路径测试:①对于嵌套型分支结构,若有n个判定语句,则存在n+1条不同的路径
②对于串联型分支结构,若有n个判定语句,则有2n个路径 →减少测试用例,构造正交表P71
2.循环结构的路径测试:简单循环,嵌套循环,连锁循环,非结构循环
4.数据流测试:关注在一条路径上变量在何处赋值,在何处引用
佣金问题伪代码描述:P79
5.基于覆盖测试的数据选择
如何使用覆盖率①覆盖率不是目的,只是一种手段②不能针对所有的覆盖率指标进行测试③不能追求100%的覆盖率
五.黑盒测试
1.等价类测试:降数目极多的数据化成等价类,然后测试某类的代表值
原则:①如果确定了取值范围或者取值的个数,则可以确立一个有效等价类和两个无效等价类
②如果输入条件规定了输入值的集合,则可以有一个有效和一个无效等价类
2.边界值测试:用例:刚达到这个范围的值,比最大范围多1或者少1,如果输入输出域是有序集合,则采用边界
3.基于因果图的测试:E互斥,I包含(至少一个成立)O唯一 R要求(a→b)M屏蔽(a1则b0)
4.基于状态图的测试:P105
六.单元测试和集成测试
1.单元测试的目标和模型:
1.单元:可以编译和执行的最小软件构件、不会指派给多个设计人员开发
2.目标:验证代码是与设计相合的,跟踪需求和设计的实现和缺陷,发现编码过程中引入的错误
3.模型:(与集成,系统测试区别:P120)

2.单元测试的策略
1.自顶向下:逐层打桩 2.自底向上:自下向上打桩 3.孤立测试:为每个模块单独打桩
4.综合测试
3.单元测试分析:
1.模块接口
2.局部数据结构:保证临时存储在模块内的数据的完整正确
3.独立路径:保证每个模块的每条语句至少执行一次
4.出错处理:预见各种出错条件,进行适当的处理
5.边界条件.
4.集成测试的基本概念
1.定义:对系统接口和集成后的功能的正确性进行检验
2.与系统测试区别:
①测试对象 集成:各个模块的构件 系统:软硬件以及相关的外围设备,数据采集传输等
②测试时间 集成介于单元和系统测试之间
③ 测试方法:单元白盒,集成灰盒,系统黑盒
5.集成测试策略:
1.基于分解
①一次性集成测试②自顶向下增量式测试③自底向上的增量式集成测试④三明治集成
2.基于功能的集成:采用增量式集成测试方法
3.基于调用图的集成:成对测试,相邻测试
4.基于路径的集成 5.基于进度的集成
6集成测试分析
1.体系结构分析:
①根据需求分析,划分结构层次图
②对各个结构之间的依赖关系进行分析,确定测试模块的大小
2.模块分析 3.接口分析 4.可测试性分析
七.系统测试
1.概念:软件开发完成后,还要与系统的其他部分结合起来才能运行,系统测试的目的就是对各部分进行集成和确认测试
2.系统测试的方法:
①功能测试:是否有不正确或者遗漏的功能,能否满足系统和用户的隐式需求,能否正确接受输入
②协调一致测试
③性能测试:度量系统的性能与预先定义的目标有多大差距:压力测试:
④压力测试:测试者想要破坏程序,边界测试
⑤容量测试⑥安全性测试⑦失效恢复测试⑧备份测试GUI图形化用户接口测试⑩健壮性测试
易用性测试、安装测试、文档测试、在线帮助测试
3.系统测试的实施
①确认测试:有效性测试
②α测试和β测试:内部用户/内测
③验收测试:
④回归测试:软件变更后对其进行重新测试
八.软件性能测试和可靠性测试
1.软件性能的概念:完成某项功能时展现出来的及时性
指标:响应时间(平均,最大),吞吐量,并发用户数,资源利用率
2.性能测试的执行:
3.软件可靠性的概念:在规定时间条件内,软件不引起失效的概率
软硬件可靠性区别:
① 唯一性:软件每份拷贝都相同,硬件不能相同
② 物理退化:硬件可靠性下降
③ 逻辑复杂性:软件是纯逻辑产品,其失效也主要是逻辑错误
版本更新:硬件较慢,软件较快
4.软件可靠性预计:
①软件的运行剖面与可靠性剖面一致②一旦发生故障,立即修复,不引入新的故障③故障和失效是相互独立的④每个故障发生的概率相等
九.面向对象的软件测试
1. 面向对象的软件测试的问题
1.封装:信息隐蔽,一组相关变量和方法被封装在同一个类中
2.继承:子类直接获得父类的属性和方法 充分性,误用
3.多态
2. 面向对象的软件测试模型:分析测试(OOA),设计测试(OOD)编程测试(OOP)
3. 面向对象的软件测试策略:检查分析结果是否附和相应的面向对象分析方法要求,分析检查结果是否满足软件需求
十:WEB应用测试
1. 应用服务器的分类:
① 面向的领域:通用应用服务器(提供多方面服务),专用应用服务器
② 循环的规范:
2. WEB应用的测试策略
1. 表示层的测试:拍板结构,链接结构,客户端程序,浏览器兼容性
2. 业务层的测试:单个程序(尽可能白盒测试),对一组程序
3. 数据层的测试:
3.WEB软件的测试技术:
1.功能测试:链接测试,表单测试,Cookies测试
2.性能测试:并发测试,负载测试和性能调优
3.安全性测试:服务器,客户端,Cookies,日志功能
4.接口测试:使用接口,提供接口
4.系统安全检测与防护
1.入侵检测 狭义:黑客进入一个系统 广义:窃取数据,滥用服务器,发送垃圾邮件
2.漏洞扫描 操作系统漏洞,网络漏洞,数据库漏洞
3.安全策略 ①物理破坏防护:远离火灾,人为破坏
②信息窃取防护:入网访问控制,权限控制(用户权限,操作权限),服务器和节点安全控制,网络监测控制,防火墙控制
③信息加密:保护策略,加密算法
十一.其他测试
1. 兼容性测试①不同的硬件配置影响软件性能②软件使用了硬件的特定功能
1. 软件兼容性测试:与操作系统,数据库,浏览器,中间件,其他软件 兼容性
2. 数据兼容性:不同版本数据,不同软件间兼容性
2.易用性测试
1.易安装性测试:安装手册自动化程度,灵活性,中断处理,安装和卸载,多环境安装支持
2.功能易用性测试:业务符合度,功能定制性,功能关联度,数据共享度,用户约束的合理性
3.用户界面测试:界面整体(合理一致规范),界面元素,输入测试
3.构件测试:
4.极限测试:
1.极限编程:①特性:简单的分析设计,频繁的客户交流,增量式开发,连续的测试
②优点:随时应对新增或改变的需求
2.极限测试①单元测试:最重要的发现错误的手段,由编码人员完成,在编程之前测试
②极限测试的实施:单元测试用例的生成
5.文档测试:只能以文档审查的方式进行
内容:宣传和包装材料,用户许可说明书,手册,在线帮助,示例和模板
文档的测试

Ⅳ 汇编语言程序设计试题,高手来!

LS第10题、第12题回答错误。

1.唯一代表存储空间中每个字节单元的地址是: 物理地址。
2.JNC指令转移的测试条件是: 进位标志位复位,即CF=0(源操作数不小于目的操作数)。
3.将端口地址为30H中的数据传送到CPU中的指令是: IN AL,30H。
4.8086微处理系统中最多有 1024 个端口地址。
5.判断无符号数运算是否溢出,应根据 进位 标志位;而判断有符号数运算是否溢出应根据 溢出 标志位。
6.执行 INT 10H指令,可从中断向量表 40H 地址读出内容送IP,从 42H 地址单元读出内容送CS。
7.语句 ASC DB ‘1234’设置了 4 个字节。
8.某微机有16条地址线,能够覆盖的地址范围是: 0000H~0FFFFH。
9.8086CPU允许的最大存储空间为 1M字节,其地址编号从 0000H 到 FFFFH H。
10.把AX中第0、1、3位清零,应使用的指令是: AND AX,0FFF4H。
11.设寄存器位数为8位,机器数采用补码形式(含一位符号位)。对应于十进制数-73的寄存器内容为: B7H(用16进制表示)。
12.设A为字变量,指令MOV AX, A的源操作数寻址方式是: 存储器直接寻址。

Ⅳ 程序设计有什么内容

基本要求 1. 掌握算法的基本概念。 2. 掌握基本数据结构及其操作。 3. 掌握基本排序和查找算法。 4. 掌握逐步求精的结构化程序设计方法。 5. 掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。 6. 掌握数据的基本知识,了解关系数据库的设计。 考试内容 一、 基本数据结构与算法 1. 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。 2. 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。 3. 线性表的定义;线性表的顺序存储结构及其插入与删除运算。 4. 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。 5. 线性单链表、双向链表与循环链表的结构及其基本运算。 6. 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。 7. 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。 二、 程序设计基础 1. 程序设计方法与风格。 2. 结构化程序设计。 3. 面向对象的程序设计方法,对象,方法,属性及继承与多态性。 三、 软件工程基础 1. 软件工程基本概念,软件生命周戎概念,软件工具与软件开发环境。 2. 结构化分析方法,数据流图,数据字典,软件需求规格说明书。 3. 结构化设计方法,总体设计与详细设计。 4. 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。 5. 程序的调试,静态调试与动态调试。 四、 数据库设计基础 1. 数据库的基本概念:数据库,数据库管理系统,数据库系统。 2. 数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。 3. 关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。 4. 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。 考试方式 1、 公共基础的考试方式为笔试,与C语言(VisualBASIC、Visual FoxPro、Java、Access、Visual C++)的笔试部分合为一张试卷。公共基础部分占全卷的30分。 2、 公共基础知识有10道选择题和5道填空题。 http://www.gxjzy.com/gxjzy/djks/ksdg/2pub.htm 二级(C语言程序设计)考试大纲 公共基础知识 二级考试大纲中的公共基础知识部分 基本要求 1. 掌握算法的基本概念。 2. 掌握基本数据结构及其操作。 3. 掌握基本排序和查找算法。 4. 掌握逐步求精的结构化程序设计方法。 5. 掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。 6. 掌握数据的基本知识,了解关系数据库的设计。 考试内容 一、 基本数据结构与算法 1. 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。 2. 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。 3. 线性表的定义;线性表的顺序存储结构及其插入与删除运算。 4. 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。 5. 线性单链表、双向链表与循环链表的结构及其基本运算。 6. 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。 7. 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。 二、 程序设计基础 1. 程序设计方法与风格。 2. 结构化程序设计。 3. 面向对象的程序设计方法,对象,方法,属性及继承与多态性。 三、 软件工程基础 1. 软件工程基本概念,软件生命周戎概念,软件工具与软件开发环境。 2. 结构化分析方法,数据流图,数据字典,软件需求规格说明书。 3. 结构化设计方法,总体设计与详细设计。 4. 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。 5. 程序的调试,静态调试与动态调试。 四、 数据库设计基础 1. 数据库的基本概念:数据库,数据库管理系统,数据库系统。 2. 数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。 3. 关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。 4. 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。 考试方式 1、 公共基础的考试方式为笔试,与C语言(VisualBASIC、Visual FoxPro、Java、Access、Visual C++)的笔试部分合为一张试卷。公共基础部分占全卷的30分。 2、 公共基础知识有10道选择题和5道填空题。 C语言程序设计 基本要求 1.熟悉TURBO C集成环境。 2.熟练掌握结构化程序设计的方法,具有良好的程序设计风格。 3.掌握程序设计中简单的数据结构和算法。 4.TURBO C的集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。 考试内容 一、C语言的结构 1.程序的构成,MAIN函数和其他函数。 2.头文件,数据说明,函数的开始和结束标志。 3.源程序的书写格式 4.C语言的风格。 二、数据类型及其运算 1.C的数据类型(基本类型,构造类型,指针类型,空类型)及其定义方法。 2.C运算符的种类、运算优先级和结合性。 3.不同类型数据间的转换与运算。 4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则。 三、基本语句 1.表达式语句,空语句,复合语句。 2.数据的输入和输出,输入输出函数的调用。 3.复合语句。 4.GOTO语句和语句标号的使用。 四、选择结构程序设计 1.用if语句实现选择结构。 2.用switch语句实现多分支选择结构。 3.选择结构的嵌套。 五、循环结构程序设计 1.for 循环结构。 2.while和do while循环结构。 3.continue语句和break语句。 4.循环的嵌套。 六、数组的定义和引用 1.一维数组和多维数组的定义、初始化和引用。 2.字符串与字符数组。 七、函数 1.库函数的正确调用。 2.函数的定义方法。 3.函数的类型和返回值。 4.形式参数与实在参数,参数值的传递。 5.函数的正确调用,嵌套调用,递归调用。 6.局部变量和全局变量。 7.变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。 8.内部函数与外部函数。 八、编译预处理 1.宏定义:不带参数的宏定义;带参数的宏定义。 2.“文件包含”处理。 九、指针 1.指针与指针变量的概念,指针与地址运算符。 2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。 3.用指针作函数参数。 4.返回指针值的指针函数。 5.指针数组,指向指针的指针,MAIN函数的命令行参数。 十、结构体(即“结构”)与共用体(即“联合”) 1.结构体和共用体类型数据的定义方法和引用方法。 2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。 十一、位运算 1.位运算符的含义及使用。 2.简单的位运算。 十二、文件操作 只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。 1.文件类型指针(FILE类型指针)。 2.文件的打开与关闭(fopen,fclose)。 3.文件的读写(fputc,fgetc,fputs,fgets,fread,frwite,fprintf,fscanf函数),文件的定位(rewind,fseek函数)。

记得采纳啊

Ⅵ 单元测试主要检验软件设计的最小单元,多采用什么测试技术

单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。
测试用例设计
下面谈谈测试用例设计。前面已经说了,测试用例的核心是输入数据。预期输出是依据输入数据和程序功能来确定的,也就是说,对于某一程序,输入数据确定了,预期输出也就可以确定了,至于生成/销毁被测试对象和运行测试的语句,是所有测试用例都大同小异的,因此,我们讨论测试用例时,只讨论输入数据。
前面说过,输入数据包括四类:参数、成员变量、全局变量、IO媒体,这四类数据中,只要所测试的程序需要执行读操作的,就要设定其初始值,其中,前两类比较常用,后两类较少用。显然,把输入数据的所有可能取值都进行测试,是不可能也是无意义的,我们应该用一定的规则选择有代表性的数据作为输入数据,主要有三种:正常输入,边界输入,非法输入,每种输入还可以分类,也就是平常说的等价类法,每类取一个数据作为输入数据,如果测试通过,可以肯定同类的其他输入也是可以通过的。下面举例说明:
正常输入
例如字符串的Trim函数,功能是将字符串前后的空格去除,那么正常的输入可以有四类:前面有空格;后面有空格;前后均有空格;前后均无空格。
边界输入
上例中空字符串可以看作是边界输入。
再如一个表示年龄的参数,它的有效范围是0-100,那么边界输入有两个:0和100。
非法输入
非法输入是正常取值范围以外的数据,或使代码不能完成正常功能的输入,如上例中表示年龄的参数,小于0或大于100都是非法输入,再如一个进行文件操作的函数,非法输入有这么几类:文件不存在;目录不存在;文件正在被其他程序打开;权限错误。
如果函数使用了外部数据,则正常输入是肯定会有的,而边界输入和非法输入不是所有函数都有。一般情况下,即使没有设计文档,考虑以上三种输入也可以找出函数的基本功能点。实际上,单元测试与代码编写是“一体两面”的关系,编码时对上述三种输入都是必须考虑的,否则代码的健壮性就会成问题。
白盒覆盖
上面所说的测试数据都是针对程序的功能来设计的,就是所谓的黑盒测试。单元测试还需要从另一个角度来设计测试数据,即针对程序的逻辑结构来设计测试用例,就是所谓的白盒测试。在老纳看来,如果黑盒测试是足够充分的,那么白盒测试就没有必要,可惜“足够充分”只是一种理想状态,例如:真的是所有功能点都测试了吗?程序的功能点是人为的定义,常常是不全面的;各个输入数据之间,有些组合可能会产生问题,怎样保证这些组合都经过了测试?难于衡量测试的完整性是黑盒测试的主要缺陷,而白盒测试恰恰具有易于衡量测试完整性的优点,两者之间具有极好的互补性,例如:完成功能测试后统计语句覆盖率,如果语句覆盖未完成,很可能是未覆盖的语句所对应的功能点未测试。
白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合,在此不作讨论。跟条件有关的覆盖就有三种,解释一下:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。老纳做过一些粗浅的研究,发现与条件直接有关的错误主要是逻辑操作符错误,例如:||写成

Ⅶ 什么是单元测试

单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。 单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。 工厂在组装一台电视机之前,会对每个元件都进行测试,这,就是单元测试。 其实我们每天都在做单元测试。你写了一个函数,除了极简单的外,总是要执行一下,看看功能是否正常,有时还要想办法输出些数据,如弹出信息窗口什么的,这,也是单元测试,老纳把这种单元测试称为临时单元测试。只进行了临时单元测试的软件,针对代码的测试很不完整,代码覆盖率要超过70%都很困难,未覆盖的代码可能遗留大量的细小的错误,这些错误还会互相影响,当BUG暴露出来的时候难于调试,大幅度提高后期测试和维护成本,也降低了开发商的竞争力。可以说,进行充分的单元测试,是提高软件质量,降低开发成本的必由之路。 对于程序员来说,如果养成了对自己写的代码进行单元测试的习惯,不但可以写出高质量的代码,而且还能提高编程水平。 要进行充分的单元测试,应专门编写测试代码,并与产品代码隔离。老纳认为,比较简单的办法是为产品工程建立对应的测试工程,为每个类建立对应的测试类,为每个函数(很简单的除外)建立测试函数。首先就几个概念谈谈老纳的看法。 一般认为,在结构化程序时代,单元测试所说的单元是指函数,在当今的面向对象时代,单元测试所说的单元是指类。以老纳的实践来看,以类作为测试单位,复杂度高,可操作性较差,因此仍然主张以函数作为单元测试的测试单位,但可以用一个测试类来组织某个类的所有测试函数。单元测试不应过分强调面向对象,因为局部代码依然是结构化的。单元测试的工作量较大,简单实用高效才是硬道理。 有一种看法是,只测试类的接口(公有函数),不测试其他函数,从面向对象角度来看,确实有其道理,但是,测试的目的是找错并最终排错,因此,只要是包含错误的可能性较大的函数都要测试,跟函数是否私有没有关系。对于C++来说,可以用一种简单的方法区隔需测试的函数:简单的函数如数据读写函数的实现在头文件中编写(inline函数),所有在源文件编写实现的函数都要进行测试(构造函数和析构函数除外)。 为什么要使用单元测试 我们编写代码时,一定会反复调试保证它能够编译通过。如果是编译没有通过的代码,没有任何人会愿意交付给自己的老板。但代码通过编译,只是说明了它的语法正确;我们却无法保证它的语义也一定正确,没有任何人可以轻易承诺这段代码的行为一定是正确的。 幸运,单元测试会为我们的承诺做保证。编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。有了单元测试,我们可以自信的交付自己的代码,而没有任何的后顾之忧。 什么时候测试?单元测试越早越好,早到什么程度?XP开发理论讲究TDD,即测试驱动开发,先编写测试代码,再进行开发。在实际的工作中,可以不必过分强调先什么后什么,重要的是高效和感觉舒适。从老纳的经验来看,先编写产品函数的框架,然后编写测试函数,针对产品函数的功能编写测试用例,然后编写产品函数的代码,每写一个功能点都运行测试,随时补充测试用例。所谓先编写产品函数的框架,是指先编写函数空的实现,有返回值的随便返回一个值,编译通过后再编写测试代码,这时,函数名、参数表、返回类型都应该确定下来了,所编写的测试代码以后需修改的可能性比较小。 由谁测试?单元测试与其他测试不同,单元测试可看作是编码工作的一部分,应该由程序员完成,也就是说,经过了单元测试的代码才是已完成的代码,提交产品代码时也要同时提交测试代码。测试部门可以作一定程度的审核。 关于桩代码,老纳认为,单元测试应避免编写桩代码。桩代码就是用来代替某些代码的代码,例如,产品函数或测试函数调用了一个未编写的函数,可以编写桩函数来代替该被调用的函数,桩代码也用于实现测试隔离。采用由底向上的方式进行开发,底层的代码先开发并先测试,可以避免编写桩代码,这样做的好处有:减少了工作量;测试上层函数时,也是对下层函数的间接测试;当下层函数修改时,通过回归测试可以确认修改是否导致上层函数产生错误。 在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。 单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。 经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。 一些流行的误解 在明确了什么是单元测试以后,我们可以进行"反调论证"了。在下面的章节里,我们列出了一些反对单元测试的普遍的论点。然后用充分的理由来证明这些论点是不足取的。 它浪费了太多的时间
一旦编码完成,开发人员总是会迫切希望进行软件的集成工作,这样他们就能够看到实际的系统开始启动工作了。 这在外表上看来是一项明显的进步,而象单元测试这样的活动也许会被看作是通往这个阶段点的道路上的障碍, 推迟了对整个系统进行联调这种真正有意思的工作启动的时间。 在这种开发步骤中,真实意义上的进步被外表上的进步取代了。系统能够正常工作的可能性是很小的,更多的情况是充满了各式各样的Bug。在实践中,这样一种开发步骤常常会导致这样的结果:软件甚至无法运行。更进一步的结果是大量的时间将被花费在跟踪那些包含在独立单元里的简单的Bug上面,在个别情况下,这些Bug也许是琐碎和微不足道的,但是总的来说,他们会导致在软件集成为一个系统时增加额外的工期, 而且当这个系统投入使用时也无法确保它能够可靠运行。 在实践工作中,进行了完整计划的单元测试和编写实际的代码所花费的精力大致上是相同的。一旦完成了这些单元测试工作,很多Bug将被纠正,在确信他们手头拥有稳定可靠的部件的情况下,开发人员能够进行更高效的系统集成工作。这才是真实意义上的进步,所以说完整计划下的单元测试是对时间的更高效的利用。而调试人员的不受控和散漫的工作方式只会花费更多的时间而取得很少的好处。 使用AdaTEST和Cantata这样的支持工具可以使单元测试更加简单和有效。但这不是必须的,单元测试即使是在没有工具支持的情况下也是一项非常有意义的活动。 它仅仅是证明这些代码做了什么
这是那些没有首先为每个单元编写一个详细的规格说明而直接跳到编码阶段的开发人员提出的一条普遍的抱怨, 当编码完成以后并且面临代码测试任务的时候,他们就阅读这些代码并找出它实际上做了什么,把他们的测试工作基于已经写好的代码的基础上。当然,他们无法证明任何事情。所有的这些测试工作能够表明的事情就是编译器工作正常。是的,他们也许能够抓住(希望能够)罕见的编译器Bug,但是他们能够做的仅仅是这些。 如果他们首先写好一个详细的规格说明,测试能够以规格说明为基础。代码就能够针对它的规格说明,而不是针对自身进行测试。这样的测试仍然能够抓住编译器的Bug,同时也能找到更多的编码错误,甚至是一些规格说明中的错误。好的规格说明可以使测试的质量更高,所以最后的结论是高质量的测试需要高质量的规格说明。 在实践中会出现这样的情况: 一个开发人员要面对测试一个单元时只给出单元的代码而没有规格说明这样吃力不讨好的任务。你怎样做才会有更多的收获,而不仅仅是发现编译器的Bug?第一步是理解这个单元原本要做什么, --- 不是它实际上做了什么。 比较有效的方法是倒推出一个概要的规格说明。这个过程的主要输入条件是要阅读那些程序代码和注释, 主要针对这个单元, 及调用它和被它调用的相关代码。画出流程图是非常有帮助的,你可以用手工或使用某种工具。 可以组织对这个概要规格说明的走读(Review),以确保对这个单元的说明没有基本的错误, 有了这种最小程度的代码深层说明,就可以用它来设计单元测试了。 我是个很棒的程序员, 我是不是可以不进行单元测试?
在每个开发组织中都至少有一个这样的开发人员,他非常擅长于编程,他们开发的软件总是在第一时间就可以正常运行,因此不需要进行测试。你是否经常听到这样的借口? 在真实世界里,每个人都会犯错误。即使某个开发人员可以抱着这种态度在很少的一些简单的程序中应付过去。 但真正的软件系统是非常复杂的。真正的软件系统不可以寄希望于没有进行广泛的测试和Bug修改过程就可以正常工作。 编码不是一个可以一次性通过的过程。在真实世界中,软件产品必须进行维护以对操作需求的改变作出反应, 并且要对最初的开发工作遗留下来的Bug进行修改。你希望依靠那些原始作者进行修改吗? 这些制造出这些未经测试的原始代码的资深专家们还会继续在其他地方制造这样的代码。在开发人员做出修改后进行可重复的单元测试可以避免产生那些令人不快的负作用。

Ⅷ 《C语言程序设计》江宝钏主编-习题7-1-平均成绩 题目描述 从键盘输入10个学生成绩,求平均

阅读全文

与程序设计单元测试7相关的资料

热点内容
合肥小学生哪里学编程好 浏览:465
985大学生穿越大唐小说 浏览:656
长生电影 浏览:693
道txt下载 浏览:584
qq快传收到的app怎么安装啊 浏览:648
男主角身体有电的国产电影 浏览:370
免费看会员电影网址 浏览:440
蓝桥杯编程题在哪里编写 浏览:525
韩国电影女的美容店 浏览:912
四点全漏的电影 浏览:730
书包网官网txt下载cc 浏览:603
女主是刘亦菲的小说 浏览:703
小米的玩具日记米佩婷1 浏览:97
男主已婚女主第三者婆文 浏览:695
贪婪岛三个女演员的名字 浏览:228
免费播放在线韩国爱情感人电影 浏览:812
民国崛起之黄埔 浏览:390
love法国电影百度云 浏览:885
视频文件格式app 浏览:289

友情链接