software development practices in python

12
Software Development Practices in Python Jimmy Lai r97922028 [at] ntu.edu.tw http://tw.linkedin.com/pub/jimmy-lai/27/4a/536 2013/02/14

Upload: jimmy-lai

Post on 08-May-2015

613 views

Category:

Technology


3 download

DESCRIPTION

In this slides, the author demonstrates many software development practices in Python. Including: runtime environment setup, source code management, version control, unit test, coding convention, code duplication, documentation and automation.

TRANSCRIPT

Page 1: Software development practices in python

Software Development Practices in Python

Jimmy Lai

r97922028 [at] ntu.edu.tw http://tw.linkedin.com/pub/jimmy-lai/27/4a/536

2013/02/14

Page 2: Software development practices in python

Outline

1. Runtime Environment: virtualenv and pip

2. Source Code Management: – Version control: Mercurial

– Unit test: code coverage • doctest

• nosetests

– Coding convention: PEP8

– Code duplication: clonedigger

3. Documentation: Sphinx

4. Automation: fabric

Software Development Practice in Python 2

Page 3: Software development practices in python

Demo Code

$ hg clone https://bitbucket.org/noahsark/slideshare

Demo Codes are in python_demo dir.

Files: 1. my_operator.py, my_operator_test.py

2. fabfile.py

Software Development Practice in Python 3

Page 4: Software development practices in python

Runtime Environment - virtualenv

• Isolates runtime environment dependency of your python project.

$ virtualenv --no-site-packages env_name

$ . env_name/bin/activate

# enter the virtual environment

$ pip install package_name

# install python packages

Software Development Practice in Python 4

Page 5: Software development practices in python

Source Code Management Version Control - Mercurial

• Distributed repositories

• Common commands:

$ hg clone ssh://[email protected]/noahsark/slideshare

$ hg commit

$ hg push

$ hg fetch

• Useful hooks: http://pypi.python.org/pypi/hghooks/

Ignore some files shown in `hg status`

File: .hgignore

syntax: glob

*.pyc

*.swp

docs/build

Software Development Practice in Python 5

Page 6: Software development practices in python

Source Code Management Unit Test - nose

• nose

– Simpler and easier than unittest

– Nose tests in XXX_test.py and functions named test_XXX

$ pip install nose

# install

$ nosetests

# nose tests and execute

Software Development Practice in Python 6

def setup(): global test_case_1 test_case_1 = (1, 2) def teardown(): pass def adder(a, b): return a + b @with_setup(setup, teardown) def test_adder(): expected = 3 actual = adder(test_case_1[0], test_case_1[1]) nt.assert_equal(actual, expected)

Page 7: Software development practices in python

Source Code Management Unit Test - doctest

• Doctest

– Write test in the docstring of function

– Easy and simple

– The test case is a usage example and appears in documents.

• http://docs.python.org/2/library/doctest.html

def adder(a, b):

'''

>>> adder(2, 3)

5

'''

return a + b

Software Development Practice in Python 7

Page 8: Software development practices in python

Source Code Management Unit Test – Test Coverage

• Test is the shield of code. Test coverage is the percentage of code be covered by test cases.

• Coverage rate over 80% is good.

$ pip install coverage

$ nosetests --with-coverage

# run coverage by nose

Name Stmts Miss Cover Missing

-------------------------------------------------------

python_demo 0 0 100%

python_demo.fabfile 23 15 35% 13-14

python_demo.my_operator 6 0 100%

-------------------------------------------------------

TOTAL 29 15 48%

Software Development Practice in Python 8

Page 9: Software development practices in python

Source Code Management Coding Convention – PEP8

• http://www.python.org/dev/peps/pep-0008/

• Code layout consistency:

– Usage of indentation, space, blank line

– Naming convention

– Programming recommendations

• Setup PEP8 checking as mercurial hook to ensure the consistency. pretxncommit.pep8 = python:hghooks.code.pep8hook

Software Development Practice in Python 9

Page 10: Software development practices in python

Source Code Management Code Duplication - clonedigger

• Duplicated codes should be refactored as reusable module

$ pip install clonedigger

$ clonedigger .

$ firefox output.html

Software Development Practice in Python 10

Output example

Page 11: Software development practices in python

Documentation - Sphinx

• Document is important for reuse

• Document type:

– Tutorial, system architecture

– Functions, modules explanation

• Sphinx: write docs in reStructuredText

$ pip install sphinx

Refer to http://www.slideshare.net/jimmy_lai/documentation-with-sphinx for more detail.

Software Development Practice in Python 11

Page 12: Software development practices in python

Automation - fabric

• Automation reduces repeating efforts.

• Things you do for the second time is worth to automate.

$ pip install fabric

• Common tasks suitable for automation:

– Build executable

– Build document (fab doc)

– Run unit tests (fab test)

– Setup Runtime Environment (fab setup)

– Deploy

• See fabfile.py for more examples.

Software Development Practice in Python 12