KASA_SWTesting_2nd

Download Report

Transcript KASA_SWTesting_2nd

Software Testing
- Case Study -
2011.01.03
[email protected]
강정훈
© Samsung Electronics Co., DMC R&D Center
Contents
Ⅰ Introduction
Ⅱ Static Analysis
Ⅲ Pairwise
IV Interrupt Test
V Test Automation
Swtesting.co.kr
2
Ground Rule
인터럽트
Interrupt
Swtesting.co.kr
새로운 질문
/의견
New Thread
추가 의견/내용
이제 그만할까요
Same Thread
Stop Signal
3
Introduction
•Who is presenting ?
[email protected]
[email protected]
@kang_maestro
http://swtest.tistory.com
http://swtesting.co.kr
•
•
•
•
•
2003
Swtesting.co.kr
2005
2007
Integration test
System test
Stress test
Test Automation
Continuous Integration
2008 ~ 2010
4
Static Analysis
• 리뷰와 마찬가지로 장애(Failures)보다는 오류(Error)나 결함
(Defects)을 발견함
• 대상 소프트웨어를 실행하지 않는 상태에서 툴의 지원으로 수행하
는것
• 정적 분석의 가치




테스트 실행 전 조기 결함 발견
복잡도 분석
소프트웨어 모델상의 의존도와 불일치성(Dependencies and inconsistencies) 발견
코드와 설계의 유지보수성(Maintainability) 향상
 정적 분석 툴 종류
