SlideShare a Scribd company logo
1 of 22
2015-03-28 - 2015-03-29 BDD Hands-on with Python 1
BBD Hands-on with Python
Practical Hands-on Workshop about
"Behaviour Driven Development", implementing
the Game "CodeBreaker" on Python 2.7 as
Example
PythonCamp Cologne, 2015-03-28 - 2015-03-29
Lecturer: Rolf Hemmerling
Slides: http://www.slideshare.net/hemmerling/
License: Creative Commons - Attribution-ShareAlike 4.0 Generic (
http://www.creativecommons.org/licenses/by-sa/4.0/ )
2015-03-28 - 2015-03-29 BDD Hands-on with Python 2
Agenda
1. CodeBreaker – The Game
2. Gherkin – The BDD Language
3. GUI Design Process
4. Coding..
5. PEP8 Compliance
6. Setup by distutils, Installation by setup.py, Publication on
GitHub, Test & Correction
7. Project Feedback
8. Project Roadmap
9. Resources
2015-03-28 - 2015-03-29 BDD Hands-on with Python 3
1 CodeBreaker – The Game
● Goal: You have to guess a 4-digit secret number
● Howto: You get hints after each guess
● "+" = Right Number at right place
● "-" = Right number, but wrong place
● End of Game: If you got the right number
Example:
Secret Number = "1134"
Guess = "5115"
Hint = "+-"
2015-03-28 - 2015-03-29 BDD Hands-on with Python 4
2.1 Gherkin – The BDD Language
Feature: code-breaker starts game
As a code-breaker
I want to start a game
So that I can break the code
@StartGame
Scenario: start game
Given I am not yet playing
When I start a new game
Then I should see "Welcome to Codebreaker!"
And I should see "Enter guess:"
2015-03-28 - 2015-03-29 BDD Hands-on with Python 5
2.2 Gherkin – The BDD Language
Feature: code-breaker submits guess
Scenario Outline: submit guess
Given the secret code is "<code>"
When I guess "<guess>"
Then the mark should be "<mark>"
Scenarios: no matches
| code | guess | mark |
| 1234 | 5555 | |
Scenarios: 1 number correct
| code | guess | mark |
| 1234 | 1555 | + |
| 1234 | 2555 | - |
2015-03-28 - 2015-03-29 BDD Hands-on with Python 6
2.3 BDD Process, Step #1
.feature File BDD source File
code
Native language Executable test
code
2015-03-28 - 2015-03-29 BDD Hands-on with Python 7
2.4 BDD Process, Step 2..n
.feature BDD Application
Source Code Source Code
Native Executable Executable
language test code application
code
executable complies
specification
.feature BDD Application
Source Code Source Code
Native Executable Executable
language test code application
code
executable complies
specification
2015-03-28 - 2015-03-29 BDD Hands-on with Python 8
3.1 GUI Design Process - Tools
# GUI Designer The generated code
Name Platform GUI
Framwork
Screen
Layout
Class Runtime License Ok?
1 page Tcl/Tk Tkinter Grid Yes Yes
2 ptkgb Python Tkinter Grid Yes Python megawidgets
(pmw)
MIT Yes
3 ptkgen Python Tkinter Grid No tkgen GPL 2.1 Yes
4 pygubu Python TkInter Grid Yes pygubu GPL 3 Yes
5 QT Creator Python QT, PyQT Grid Yes PyQT, QT GPL 2 or 3 Yes
6 rapyd Python Tkinter Grid Yes rpErrorHandler.py Public
Domain?
Not yet
6 SpecTCL Python Tkinter Grid Yes Yes
7 tk_happy Python Tkinter Place Yes Yes
9 Visual Python
Tkinter IDE
1v1.6
.NET Tkinter Place No No
2015-03-28 - 2015-03-29 BDD Hands-on with Python 9
● If the code by GUI designers needs a runtime, what is
the runtime's license ( GPL, LGPL, MIT, public
domain,..)?
● Efficent naming - When selecting names for GUI
designer objects, think of Python naming conventions!
– Class => CamelCode
– Class method / function => Lowercase & underscore
– Variable
● Global variable => Capitals only
● Local variable => Lowercase & underscore
3.2 GUI Design Process - Practice
2015-03-28 - 2015-03-29 BDD Hands-on with Python 10
1. Domain expert of the customer and software developer
● Creation of BDD documents
2. Software developer
➢ Auto-generation of a basic script
– PowerShell.exe -ExecutionPolicy Unrestricted
➢ behave my.feature 2>&1 >my.py
➢ Make the script runable ( avoid $FF in the file )
➢ Implement a step
➢ Implement steps with variables
➢ Implement steps with regular expressions
➢ Test-driven Implementation of the application, using PyUnit
4 Coding...
2015-03-28 - 2015-03-29 BDD Hands-on with Python 11
3 Domain expert of the customer and software developer
● Integration test of the application
● Presentation and roll-out of the application
● Project feedback
4 Coding...
2015-03-28 - 2015-03-29 BDD Hands-on with Python 12
● Most GUI designers create code which
● Doesn´t complie with PEP8...
● Isn't passed by codecheckers ( PyLint.. ) without much warnings...
● Often doesn´t meet the Python naming conventions,
– By the tool
– Or by user's wrong choice when using the tool!
● Love it or leave it!
● If you must complete the generated code files, manually
– If you know that you will or can never use the GUI designer again, then you
might once modify the code to make it PEP8 / PyLint compliant
● Else ( PyQT => Class derivation ) .. accept the code as it is
● Yet another project for the GUI designer: Modify the code generator... :-)
5 PEP8 Compliance
2015-03-28 - 2015-03-29 BDD Hands-on with Python 13
<dev_root>codebreaker.py
<dev_root>/Scripts/codebreaker-script.py
<dev_root>/project/d_implementation/steps => <inst_root><codebreaker_package>
Setup.py
from distutils.core import setup
setup(name='codebreaker',
version='1.0',
data_files=[('Lib/site-packages/codebreaker_package', ['AUTHORS', 'COPYING', 'README.txt']),
('Scripts', ['Scripts/codebreaker.bat', 'Scripts/codebreaker.sh']) ],
scripts=['Scripts/codebreaker-script.py'],
py_modules=['Scripts/codebreaker-script', 'codebreaker'],
package_dir={'codebreaker_package': 'project/d_implementation/steps'},
packages=['codebreaker_package'])
6.1 Setup by distutils
2015-03-28 - 2015-03-29 BDD Hands-on with Python 14
cd /<dev_root>
setup sdist
REM "<dev_root>/dist/codebreaker-1.0.zip" is created
cd dist
unzip codebreaker-1.0.zip
setup install
REM The directory "<dev_root>/build" is created
cd /<dev_root>
setup.py bdist_wininst
REM "<dev_root>/dist/codebreaker-1.0.win32.exe" is created
6.2.1 Installation by setup.py
2015-03-28 - 2015-03-29 BDD Hands-on with Python 15
setup install
c:Python27Lib
c:Python27Libside-packages
c:Python27Scripts
6.2.2 Installation by setup.py
2015-03-28 - 2015-03-29 BDD Hands-on with Python 16
virtualenv c:UsersPublicpython
setup.py install –prefix="c:UsersPublicpython"
c:UsersPublicpythonLibsite-packages
c:UsersPublicpythonLibsite-packagescodebreaker_package
c:UsersPublicpythonLibsite-packagesScripts
c:UsersPublicpythonScript
set_pythonhome.bat
set path=%path%;c:userspublicpythonScripts
set pythonhome=c:userspublicpython
set_pythonpath.bat
set path=%path%;c:userspublicpythonScripts
set pythonpath=c:userspublicpythonScripts;c:userspublicpythonLib;c:userspublicpythonLibsite-
packages
6.2.3 Installation by setup.py
2015-03-28 - 2015-03-29 BDD Hands-on with Python 17
REM Test
cd userspublic
codebreaker
codebreaker -i page
REM Correction
cd c:Python27Scripts
ren pygubu.pyw pygubu-script.py
copy con pygubu.bat
Pygubu-script.py
^z
6.3 Test & Correction
2015-03-28 - 2015-03-29 BDD Hands-on with Python 18
C:Users>codebreaker.bat
C:Users>codebreaker-script.py
Running Python sys.version_info(major=2, minor=7, micro=6, releaselevel='final',
serial=0) on 'win32'
Traceback (most recent call last):
File "C:Python27Scriptscodebreaker-script.py", line 31, in <module>
import codebreaker
File "C:Python27libsite-packagescodebreaker.py", line 31, in <module>
from codebreaker_package.cb import main as cb_main
File "C:Python27libsite-packagescodebreaker_packagecb.py", line 36, in <m
odule>
from pygubu_codebreaker import main as pygubu_main
File "C:Python27libsite-packagescodebreaker_packagepygubu_codebreaker.py"
, line 33, in <module>
import pygubu
File "C:Python27Scriptspygubu.pyw", line 43, in <module>
print("Pygubu: v. %s" % (pygubu.__version__,))
AttributeError: 'module' object has no attribute '__version__'
6.4 Pygubu Module - Problem
File
"C:Python27Scriptspy
gubu.pyw", line 43, in
<module>
2015-03-28 - 2015-03-29 BDD Hands-on with Python 19
.gitignore
.pypirc
*.zip
*.exe
*.rpm
build
bin
dist
6.5 Publication on GitHub
2015-03-28 - 2015-03-29 BDD Hands-on with Python 20
7 Project Feedback
● If BDD is intended to describe business logic, what to do with UI messages?
● BDD does not help to describe business algorithms ( in opposite to UML,
BPMN )
● Tricky "Scenarios: matches with duplicates"
● TDD & Unittests => helpful
● I felt helpless with BDD
● Behave produces much output garbage
● Integration with IDEs, with information filtering would be helpful
● Setup implementation
● revealed errorous naming of script file of a dependant module ( Pygubu )
● Distutils doesnt' handle requirements ( requires=["required_module"] ) as
promised
2015-03-28 - 2015-03-29 BDD Hands-on with Python 21
8 Roadmap
● Webserver-based versions ( Bottle, CherryPy, Django, Genshi, Gunicorn,
Plone/Zope, Pocco "Flask", Pylons Project "Pyramid", Python Paste,
Tornado )
● Further GUI-based versions ( Kivy, wxPython, PyGTK.. ),
● Online-service based versions ( Heroku, PythonAnywhere,..)
● Module for the ERP systems Tryton / OpenERP
● Implementation for other installers ( i.e. Setuptools / Easy Install )
2015-03-28 - 2015-03-29 BDD Hands-on with Python 22
9 Resources
● Book
● David Chelimsky, Dave Astels, Bryan Helmkamp, Dan North, Zach
Dennis, Aslak Hellesoy: "The RSpec Book: Behaviour Driven
Development with RSpec, Cucumber, and Friends", ISBN 1934356379
● Rolf Hemmerling's webpage, also about BDD
http://www.hemmerling.com/doku.php/en/specbyex.html
● Rolf Hemmerling's webpage, also about GUI designers
http://www.hemmerling.com/doku.php/en/python.html
● Rolf Hemmerling's Slides http://www.slideshare.net/hemmerling/

