| 341 | | <div class="slide" id="how-am-i"> |
| 342 | | <h1>How am I ?</h1> |
| 343 | | <ul class="simple"> |
| 344 | | <li>Python developer since 2000</li> |
| 345 | | <li>Core developer in Nuxeo CPS (Zope) for 3 years</li> |
| 346 | | <li>Involved in Zope sprints</li> |
| 347 | | <li>Author of<ul> |
| 348 | | <li>a French book "Programmation Python" (Eyrolles, 2006)</li> |
| 349 | | <li>another one coming up this summer</li> |
| 350 | | <li>articles in magazines</li> |
| 351 | | </ul> |
| 352 | | </li> |
| 353 | | <li>Creator of AFPY (french speaking PUG)</li> |
| 354 | | <li>CTO at Emencia, for a Python e-commerce framework</li> |
| 355 | | </ul> |
| 356 | | </div> |
| 357 | | <div class="slide" id="what-are-the-goals-of-this-presentation"> |
| 358 | | <h1>What are the goals of this presentation ?</h1> |
| 359 | | <p>The main goal is to understand how Agile documentation works in Python, |
| 360 | | through:</p> |
| 361 | | <ul class="simple"> |
| 362 | | <li>Understanding how Test-Driven Development works in Python</li> |
| 363 | | <li>Discovering reStructuredText and doctests</li> |
| 364 | | <li>Understanding how Document-Driven Developement works</li> |
| 365 | | <li>Learning a few patterns</li> |
| 366 | | </ul> |
| | 341 | <div class="slide" id="qui-suis-je"> |
| | 342 | <h1>Qui suis-je ?</h1> |
| | 343 | <ul class="simple"> |
| | 344 | <li>Développeur Python depuis 2000</li> |
| | 345 | <li>Auteur d'articles et de livres sur Python</li> |
| | 346 | <li>Président de l'AFPY</li> |
| | 347 | <li>Passionné par les méthodologies <strong>agiles</strong></li> |
| | 348 | </ul> |
| | 349 | </div> |
| | 350 | <div class="slide" id="pourquoi-cette-pr-sentation"> |
| | 351 | <h1>Pourquoi cette présentation?</h1> |
| | 352 | <p>Objectifs:</p> |
| | 353 | <ul class="simple"> |
| | 354 | <li>Sensibiliser les développeurs aux tests</li> |
| | 355 | <li>Expliquer comment les tests fonctionnent en Python</li> |
| | 356 | <li>Sensibiliser les développeurs au <strong>DDD</strong></li> |
| | 357 | <li>Expliquer pourquoi le <strong>reST</strong> et les <strong>doctests</strong> c'est merveilleux</li> |
| | 358 | </ul> |
| | 359 | <p><img alt="important" src="media/important.png" /> En un mot: comment développer <cite>agile</cite> en Python</p> |
| 369 | | <h1>What are the goals of this presentation ?</h1> |
| 370 | | <p>My secret goal is to come to RuPy to see how Ruby works...</p> |
| 371 | | </div> |
| 372 | | <div class="slide" id="the-plan"> |
| 373 | | <h1>The plan</h1> |
| 374 | | <ul class="simple"> |
| 375 | | <li><strong>A few definitions</strong></li> |
| 376 | | <li><cite>Part 1: doing TDD in Python</cite></li> |
| 377 | | <li><cite>Part 2: writing documents in reST</cite></li> |
| 378 | | <li><cite>Part 3: writing doctests</cite></li> |
| 379 | | <li><cite>Part 4: doing DDD in Python</cite></li> |
| 380 | | </ul> |
| 381 | | </div> |
| 382 | | <div class="slide" id="a-few-definitions"> |
| 383 | | <h1>A few definitions</h1> |
| 384 | | <p>What kind of documentation are we talking about ?</p> |
| | 362 | <h1>Pourquoi cette présentation?</h1> |
| | 363 | <p>Objectifs secrets (ne pas montrer ce slide):</p> |
| | 364 | <ul class="simple"> |
| | 365 | <li>Ridiculiser Java</li> |
| | 366 | <li>Déprimer les développeurs Ruby</li> |
| | 367 | <li>Rendre les chefs de projet C# jaloux</li> |
| | 368 | <li>Augmenter le nombre d'adhérents à l'association</li> |
| | 369 | </ul> |
| | 370 | </div> |
| | 371 | <div class="slide" id="le-plan"> |
| | 372 | <h1>Le plan</h1> |
| | 373 | <ul class="simple"> |
| | 374 | <li><strong>Quelques définitions</strong> <img alt="smile" src="media/smile.png" /></li> |
| | 375 | <li><cite>Partie 1: le TDD avec Python</cite></li> |
| | 376 | <li><cite>Partie 2: le reST</cite> A ZAPPER</li> |
| | 377 | <li><cite>Part 3: les doctests</cite></li> |
| | 378 | <li><cite>Part 4: le DDD</cite></li> |
| | 379 | </ul> |
| | 380 | </div> |
| | 381 | <div class="slide" id="quelques-d-finitions"> |
| | 382 | <h1>Quelques définitions</h1> |
| | 383 | <p>Que veux dire le mot <strong>agile</strong> ?</p> |
| 387 | | <h1>A few definitions</h1> |
| 388 | | <p>Technical documentation that helps to understand how a codebase |
| 389 | | works and how it can be used. This can be:</p> |
| 390 | | <ul class="simple"> |
| 391 | | <li>a document describing a package <a class="footnote-reference" href="#id5" id="id3" name="id3">[1]</a>, a module <a class="footnote-reference" href="#id5" id="id4" name="id4">[1]</a> or a |
| 392 | | serie of package</li> |
| 393 | | <li>a glossary</li> |
| 394 | | <li>a tutorial</li> |
| 395 | | <li>a recipe</li> |
| 396 | | </ul> |
| 397 | | <table class="docutils footnote" frame="void" id="id5" rules="none"> |
| | 386 | <h1>Quelques définitions</h1> |
| | 387 | <p>Tentative de définition appliqué au développement:</p> |
| | 388 | <p><strong>C'est une méthodologie de programmation qui permet de |
| | 389 | rester réactif aux fréquentes modifications d'une base |
| | 390 | de code</strong></p> |
| | 391 | <p>Viens de l'<cite>Agile Manifesto</cite> (<a class="reference" href="http://agilemanifesto.org/">http://agilemanifesto.org/</a> <a class="footnote-reference" href="#id4" id="id3" name="id3">[1]</a>)</p> |
| | 392 | <ul class="simple"> |
| | 393 | <li>créé par le GoF (Beck, etc.) et co</li> |
| | 394 | <li>XP est une méthode agile populaire</li> |
| | 395 | </ul> |
| | 396 | <table class="docutils footnote" frame="void" id="id4" rules="none"> |
| 405 | | <h1>A few definitions</h1> |
| 406 | | <p>What <strong>Agile</strong> means ?</p> |
| | 414 | <h1>Le plan</h1> |
| | 415 | <ul class="simple"> |
| | 416 | <li><cite>Quelques définitions</cite></li> |
| | 417 | <li><strong>Partie 1: le TDD avec Python</strong> <img alt="smile" src="media/smile.png" /></li> |
| | 418 | <li><cite>Partie 2: le reST</cite></li> |
| | 419 | <li><cite>Part 3: les doctests</cite></li> |
| | 420 | <li><cite>Part 4: le DDD</cite></li> |
| | 421 | </ul> |
| | 422 | </div> |
| | 423 | <div class="slide" id="partie-1"> |
| | 424 | <h1>Partie 1</h1> |
| | 425 | <p><strong>Le TDD avec Python</strong></p> |
| | 426 | <ul class="simple"> |
| | 427 | <li><strong>Les principes du TDD</strong></li> |
| | 428 | <li><cite>Comment écrire des tests</cite></li> |
| | 429 | </ul> |
| | 430 | </div> |
| | 431 | <div class="slide" id="les-principes-du-tdd"> |
| | 432 | <h1>Les principes du TDD</h1> |
| | 433 | <ul class="simple"> |
| | 434 | <li>Chaque fonction == un ou plusieurs cas d'utilisation</li> |
| | 435 | <li>Un cas d'utilisation == un test possible</li> |
| | 436 | </ul> |
| 409 | | <h1>A few definitions</h1> |
| 410 | | <p><strong>A lightweight process to stay reactive to frequent changes</strong></p> |
| 411 | | <ul class="simple"> |
| 412 | | <li>Comes from the Agile Manifesto<ul> |
| 413 | | <li><a class="reference" href="http://agilemanifesto.org/">http://agilemanifesto.org/</a> <a class="footnote-reference" href="#id9" id="id8" name="id8">[2]</a></li> |
| 414 | | <li>created by members of the GoF (Beck, etc.) and others</li> |
| 415 | | <li>XP is one popular agile method</li> |
| 416 | | </ul> |
| 417 | | </li> |
| 418 | | </ul> |
| 419 | | <table class="docutils footnote" frame="void" id="id9" rules="none"> |
| 420 | | <colgroup><col class="label" /><col /></colgroup> |
| 421 | | <tbody valign="top"> |
| 422 | | <tr><td class="label"><a class="fn-backref" href="#id8" name="id9">[2]</a></td><td>The website looks a bit like some sect site but it's a good sect</td></tr> |
| 423 | | </tbody> |
| 424 | | </table> |
| 425 | | </div> |
| 426 | | <div class="slide" id="id10"> |
| 427 | | <h1>A few definitions</h1> |
| 428 | | <p>Agile principles can be applied to any repeating process:</p> |
| 429 | | <ul class="simple"> |
| 430 | | <li>coding</li> |
| 431 | | <li>documenting</li> |
| 432 | | <li>lawn-mowing</li> |
| 433 | | <li>etc.</li> |
| 434 | | </ul> |
| 435 | | </div> |
| 436 | | <div class="slide" id="id11"> |
| 437 | | <h1>The plan</h1> |
| 438 | | <ul class="simple"> |
| 439 | | <li><cite>A few definitions</cite></li> |
| 440 | | <li><strong>Part 1: doing TDD in Python</strong></li> |
| 441 | | <li><cite>Part 2: writing documents in reST</cite></li> |
| 442 | | <li><cite>Part 3: writing doctests</cite></li> |
| 443 | | <li><cite>Part 4: doing DDD in Python</cite></li> |
| 444 | | </ul> |
| 445 | | </div> |
| 446 | | <div class="slide" id="part-1"> |
| 447 | | <h1>Part 1</h1> |
| 448 | | <p><strong>Doing TDD in Python</strong></p> |
| 449 | | <p>This part is composed of:</p> |
| 450 | | <ul class="simple"> |
| 451 | | <li><strong>The TDD principles</strong></li> |
| 452 | | <li><cite>How to write tests in Python</cite></li> |
| 453 | | <li><cite>How to organise tests in a Python project</cite></li> |
| 454 | | </ul> |
| 455 | | </div> |
| 456 | | <div class="slide" id="tdd-principles"> |
| 457 | | <h1>TDD Principles</h1> |
| 458 | | <ul class="simple"> |
| 459 | | <li>Each function or method can have one or several sample use case</li> |
| 460 | | <li>A sample use case == a test</li> |
| 461 | | </ul> |
| 462 | | </div> |
| 463 | | <div class="slide" id="id12"> |
| 464 | | <h1>TDD Principles</h1> |
| 465 | | <p>Example:</p> |
| | 439 | <h1>Les principes du TDD</h1> |
| | 440 | <p>Exemple:</p> |
| 512 | | <div class="slide" id="id15"> |
| 513 | | <h1>TDD Principles</h1> |
| 514 | | <ul class="simple"> |
| 515 | | <li>The tests now validate several use cases for the function</li> |
| 516 | | <li>Running all those tests == test suite</li> |
| 517 | | <li>The function is now tighted to its test suite</li> |
| 518 | | </ul> |
| 519 | | </div> |
| 520 | | <div class="slide" id="id16"> |
| 521 | | <h1>TDD Principles</h1> |
| 522 | | <p>Let's write the tests before the code:</p> |
| | 487 | <div class="slide" id="id10"> |
| | 488 | <h1>Les principes du TDD</h1> |
| | 489 | <ul class="simple"> |
| | 490 | <li>Plusieurs cas testés pour la fonction</li> |
| | 491 | <li>Lancer l'ensemble des tests == campagne de tests == <cite>test suite</cite></li> |
| | 492 | <li>La fonction est <cite>mariée</cite> à ses tests</li> |
| | 493 | </ul> |
| | 494 | <p><em>Je change la fonction, je revalide les tests</em></p> |
| | 495 | </div> |
| | 496 | <div class="slide" id="id11"> |
| | 497 | <h1>Les principes du TDD</h1> |
| | 498 | <p>Encore plus fort: le test est écrit <cite>avant</cite> le code:</p> |
| 547 | | <ul class="simple"> |
| 548 | | <li>Tests should be written <em>before</em> the code</li> |
| 549 | | <li>In the real world they are written at the same time <img alt="wink" src="media/wink.png" /></li> |
| | 523 | <p>-> Les tests devraient être écrits <em>avant</em> le code</p> |
| | 524 | <p>-> Bien souvent ils le sont en même temps ou juste aprÚs</p> |
| | 525 | </div> |
| | 526 | <div class="slide" id="id13"> |
| | 527 | <h1>Les principes du TDD</h1> |
| | 528 | <p>Le TDD offre:</p> |
| | 529 | <ul class="simple"> |
| | 530 | <li>La <strong>Qualité</strong><ul> |
| | 531 | <li>les développeurs révisent naturellement leur code</li> |
| | 532 | <li>les refontes de code sont plus faciles</li> |
| | 533 | </ul> |
| | 534 | </li> |
| | 535 | <li>La <strong>non-régression</strong>: on relance les tests à chaque modification</li> |
| | 536 | <li><strong>Une documentation de base</strong>: lire les tests aide à comprendre le code</li> |
| | 537 | </ul> |
| | 538 | </div> |
| | 539 | <div class="slide" id="id14"> |
| | 540 | <h1>Les principes du TDD</h1> |
| | 541 | <p>Jean-Charles dit:</p> |
| | 542 | <blockquote> |
| | 543 | "Les tests. Quelle perte de temps. C'est juste un jouet |
| | 544 | pour les langages interprétés"</blockquote> |
| | 545 | <p>Bruce Eckel dit:</p> |
| | 546 | <blockquote> |
| | 547 | <em>"If it's not tested, it's broken"</em></blockquote> |
| | 548 | </div> |
| | 549 | <div class="slide" id="id15"> |
| | 550 | <h1>Les principes du TDD</h1> |
| | 551 | <p>Bruce a raison.</p> |
| | 552 | <ul class="simple"> |
| | 553 | <li>Le code non-testé est voué à mourir</li> |
| | 554 | <li>Toutes les mesures ont prouvé que l'on passe |
| | 555 | plus de temps à débugguer du code non-testé qu'à écrire |
| | 556 | les tests.</li> |
| | 557 | <li>Un compilateur valide la syntaxe, pas le fonctionnement.</li> |
| | 558 | </ul> |
| | 559 | </div> |
| | 560 | <div class="slide" id="id16"> |
| | 561 | <h1>Partie 1</h1> |
| | 562 | <p><strong>Le TDD avec Python</strong></p> |
| | 563 | <ul class="simple"> |
| | 564 | <li><cite>Les principes du TDD</cite></li> |
| | 565 | <li><strong>Comment écrire des tests</strong></li> |
| | 566 | </ul> |
| | 567 | </div> |
| | 568 | <div class="slide" id="comment-crire-des-tests"> |
| | 569 | <h1>Comment écrire des tests</h1> |
| | 570 | <p>Python est <em>batteries included</em>. On y trouve:</p> |
| | 571 | <ul class="simple"> |
| | 572 | <li><cite>unittest</cite>: un framework de test à la <strong>JUnit</strong></li> |
| | 573 | <li><cite>doctest</cite>: un outil de tests à la <strong>literate-programming-un-peu</strong></li> |
| | 574 | </ul> |
| | 575 | <p><img alt="important" src="media/important.png" /> Il existe plein d'autres outils tiers de tests</p> |
| | 576 | </div> |
| | 577 | <div class="slide" id="id17"> |
| | 578 | <h1>Comment écrire des tests</h1> |
| | 579 | <p><cite>unittest</cite> fourni des outils pour l'écriture des tests:</p> |
| | 580 | <ul class="simple"> |
| | 581 | <li>une classe <cite>TestCase</cite>, pour les assertions et les <cite>test fixture</cite>;</li> |
| | 582 | <li>une classe <cite>TestSuite</cite>, pour créér des séquences de tests;</li> |
| | 583 | <li>quelques fonctions pour lancer des <em>test campaign</em>.</li> |
| 561 | | <li><strong>Non-regression</strong>: all tests are run on every change</li> |
| 562 | | <li><strong>A primer documentation</strong>: reading tests helps understanding the code</li> |
| 563 | | </ul> |
| 564 | | </div> |
| 565 | | <div class="slide" id="id19"> |
| 566 | | <h1>TDD Principles</h1> |
| 567 | | <p>Jean-Charles says:</p> |
| 568 | | <blockquote> |
| 569 | | "Tests are a waste of time, just a toy for interpreted |
| 570 | | languages"</blockquote> |
| 571 | | <p>Bruce Eckel says:</p> |
| 572 | | <blockquote> |
| 573 | | "If it's not tested, it's broken"</blockquote> |
| 574 | | <p>Bruce's the one who's right:</p> |
| 575 | | <ul class="simple"> |
| 576 | | <li>untested code does not last long</li> |
| 577 | | <li>all metrics have proven you waste way more time |
| 578 | | debugging untested code than writing tests</li> |
| 579 | | </ul> |
| 580 | | </div> |
| 581 | | <div class="slide" id="id20"> |
| 582 | | <h1>Part 1</h1> |
| 583 | | <p><strong>Doing TDD in Python</strong></p> |
| 584 | | <ul class="simple"> |
| 585 | | <li><cite>The TDD principles</cite></li> |
| 586 | | <li><strong>How to write tests in Python</strong></li> |
| 587 | | <li><cite>How to organise tests in a Python project</cite></li> |
| 588 | | </ul> |
| 589 | | </div> |
| 590 | | <div class="slide" id="how-to-write-tests-in-python"> |
| 591 | | <h1>How to write tests in Python</h1> |
| 592 | | <p>Python is <em>battery included</em>. The standard library provides:</p> |
| 593 | | <ul class="simple"> |
| 594 | | <li><cite>unittest</cite>: a JUnit-like test framework</li> |
| 595 | | <li><cite>doctest</cite>: a literate-programming-kind-of test tool</li> |
| 596 | | </ul> |
| 597 | | <p><img alt="important" src="media/important.png" /> There are many other test framework projects out there</p> |
| 598 | | </div> |
| 599 | | <div class="slide" id="id21"> |
| 600 | | <h1>How to write tests in Python</h1> |
| 601 | | <p><cite>unittest</cite> provides helpers to write tests:</p> |
| 602 | | <ul class="simple"> |
| 603 | | <li>a <cite>TestCase</cite> class, that provides assertion methods and test fixture</li> |
| 604 | | <li>a <cite>TestSuite</cite> class, to create a sequence of tests</li> |
| 605 | | <li>a few functions to run a <em>test campaign</em></li> |
| 606 | | </ul> |
| 607 | | </div> |
| 608 | | <div class="slide" id="id22"> |
| 609 | | <h1>How to write tests in Python</h1> |
| 610 | | <p><cite>TestCase</cite> provides two things:</p> |
| 611 | | <ul class="simple"> |
| 612 | | <li>two methods to manage the <cite>test fixture</cite><ul> |
| 613 | | <li>setUp: runs when the test starts</li> |
| 614 | | <li>tearDown: runs when the tests stops</li> |
| 615 | | </ul> |
| 616 | | </li> |
| 617 | | <li>a serie of methods to make assertions:<ul> |
| | 595 | <li>des méhodes pour les assertions:<ul> |
| 640 | | <p>Each test is a method with a <cite>test</cite> prefix.</p> |
| 641 | | </div> |
| 642 | | <div class="slide" id="id24"> |
| 643 | | <h1>How to write tests in Python</h1> |
| 644 | | <p>The test can be:</p> |
| 645 | | <ul class="simple"> |
| 646 | | <li>saved into a file (e.g. a module)</li> |
| 647 | | <li>added to a <cite>test suite</cite> (e.g. a <cite>TestSuite</cite> class)</li> |
| 648 | | <li>run with a default <cite>runner</cite> provided (e.g. the <cite>main</cite> function)</li> |
| 649 | | </ul> |
| 650 | | </div> |
| 651 | | <div class="slide" id="id25"> |
| 652 | | <h1>How to write tests in Python</h1> |
| 653 | | <p>Example of test module:</p> |
| | 618 | <p>Un test == une méthode préfixée de <cite>test</cite></p> |
| | 619 | </div> |
| | 620 | <div class="slide" id="id20"> |
| | 621 | <h1>Comment écrire des tests</h1> |
| | 622 | <p>Les tests peuvent être:</p> |
| | 623 | <ul class="simple"> |
| | 624 | <li>sauvegardés dans des fichiers (e.g. un module)</li> |
| | 625 | <li>ajoutés à un <cite>test suite</cite> (e.g. une classe <cite>TestSuite</cite>)</li> |
| | 626 | <li>lancés par un <cite>runner</cite> fourni par défaut (e.g. la fonction <cite>main</cite>)</li> |
| | 627 | </ul> |
| | 628 | </div> |
| | 629 | <div class="slide" id="id21"> |
| | 630 | <h1>Comment écrire des tests</h1> |
| | 631 | <p>Exemple de module:</p> |
| | 692 | <div class="slide" id="id25"> |
| | 693 | <h1>Partie 1</h1> |
| | 694 | <p>Pour aller plus loin:</p> |
| | 695 | <blockquote> |
| | 696 | -> Comment organiser les tests dans un projet Python</blockquote> |
| | 697 | </div> |
| | 698 | <div class="slide" id="the-plan"> |
| | 699 | <h1>The plan</h1> |
| | 700 | <ul class="simple"> |
| | 701 | <li><cite>A few definitions</cite></li> |
| | 702 | <li><cite>Part 1: doing TDD in Python</cite></li> |
| | 703 | <li><strong>Part 2: writing documents in reST</strong></li> |
| | 704 | <li><cite>Part 3: writing doctests</cite></li> |
| | 705 | <li><cite>Part 4: doing DDD in Python</cite></li> |
| | 706 | </ul> |
| | 707 | </div> |
| | 708 | <div class="slide" id="part-2"> |
| | 709 | <h1>Part 2</h1> |
| | 710 | <p>Writing documents in reST</p> |
| | 711 | <ul class="simple"> |
| | 712 | <li><strong>What is reST ?</strong></li> |
| | 713 | <li><cite>reST syntax overview</cite></li> |
| | 714 | <li><cite>reST tools</cite></li> |
| | 715 | </ul> |
| | 716 | </div> |
| | 717 | <div class="slide" id="what-is-rest"> |
| | 718 | <h1>What is reST ?</h1> |
| | 719 | <p>reSTructuredText (say reSt to be hype) is:</p> |
| | 720 | <ul class="simple"> |
| | 721 | <li>a plaintext markup syntax and parser system</li> |
| | 722 | <li>easy to read as-is, yet powerful</li> |
| | 723 | <li>the Pythonistas laTeX</li> |
| | 724 | <li>see <a class="reference" href="http://docutils.sf.net">http://docutils.sf.net</a></li> |
| | 725 | </ul> |
| | 726 | </div> |
| | 727 | <div class="slide" id="id26"> |
| | 728 | <h1>What is reST ?</h1> |
| | 729 | <p>Example:</p> |
| | 730 | <pre class="literal-block"> |
| | 731 | ================== |
| | 732 | I am the reST file |
| | 733 | ================== |
| | 734 | |
| | 735 | I am the first section |
| | 736 | ====================== |
| | 737 | |
| | 738 | I am the content of the first section. |
| | 739 | I have things to say. |
| | 740 | |
| | 741 | I am the second section |
| | 742 | ======================= |
| | 743 | |
| | 744 | I am, what I am, what I aammmm... |
| | 745 | </pre> |
| | 746 | </div> |
| | 747 | <div class="slide" id="id27"> |
| | 748 | <h1>What is reST ?</h1> |
| | 749 | <p>Several remarks:</p> |
| | 750 | <ul class="simple"> |
| | 751 | <li>the reST syntax doesn't obfuscate the text</li> |
| | 752 | <li>punctuation signs are used to underline section titles</li> |
| | 753 | </ul> |
| | 754 | </div> |
| | 755 | <div class="slide" id="id28"> |
| | 756 | <h1>Part 2</h1> |
| | 757 | <p>Writing documents in reST</p> |
| | 758 | <ul class="simple"> |
| | 759 | <li><cite>What is reST ?</cite></li> |
| | 760 | <li><strong>reST syntax overview</strong></li> |
| | 761 | <li><cite>reST tools</cite></li> |
| | 762 | </ul> |
| | 763 | </div> |
| | 764 | <div class="slide" id="rest-syntax-overview"> |
| | 765 | <h1>reST syntax overview</h1> |
| | 766 | <ul class="simple"> |
| | 767 | <li>punctuation signs to underline sections</li> |
| | 768 | <li>text enhancements<ul> |
| | 769 | <li><tt class="docutils literal"><span class="pre">*emphasis*</span></tt></li> |
| | 770 | <li><tt class="docutils literal"><span class="pre">**strong</span> <span class="pre">emphasis**</span></tt></li> |
| | 771 | <li><tt class="docutils literal"><span class="pre">`interpreted</span> <span class="pre">text`</span></tt></li> |
| | 772 | <li><tt class="docutils literal"><span class="pre">``inline</span> <span class="pre">literal</span> <span class="pre">text``</span></tt></li> |
| | 773 | </ul> |
| | 774 | </li> |
| | 775 | </ul> |
| | 776 | </div> |
| 715 | | <h1>Part 1</h1> |
| 716 | | <p><strong>Doing TDD in Python</strong></p> |
| 717 | | <ul class="simple"> |
| 718 | | <li><cite>The TDD principles</cite></li> |
| 719 | | <li><cite>How to write tests in Python</cite></li> |
| 720 | | <li><strong>How to organise tests in a Python project</strong></li> |
| | 778 | <h1>reST syntax overview</h1> |
| | 779 | <ul class="simple"> |
| | 780 | <li>bullet list: use +, * or -</li> |
| | 781 | <li>enumerated list: use n. (1., 2., etc.) or #. (automatic)</li> |
| | 782 | </ul> |
| | 783 | </div> |
| | 784 | <div class="slide" id="id30"> |
| | 785 | <h1>Part 2</h1> |
| | 786 | <p>Writing documents in reST</p> |
| | 787 | <ul class="simple"> |
| | 788 | <li><cite>What is reST ?</cite></li> |
| | 789 | <li><cite>reST syntax overview</cite></li> |
| | 790 | <li><strong>reST tools</strong></li> |
| | 791 | </ul> |
| | 792 | </div> |
| | 793 | <div class="slide" id="rest-tools"> |
| | 794 | <h1>reST tools</h1> |
| | 795 | <p>XXX</p> |
| | 796 | </div> |
| | 797 | <div class="slide" id="id31"> |
| | 798 | <h1>Part 2</h1> |
| | 799 | <p>Writing documents in reST</p> |
| | 800 | <ul class="simple"> |
| | 801 | <li><cite>What is reST ?</cite></li> |
| | 802 | <li><cite>reST syntax overview</cite></li> |
| | 803 | <li><cite>reST tools</cite></li> |
| | 804 | </ul> |
| | 805 | <p>reST can be:</p> |
| | 806 | <ul class="simple"> |
| | 807 | <li>used for all documentation needs</li> |
| | 808 | <li>manipulated like code (versioning, etc.)</li> |
| | 809 | <li>easily transformed into various shapes</li> |
| | 810 | </ul> |
| | 811 | <p>Python developers <img alt="love" src="media/love.png" /> reST</p> |
| | 812 | </div> |
| | 813 | <div class="slide" id="id32"> |
| | 814 | <h1>The plan</h1> |
| | 815 | <ul class="simple"> |
| | 816 | <li><cite>A few definitions</cite></li> |
| | 817 | <li><cite>Part 1: doing TDD in Python</cite></li> |
| | 818 | <li><cite>Part 2: writing documents in reST</cite></li> |
| | 819 | <li><strong>Part 3: writing doctests</strong></li> |
| | 820 | <li><cite>Part 4: doing DDD in Python</cite></li> |