2016년 3월 30일 수요일

(E)How to create hierarchy labels(tree structure) in blogger, blogspot

This is How to make sublabels in tree structure tutorial
Main Idea is from this blog(How to create Sublabels / Hierarchical Labels in Blogspot) and I modify to use my blog
I'm new to web programming(and Javascript), so I'm hardly understand these codes, so just enough to make dTree

Sequece

1. Add Gadgets
    * blog-layout click
        1) sidebar-right-1, add 'HTML/JavaScript' gadget
            - title: 'Labels'
            - content: "." temporary
        2) sidebar-right-1, add 'tag' gadget
            - title: 'tag'
        => 'tag' gadget must be before 'HTML/JavaScript' gadget
             so change order if it's not
2. Add Template HTML Code
    * blog-template-HTML edit click
        1) add below code right after <head>
        these codes must work before dTree code usage
          I change location from reference blog.
<link href='https://sites.google.com/site/efekefek/file-js/dtree.css' rel='StyleSheet' type='text/css'/>
<script src='https://sites.google.com/site/efekefek/file-js/createdtree.js' type='text/javascript'/>
        2) find below code    
<b:widget id='Label1' locked='false' title='Labels' type='Label'>
<b:includable id='main'>
 ... 
</b:includable>
</b:widget>
          -> and change  ... to below code
          these code get each label count to be used at dTree
<script type='text/javascript'>
  var labelCountMap = {};
  <b:loop values='data:labels' var='label'>
     labelCountMap ["<data:label.name/>"] = "<data:label.count/>";
   </b:loop>
</script>
            - blue 'Label1' can be changed by the Label gadget number

3. Add 'HTML/JavaScript' Gadget content
    - add below code to Gadget content and change blue code by your own labels
     '<!--' and  '//-->' are erased. at first time I thought it should be there, but doesn't work
<div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function addMap(d, startingNode, parentNode, map) {
 for (var key in map) {
  if (isEmpty(map[key])) {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
  } else {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
   startingNode = addMap(d, startingNode, startingNode-1, map[key]);
  }
  
 }
 return startingNode; 
}

var data = {
    'label1' : {
        'label2' : {}
    }
};
d = new dTree('d');
d.config.useLines = true;
d.config.useIcons = false;
d.config.inOrder = true;

d.add(0,-1,'');   
addMap(d, 1, 0, data);

document.write(d);
</script>
</div>

4. Result












(K)블로거(블로그스팟)에서 라벨을 트리구조로 생성하는 방법

google blog(blogspot, blogger)의 post 를 트리 구조로 정리하는 방법을 설명하였습니다.
Main Idea는 원글(How to create Sublabels / Hierarchical Labels in Blogspot) 이며, 구현 시에 잘 안되던 것들은 수정하여 적용 하였습니다.
웹 프로그래밍과 Javascript를 모르는 상태에서 이 기능을 구현하기 위해서 필요한 내용을 검색해서 익혔기 때문에 부족한 점이 있습니다.

적용 순서

1. 필요한 가젯 추가
    * 블로그-레이아웃 클릭
        1) sidebar-right-1 에서 'HTML/JavaScript' 가젯 추가
            - 제목: 'Labels'
            - 내용: "." 임시로 아무내용
        2) sidebar-right-1 에서 '태그' 가젯 추가
            - 제목: '태그'
        => 중요한 것은 '태그' 가젯이 'HTML/JavaScript' 가젯보다 위에 있어야 하는 것
             왜냐하면 순서대로 코드를 적용해야 하기 때문에
             그래서 만약 순서가 반대로 되어 있으면 수동으로 변경 필요
2. 템플릿 HTML 코드 추가
    * 블로그-템플릿-HTML 편집 클릭
        1) <head> 바로 아랫줄에 아래 코드 두줄 추가
        웹 참조한 블로그와는 위치를 다르게 했습니다.
<link href='https://sites.google.com/site/efekefek/file-js/dtree.css' rel='StyleSheet' type='text/css'/>
<script src='https://sites.google.com/site/efekefek/file-js/createdtree.js' type='text/javascript'/>
        2) 아래 형태로 되어있는 태그 위젯의 내용에서
<b:widget id='Label1' locked='false' title='Labels' type='Label'>
<b:includable id='main'>
 ...  
</b:includable>
</b:widget>
            - ... 으로 표시된 내용을 모두 지우고 아래 코드로 변경
            웹 보여줄 라벨들이 각각 몇번 사용되었는지 숫자를 기억해 놓기 위한 코드 입니다.