More Related Content

What's hot

The LAZY Developer's Guide to BDD (with Cucumber)
The LAZY Developer's Guide to BDD (with Cucumber)The LAZY Developer's Guide to BDD (with Cucumber)
The LAZY Developer's Guide to BDD (with Cucumber)Tze Yang Ng
 
DevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebDevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebAlvaro Sanchez-Mariscal
 
BDD with JBehave and Selenium
BDD with JBehave and SeleniumBDD with JBehave and Selenium
BDD with JBehave and SeleniumNikolay Vasilev
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebC4Media
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with CucumberAsheesh Mehdiratta
 
Functional testing your Grails app with GEB
Functional testing your Grails app with GEBFunctional testing your Grails app with GEB
Functional testing your Grails app with GEBGR8Conf
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Jared Burrows
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Fwdays
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF SummitOrtus Solutions, Corp
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation ToolIzzet Mustafaiev
 
Behat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfBehat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfseleniumbootcamp
 
Hackathon - Building vaadin add on components
Hackathon - Building vaadin add on componentsHackathon - Building vaadin add on components
Hackathon - Building vaadin add on componentsJoonas Lehtinen
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION APIGavin Pickin
 
A Closer Look At React Native
A Closer Look At React NativeA Closer Look At React Native
A Closer Look At React NativeIan Wang
 
