{
"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": [
""
],
"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": [
""
],
"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": [
""
],
"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
}