<script type='text/javascript'>
  var labelCountMap = {};
  <b:loop values='data:labels' var='label'>
     labelCountMap ["<data:label.name/>"] = "<data:label.count/>";
   </b:loop>
</script>
           - 파란색으로 표시된 'Label1' 속의 숫자는 태그 가젯의 수에 따라 변경될 수 있으므로 확인 하여야 한다. 

3. 'HTML/JavaScript' 가젯의 내용(코드 추가)
    - 아래 내용을 해당 위젯을 내용으로 붙여 놓고 코드내용 중 파란색으로 표시된 label 트리구조 변수를 내가 원하는 형태로 변경
    웹 참조한 블로그에 있던 '<!--' 와 '//-->' 는 없앴습니다. 처음에는 원래 형식이 그런 줄 알았는데 주석같아 보여서 제거 했습니다.
<div class="dtree">
<p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
<script type="text/javascript">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

function addMap(d, startingNode, parentNode, map) {
 for (var key in map) {
  if (isEmpty(map[key])) {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
  } else {
   d.add(startingNode++,parentNode,key+' ('+labelCountMap[key]+')','/search/label/'+key);
   startingNode = addMap(d, startingNode, startingNode-1, map[key]);
  }
  
 }
 return startingNode; 
}

var data = {
    'label1' : {
        'label2' : {}
    }
};
d = new dTree('d');
d.config.useLines = true;
d.config.useIcons = false;
d.config.inOrder = true;

d.add(0,-1,'');   
addMap(d, 1, 0, data);

document.write(d);
</script>
</div>

4. 최종 결과











2016년 3월 27일 일요일

2016 대한민국 20대 총선(국회의원 선거) 정보 확인을 위한 정리

4월 13일 진행되는 2016 총선에 참여하기 위하여 필요한 내용을 검토하기 위한 페이지 입니다.
선거 초보로서 알아본 내용을 정리해 보려고 합니다.
아는 내용이 추가될 때마다 업데이트 하겠습니다.

-----

1. 내 선거구 확인 방법
    1) 제20대 국회의원선거 국회의원지역선거구구역표(링크) 확인
    2) 선거통계시스템(링크)에서 구-시군, 읍-면-동 선택

2. 후보자 확인
    1) 선거통계시스템(링크)에서 구-시군, 읍-면-동 선택 후 오른쪽 화면 확인

3. 편리한 싸이트
    1) 네이버 국회의원 선거(링크)
    2) 중앙선거관리위원회 홈페이지(링크)
    3) 선거통계시스템(링크)
    4) 나무위키 20대 국회의원 선거(링크): 선거 전반적인 설명
    5) 우리동네후보 어플(안드로이드 O, IOS X)
        - 기사(링크)
        - 아직 써보지 못했지만 좋은 의도를 가진 어플인듯 합니다.



     

(K) Machine Learning 01 실습 - TensorFlow의 설치및 기본적인 operations

Tensorflow
    Google 의 Open Source Library
    Data  Flow Graph 를 사용하여 수학적인 연산을 하는 것
    Python 으로 만들어진 Library, pandas나 numpy 같이 import 해서 사용하는 것

Data Flow Graph
    Node는 수학적인 계산을 하는 Operation("+" 와 같이 연산을 한다) 이다.
    Edge는 Data Array(다차원, Vector) 이며 이 때 이 Data Array들을 Tensor 라고 부른다.
    이 형태는 모든 Machine Learning 과 관련된 연산을 할 수 있는 Format 이다.
    각각의 Node들은 하나의 CPU나 GPU 상에서만 있을 필요가 없다.(아직 이해 안됨)

Tensorflow 설치
    제 환경: Window 7, 64bit
    설치 진행
        1. Docker 설치
        2. Tensorflow 설치
        3. Jupitor Notebook 에서 Docker 설치 시 확인한 IP 를 주소로 사용
        4. Jupitor Notebook 실행하여 Tensorflow import 가능 확인

이후 이해 진행
    코드 한줄 한줄 이해가 필요


ML lab 01
TensorFlow의 설치및 기본적인 operations




김태길 교수님의 윤리학 강의 - 어떻게 살아야 하는가?

김태길 교수님이 김용옥 선생님의 논술강의에 초청되어 강의하셨던 2개의 윤리학 강의를 요약 하였습니다.