Dsc Charusat Learning React Part 1
Dsc Charusat Learning React Part 1 Dsc Charusat Learning React Part 1
Dsc Charusat Learning React Part 1 JainamMehta19
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
 
Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Ortus Solutions, Corp
 

What's hot (20)

The LAZY Developer's Guide to BDD (with Cucumber)
The LAZY Developer's Guide to BDD (with Cucumber)The LAZY Developer's Guide to BDD (with Cucumber)
The LAZY Developer's Guide to BDD (with Cucumber)
 
DevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and GebDevQA: make your testers happier with Groovy, Spock and Geb
DevQA: make your testers happier with Groovy, Spock and Geb
 
BDD with JBehave and Selenium
BDD with JBehave and SeleniumBDD with JBehave and Selenium
BDD with JBehave and Selenium
 
Taming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and GebTaming Functional Web Testing with Spock and Geb
Taming Functional Web Testing with Spock and Geb
 
Behavior Driven Development with Cucumber
Behavior Driven Development with CucumberBehavior Driven Development with Cucumber
Behavior Driven Development with Cucumber
 
Functional testing your Grails app with GEB
Functional testing your Grails app with GEBFunctional testing your Grails app with GEB
Functional testing your Grails app with GEB
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
 
Geb with spock
Geb with spockGeb with spock
Geb with spock
 
