{ "cells": [ { "cell_type": "code", "execution_count": 41, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: iplantuml in /usr/local/lib/python3.7/site-packages (0.1.1)\n", "Requirement already satisfied: plantweb in /usr/local/lib/python3.7/site-packages (from iplantuml) (1.1.0)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (2.19.1)\n", "Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (1.11.0)\n", "Requirement already satisfied: docutils in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (0.14)\n", "Requirement already satisfied: idna<2.8,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (2.7)\n", "Requirement already satisfied: urllib3<1.24,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (1.23)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (2018.8.13)\n", "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (3.0.4)\n" ] } ], "source": [ "import sys\n", "!{sys.executable} -m pip install iplantuml\n", "import iplantuml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# PythonでTDD\n", "\n", "\n", "## 仕様\n", "\n", ">1 から 100 までの数をプリントするプログラムを書け。 \n", "\n", ">ただし 3 の倍数のときは数の代わりに「Fizz」と、\n", "\n", ">5 の倍数のときは「Buzz」とプリントし、\n", "\n", ">3 と 5 両方の倍数の場合には「FizzBuzz」とプリントすること。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 設計" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ユースケース図" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "FizzBuzzPut ValueUser" ], "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%plantuml --jar\n", "\n", "@startuml\n", "left to right direction\n", "skinparam packageStyle rectangle\n", "actor User\n", "rectangle FizzBuzz {\n", " User -- (Put Value)\n", "}\n", "@enduml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### クラス図" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "FizzBuzzgenerate(number)iterate(count)" ], "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%plantuml --jar\n", "\n", "@startuml\n", "class FizzBuzz {\n", "+ {static}generate(number)\n", "+ iterate(count)\n", "}\n", "\n", "@enduml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### シーケンス図" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "UserUserFizzBuzzFizzBuzziterateloop[for each iterate]generate" ], "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%plantuml --jar\n", "\n", "@startuml\n", "actor User\n", "\n", "User -> FizzBuzz: iterate\n", "loop for each iterate\n", " activate FizzBuzz\n", " FizzBuzz -> FizzBuzz: generate\n", " User <- FizzBuzz\n", " deactivate FizzBuzz\n", "end\n", "@enduml" ] }, { "cell_type": "markdown", "source": [ "### TODO リスト\n", "\n", "- 1 から 100 まで数をプリントできるようにする。\n", "- 3 の倍数のときは数の代わりに「Fizz」をプリントできるようにする。\n", "- 5 の倍数のときは「Buzz」とプリントできるようにする。\n", "- 3 と 5 両方の倍数の場合には「FizzBuzz」とプリントできるようにする。" ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "## 開発" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 45, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ".\n", "----------------------------------------------------------------------\n", "Ran 1 test in 0.001s\n", "\n", "OK\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import unittest\n", "\n", "def fizz_buzz(number):\n", " return 'Fizz'\n", "\n", "class FizzBuzzTest(unittest.TestCase):\n", " def test3の倍数のときはFizzを出す(self):\n", " self.assertEqual(fizz_buzz(3),'Fizz')\n", "\n", "\n", "unittest.main(argv=['first-arg-is-ignored'],exit=False)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" }, "pycharm": { "stem_cell": { "cell_type": "raw", "source": [], "metadata": { "collapsed": false } } } }, "nbformat": 4, "nbformat_minor": 2 }