'1. Analyze/Terms'에 해당되는 글 21건

  1. 2016.12.29 ACID, BASE, CAP
  2. 2016.11.21 YAGNI
  3. 2016.07.21 Instant Articles / Apple News / AMP
  4. 2015.04.15 Functional Testing and Non-Functional Testing
  5. 2014.12.12 Web Garden and Web Farm
  6. 2014.06.14 DMZ (Computing)
  7. 2013.02.20 What is the difference between functionality and features?
  8. 2012.06.26 Webinar
  9. 2012.06.25 White-label product
  10. 2012.02.19 Third party cookie (제3사 쿠키)
  11. 2012.01.14 MEMS (micro-electromechanical systems)
  12. 2011.11.21 Clean room design
  13. 2011.07.31 PDR (Pedestrian Dead Reckoning) 기술
  14. 2011.07.31 라이프로그 (Lifelog)
  15. 2011.07.24 메타 문자
  16. 2011.03.09 내재동기(Intrinsic Motivation) 1
  17. 2011.03.07 What is a test architect?
  18. 2011.02.09 닭과 돼지
  19. 2011.02.09 Cyclomatic complexity
  20. 2009.12.03 GWES
2016. 12. 29. 05:32

ACID, BASE, CAP

2016. 11. 21. 00:28

YAGNI

You Aren't Gonna Need It.


A programmer should not add functionality until deemed(여기다, 생각하다) necessary.


Always implement things when you actually need them, never when you just foresee that you need them.


Do the simplest thing that could possibly work.


https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it


2016. 7. 21. 13:46

Instant Articles / Apple News / AMP

모바일 콘텐츠 최적화 경쟁


Facebook - Instance Articles


Apple - Apple News


Google - AMP (Accelerated Mobile Pages)



구글의 AMP 는 구글이 정한 규약에 맞게끔 페이지를 구성하면 웹사이트 속도를 올릴수 있다고 한다.


AMP 는 다음 3가지 요소로 구성된다.


AMP HTML - 기존 HTML 문서에서 속도에 부담을 주는 요소를 배제하고, 몇몇 확장 속성들을 추가한 일종의 HTML 확장

AMP JS - AMP HTML 을 읽고 렌더링하는 런타임(Runtime)

Google AMP Cache - 구글이 제ㄱㅇ하는 AMP HTML 문서의 캐싱 서비스


AMP 문서를 만들어 올리면 구글이 자체 CDN 을 통해 더 빠른 액세스를 할 수 있게 해주는 것이다.


참고 : http://www.usefulparadigm.com/2016/02/24/adding-the-google-amp-to-mobile-website/

2015. 4. 15. 05:56

Functional Testing and Non-Functional Testing

ISO 9126 introduces the following quality model :


  • Functionality 기능성

    • Suitability
provide an appropriate set of functions

    • Accuracy
provide the right or agreed results or effect

    • Interoperability
interact with one or more specified systems

    • Security
protect information and data so that unauthorised persons or systems cannot read or modify them and authorised persons or systems are not denied access to them.

    • Functionality Compliance


  • Reliability 신뢰성

    • Maturity
avoid failure as a result of faults

    • Fault Tolerance
maintain a specified level of performance

    • Recoverability
re-establish a specified level of performance and recover the data

    • Reliability Compliance


  • Usability 사용성

    • Understandability
enable the user to understand whether the software is suitable

    • Learnability
enable the user to learn its application.

    • Operability
enable the user to operate and control it

    • Attractiveness
attractive to the user

    • Usability Compliance


  • Efficiency 효율성

    • Time Behaviour
provide appropriate response and processing times and throughput rates

    • Resource Utilization
use appropriate amounts and types of resources

    • Efficiency Compliance


  • Maintainability 유지보수성

    • Analyzability
be diagnosed for deficiencies or causes of failures

    • Changeability
enable a specified modification to be implemented

    • Stability
avoid unexpected effects from modifications

    • Testability
enable modified software to be validated

    • Maintainability Compliance


  • Portability 이식성

    • Adaptability