Unit testing - A&BP CC
Unit testing - A&BP CCUnit testing - A&BP CC
Unit testing - A&BP CC
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
 
Behat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfBehat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdf
 
Hackathon - Building vaadin add on components
Hackathon - Building vaadin add on componentsHackathon - Building vaadin add on components
Hackathon - Building vaadin add on components
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
A Closer Look At React Native
A Closer Look At React NativeA Closer Look At React Native
A Closer Look At React Native
 
React nativebeginner1
React nativebeginner1React nativebeginner1
React nativebeginner1
 
Dsc Charusat Learning React Part 1
Dsc Charusat Learning React Part 1 Dsc Charusat Learning React Part 1
Dsc Charusat Learning React Part 1
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018Testing for fun in production Into The Box 2018
Testing for fun in production Into The Box 2018
 

Similar to BBD Hands-on with Python. Practical Hands-on Workshop about "Behaviour Driven Development", implementing the Game "CodeBreaker" on Python 2.7 as Example

Extending GDB with Python
Extending GDB with PythonExtending GDB with Python
Extending GDB with PythonLisa Roach
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplateStanislav Petrov
 
Behaviour Driven Development Hands-on
Behaviour Driven Development Hands-onBehaviour Driven Development Hands-on
Behaviour Driven Development Hands-onHemmerling
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a prosparkfabrik
 
Putting the Fun into Functioning CI/CD with JHipster
Putting the Fun into Functioning CI/CD with JHipsterPutting the Fun into Functioning CI/CD with JHipster
Putting the Fun into Functioning CI/CD with JHipsterGerard Gigliotti
 