“광복 직후 도덕적 혼란에 빠진 한국에서 윤리 운동을 전개하려고 윤리학을 공부하기로 했다” 는 말에서 교수님의 인품을 느낄 수 있습니다. (관련 기사)

-----

강의 내용

1. 윤리학은 무엇인가?
2. 인간에게 윤리란 무엇인가?
3. 절대적인 윤리는 존재 하는가?
4. 윤리적인 회의론은 어떻게 극복 하는가?
5. 인간 행동의 가치 서열은 어떻게 측정 하는가?

1. 윤리학은 무엇인가?
    1) 철학의 큰 3가지 분류 중 하나 이다.
        a. 형이상학: 우주의 문제-우주가 어떻게 생겼느냐, 존재의 근본은 무엇이냐?(정신적인 것이냐, 물질적인 것이냐)
        b. 인식론: 지식의 문제-이간은 무엇을 할 수 있는가, 참과 거짓의 구별은 어디에 있는가, 알 수 있는 한계는 어디이며 무언가를 알게되는 방법은 무엇이냐
        c. 윤리학:가치의 문제-참된, 바람직한 삶이 무엇이냐, 선이란 무엇이고 악이란 무엇이냐, 훌륭한 사람 시원찮은 사람의 진정한 의미가 무엇이냐

2. 인간에게 윤리란 무엇인가?
    산다는 것은 행위하는 것이다.
    행위 중에는 해서 좋은 것이 있고, 해서 안좋은 것이 있다.
    그리고 해도 그만, 안해도 그만, 꼭 해야 하는 것 들이 있다.
    이 행위들을 구분해 주는 것이 윤리이다.

3. 절대적인 윤리는 존재 하는가?
    서양 윤리사상의 역사는 절대 타당한 윤리 규범의 탐구의 역사였다.
    많은 철학자들이 절대적인 철학의 원리를 찾아 보려고 애썼지만 아직 성공한 예가 없다.
    2,500년 간 여러 천재적인 철학자 들이 찾아 보았지만 없다는 것은 결국 없는 것이 아닌가?
    윤리에 절대적인 원리가 없다면 아무렇게나 살아도 좋다는 것이다.
    이 회의론을 어떻게 극복하느냐가 현대 윤리학의 과제이다.

4. 윤리적인 회의론은 어떻게 극복 하는가?
    크게 두가지 방법이 있다.
    1) 종교적 극복
    2) 삶의 지혜로서의 유용성

5. 인간 행동의 가치 서열은 어떻게 측정 하는가?
    아무렇게나 살지 않도록 어떤 행동이 더 가치가 있는지 비교할 수 있어야 한다.
    3가지의 척도(기준)이 있다.
    1) 가치가 오래도록 지속 되는 것
        - 오래가는 가치가 더 높다.
    2) 여러 사람에게 많은 혜택을 주는 것
    3) 목적적 가치가 수단적 가치보다 높다.
        - 사람의 건강, 생명이 의학, 약학 보다 높은 가치이다.
        - 의학, 약학이 높은 가치를 가졌지만, 사람의 건강과 생명을 위한 수단이기 때문이다.
   

동영상


김용옥 논술세대를 위한 철학교실 33윤리학개론


김용옥 논술세대를 위한 철학교실 34
한국사회 윤리의 재건




2016년 3월 25일 금요일

(K) Machine Learning 00

강의를 듣는데 필요한 단어

Linear regression
    종속 변수 y와 한 개 이상의 독립 변수 (또는 설명 변수) X와의 선형 상관 관계를 모델링하는 회귀분석 기법
Logistic regression
     독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계 기법
classification

Neural networks
    생물학의 신경망(동물의 중추신경계, 특히 뇌)에서 영감을 얻은 통계학적 학습 알고리즘
Convolutional Neural Network
    feed-forward artificial neural network in which the connectivity pattern between its neurons is inspired by the organization of the animal visual cortex, whose individual neurons are arranged in such a way that they respond to overlapping regions tiling the visual field.
Recurrent Neural Network
    class of artificial neural network where connections between units form a directed cycle.
Tensorflow
    텐서플로우(TensorFlow)는 기계 학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리. 
    데이터 플로우 그래프(Data Flow Graph) 방식을 사용

(K)Machine Learning 01


