Quality assurance, contrary to popular belief, is not so much about finding bugs as it is about preventing them. We will discuss two ways to improve the code quality, thereby preventing issues. First, we will do static analysis of already existing code. Second, we will cover unit testing; this includes mocking and Behavior Driven Development (BDD).
Pyflakes is a Python code analysis package. It can analyze your code, and spot potential problems such as:
Unused imports
Unused variables
Choose one of the following listed options to install pyflakes
:
We can install pyflakes
with the pip
command:
sudo pip install pyflakes
We can install
pyflakes
with the easy_install
command:
sudo easy_install pyflakes
Installing on Linux.
The Linux package name
is pyflakes
as well. For instance, on Red Hat do the following:
sudo yum install pyflakes
On Debian/Ubuntu, the command is:
sudo apt-get install pyflakes
We will perform static analysis of a part of the NumPy codebase. In order to do this, we will check out the code using Git. We will then run
static analysis on part of the code using pyflakes
.
Check out the code.
To check out the NumPy code, we will need Git. Installing Git is outside the scope of this book. The Git command to retrieve the code is as follows:
git clone git://github.com/numpy/numpy.git numpy
Alternatively, we can download a zip archive from https://github.com/numpy/numpy .
Analyze the code.
The previous step should have created a numpy
directory with all the NumPy code. Go to this directory, and within it run the following command:
$ pyflakes *.py pavement.py:71: redefinition of unused 'md5' from line 69 pavement.py:88: redefinition of unused 'GIT_REVISION' from line 86 pavement.py:314: 'virtualenv' imported but unused pavement.py:315: local variable 'e' is assigned to but never used pavement.py:380: local variable 'sdir...
Pylint is another open source static analyzer originally created by Logilab. Pylint is more complex than Pyflakes; it allows more customization. However, it is slower than Pyflakes. For more information check out http://www.logilab.org/card/pylint_manual.
In this recipe, we will again download the NumPy code from the Git repository—this step is omitted for brevity.
You can install Pylint from the source distribution. However, there are many dependencies, so you are better off installing with either easy_install
, or pip
. The installation commands are as follows:
easy_install pylint sudo pip install pylint
We will again analyze from the top directory of the NumPy codebase. Please notice that we are getting much more output. In fact, Pylint prints so much text that most of it had to be cut out here:
pylint *.py $ pylint *.py No config file found, using default configuration ************* Module pavement C: 60: Line too long (81/80) C:139...