Continuous Delivery for Python Developers – PyCon Otto
Continuous Delivery for Python Developers – PyCon OttoContinuous Delivery for Python Developers – PyCon Otto
Continuous Delivery for Python Developers – PyCon OttoPeter Bittner
 
Code driven development in drupal
Code driven development in drupalCode driven development in drupal
Code driven development in drupalAndriy Yun
 
Aws Deployment Tools - Overview, Details, Implementation
Aws Deployment Tools - Overview, Details, ImplementationAws Deployment Tools - Overview, Details, Implementation
Aws Deployment Tools - Overview, Details, Implementationserkancapkan
 
Open source projects with python
Open source projects with pythonOpen source projects with python
Open source projects with pythonroskakori
 
Qt for beginners part 4 doing more
Qt for beginners part 4   doing moreQt for beginners part 4   doing more
Qt for beginners part 4 doing moreICS
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...OW2
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDoku
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Runwesley chun
 
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Evgeniy Kuzmin
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.skJuraj Hantak
 
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...Gibran Badrulzaman
 
Drupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowDrupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowAndrii Podanenko
 
Delivering Quality at Speed with GitOps
Delivering Quality at Speed with GitOpsDelivering Quality at Speed with GitOps
Delivering Quality at Speed with GitOpsWeaveworks
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous deliveryEatDog
 

Similar to BBD Hands-on with Python. Practical Hands-on Workshop about "Behaviour Driven Development", implementing the Game "CodeBreaker" on Python 2.7 as Example (20)

Extending GDB with Python
Extending GDB with PythonExtending GDB with Python
Extending GDB with Python
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
 
Behaviour Driven Development Hands-on
Behaviour Driven Development Hands-onBehaviour Driven Development Hands-on
Behaviour Driven Development Hands-on
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Putting the Fun into Functioning CI/CD with JHipster
Putting the Fun into Functioning CI/CD with JHipsterPutting the Fun into Functioning CI/CD with JHipster
Putting the Fun into Functioning CI/CD with JHipster
 
Continuous Delivery for Python Developers – PyCon Otto
Continuous Delivery for Python Developers – PyCon OttoContinuous Delivery for Python Developers – PyCon Otto
Continuous Delivery for Python Developers – PyCon Otto
 
Code driven development in drupal
Code driven development in drupalCode driven development in drupal
Code driven development in drupal
 
Aws Deployment Tools - Overview, Details, Implementation
Aws Deployment Tools - Overview, Details, ImplementationAws Deployment Tools - Overview, Details, Implementation
Aws Deployment Tools - Overview, Details, Implementation
 
Open source projects with python
Open source projects with pythonOpen source projects with python
Open source projects with python
 
Qt for beginners part 4 doing more
Qt for beginners part 4   doing moreQt for beginners part 4   doing more
Qt for beginners part 4 doing more
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winner
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
 
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
 
CI/CD with Github Actions
CI/CD with Github ActionsCI/CD with Github Actions
CI/CD with Github Actions
 
Gitlab ci, cncf.sk
Gitlab ci, cncf.skGitlab ci, cncf.sk
Gitlab ci, cncf.sk
 
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
Understanding the GitOps Workflow and CICD Pipeline - What It Is, Why It Matt...
 
Drupal Continuous Integration Workflow
Drupal Continuous Integration WorkflowDrupal Continuous Integration Workflow
Drupal Continuous Integration Workflow
 
Delivering Quality at Speed with GitOps
Delivering Quality at Speed with GitOpsDelivering Quality at Speed with GitOps
Delivering Quality at Speed with GitOps
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 

More from Hemmerling

luaingames.ppt
luaingames.pptluaingames.ppt
luaingames.pptHemmerling
 
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...Hemmerling
 
Worst of Job Application
Worst of Job ApplicationWorst of Job Application
Worst of Job ApplicationHemmerling
 