Machine Learning 이란.
    1. Machine Learning은 Software 이다.
    2. Software는 어떤 특별한 조건인 것을 구별하여 동작을 하거나 판단을 하게 된다.
    3. 하지만 조건을 명시해 주기가 어려울 경우가 있다.
    4. 그런 경우 어떤 현상에서 자동으로 배우도록 했으면 좋겠다.
    5. 학습을 하기 위해서 데이터를 제공해 주어야 한다.
    관련동영상 1

크게 두 가지로 분류 되는데
    1. Supervised
        - 데이터들의 성격을 확실히 구별해 주는 것
        대표적인 예로
            a. Regression: 경향성을 제공
            b. Binary: 두 가지로 구분
            c. Multi: 여러 가지로 구분
    2. UnSupervised Learning
        - 데이터들의 성격을 구별해 주지 않은 것, 알아서 모아 준다.

2016년 3월 20일 일요일

(E+K) Windows 폴더접근 단축키(Folder Short cuts)

'내 컴퓨터' 혹은 'c:' 에 빨리 접근하는 방법이 필요해서 찾아보았습니다.
I needed to open 'c:' faster, so I collected methods


정의(Definition)
    Win: window key(Windows), Command(Mac)
    Enter: press Enter
    "문자열(글자)": 글자 입력
 
내컴퓨터(My Computer)
    1. Win + e

특정 드라이브 (Specific Drive ex>c:, d:, e: ...)
    1. Win + r -> "c:" -> Enter

