Index
A
- accessibility testing / Testability – architectural aspects
- Advanced Message Queuing Protocol (AMQP)
- antipatterns
- about / Readability - antipatterns
- mixed Indentation / Readability - antipatterns
- string literal types, mixing / Readability - antipatterns
- functional constructs, overusing / Readability - antipatterns
- arbitrary input
- evaluating / Evaluating arbitrary input
- overflow errors / Overflow errors
- objects, serializing / Serializing objects
- asymptotic notation / Performance complexity
- async
- asynchronous execution
- asynchronous processing
- about / Concurrency
- asyncio module
- about / Concurrency, The asyncio module in Python
- availability, quality attributes
- about / Availability
- fault detection / Availability
- fault recovery / Availability
- fault prevention / Availability
- await
B
- Bachmann-Landau notation / Performance complexity
- behavorial pattern
- about / Patterns in Python – Behavioral
- Iterator pattern / The Iterator pattern
- Observer pattern / The Observer pattern
- State pattern / The State pattern
- Black-box testing
- bloom filters / Probabilistic data structures – bloom filters
- BlueGreen deployment / Deployment – patterns and best practices
- Borg
- versus Singleton / State sharing – Borg versus Singleton
- Bucket testing (A/B testing) / Deployment – patterns and best practices
- Builder pattern / The Builder pattern
C
- canary releases / Deployment – patterns and best practices
- Celery
- about / Celery – a distributed task queue
- with Mandelbrot set / The Mandelbrot set using Celery
- serving, with Python on web / Serving with Python on the Web—WSGI
- uWSGI / uWSGI – WSGI middleware on steroids
- Gunicorn / Gunicorn – unicorn for WSGI
- ChainMap / ChainMap
- Chaos Monkey / Deployment – patterns and best practices
- co-routines
- using / The asyncio module in Python
- code
- commenting / Commenting the code
- cohesion and coupling, measuring / Fundamentals of Modifiability – Cohesion , Measuring cohesion and coupling
- string and text, processing / Measuring cohesion and coupling – string and text processing
- code, documenting
- about / Document your code
- inline documentation / Document your code
- external documentation / Document your code
- user manuals / Document your code
- code comments / Document your code
- docstrings function / Document your code
- class docstrings / Document your code
- module docstrings / Document your code
- code, refactoring
- about / Refactoring Code
- complexity, fixing / Refactoring code – fixing complexity
- code smells, fixing / Refactoring code - fixing code smells
- styling and coding conventions, fixing / Refactoring code - fixing styling and coding issues
- code coverage
- about / Code coverage
- measuring, coverage.py used / Measuring coverage using coverage.py
- measuring, nose2 used / Measuring coverage using nose2
- measuring, py.test used / Measuring coverage using py.test
- code or application profiling tools / Performance testing and measurement tools
- code smells
- about / What are code smells?
- at class level / What are code smells?
- at method/function level / What are code smells?
- collections module
- about / High performance containers – the collections module
- deque / deque
- defaultdict / defaultdict
- OrderedDict / OrderedDict
- duplicates, dropping from container without losing order / Dropping duplicates from a container without losing the order
- least recently used (LRU) cache dictionary, implementing / Implementing a Least Recently Used (LRU) cache dictionary
- counter / Counter
- ChainMap / ChainMap
- namedtuple / namedtuple
- comma separated value (CSV)
- Common Gateway Interface (CGI)
- Composite pattern / Categories of design patterns
- concurrency
- about / Concurrency
- multithreading / Concurrency
- multiprocessing / Concurrency
- asynchronous processing / Concurrency
- versus parallelism / Concurrency versus parallelism
- in Python, with multithreading / Concurrency in Python – multithreading
- concurrent.futures module
- about / Concurrency
- concurrent futures
- for high-level concurrent processing / Concurrent futures – high-level concurrent processing
- disk thumbnail generator / Disk thumbnail generator
- concurrency options / Concurrency options – how to choose?
- parallel processing libraries / Parallel processing libraries
- joblib package / Joblib
- PyMP / PyMP
- Mandelbrot set / Fractals – the Mandelbrot set, Fractals – Scaling the Mandelbrot set implementation
- concurrent programming
- versus, event-driven programming / Event-driven programming versus Concurrent programming
- Confidentiality, Integrity, and Availability (CIA) / Information Security architecture
- connectionMade / The lptrace program
- content delivery network (CDN)
- context manager
- used, for managing time / Measuring time using a context manager
- continuous deployment / Deployment – patterns and best practices
- cooperative multitasking
- versus pre-emptive multitasking / Pre-emptive versus cooperative multitasking
- about / Pre-emptive versus cooperative multitasking
- counter / Counter
- used, for sorting disk files / Sorting disk files – using a counter
- cProfile / Profiling with cProfile and profile
- creational pattern
- factory patterns / Categories of design patterns
- prototype patterns / Categories of design patterns
- Singleton and related patterns / Categories of design patterns
- about / Patterns in Python – Creational
- Singleton pattern / The Singleton pattern, The Singleton – do we need a Singleton?
- Borg, versus Singleton / State sharing – Borg versus Singleton
- Factory pattern / The Factory pattern
- Prototype pattern / The Prototype pattern
- deep, versus shallow copy / Prototype – deep versus shallow copy
- deep, versuss shallow copy / Prototype – deep versus shallow copy
- Prototype, using metaclasses / Prototype using metaclasses
- patterns combining, metaclasses used / Combining patterns using metaclasses
- Cross-Site Scripting (XSS)
- about / Cross-Site Scripting(XSS)
- cyclomatic complexity
D
- Data Sink / Pipe and Filter architectures
- debugging, advanced
- tracing / Advanced debugging—tracing
- trace module / The trace module
- lptrace program / The lptrace program
- system call tracing, strace used / System call tracing using strace
- debugging, tricks and techniques
- about / Simple debugging tricks and techniques
- word searcher program / Word searcher program
- word searcher program, debugging step 1 / Word searcher program—debugging step 1
- word searcher program, debugging step 2 / Word searcher program—debugging step 2
- word searcher program, final code / Word searcher program—final code
- code blocks, skipping / Skipping blocks of code
- execution, skipping / Stopping execution
- wrappers, using / External dependencies—using wrappers
- functions, replacing with return value/data (Mocking) / Replacing functions with their return value/data (Mocking)
- data saving to, from files as cache / Saving to / loading data from files as cache
- data, loading from files as cache / Saving to / loading data from files as cache
- data saving to, from memory as cache / Saving to / loading data from memory as cache
- data, loading from memory as cache / Saving to / loading data from memory as cache
- random/mock data, returning / Returning random/mock data
- random patient data, generating / Generating random patient data
- debugging technique, logging as
- about / Logging as a debugging technique
- simple application logging / Simple application logging
- logger objects / Advanced logging—logger objects
- custom formatting and loggers / Advanced logging—custom formatting and loggers
- syslog, writing to / Advanced logging—writing to syslog
- debugging tools
- debuggers used / Debugging tools—using debuggers
- debugging session, pdb used / A debugging session with pdb
- iPdb / iPdb
- Pdb++ / Pdb++
- deep
- versus shallow copy / Prototype – deep versus shallow copy
- Default dicts / defaultdict
- Deferreds / Twisted
- Denial of Service (DOS)
- about / Denial of Service
- deployability
- about / Deployability
- factors / Factors affecting Deployability
- deployability, quality attributes
- about / Deployability
- factors / Deployability
- deque / deque
- design patterns
- about / Design patterns - Elements
- elements / Design patterns - Elements
- categories / Categories of design patterns
- pluggable hashing algorithms / Pluggable hashing algorithms
- design patterns, categories
- about / Categories of design patterns
- creational pattern / Categories of design patterns
- structural pattern / Categories of design patterns
- behavioral pattern / Categories of design patterns
- deterministic profiling / Deterministic profiling
- dictionaries / Dictionaries
- disk files
- sorting / Sorting disk files
- sorting, with counter / Sorting disk files – using a counter
- sorting, with multiprocessing / Sorting disk files – using multiprocessing
- disk thumbnail generator
- about / Disk thumbnail generator
- doctests
E
- Event-driven programming
- about / Event-driven programming
- chat server and client, I/O multiplexing with select module used / Chat server and client using I/O multiplexing with the select module
- versus, concurrent programming / Event-driven programming versus Concurrent programming
- twisted / Twisted
- twisted, web client / Twisted – a simple web client
- chat server, Twisted used / Chat Server using Twisted
- Eventlet / Eventlet
- Greenlets and Gevent / Greenlets and Gevent
- Eventlet
- about / Eventlet
- executor interface
- submit method / Concurrent futures – high-level concurrent processing
- map method / Concurrent futures – high-level concurrent processing
F
- Fabric
- used, for remote deployments / Remote deployments using Fabric
- Factory pattern
- Finite State Machine (FSM) / The State pattern
- Flake8 / Metrics – tools for static analysis
- Flask / Flexible Microframework – Flask
- functional testing
- future
- waiting for, with async and await / Waiting for a future – async and await
- futures
G
- Global Interpreter Lock (GIL)
- for multithreading / Multithreading – Python and GIL
- about / Multithreading – Python and GIL
- Greenlets
- and Gevent / Greenlets and Gevent
- Gunicorn
- about / Gunicorn – unicorn for WSGI
- versus uWSGI / Gunicorn versus uWSGI
H
- horizontal scalability architectures
- active redundancy / Horizontal scalability architectures
- hot standby / Horizontal scalability architectures
- read replicas / Horizontal scalability architectures
- blue-green deployments / Horizontal scalability architectures
- best practices / Horizontal scalability architectures
- about / Horizontal scalability architectures
I
- installation testing / Testability – architectural aspects
- instrumentation tools / Performance testing and measurement tools
- integration tests
- about / Integration tests
- writing, approaches / Integration tests
- iPdb / iPdb
- Iterator pattern / The Iterator pattern, The Observer pattern
J
- joblib package
- about / Joblib
L
- late binding techniques
- about / Using late binding techniques
- plugin mechanisms / Using late binding techniques
- brokers/registry lookup services / Using late binding techniques
- notification services / Using late binding techniques
- deployment time binding / Using late binding techniques
- creational patterns,using / Using late binding techniques
- static analysis, tools / Metrics – tools for static analysis
- Lightweight Directory Access Protocol (LDAP) / Common security vulnerabilities
- line profiler / Line profiler
- lists / Lists
- locks
- used, for implementing resource constraint(s) / Thumbnail generator – resource constraint using locks
- versus semaphores / Resource constraint – semaphore versus lock
- lptrace program / The lptrace program
M
- maintainability
- about / Aspects related to Modifiability
- Mandelbrot set
- about / Fractals – the Mandelbrot set, Fractals – Scaling the Mandelbrot set implementation
- mandelbrot_calc_row function / Fractals – the Mandelbrot set
- mandelbrot_calc_set function / Fractals – the Mandelbrot set
- Celery, using / The Mandelbrot set using Celery
- McCabe / Metrics – tools for static analysis
- memory profiler / Memory profiler
- message-oriented middleware (MoM)
- message queues
- Microservice architecture
- about / Microservice architecture
- Microservice frameworks / Microservice frameworks in Python
- restaurant reservation example / Microservices example – restaurant reservation
- advantages / Microservices – advantages
- Model Template View (MTV)
- Model View Controller (MVC)
- about / Introducing MVC
- automated model-centric views / Django admin – automated model-centric views
- Flexible Microframework / Flexible Microframework – Flask
- modifiability
- about / What is modifiability?, Exploring strategies for modifiability
- aspects / Aspects related to Modifiability
- explicit interfaces, providing / Providing explicit interfaces
- two-way dependencies, reducing / Reducing two-way dependencies
- Abstract common services / Abstract common services
- Inheritance techniques, using / Using inheritance techniques
- late binding techniques, using / Using late binding techniques
- code smells / What are code smells?
- cyclomatic complexity / Cyclomatic complexity – the McCabe metric
- metrics, testing for / Testing for metrics
- Pylint, running / Running Static Checkers
- modifiability, quality attributes
- about / Modifiability
- affecting, factors / Modifiability
- modularity
- about / Aspects related to Modifiability
- Monit
- monitoring tools / Performance testing and measurement tools
- MTBF / Availability
- MTTR / Availability
- multiprocessing
- about / Concurrency, Concurrency in Python – multiprocessing
- primality checker / A primality checker
- disk files, sorting / Sorting disk files
- used, for sorting disk files / Sorting disk files – using multiprocessing
- versus multithreading / Multithreading versus multiprocessing
- multiprocessing module
- about / Concurrency
- multithreading
- about / Concurrency
- for concurrency, in Python / Concurrency in Python – multithreading
- with Python and GIL / Multithreading – Python and GIL
- versus multiprocessing / Multithreading versus multiprocessing
N
- namedtuple / namedtuple
- nose2 / Nosing around with nose2
- NT LAN Manager (NTLM) / Common security vulnerabilities
O
- Object Relational Mapper (ORM) / Model Template View (MTV) – Django
- Objgraph (object graph)
- about / Objgraph
- Observer pattern / The Observer pattern
- OrderedDic / OrderedDict
- order of the function / Performance complexity
P
- parallelism
- versus concurrency / Concurrency versus parallelism
- parallel processing libraries
- about / Parallel processing libraries
- Pdb / Pdb—similar tools
- Pdb++ / Pdb++
- performance
- about / What is performance?
- software performance engineering / Software performance engineering
- testing and measurement tools / Performance testing and measurement tools
- stress testing tools / Performance testing and measurement tools
- monitoring tools / Performance testing and measurement tools
- instrumentation tools / Performance testing and measurement tools
- code or application profiling tools / Performance testing and measurement tools
- complexity / Performance complexity
- measuring / Scalability and performance
- performance, measuring
- about / Measuring performance
- time measuring, context manager used / Measuring time using a context manager
- code timing, timeit module used / Timing code using the timeit module
- timeit used / Measuring the performance of our code using timeit
- time complexity, finding / Finding out time complexity – graphs
- CPU time measuring, timeit used / Measuring CPU time with timeit
- performance, programming
- about / Programming for performance – data structures
- mutable containers / Mutable containers – lists, dictionaries, and sets
- lists / Lists
- dictionaries / Dictionaries
- sets / Sets
- immutable containers / Immutable containers – tuples
- high performance containers / High performance containers – the collections module
- Probabilistic data structures / Probabilistic data structures – bloom filters
- bloom filters / Probabilistic data structures – bloom filters
- Performance Engineering Life Cycle (PGLC) / Software performance engineering
- performance testing
- about / Testability – architectural aspects
- load testing / Testability – architectural aspects
- stress testing / Testability – architectural aspects
- scalability testing / Testability – architectural aspects
- Perl Webserver Gateway Interface (PSGI)
- Pip / Pip
- Pipe and Filter architecture
- about / Pipe and Filter architectures
- in Python / Pipe and Filter in Python
- pluggable hashing algorithms / Pluggable hashing algorithms
- summing up / Summing up pluggable hashing algorithm
- pre-emptive multitasking
- versus cooperative multitasking / Pre-emptive versus cooperative multitasking
- about / Pre-emptive versus cooperative multitasking
- primality checker
- about / A primality checker
- profiling
- about / Profiling
- deterministic profiling / Deterministic profiling
- with cProfile and profile / Profiling with cProfile and profile
- prime number iterator class / Prime number iterator class – performance tweaks
- statistics, collecting / Profiling – collecting and reporting statistics
- statistics, reporting / Profiling – collecting and reporting statistics
- third-party profilers / Third-party profilers
- Prototype pattern
- about / The Prototype pattern
- Prototype factory / The Prototype factory
- Builder pattern / The Builder pattern
- Prototype patterns / Categories of design patterns
- Proxy pattern / Categories of design patterns
- Publish-Subscribe / The Observer pattern
- py.test
- used, for testing / Testing with py.test
- Pycodestyle / Metrics – tools for static analysis
- Pyflakes / Metrics – tools for static analysis
- Pylint / Metrics – tools for static analysis
- running / Running Static Checkers
- PyMP
- about / PyMP
- Pympler
- about / Pympler
- Python
- concurrency, with multithreading / Concurrency in Python – multithreading
- and GIL, used for multithreading / Multithreading – Python and GIL
- asyncio module / The asyncio module in Python
- security / Is Python secure?
- reading input / Reading input
- Python Enhancement Proposal (PEP) / Follow coding and style guidelines
- Python Imaging Library (PIL)
- Python Open Web Application Security Project (OWASP) project / Strategies for security – Python
- Python Package Index (PyPI)
- about / PyPI
- Python Packaging Authority (PyPA)
Q
- quality attributes
- about / Architectural quality attributes
- modifiability / Modifiability
- testability / Testability
- scalability / Scalability
- performance / Performance
- availability / Availability
- security / Security
- deployability / Deployability
- Quality of Service (QoS)
R
- RabbitMQ
- readability
- about / Aspects related to Modifiability, Understanding readability
- and Python / Python and readability
- antipatterns / Readability - antipatterns
- techniques / Techniques for readability
- code, documenting / Document your code
- coding and style guidelines, following / Follow coding and style guidelines
- code, refactor and review / Review and refactor code
- Receiving Applications
- Relational Database Systems (RDBMs)
- resource constraint(s)
- implementing, with locks / Thumbnail generator – resource constraint using locks
- implementing, with semaphores / Thumbnail generator – resource constraint using semaphores
- Response For Class (RFC) / Reduce system complexity
- reusability
- about / Aspects related to Modifiability
- RLock
- root-mean-squared (RMS) / Commenting the code
S
- scalability
- measuring / Scalability and performance
- scalability, quality attributes
- about / Scalability
- horizontal scalability / Scalability
- vertical scalability / Scalability
- scalability architectures
- about / Scalability architectures
- vertical scalability architectures / Vertical scalability architectures
- horizontal scalability architectures / Horizontal scalability architectures
- scaling
- on web / Scaling for the Web
- workflows / Scaling workflows – message queues and task queues
- message queues / Scaling workflows – message queues and task queues
- task queues / Scaling workflows – message queues and task queues
- secure architecture
- secure coding
- about / Secure coding
- strategies / Secure coding
- security, quality attributes
- security,strategies
- about / Strategies for security – Python
- reading input / Strategies for security – Python
- expressions, evaluating / Strategies for security – Python
- serialization / Strategies for security – Python
- overflow errors / Strategies for security – Python
- string formatting / Strategies for security – Python
- files / Strategies for security – Python
- passwords and sensitive information, handling / Strategies for security – Python
- local data / Strategies for security – Python
- race conditions / Strategies for security – Python
- security updates / Strategies for security – Python
- security issues
- with web applications / Security issues with web applications
- Server Side Template Injection (SSTI) / Server Side Template Injection
- Server Side Template Injection (SSTI), mitigation / Server-Side Template Injection – mitigation
- Denial of Service (DOS) / Denial of Service
- Cross-Site Scripting (XSS) / Cross-Site Scripting(XSS)
- Cross-Site Scripting (XSS), mitigation / Mitigation – DoS and XSS
- Denial of Service (DOS), mitigation / Mitigation – DoS and XSS
- security testing / Testability – architectural aspects
- security vulnerabilities
- about / Common security vulnerabilities
- overflow errors / Common security vulnerabilities
- unvalidated input / Common security vulnerabilities
- improper access control / Common security vulnerabilities
- cryptography issues / Common security vulnerabilities
- information leak / Common security vulnerabilities
- race conditions / Common security vulnerabilities
- insecure file operations / Common security vulnerabilities
- Selenium Web Driver
- used, for test automation / Test automation using Selenium Web Driver
- semaphores
- used, for implementing resource constraint(s) / Thumbnail generator – resource constraint using semaphores
- versus locks / Resource constraint – semaphore versus lock
- Sending Applications
- Server Side Template Injection (SSTI)
- about / Server Side Template Injection
- Service Oriented Architectures (SOA) / Microservice architecture
- sets / Sets
- setup.py file / The setup.py file
- Singleton pattern
- about / The Singleton pattern
- Software Architecture
- defining / Defining Software Architecture
- versus design / Software Architecture versus design
- aspects / Aspects of Software Architecture
- characteristics / An architecture defines a structure, An architecture picks a core set of elements, An architecture manages stakeholder requirements, An architecture influences the organizational structure, An architecture often conforms to a pattern
- importance / Importance of Software Architecture
- software deployment
- about / Software deployment in Python
- Python code, packaging / Packaging Python code
- Pip / Pip
- Virtualenv / Virtualenv
- Virtualenv and pip / Virtualenv and pip
- virtual environments, relocatable / Relocatable virtual environments
- PyPI / PyPI
- application, packaging / Packaging and submission of an application
- application, submission / Packaging and submission of an application
- __init__.py files / The __init__.py files
- setup.py file / The setup.py file
- package, installing / Installing the package
- package, submitting to PyPI / Submitting the package to PyPI
- Fabric, using for remote deployments / Remote deployments using Fabric
- Supervisor, used for managing remote daemons / Managing remote daemons using Supervisor
- software deployment, patterns
- continuous deployment / Deployment – patterns and best practices
- BlueGreen deployment / Deployment – patterns and best practices
- Canary releases / Deployment – patterns and best practices
- Bucket testing (A/B testing) / Deployment – patterns and best practices
- induced chaos / Deployment – patterns and best practices
- Chaos Monkey / Deployment – patterns and best practices
- software deployment architecture, tiers
- about / Tiers of software deployment architecture
- Development/Test/Stage/Production / Tiers of software deployment architecture
- Development and Test/Stage/Production / Tiers of software deployment architecture
- Development and Test/ Stage and Production / Tiers of software deployment architecture
- Software Development Life Cycle (SDLC) / Software performance engineering
- Software Performance Engineering (SPE) / Software performance engineering
- State pattern / The State pattern
- strace
- used, for system call tracing / System call tracing using strace
- stress testing tools / Performance testing and measurement tools
- structural pattern
- about / Categories of design patterns, Patterns in Python – Structural
- proxy pattern / Categories of design patterns
- Composite pattern / Categories of design patterns
- Adapter pattern / The Adapter pattern
- Facade pattern / The Facade pattern
- Facades / Facades in Python
- Proxy pattern / The Proxy pattern
- instance-counting proxy / An instance-counting proxy
- subarray
- issues / Maximum subarray problem
- print, power / The power of "print"
- analysis and rewrite / Analysis and rewrite
- code, timing / Timing and optimizing the code
- code, optimizing / Timing and optimizing the code
- Supervisor
- used, for managing remote daemons / Managing remote daemons using Supervisor
- Supervisord
- symmetric multiprocessing (SMP)
- about / Parallel processing libraries
- System Architecture
- versus, Enterprise Architecture / System versus enterprise architecture
T
- task
- task queues
- Test-Driven Development (TDD)
- about / Test-Driven Development
- with palindromes / TDD with palindromes
- testability
- about / Understanding testability
- software testability / Software testability and related attributes
- architectural, aspects / Testability – architectural aspects
- strategies / Testability – strategies
- reduce system complexity / Reduce system complexity
- predictability, improving / Improving predictability
- control and isolate external dependencies / Control and isolate external dependencies
- testability, quality attributes
- about / Testability
- test automation
- about / Test automation
- Selenium Web Driver used / Test automation using Selenium Web Driver
- third-party profilers
- line profiler / Line profiler
- memory profiler / Memory profiler
- substring (subsequence) problem / Substring (subsequence) problem
- threading module
- thumbnail generator
- about / Thumbnail generator
- producer/consumer architecture / Thumbnail generator – producer/consumer architecture
- resource constraint(s), implementing with locks / Thumbnail generator – resource constraint using locks
- resource constraint(s), implementing with semaphores / Thumbnail generator – resource constraint using semaphores
- URL rate controller, implementing with conditions / Thumbnail generator – URL rate controller using conditions
- timeit module
- used, for code timing / Timing code using the timeit module
- used, for measuring performance / Measuring the performance of our code using timeit
- used, for measuring CPU time / Measuring CPU time with timeit
- trace module / The trace module
- tuples / Immutable containers – tuples
- twisted
- about / Twisted
- two-way dependencies
- reducing / Reducing two-way dependencies
- twsited
- chat server, using for / Chat Server using Twisted
U
- unit testing
- URL rate controller
- implementing, with conditions / Thumbnail generator – URL rate controller using conditions
- usability testing / Testability – architectural aspects
- uWSGI
- about / uWSGI – WSGI middleware on steroids
- versus Gunicorn / Gunicorn versus uWSGI
V
- vertical scalability architectures
- about / Vertical scalability architectures
- resources, adding to existing system / Vertical scalability architectures
- existing resources, using in system / Vertical scalability architectures
- Virtualenv
- about / Virtualenv
- and pip / Virtualenv and pip
W
- web
- scaling on / Scaling for the Web
- Web Content Accessibility Guidelines (WCAG) / Testability – architectural aspects
- Web Server Gateway Interface (WSGI)
- White-box testing
- about / Testability – architectural aspects
- principles / White-box testing principles
- unit testing / Unit testing
- unit testing, in action / Unit testing in action
- unit test case / Extending our unit test case
- nose2 / Nosing around with nose2
- py.test, testing with / Testing with py.test
- code coverage / Code coverage
- mocking / Mocking things up
- integration tests / Integration tests
- test automation / Test automation
- workers