Test Driven Development (TDD) with Windows PowerShell
Test Driven Development (TDD) with Windows PowerShellTest Driven Development (TDD) with Windows PowerShell
Test Driven Development (TDD) with Windows PowerShellHemmerling
 
Beleuchtunganalyse und -planung R3974 & R3978
Beleuchtunganalyse  und -planung R3974 & R3978Beleuchtunganalyse  und -planung R3974 & R3978
Beleuchtunganalyse und -planung R3974 & R3978Hemmerling
 
The Hollywood Principle – Don´t call us, we call you
The Hollywood Principle –  Don´t call us, we call youThe Hollywood Principle –  Don´t call us, we call you
The Hollywood Principle – Don´t call us, we call youHemmerling
 

More from Hemmerling (7)

luaingames.ppt
luaingames.pptluaingames.ppt
luaingames.ppt
 
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...
Assisted Living - Pouring a Glas of Water - A "FRANKA EMIKA PANDA" Robotic Ap...
 
Ux at wc
Ux at wcUx at wc
Ux at wc
 
Worst of Job Application
Worst of Job ApplicationWorst of Job Application
Worst of Job Application
 
Test Driven Development (TDD) with Windows PowerShell
Test Driven Development (TDD) with Windows PowerShellTest Driven Development (TDD) with Windows PowerShell
Test Driven Development (TDD) with Windows PowerShell
 
Beleuchtunganalyse und -planung R3974 & R3978
Beleuchtunganalyse  und -planung R3974 & R3978Beleuchtunganalyse  und -planung R3974 & R3978
Beleuchtunganalyse und -planung R3974 & R3978
 
The Hollywood Principle – Don´t call us, we call you
The Hollywood Principle –  Don´t call us, we call youThe Hollywood Principle –  Don´t call us, we call you
The Hollywood Principle – Don´t call us, we call you
 

Recently uploaded

Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 

Recently uploaded (20)

Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 