be adapted for different specified environments without applying actions or means

    • Installability
be installed in a specified environment

    • Co-Existence
co-exist with other independent software

    • Replaceability
be used in place of another specified software product

    • Portability Compliance


Only Functionality of 6 items above is under Functional Testing. The rest is under Non-Functional Testing. 

References: 
- 자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기


2014. 12. 12. 05:34

Web Garden and Web Farm

Web Garden 


Web application deployed on a server with multiple processors


Web Farm


Web application deployed on multiple server


References : http://www.youtube.com/watch?v=z4rpYK4DNoI

2014. 6. 14. 17:58

DMZ (Computing)

In computing, DMZ term is often used over networks.


DMZ is the very term that we know it as military related. Its full spells are "demilitarized zone". Korean is '비무장 지대'.


From Wikipedia



 In computer security, a DMZ or Demilitarized Zone (sometimes referred to as a perimeter network) is a physical or logical subnetwork that contains and exposes an organization's external-facing services to a larger and untrusted network, usually the Internet. The purpose of a DMZ is to add an additional layer of security to an organization's local area network(LAN); an external attacker only has direct access to equipment in the DMZ, rather than any other part of the network.



 내부 네트워크와 외부 네트워크가 DMZ로 연결할 수 있도록 허용하면서도, DMZ 내의 컴퓨터는 오직 외부 네트워크에만 연결할 수 있도록 한다는 점이다. 즉 DMZ 안에 있는 호스트들은 내부 네트워크로 연결할 수 없다. 이것은 DMZ에 있는 호스트들이 외부 네트워크로 서비스를 제공하면서 DMZ 안의 호스트의 칩입으로부터 내부 네트워크를 보호한다. 내부 네트워크로 불법적 연결을 시도하는 외부 네트워크의 누군가가 있다면, DMZ는 그들에게 막다른 골목이 된다.



2013. 2. 20. 06:52

What is the difference between functionality and features?

From http://wiki.answers.com/Q/What_is_the_difference_between_functionality_and_features


Functionality refers to how well something works. 
Features refer to what something can do.

A Feature is a sub-system or facility that in included within a larger system.

A Function is the an action that can be performed within the system. Many Functionalities are enabled through a Feature.

For instance, User Administration is a feature offered in Windows. Add User, Grant Privilege to User, Delete User, List Users, etc. are Functions enabled by the User Administration feature.

2012. 6. 26. 10:29

Webinar

Web + seminar 로 웹상에서 행해지는 프리젠테이션
출처: 네이버 지식사전
2012. 6. 25. 11:05

White-label product

A white label product or service is a product or service is a product or service by one company that other companies rebrand to make it appear as if they made it.

출처: 위키피디아
2012. 2. 19. 09:25

Third party cookie (제3사 쿠키)

출처: 소프트웨어, 누가 이렇게 개떡같ㅇ 만든거야

웹사이트는 아주 작은 이미지(보통 1픽셀 크기의)를 사이트의 모든 페이지에 넣어 둡니다. 웹 비콘(web beacon)으로 알려진 이 이미지는 DoubleClick.com 에서 읽도록 되어 있었습니다. 브라우저가 사용자에게 보이기 위해 페이지를 만들어낼 때 DoubleClick.com 으로 그 이미지를 요청하게 됩니다. 이렇게 해서 더블클릭의 서버는 사용자가 요청한 페이지에 상관없이 자신의 쿠키를 읽을 수 있게 됩니다. 이런 트릭을 제3사 쿠기(third-party cookie)라 합니다.

출처:  http://en.wikipedia.org/wiki/HTTP_cookie 

Cookies have some important implications on the privacy and anonymity of Web users. While cookies are sent only to the server setting them or the server in the same Internet domain, a Web page may contain images or other components stored on servers in other domains. Cookies that are set during retrieval of these components are called third-party cookies. The standards for cookies, RFC 2109 and RFC 2965, specify that browsers should protect user privacy and not allow third-party cookies by default. But most browsers, such as Mozilla FirefoxInternet ExplorerOpera and Google Chrome do allow third-party cookies by default, as long as the third-party website has Compact Privacy Policy published.