특정 폴더(Specific Drive)
    1. 특정 폴더의 경로를 복사(ex>"C:\Users\user\Downloads")
    2. 환경변수(내컴퓨터->오른쪽 마우스버튼-> 고급시스템설정 -> 환경변수 -> path 항목에 추가
    3. Win + r -> "downloads" -> Enter

그 외 방법(etc..)
    - 즐겨찾기에 추가
        
    - 바탕화면에 바로가기 생성 -> 바로가기 아이콘에 단축키 추가(ex> F10 key)
    - make shortcut at desktop -> make shortcut key in shortcut(ex>F10 key)

    - 'q-dir' 과 같은 폴더 관리 프로그램 사용
    - use 'q-dir' explorer management program
        -> 하나의 창에 4개의 폴더를 한번에 띄우고, 하나의 폴더에는 탭을 여러개 두어 자주 여는 폴더는 모두 열어 둘 수 있다.
        -> it can open 4 explorer on one window, even in one explorer you can make tabs

2016년 3월 13일 일요일

(E,K) MCU 이해 - Understanding MCU

Which micro controller could I learn about in order to have directly marketable embedded skills
어떤 마이컴을 선택해야 내 실력을 월등히 높힐 수 있나요?

This chapter will provide such people with some idea why the newbie question can't be answered in any simple way, and some useful recommendations as to which platforms you might choose for experimentation and learning purposes
이 챕터에서는 처음 공부하는 사람이 질문하는 것들이 왜 간단하게 대답될 수 없는지를 설명하면서, 어떤 마이컴을 선택하는 것이 유용할 지에 대해서도 이야기 한다.

in any case, the short answer to the "which micro should I learn for fortune and glory"
question is that learning how to work with any one particular micro-controller won't lead you directly to a job.
어떤 경우에, "어떤 마이컴을 선택하는게 가장 효율적일까요?" 에 대한 짧은 대답은 특정 하나의 마이컴을 공부한다고 해서 직업을 얻을 수는 없을 것이라는 것이다.

when you come to a new job, you're going to find a certain body of legacy technology implemented on some micro or other(probably some hoary old device you would never choose in your wild-est nightmare),
새로운 직업을 잡게 되면, 그 회사에서 기존에 개발되어 있던 예전 코드들로 일하게 될 것이다.(아마 당신이라면 절대 선택하지 않을 마이컴일 수 도 있다.)
and perhaps a newer generation based on a different family of micros and when you start working on your own completely new designs, you may choose a different family yet again.
그리고 공부했던 것과는 다른 전혀 새로운 마이컴들을 가지고 일할 수도 잇다.

on a related note: In this chapter, I mention several specific vendors and products by name, and I quite some approximate price.
이 챕터에서는 몇가지 벤더의 제품들을 이야기할 것이다.

I'm including a discussion of the 8051 in this book for two reasons and one minor reason.
인털의 8051시리즈를 언급하는 것에는 큰 2가지 이유와 작은 한가지 이유가 있다.

1. It pops up in all sorts of apparently unrelated applications - many application - specific standard products(ASSPs), for instance, have an 8051 core.
The chance that you'll run across an 8051 variant in your career is this very good indeed.
Being family with the core's capabilities, if nothing else, will help you decide how to part together your design.
2. If you can work efficiently with the 8051, you can work with anything, so it's not a terrible architecture to learn on.
3. (Minor reason) - the 8051 happens to be very efficient at task. You may find this fact useful, since the 8051 is also very cheap

1. 어디선가 8051 버전의 변형을 만날 확률이 높다.
2. 8051을 효율적으로 사용하면 어떤 것들로도 일할 수 있어진다.
3. (마이너한 것) - 실제 효율적이며, 싸다.

1st level of Understanding of MCU as SW Engineer(My Idea)
    Memory Configuration
      -> Memory address
        RAM(DRAM, SRAM)
        ROM(MASK ROM, PROM, EPROM, EEPROM)

SW 엔지니어로서 MCU 에 대해 1차로 이해해야 하는 것(내 생각)
    Memory 구성
      -> 메모리 주소
        RAM(DRAM, SRAM)
ROM(MASK ROM, PROM, EPROM, EEPROM)
    Port의 종류와 역할
        지원 통신의 종류
    사용가능 인터럽트
    그 외 자세한 기능


참조: 임베디드 엔지니어가 되고 싶다고
Reference: So You Wanna Be an Embedded Engineer, 1st Edition

2016년 3월 12일 토요일

(E, K) Robot framework, RIDE 3 - Libraries(라이브러리)

 Test libraries provide the actual testing capabilities to Robot Framework by providing keywords. There are several standard libraries that are bundled in with the framework, and galore of separately developed external libraries that can be installed based on your needs. Creating your own test libraries is a breeze.
Let us know if there are useful libraries missing from the list.

Test 라이브러리는 Robot Framework에서 실제 테스트를 키워드를 사용해서 할 수 있도록 해준다. 기본으로 설치되어 있는 라이브러리가 있고, 필요에 따라 설치할 수 있는 많은 외부 라이브러리들이 이미 개발되어 있다. 자신만의 라이브러리를 만드는 것도 쉽다.

만약 아래 리스트에 유용한 라이브러리가 빠져 있다면 알려주기 바란다.

* 한 눈에 볼 수 있도록 긴 표로 나타내었습니다.

STANDARD
Builtin
Provides a set of often needed generic keywords. Always automatically available without imports.
Dialogs
Provides means for pausing the test execution and getting input from users.
Collections
Provides a set of keywords for handling Python lists and dictionaries.
OperatingSystem
Enables various operating system related tasks to be performed
in the system where Robot Framework is running.
Remote
Special library acting as a proxy between Robot Framework and test libraries elsewhere.
Actual test libraries can be running on different machines
   and be implemented using any programming language supporting XML-RPC protocol.
Screenshot
Provides keywords to capture screenshots of the desktop.
String
Library for generating, modifying and verifying strings.
Telnet
Makes it possible to connect to Telnet servers and execute commands on the opened connections.
XML
Library for generating, modifying and verifying XML files.
Process
Library for running processes in the system. New in Robot Framework 2.8.
DateTime
Library for date and time conversions. New in Robot Framework 2.8.5.
EXTERNAL
Android library
Library for all your Android automation needs. It uses Calabash Android internally.
AnywhereLibrary
Library for testing Single-Page Apps (SPA). Uses Selenium Webdriver and Appium internally.
AppiumLibrary
Library for Android- and iOS-testing. It uses Appium internally.
Archive library
Library for handling zip- and tar-archives.
AutoItLibrary
Windows GUI testing library that uses AutoIt freeware tool as a driver.
Database Library (Java)
Java-based library for database testing. Works only with Jython.
Database Library (Python)
Python based library for database testing. Works with any Python interpreter, including Jython.
Diff Library
Library to diff two files together.
Eclipse Library
Library for testing Eclipse RCP applications using SWT widgets.
robotframework-faker
Library for Faker, a fake test data generator.
FTP library
Library for testing and using FTP server with Robot Framework.
HTTP library (livetest)
Library for HTTP level testing using livetest tool internally.
HTTP library (Requests)
Library for HTTP level testing using Request internally.
iOS library
Library for all your iOS automation needs. It uses Calabash iOS Server internally.
ImageHorizonLibrary
Cross-platform, pure Python library for GUI automation based on image recognition.
MongoDB library
Library for interacting with MongoDB using pymongo.
MQTT library
Library for testing MQTT brokers and applications.
Rammbock
Generic network protocol test library that offers easy way to specify network packets
   and inspect the results of sent and received packets.
RemoteSwingLibrary
Library for testing and connecting to a java process and using SwingLibrary,
especially Java Web Start applications.
SeleniumLibrary
Web testing library that uses popular Selenium tool internally.
Uses deprecated Selenium 1.0 and is also itself deprecated.
Selenium2Library
Web testing library that uses Selenium 2. For most parts drop-in-replacement
for old SeleniumLibrary.
Selenium2Library for Java
Java port of the Selenium2Library.
SSHLibrary
Enables executing commands on remote machines over an SSH connection.
Also supports transfering files using SFTP.
SudsLibrary
A library for functional testing of SOAP-based web services based on Suds,
a dynamic SOAP 1.1 client.
SwingLibrary
Library for testing Java applications with Swing GUI.
watir-robot
Web testing library that uses Watir tool.
OTHER
Creating test libraries
Creating test libraries section in Robot Framework User Guide.
plone.app
.robotframework
Provides resources and tools for writing functional Selenium tests for Plone CMS and its add-ons.
JavalibCore
Base for implementing larger Java based test libraries for Robot Framework.
Remote
Built-in special library acting as a proxy between Robot Framework and test libraries elsewhere.
Actual test libraries can be running on different machines and be implemented
   using any programming language supporting XML-RPC protocol.
RemoteApplications
Special test library for launching Java applications on a separate JVM
and taking other libraries into use on them.

2016년 3월 11일 금요일

(E, K) Robot framework, RIDE 2 - How to write good test cases using Robot Framework(Robot Framework에서 좋은 테스트 케이스는 어떻게 만드는가)

Introduction

Naming


Test suite names

  • Suite names should be as describing as possible.
  • Names are created automatically from file or directory names:
    • Extensions are stripped.
    • Underscores are converted to spaces.
    • If name is all lower case, words are capitalized.
  • Names can be relatively long, but overly long names are not convenient on the file system.
  • The name of the top level suite can be overridden from the command line using the --name option if needed.
Examples:
  • login_tests.robot -> Login Tests
  • IP_v4_and_v6 -> IP v4 and v6

Test case names

  • Test names should be describing similarly as suite names.
  • If a suite contains many similar tests, and the suite itself is well named, test names can be shorter.
  • Name is exactly what you you specify in the test case file without any conversion.
For example, if we have tests related to invalid login in a file invalid_login.robot, these would be OK test case names:
*** Test Cases ***
Empty Password
Empty Username
Empty Username And Password
Invalid Username
Invalid Password
Invalid Username And Password
These names would be somewhat long:
*** Test Cases ***
Login With Empty Password Should Fail
Login With Empty Username Should Fail
Login With Empty Username And Password Should Fail
Login With Invalid Username Should Fail
Login With Invalid Password Should Fail
Login With Invalid Username And Invalid Password Should Fail

Keyword names

  • Also keyword names should be describing and clear.
  • Should explain what the keyword does, not how it does it.
  • Very different abstraction levels (e.g. Input Text or Administrator logs into system).
  • There is no clear guideline should a keyword be fully title cased or should only the first letter is capitalized.
    • Title casing often used when the keyword name is short (e.g. Input Text).
    • Capitalizing just the first letter typically works better with keywords that are like sentences (e.g. Administrator logs into system). These keywords are often also higher level.
Good:
*** Keywords ***
Login With Valid Credentials
Bad:
*** Keywords ***
Input Valid Username And Valid Password And Click Login Button

Naming setup and teardown

  • Try to use name that describes what is done.
    • Possibly use an existing keyword.
  • More abstract names acceptable if a setup or teardown contain unrelated steps.
    • Listing steps in name is duplication and a maintenance problem (e.g. Login to system, add user, activate alarms and check balance).
    • Often better to use something generic (e.g. Initialize system).
  • BuiltIn keyword Run Keywords can work well if keywords implementing lower level steps already exist.
    • Not reusable so best used when certain a setup or teardown scenario is needed only once.
  • Everyone working with these tests should always understand what a setup or teardown does.
Good:
*** Settings ***
Suite Setup     Initialize System
Good (if only used once):
*** Settings ***
Suite Setup     Run Keywords
...             Login To System    AND
...             Add User           AND
...             Activate Alarms    AND
...             Check Balance
Bad:
*** Settings ***
Suite Setup     Login To System, Add User, Activate Alarms And Check Balance