BBD Hands-on with Python. Practical Hands-on Workshop about "Behaviour Driven Development", implementing the Game "CodeBreaker" on Python 2.7 as Example

  • 1. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 1 BBD Hands-on with Python Practical Hands-on Workshop about "Behaviour Driven Development", implementing the Game "CodeBreaker" on Python 2.7 as Example PythonCamp Cologne, 2015-03-28 - 2015-03-29 Lecturer: Rolf Hemmerling Slides: http://www.slideshare.net/hemmerling/ License: Creative Commons - Attribution-ShareAlike 4.0 Generic ( http://www.creativecommons.org/licenses/by-sa/4.0/ )
  • 2. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 2 Agenda 1. CodeBreaker – The Game 2. Gherkin – The BDD Language 3. GUI Design Process 4. Coding.. 5. PEP8 Compliance 6. Setup by distutils, Installation by setup.py, Publication on GitHub, Test & Correction 7. Project Feedback 8. Project Roadmap 9. Resources
  • 3. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 3 1 CodeBreaker – The Game ● Goal: You have to guess a 4-digit secret number ● Howto: You get hints after each guess ● "+" = Right Number at right place ● "-" = Right number, but wrong place ● End of Game: If you got the right number Example: Secret Number = "1134" Guess = "5115" Hint = "+-"
  • 4. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 4 2.1 Gherkin – The BDD Language Feature: code-breaker starts game As a code-breaker I want to start a game So that I can break the code @StartGame Scenario: start game Given I am not yet playing When I start a new game Then I should see "Welcome to Codebreaker!" And I should see "Enter guess:"
  • 5. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 5 2.2 Gherkin – The BDD Language Feature: code-breaker submits guess Scenario Outline: submit guess Given the secret code is "<code>" When I guess "<guess>" Then the mark should be "<mark>" Scenarios: no matches | code | guess | mark | | 1234 | 5555 | | Scenarios: 1 number correct | code | guess | mark | | 1234 | 1555 | + | | 1234 | 2555 | - |
  • 6. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 6 2.3 BDD Process, Step #1 .feature File BDD source File code Native language Executable test code
  • 7. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 7 2.4 BDD Process, Step 2..n .feature BDD Application Source Code Source Code Native Executable Executable language test code application code executable complies specification .feature BDD Application Source Code Source Code Native Executable Executable language test code application code executable complies specification
  • 8. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 8 3.1 GUI Design Process - Tools # GUI Designer The generated code Name Platform GUI Framwork Screen Layout Class Runtime License Ok? 1 page Tcl/Tk Tkinter Grid Yes Yes 2 ptkgb Python Tkinter Grid Yes Python megawidgets (pmw) MIT Yes 3 ptkgen Python Tkinter Grid No tkgen GPL 2.1 Yes 4 pygubu Python TkInter Grid Yes pygubu GPL 3 Yes 5 QT Creator Python QT, PyQT Grid Yes PyQT, QT GPL 2 or 3 Yes 6 rapyd Python Tkinter Grid Yes rpErrorHandler.py Public Domain? Not yet 6 SpecTCL Python Tkinter Grid Yes Yes 7 tk_happy Python Tkinter Place Yes Yes 9 Visual Python Tkinter IDE 1v1.6 .NET Tkinter Place No No
  • 9. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 9 ● If the code by GUI designers needs a runtime, what is the runtime's license ( GPL, LGPL, MIT, public domain,..)? ● Efficent naming - When selecting names for GUI designer objects, think of Python naming conventions! – Class => CamelCode – Class method / function => Lowercase & underscore – Variable ● Global variable => Capitals only ● Local variable => Lowercase & underscore 3.2 GUI Design Process - Practice
  • 10. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 10 1. Domain expert of the customer and software developer ● Creation of BDD documents 2. Software developer ➢ Auto-generation of a basic script – PowerShell.exe -ExecutionPolicy Unrestricted ➢ behave my.feature 2>&1 >my.py ➢ Make the script runable ( avoid $FF in the file ) ➢ Implement a step ➢ Implement steps with variables ➢ Implement steps with regular expressions ➢ Test-driven Implementation of the application, using PyUnit 4 Coding...
  • 11. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 11 3 Domain expert of the customer and software developer ● Integration test of the application ● Presentation and roll-out of the application ● Project feedback 4 Coding...
  • 12. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 12 ● Most GUI designers create code which ● Doesn´t complie with PEP8... ● Isn't passed by codecheckers ( PyLint.. ) without much warnings... ● Often doesn´t meet the Python naming conventions, – By the tool – Or by user's wrong choice when using the tool! ● Love it or leave it! ● If you must complete the generated code files, manually – If you know that you will or can never use the GUI designer again, then you might once modify the code to make it PEP8 / PyLint compliant ● Else ( PyQT => Class derivation ) .. accept the code as it is ● Yet another project for the GUI designer: Modify the code generator... :-) 5 PEP8 Compliance
  • 13. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 13 <dev_root>codebreaker.py <dev_root>/Scripts/codebreaker-script.py <dev_root>/project/d_implementation/steps => <inst_root><codebreaker_package> Setup.py from distutils.core import setup setup(name='codebreaker', version='1.0', data_files=[('Lib/site-packages/codebreaker_package', ['AUTHORS', 'COPYING', 'README.txt']), ('Scripts', ['Scripts/codebreaker.bat', 'Scripts/codebreaker.sh']) ], scripts=['Scripts/codebreaker-script.py'], py_modules=['Scripts/codebreaker-script', 'codebreaker'], package_dir={'codebreaker_package': 'project/d_implementation/steps'}, packages=['codebreaker_package']) 6.1 Setup by distutils
  • 14. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 14 cd /<dev_root> setup sdist REM "<dev_root>/dist/codebreaker-1.0.zip" is created cd dist unzip codebreaker-1.0.zip setup install REM The directory "<dev_root>/build" is created cd /<dev_root> setup.py bdist_wininst REM "<dev_root>/dist/codebreaker-1.0.win32.exe" is created 6.2.1 Installation by setup.py
  • 15. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 15 setup install c:Python27Lib c:Python27Libside-packages c:Python27Scripts 6.2.2 Installation by setup.py
  • 16. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 16 virtualenv c:UsersPublicpython setup.py install –prefix="c:UsersPublicpython" c:UsersPublicpythonLibsite-packages c:UsersPublicpythonLibsite-packagescodebreaker_package c:UsersPublicpythonLibsite-packagesScripts c:UsersPublicpythonScript set_pythonhome.bat set path=%path%;c:userspublicpythonScripts set pythonhome=c:userspublicpython set_pythonpath.bat set path=%path%;c:userspublicpythonScripts set pythonpath=c:userspublicpythonScripts;c:userspublicpythonLib;c:userspublicpythonLibsite- packages 6.2.3 Installation by setup.py
  • 17. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 17 REM Test cd userspublic codebreaker codebreaker -i page REM Correction cd c:Python27Scripts ren pygubu.pyw pygubu-script.py copy con pygubu.bat Pygubu-script.py ^z 6.3 Test & Correction
  • 18. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 18 C:Users>codebreaker.bat C:Users>codebreaker-script.py Running Python sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0) on 'win32' Traceback (most recent call last): File "C:Python27Scriptscodebreaker-script.py", line 31, in <module> import codebreaker File "C:Python27libsite-packagescodebreaker.py", line 31, in <module> from codebreaker_package.cb import main as cb_main File "C:Python27libsite-packagescodebreaker_packagecb.py", line 36, in <m odule> from pygubu_codebreaker import main as pygubu_main File "C:Python27libsite-packagescodebreaker_packagepygubu_codebreaker.py" , line 33, in <module> import pygubu File "C:Python27Scriptspygubu.pyw", line 43, in <module> print("Pygubu: v. %s" % (pygubu.__version__,)) AttributeError: 'module' object has no attribute '__version__' 6.4 Pygubu Module - Problem File "C:Python27Scriptspy gubu.pyw", line 43, in <module>
  • 19. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 19 .gitignore .pypirc *.zip *.exe *.rpm build bin dist 6.5 Publication on GitHub
  • 20. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 20 7 Project Feedback ● If BDD is intended to describe business logic, what to do with UI messages? ● BDD does not help to describe business algorithms ( in opposite to UML, BPMN ) ● Tricky "Scenarios: matches with duplicates" ● TDD & Unittests => helpful ● I felt helpless with BDD ● Behave produces much output garbage ● Integration with IDEs, with information filtering would be helpful ● Setup implementation ● revealed errorous naming of script file of a dependant module ( Pygubu ) ● Distutils doesnt' handle requirements ( requires=["required_module"] ) as promised
  • 21. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 21 8 Roadmap ● Webserver-based versions ( Bottle, CherryPy, Django, Genshi, Gunicorn, Plone/Zope, Pocco "Flask", Pylons Project "Pyramid", Python Paste, Tornado ) ● Further GUI-based versions ( Kivy, wxPython, PyGTK.. ), ● Online-service based versions ( Heroku, PythonAnywhere,..) ● Module for the ERP systems Tryton / OpenERP ● Implementation for other installers ( i.e. Setuptools / Easy Install )
  • 22. 2015-03-28 - 2015-03-29 BDD Hands-on with Python 22 9 Resources ● Book ● David Chelimsky, Dave Astels, Bryan Helmkamp, Dan North, Zach Dennis, Aslak Hellesoy: "The RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends", ISBN 1934356379 ● Rolf Hemmerling's webpage, also about BDD http://www.hemmerling.com/doku.php/en/specbyex.html ● Rolf Hemmerling's webpage, also about GUI designers http://www.hemmerling.com/doku.php/en/python.html ● Rolf Hemmerling's Slides http://www.slideshare.net/hemmerling/