In this fictional example, an advertising company has placed banners in two websites. Hosting the banner images on its servers and using third-party cookies, the advertising company is able to track the browsing of users across these two sites.

Advertising companies use third-party cookies to track a user across multiple sites. In particular, an advertising company can track a user across all pages where it has placed advertising images or web bugs. Knowledge of the pages visited by a user allows the advertising company to target advertisements to the user's presumed preferences.


* Web bugs ( http://en.wikipedia.org/wiki/Web_bug )

web bug is an object that is embedded in a web page or email and is usually invisible to the user but allows checking that a user has viewed the page or email.[1] One common use is in email tracking. Alternative names are web beacontracking bug, and tag or page tag. Common names for web bugs implemented through an embedded image include tracking pixelpixel tag1×1 gif, and clear gif.[2] 

2012. 1. 14. 05:10

MEMS (micro-electromechanical systems)

MEMS는 반도체 칩에 내장된 센서, 밸브, 기어, 반사경, 그리고 구동기 등과 같은 아주 작은 기계장치와 컴퓨터를 결합하는 기술이다.

http://terms.co.kr/MEMS.htm 

MEMS(Microelectromechanical Systems의 약어)는 미세 기술로서 기계 부품, 센서액츄에이터전자 회로를 하나의 실리콘 기판 위에 집적화 한 장치를 가리킨다. 주로 반도체 집적회로 제작 기술을 이용해 제작되지만 반도체 집적회로에서 평면을 가공하는 프로세스로 제작할 때 입체 형상을 만들어야 하므로 반도체 집적회로의 제작에는 쓰이지 않는다. 에칭이라 불리는 제작 프로세스가 포함된다.

현재 제품으로서 시판되고 있는 것으로서는 잉크젯 프린터의 헤드,압력 센서가속도 센서자이로스코프프로젝터 등 이 있다. 응용 분야가 다방면에 걸쳐 있기 때문에 시장 규모가 확대되고 있다. 이 때문에 제2의 DRAM이라고도 말하고 있다.

http://ko.wikipedia.org/wiki/MEMS  

 
2011. 11. 21. 22:34

Clean room design

Clean room design (also known as the Chinese wall technique) is the method of copying a design by reverse engineering and then recreating it without infringing any of the copyrights and trade secrets associated with the original design. Clean room design is useful as a defense against copyright and trade secret infringement because it relies on independent invention. However, because independent invention is not a defense against patents, clean room designs typically cannot be used to circumvent patent restrictions.

http://en.wikipedia.org/wiki/Clean_room_design 
2011. 7. 31. 08:51

PDR (Pedestrian Dead Reckoning) 기술

정의: 각종 센서를 사용하여 사람이 이동하는 속도나 방향, 거리 등을 파악, 출발지점으로부터의 상대위치를 산출하는 기술

PDR 기술의 특징

- 실내/실외 측위가 모두 가능
- 측위 오차는 100m 보행에 수 m 정도
- 스마트폰 등이 탑재하고 있는 각종 센서를 활용할 수 있기 때문에 다른 측위기술과 함께 사용하는 것이 용이 
- 센서에 의한 측위오차가 축적되기 때문에 거리가 멀어지면 보정이 필요해 진다는 단점 존재 

출처: 삼성 SDS e-campus MobiLearn 
2011. 7. 31. 08:39

라이프로그 (Lifelog)

개인의 일상생활과 관련된 모든 행동들을 DB화하는 것으로 최적의 개인별 맞춤 서비스 가능

출처: 삼성 SDS MobiLearn 강의
2011. 7. 24. 07:50

메타 문자

일반적으로 문자 그대로 사용되지 않고 특별한 의미를 지니는 문자를 칭한다.

metacharacters

: special characters with special meanings

출처: "손에 잡히는 정규 표현식"
2011. 3. 9. 02:15

내재동기(Intrinsic Motivation)

일찍 잠이 들었습니다. 새벽 1시즈음에 잠이 깻는데 EBS TV 특강이 하고 있네요. 한 교수님이 침팬지에 대한 실험에 대해서 얘기하고 있습니다. 

고리를 푸는 도구를 침팬지에게 줍니다.
A 그룹과 B 그룹으로 나누었는데, A 그룹에게는 문제를 빨리 풀면 침팬지가 제일 좋아하는 과일 쥬스를 보상해 주었습니다.
B 그룹에게는 아무런 보상을 하지 않았습니다.

이렇게 실험을 진행하면 결국 어느 그룹이 문제를 빨리 그리고 더 잘 해결하게 되었을까요?

라는 내용을 강의 하고 계십니다. 무심코 내용이 너무 식상하다 싶어 냉장고에 물을 먹으러 갔습니다. 속으로는

'당연히 A 그룹이지! 인센티브 누가 모르나?'

라고 생각하면서 말이죠. 근데 오히려 B 그룹이 잘 한뎁니다.

'엥?'

라는 호기심에서 방송을 보다가 그 원인이 바로 "내재동기"라는 것에 있다고 합니다. 그리고 우리가 자주 사용하는 "외적동기" (어떤 보상, 인센티브)가 좋은 방법이 아닐 수 있다는 생각이 들었습니다. 듣다 보니 강의에 몰입하게 되었습니다. 그래서 이렇게 블로그에 정리를 하게 되었습니다.

A 그룹이 왜 B 그룹보다 더 못하게 된 이유는 다음과 같습니다.

문제를 해결하는 것은 보상을 얻는 방법인데 이걸 잘 해결하지 못하게 되면 보상을 얻지 못하는 미운 녀석이 될 수 있다는 것입니다. 보상이 좋은 동기가 될 수도 있지만 이처럼 의외의 결과를 초래할 수도 있다는 것입니다. 

반대로 B 그룹은 원래부터 보상이 없으므로 그냥 좋아서 문제를 해결하는 것입니다. 좋아하는 것 자체가 동기가 되어 A 그룹보다 더 잘할 수 있게 되는 것입니다.

이와 더불어 굉장히 충격적인 사실을 알게 되었습니다. 흔히들 사용하는 다음의 말들이 나쁘게 작용할 수 있다는 것입니다.

"성적오르면 ~ 사줄게"
"No Pain, No gain?"

성적이 오르지 못해서 내가 좋아하는 게임기를 얻지 못했어. 공부는 내가 원하는 것을 얻지 못하게 하는 녀석이야. 
지금 참아야 미래에 더 큰 무언가를 얻을 수 있어. 난 지금 참아야되.... 이렇게 계속 참으면서 살아간다...

이런 외적동기가 아닌 내적동기를 가지게 만들어야 합니다. 그렇게 되면 다음과 같이 됩니다.

Less Pain, More Gain!

좋아서 하는 일은 말려도 합니다. 좋아서 하는 일은 그 자체로 좋은 보상이 될 수 있습니다. 

내적 동기에 대해 한 사이트는 다음과 같이 정의하고 있습니다.

Definition: Intrinsic motivation refers to motivation that comes from inside an individual rather than from any external or outside rewards, such as money or grades.
2011. 3. 7. 23:14

What is a test architect?

2011. 2. 9. 22:52

닭과 돼지


닭과 돼지에 관한 이야기


닭과 돼지가 길을 따라 걷고 있었다. 닭이 돼지에게 ' 너 나랑 식당 같이 해볼래?" 라고 물었다. 돼지는 잠깐 생각하더나 ' 그래 좋겠다 그런데 식당 이름은 뭐로 할꺼야' 하고 물었다고 한다. 닭이' 당연히 햄과 달걀로 해야지' 라고 대답했다 순간 돼지가 멈춰 잠시 생각하더니.. 다음과 같이 말했다. "다시 생각해보니 너랑 같이 식당 못하겠다' 난 희생해야 하는데 너는 단지 관여만 하잖아?

 

이 비유의 핵심은 암닭과 돼지 모두 '헌신과 희생'을 하기는 하지만.. 암닭이 자신이 낳은 달걀을 식탁에 바치는 정도라면 돼지는 자신의 살을 내주어야 하는 처절하고 끔찍한 희생을 해야 한다는 말이다. 즉 닭은 프로젝트에 단지 관련된 사람이지만 돼지는 프로젝트를 위해서 자신을 희생하고 있는 사람을 의미한다고 볼 수 있다.


....


이글은 scrum 애자일 방법론에서 인용되는 우화인데.... 이글을 퍼온 원본(

 http://blog.naver.com/matnahof?Redirect=Log&logNo=30101482808)은 '맛나 숯불 바베큐 치킨' 네이버 블로그랍니다. ^^;


아래는 위키피디아의 링크입니다.


http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig

2011. 2. 9. 07:35

Cyclomatic complexity

아래 내용은 위키피디아 번역한 것입니다.

Cyclomatic complexity (또는 conditional complexity, 이하 CC) 는 Software Metric 의 하나이다.

* Software Metric
: a measure of some property of a piece of software or its specifications
: 소프트웨어 측량법  

1976에 J. McCabe, Sr 에 의해 개발되었고 프로그램의 복잡도를 가리키는 데 사용된다. CC는 프로그램의 소스 코드로부터 선형 독립 경로( linearly independent paths ) 를 측정한다. 개념은 Flesch-Kincaid 가독성 테스트에 의해 측정되는 일반적인 텍스트 복잡도와 약간 유사하다.

 * Linearly independent path
: 이 글에서는 선형 독립 경로 라고 번역됩니다.

CC 는 프로그램의 흐름 제어 그래프 (control flow grapth)를 이용하여 계산된다. 그래프의 노드는 더이상 나눌 수 없는 명령어 집합이다, 그리고 단방향 변(directed edge)은 만일 첫 번째 명령이 실행 된 후 바로 두번째 명령이 실행된다면 두 노드를 연결한다. CC 는 또한 프래그램 내의 함수, 모듈 또는 클래스등에도 응용될 수 있다.

* directed edge 
: directed 는 방향성 또는 단방향으로 해석될 수 있고, edge 는 변 또는 선으로 해석될 수 있음) 
: 말하자면 노드와 노드를 연결하는 단방향 화살표이다

기본 경로 테스팅 (Basis Path Testing, McCabe 에 의해 처음 제안된 테스팅 전략 ) 각각의 선형 독립 경로를 테스트한다. 이 경우, 테스트 케이스의 개수는 프로그램의 CC 와 동일하다.

Description

한 소스 코드 영역의 CC 는 선형 독립 경로의 개수이다. 예를 들면, 만일 소스 코드가 IF 문 또는 For 반복문과 같은 결정 지점 (decision points)이 하나도 없다면, 복잡도는 1이 될 것이다, 왜냐하면 오직 하나의 경로만이 존재하기 때문이다. 만약 코드가 하나의 조건을 포함하고 있는 한 개의 IF 문을 가지고 있다면, 2개의 경로가 있게 된다. 하나는 IF 문이 TRUE 로 평가될 때 이고 다른 하나는 FALSE 로 평가될 때이다.

수학적으로, 구조화된 프로그램( Structured Program ) 의 CC 는 기본 블락(basic block)들로 구성된 방향그래프 (directed graph)로 정의된다.그리고 블락들 간에 제어의 흐름을 변(edge)으로 표현한다. (프로그램의 제어 흐름 그래프). 복잡도는 아래 정의와 같다.

* Structured Program
: 구조화된 프로그램
: 여기서 Structured 의 의미는 특별히 "함수 당 하나의 종료 (return 문)를 가지는" 것을 의미 한다.

M = E - N + 2P

M = Cyclomatic Complexity
E = 변의 개수
N = 노드의 개수
P = 연결된 컴포넌트(connected component)의 개수


간단한 프로그램의 제어 흐름 그래프. 프로그램은 빨간색 노드에서 실행을 시작하고, 그러고 나서 하나의 루프 (그 빨간색 바로 아래의 세개의 노드로 된 그룹)로 들어 간다. 루프를 나오면 하나의 조건 문이 있다 (루프의 아래 그룹), 그리고 마침내 프로그램은 파란색 노드에서 종료한다. 

위 그림의 CC 는 다음과 같다.

9 (E) - 8 (N) + 2 * 1 (P) = 3 (CC)

다른 공식은 각 종료 지점(exit point)이 다시 시작 지점(entry point)과 연결되는 그래프에 사용된다. 이 경우, 그래프는 "강하게 연결되었다 (strongly connected)' 라고 불리어지고, 프로그램의 CC 는 그래프의 cyclomatic 개수와 같다 (첫번째 Betti 수라고 알려진). 공식은 다음과 같다.

M = E - N + P

이것은 그래프에 존재하는 선형 독립 사이클 (linearly independent cycle)의 개수를 계산하는 것과 같다, 즉 자신안에 다른 사이클을 포함하지 않는 사이클들 말이다. 각각의 종료 지점이 다시 시작 지점으로 되돌아 반복하기 때문에 각 종료 지점마다 적어도 하나의 사이클은 존재하게 된다.

단일 프로그램 (또는 서브루틴 또는 메소드)의 경우, P 는 항상 1과 같다. 그러나 CC 는 동시에 여러개의 프로그램 또는 서브프로그램에 동시에 (예로, 한 클래스의 모든 메소드) 적용될 수도 있고,  그러한 경우 P 는 프로그램의 개수와 동일할 것이다, 왜냐하면 각각의 서브프로그램은 그래프에서 연결되지 않은 서브셋(disconnected subset)으로 나타날 것이기 때문이다.

오직 하나의 진입점과 종료점을 가진 임의의 구조화된 프로그램의 CC 는  그 프로그램이 가지는 결정 지점(decision point, 즉, 'if' 문 과 조건 반복문)의 개수에 일을 더한 것과 같다.

CC는 여러개의 종료점을 가지는 한 프로그램으로 확장될 수 있다; 이 경우 다음과 같다:

π - s + 2

π 는 프로그램의 결정 지점(decision point)의 개수이고, 
s 는 종료점의 개수이다.


강하게-결합된 제어 흐름 그래프를 보여주는 위 함수에 대해 두번째 공식을 이용하여 계산해보면 다음과 같다. 
E = 10, N = 8 그리고 P = 1, 그래서 프로그램의 CC 는 여전히 3 이다.

Implications for Software Testing

CC 의 또다른 적용은 특정 모듈의 테스트 커버리지를 달성하기 위해 필요한 테스트 케이스의 개수를 결정하는 데 있다. 
CC 의 두 가지 속성때문에 유용하다, M 이 특정 모듈의 CC 라고 가정하자.

  • M 은 완전한 브랜치 커버리지를 달성하기 위해 필요한 테스트 케이스 개수의 상한선이다.
  • M 은 제어 흐름 그래프 (CFG) 를 달성하는 경로 개수의 하한선이다. 각 테스트 케이스가 하나의 경로라고 가정하면, Path coverage 를 달성하기 위해 필요한 테스트 케이스의 개수는 실제로 도달할 수 있는 경로의 개수와 동일하다. 그러나 일부 경로는 CFG 를 통한 경로의 개수가 path coverage 에 필요로 하는 테스트 케이스 개수의 명백한 상한선일지라도 불가능할 수 있다. (가능한 경로의) 최후의 개수는 가끔 M 보다 작다.

위 세가지 경우에 대한 개수는 다음과 같다.

branch coverage ≤ cycomatic complexity < 경로의 개수

예를 들어, 두개의 순차적인 if-then-else 구문으로 구성된 프로그램을 고려해 보자.

if ( c1() )
    f1();
else
    f2();

if( c2() )
    f3();
else
    f4();

이 예에서는, 두개의 테스트 케이스로 완전한 branch coverage 를 충분히 달성할 수 있지만, 완전한 path coverage 를 달성하기 위해서는 4개의 테스트 케이스가 필요하다. 또한 프로그램의 CC 는 3 (9 - 7 + 1) 이다.

일반적으로, 한 모듈의 모든 실행 경로 전체를 테스트하기 위해서는 크게 신경써야만 한다. 이것은 아주 높은 복잡도(complexity number)를 가진 모듈은 낮은 값을 가진 모듈보다 더 많은 테스팅 노력이 필요로 하다는 것을 의미한다 왜냐하면 더 높은 복잡도는 코드에 더 많은 경로가 존재한다는 것을 가리키기 때문이다. 이것은 또한 프로그래머가 이해하기에 더 어렵다는 것을 의미한다 왜냐하면 프로그래머는 다른 경로들과 그러한 경로의 결과를 이해해야 하기 때문이다.

불행히도, 프로그램의 모든 가능한 경로를 테스트 하는 것이 언제나 실용적인 것은 아니다. 위 예제를 살펴보면, 추가적인 if-then-else 문이 추가될 때 마다, 가능한 경로의 개수는 두 배가 된다. 프로그램이 이런 식으로 커진다면, 모든 경로에 대해 테스트를 하는 것은 비현실적이다.

하나의 일반적인 테스팅 전략은, NIST 구조화된 테스팅 방법에 의해 지지되는, 모듈의 충분한 커버리지를 얻기위해필요한 white-box test 의 개수를 결정하기 위해 모듈의 CC 를 사용하는 것이다. 거의 모든 경우, 이러한 방법을 따르면, 하나의 모듈은 최소한 CC 만큼의 테스트는 가해져야 한다. 대부분의 경우, 테스트의 개수는 함수의 모든 적절한 경로를 테스트하는 데 충분하다. 

정밀하게 테스트 하기 위해 단순한 branch coverage 보다는 더많은 테스트를 필요로 하는 함수의 예로 다시 위 함수를 살펴보자. 하지만 버그가 일어나는 것을 피하기 위해 f1() 또는 f3() 중 하나를 호출하는 임의의 코드는 반드시 다른 것을 호출해야 한다고 가정하자. c1() 과 c2() 의 결과는 독립적이다고 가정하고, 위에서 언급된 함수는 버그를 포함하고 있다는 것을 의미한다. Branch coverage 는 해당 메소드에 단지 두개의 테스트만 수행하도록 하고, 가능한 테스트 케이스의 집한은 아래와 같을 것이다.

  • c1() 은 true 를 반환하고 c2() 도 true 를 반환
  • c1() 은 false 를 반혼하고 c2() 도 false 를 반환.
이 테스트 케이스의 어떤 것도 버그를 발견하지 못한다. 하지만, 만일 필요로 하는 테스트 케이스 개수에 CC 를 사용한다면, 그 개수는 3으로 증가할 것이다. 그리하여 우리는 반드시 아래 경로 들 중 하나를 테스트해야만 한다.

 역자 주: 가정에서 f1() 을 호출한 경우 f3 () 를 반드시 호출해야 한다고 하였습니다. (그 반대도 마찬가지) 만약 f1() 을 호출하였는데 f3() 를 호출하지 않았다면 버그가 발생한다고 가정하였습니다.

위의 경우는 f1() -> f3(), f2() -> f4() 가 되기 때문에 둘다 버그가 발생하지 않습니다. 하지만 아래의 경우는
f1() ->f4(), f2() -> f3() 가 되기 때문에 에러가 발생합니다.


  • c1() 은 true 를 반환하고 c2() 는 false 를 반환
  • c1() 은 false 를 반환하고 c2() 는 true 를 반환

이 테스트 케이스 중 하나는 버그를 발견할 것이다.
2009. 12. 3. 01:58

GWES

GWES 란,

Graphics, Windowing, and Event Subsystem 의 줄임말이다. 운영체제 위에서 실행되는 그래픽 사용자 인터페이스를 말한다.

출처 : Programming Microsoft Windows CE 2nd Edition