Static Analysis Tool
Prevent
C++Test
RSAR
K8
Understand
QAC
QAC++
FindBugs
RATS
CodePro Analytix
Swtesting.co.kr
Supported language
C / C++ / Java
C / C++
Java
C / C++ / Java
C / C++ / Java / Ada / Fortran / Delphi
C
C++
Java
C / C++ / Python / Perl / PHP
Java
License
Commercial
Commercial
Commercial
Commercial
Commercial
Commercial
Commercial
Open Source
Open Source
Commercial
5
Static Analysis – MISRA-C:2004
#
20
21
Idiom Rule
8진수를 사용하지 않는다. (‘0’ 제외)
함수 argument의 평가 순서에 의존적인 코드를 작성하지 않는다
Severity
Minor
22
함수 호출의 평가 순서에 의존적인 코드를 작성하지 않는다
Critical
24
volatile 변수를 access할 경우, 간단한 assignment expression을 사용한다
25
sizeof 연산 시, side effect를 포함하는 expression을 사용하지 않는다
26
논리연산자 &&, ||의 오른쪽 operand가 side effect를 포함하지 않도록 작성한다
27
Shift 연산 시, shift하는 비트 수는 0~(데이터 타입의 비트 크기- 1) 사이의 값으로 작성한다
28
Floating-point 값으로 비트 필드를 표현하지 않는다
29
Floating-point 타입으로 equality 혹은 inequality 여부를 테스트하지 않는다
30
for문에서 floating-point 타입의 개체를 포함하지 않도록 주의한다
31
Swtesting.co.kr
Critical
Critical
Critical
Critical
Critical
논리연산의 결과가 항상 true 혹은 false가 되지 않도록 작성한다
6
Static Analysis – MISRA-C:2004
#
1
분류
Use of Uninitialized Data
2
함수에 대한 포인터를 다른 타입으로 변환하지 않도록 주의한다 (void* 타입 제외)
Loss of Data
3
4
5
Assignment in Condition
14
17
19
Boolean 값을 산출하는 부분에 할당연산자를 사용하지 않도록 주의한다
Critical
Critical
Major
Major
실행되지 않는 코드가 존재하지 않도록 주의한다_
Major
Statement has no Effect
null이 아닌 statement는 execute되거나 control flow를 변경하는 등 최소한 한가지
영향은 있어야 한다
Major
Suspicious Return Values
리턴 값을 가지는 함수의 경우, 함수 종료 시 함수의 처리결과를 알려주는 리턴 값
을 반드시 반환한다
Major
Ignored Return Values
호출한 함수가 정보를 리턴하는 경우, 리턴된 데이터에 대한 테스트를 수행해야 한
다
Minor
15
16
함수 리턴 값의 타입은 선언된 리턴 타입과 일치해야 한다
Severity
Unreachable Code
12
13
Idiom Rule
초기화 하지 않은 변수를 read/사용하지 않는다 (static 변수 제외)
Unused Data
미사용 함수 파라미터가 없도록 작성한다 (가상 함수 제외)
함수의 리턴 값이 포인터 형이고, NULL을 리턴할 수 있는 경우는 사용 전에 NULL
Null Pointer Dereference
검사를 수행한다
Returning Reference to
Local Variable
Local object address를 global object에 할당하거나 함수의 리턴 값으로 할당하지
않도록 주의한다
Buffer Overflow
문자열 복사/연결 시 지정된 배열 크기를 초과하지 않도록 경계 값을 체크하는 함
수를 사용한다
Swtesting.co.kr
Critical
Major
7
Static Analysis – #1 Use of Uninitialized Data
1
초기화 하지 않은 변수를 read/사용하지 않는다 (static 변수 제외)
• 지역변수에는 값을 할당하지 않으므로 dummy
값으로 초기화 됨
• 값 할당 없이 특정값과 비교 연산 수행하고 있음
• 지역변수에 초기값 할당 권장
잠재결함 사례
void foo()
{
int state;
}
결함 방지를 위한 코딩 사례
void foo()
{
int state;
¡¦.
if (state != POWER_ON)
{
¡¦
}
}
Swtesting.co.kr
Critical
¡¦.
state = POWER_OFF;
¡¦
if (state != POWER_ON)
{
¡¦
}
8
Static Analysis – #2. Loss of Data
함수에 대한 포인터를 다른 타입으로 변환하지 않도록 주의한다
(void* 타입 제외)
2
Critical
• func_t2에 대한 포인터를 func_t 타입으로 변환한 경우, 두 함수의 return 타입이 다르
기 때문에 결과를 예측할 수 없음
•도구는 함수에 대한 포인터 변환 부분을 모두 검출한다.
• 의도하지 않은 변환이나 실수가 없는지 검토하는 목적으로 활용한다
잠재 결함 사례
typedef int (*func_t)(char *);
typedef float (*func_t2)(char *);
int foo(char *x)
{
return 1;
}
float goo(char *x)
{
return 1.1; }
void moo()
{
func_t p = foo;
func_t2 p2 = goo;
p= (func_t)p2;
/* Violation */
}
Swtesting.co.kr
결함 방지를 위한 코딩 사례
typedef float (*func_t2)(char *);
float goo(char *x)
{
return 1.1;
}
float goo2(char *x)
{
return 0.0;
}
void moo()
{
func_t2 p2 = goo;
func_t2 p3 = goo2;
p2= p3;
/* OK */
}
9
Static Analysis – #14. Ignored Return Values
14
호출한 함수가 정보를 리턴하는 경우, 리턴된 데이터에 대한 테스트를
수행해야 한다
잠재결함 사례
int SomeFunctionReturningError( );
void foo( )
{
SomeFunctionReturningError( ); // Violation
}
결함 방지를 위한 코딩 사례
int SomeFunctionReturningError( );
int foo( )
{
int x;
}
Swtesting.co.kr
Minor
x = SomeFunctionReturningError( ); // OK
(void)SomeFunctionReturningError( ); // OK
if (SomeFunctionReturningError( )); // OK
switch (SomeFunctionReturningError( )) // OK
{
}
return SomeFunctionReturningError( ); // OK
10
Pairwise
커버해야 할 기능적 범위에 비해 상대적으로 적은 량의 테스트 세트를 구성할
수 있다
대부분의 결함이 2개 요소의 상호작용 에 기인한다는 것에 착안하여 2개 요
소의 모든 조합을 다룬다
대표적인 툴
- Allpairs :
http://www.satisfice.com/tools.shtml
- PICT
http://blogs.msdn.com/b/nagasatish/archive/2006/11/30/pairwise-testing-pict-tool.aspx
Example
- Full combination : 720 = 3 * 4 * 4 * 5 * 3
- Pairwise : 23
720
3
4
4
5
3
CPU
Resolution
OS Version
메모리
통신사
S5PC111
4" 480x800
1.6
Class 2
SKT
스냅드래곤 1G
3.7" 480x800
2.1
Class 4
LGT
S5PC110
4" 480x854
2.2
Class 6
KT
7" 600x1024
2.3
Class 10
내장 메모리
Swtesting.co.kr
11
Pairwise - PICT
PICT ( Pairwise Independent Combinatorial Testing tool )
- 제약조건 (Constraint) 지정이 가능
Ex) 600x1024 이면서 LGT 인 조합이 Invalid 할 경우
IF [Resolution] = “600x1024” THEN [통신사] <> LGT;
-
Swtesting.co.kr
Negative 테스트
Weighting
Seeding
Output Randomization
12
Interrupt Test
주요 기능을 수행도중 Interruption 을 발생시키는 테스트
System Crash등의 Severity가 높은 Defect이 발견된다.
Example
전화걸기 전화받기 전화 송신중 끊기 전화 수신중 끊기 영상전화걸기 영상전화받기 영상전화 송신중끊기 영상전화 수신중끊기 SMS 수신
로그인
N/T
Pass
N/T
Pass
N/T
Pass
N/T
Pass
Pass
로그인 > 메인메뉴
N/T
Pass
N/T
Pass
N/T
Pass
N/T
Fail
Pass
메인메뉴
N/T
Pass
메인메뉴 > 로딩화면
로딩화면
로딩화면 > 게임화면
게임화면
Copy
Scan to PC
Scan to Email
Scan to FTP
Print
Fax Send
Fax Recv
Copy
Scan to PC
Scan to Email
Scan to FTP
Print
Fax Send
Fax Recv
Swtesting.co.kr
13
Test Automation
Report
DB
Developer
Source code
Repository
Report Server
Build Server
Test Director
Target device
Swtesting.co.kr
14
Reference
CAST
http://groups.google.com/group/xper/msg/4a03b9d7361eb4aa
MISRA C
http://en.wikipedia.org/wiki/MISRA_C
C++Test
http://www.parasoft.com/jsp/products/cpptest.jsp?itemId=47
Allpairs
http://www.satisfice.com/tools.shtml
PICT
http://blogs.msdn.com/b/nagasatish/archive/2006/11/30/pairwisetesting-pict-tool.aspx
Swtesting.co.kr
15