Advertisement
Guest User

Лена <3

a guest
Apr 2nd, 2017
952
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.84 KB | None | 0 0
  1. # Лабораторная работа 1
  2. **Вариант 2.**
  3.  
  4. ## Общее назначение программы
  5. Программа состоит из двух модулей python:
  6. * `iarray.py`
  7. * `main.py`
  8.  
  9. На вход программы принимаются размер и набор значений одномерного массива, после чего программа выводит в качестве результата позицию максимального элемента в переданном массиве.
  10.  
  11. ## Описание функций программы
  12. ### Модуль `iarray`
  13. | Имя функции | Аргументы | Возвращаемые значения | Описание |
  14. |:----------------:|:--------------:|:--------------------------------:|:-----------:|
  15. | get_max_pos | arr(list), n(int) | j(int) | Возвращает позицию максимального элемента в массиве. |
  16. | print_array | arr(list), n(int) | - | Выводит переданный массив на экран. |
  17.  
  18. ### Модуль `main`
  19. | Имя функции | Аргументы | Возвращаемые значения | Описание |
  20. |:----------------:|:--------------:|:--------------------------------:|:-----------:|
  21. | test_1| - | arr(list), n(int) | Тестовые данные. |
  22.  
  23. ## Подготовка
  24.  
  25. Перед началом работы с Git сконфигурируем имя пользователя и адрес электронной почты:
  26.  
  27. `git config --global user.name zhukovdaniil`
  28.  
  29. `git config --global user.email ajaja49@gmail.com`
  30.  
  31. Был склонирован удаленный репозиторий на локальный компьютер с помощью команды `git clone http://git.iu7.bmstu.ru/iu7-software-engineering-labs-2017/iu7-software-engineering-labs-2017-zhukovdaniil.git`. После получения локальной версии репозитория переходим в созданный каталог и создаем новую ветвь *develop*.
  32.  
  33. `git branch develop`
  34.  
  35. И затем переходим в вновь созданную ветвь:
  36.  
  37. `git checkout develop`
  38.  
  39. Первым коммитом (*commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048*) добавлен файл .gitignore, отвечающий за исключение файлов из под версионного контроля.
  40. <pre>
  41. **/__pycache__/**
  42. .idea
  43. **/.idlerc/**
  44. </pre>
  45. С помощью команды `git add .gitignore` файл был помещен под версионный контроль. Фиксация изменения произведена командой `git commit`.
  46. Помимо папок, содержащих кэш, были добавлены в исключения папки с мета-информацией редакторов кода.
  47.  
  48. ## Поиск ошибки и ее описание
  49.  
  50. Был создан второй тестовый набор данных. Выполним команду `git status`, чтобы увидеть изменения в репозитории.
  51. <pre>
  52. На ветке develop
  53. Изменения, которые будут включены в коммит:
  54. (используйте «git reset HEAD <файл>...», чтобы убрать из индекса)
  55. изменен: lab_01/iarray.py
  56. </pre>
  57.  
  58. Результаты git diff:
  59. <pre>
  60. diff --git a/lab_01/main.py b/lab_01/main.py
  61. index 2c8aaa2..6d37fd9 100644
  62. --- a/lab_01/main.py
  63. +++ b/lab_01/main.py
  64. @@ -9,6 +9,12 @@ def test_1():
  65. arr.append(8)
  66.  
  67. return arr, 4
  68. + ^M
  69. + ^M
  70. + def test_2():^M
  71. + arr = [10, 1, 2, 3, 4]^M
  72. + ^M
  73. + return arr, 5^M
  74.  
  75.  
  76. def main():
  77. </pre>
  78. Зафиксировано изменение (*commit d539305efe945f9c4a8ccf54597987a67ae957be*).
  79. По результатам выполнения команды `git diff` можно наблюдать добавленную в файл `main.py`функцию *test2*.
  80. Особенностью этого тестового набора данных является то, что он начинается с максимального элемента, что и приводит к ошибке выполнения программы.
  81.  
  82. Изменена и доработана функцию main для запуска нескольких тестов переданных в виде списка функций (*commit 034f9f088866343b51953a4e0a40f6f27fd13072*)
  83. <pre>
  84. diff --git a/lab_01/main.py b/lab_01/main.py
  85. index 6d37fd9..ab8fc86 100644
  86. --- a/lab_01/main.py
  87. +++ b/lab_01/main.py
  88. @@ -11,19 +11,22 @@ def test_1():
  89. return arr, 4
  90.  
  91.  
  92. - def test_2():
  93. +def test_2():^M
  94. arr = [10, 1, 2, 3, 4]
  95.  
  96. return arr, 5
  97.  
  98.  
  99. def main():
  100. - arr, n = test_1()
  101. + tests = [test_1, test_2]^M
  102. + for test in tests:^M
  103. + print("Running test " , tests.index(test))^M
  104. + arr, n = test()^M
  105.  
  106. - print_array(arr, n)
  107. -
  108. - print("Max pos = " + str(get_max_pos(arr, n)))
  109. + print_array(arr, n)^M
  110. + ^M
  111. + print("Max pos = " + str(get_max_pos(arr, n)))^M
  112.  
  113.  
  114. if __name__ == '__main__':
  115. </pre>
  116.  
  117. В ходе выполнения второго теста возникла ошибка `UnboundLocalError: local variable 'j' referenced before assignment`, означающая, что в области видимости в момент выполнения отсутствует переменная *j*. После обнаружения ошибки был создан отчет (issue #1).
  118.  
  119. ## Исправление ошибки
  120.  
  121. Очевидно, ошибка вызвана тем, что присваивание переменной *j* значения происходит внутри условного оператора в цикле, до этого переменная *j* непроинициализирована. Следовательно необходимо до начала цикла присвоить ей начальное значение.
  122. Результаты `git diff`:
  123. <pre>
  124. diff --git a/lab_01/iarray.py b/lab_01/iarray.py
  125. index b0b6360..fb72353 100644
  126. --- a/lab_01/iarray.py
  127. +++ b/lab_01/iarray.py
  128. @@ -1,6 +1,7 @@
  129. def get_max_pos(arr, n):
  130. - max = arr[0];
  131. + max = arr[0]^M
  132.  
  133. + j = 0^M
  134. i = 1
  135. while (i < n):
  136. if (arr[i] > max):
  137. </pre>
  138. Теперь при запуске тесты корректно выполняются. Можно фиксировать изменения. После закрытия отчета об ошибке (issue #1) все изменения были опубликованы в удаленном репозитории с помощью команды `git push origin develop`.
  139. <pre>
  140. Подсчет объектов: 4, готово.
  141. Delta compression using up to 2 threads.
  142. Сжатие объектов: 100% (4/4), готово.
  143. Запись объектов: 100% (4/4), 377 bytes | 0 bytes/s, готово.
  144. a38fdcf..6367cbf develop -> develop
  145. </pre>
  146.  
  147. ## Анализ истории
  148.  
  149. Результаты `git log`:
  150. <pre>
  151. commit 6367cbf5137c53b1a8cdcd4b744699300aef5d6b
  152. Author: zhukovdaniil <ajaja49@gmail.com>
  153. Date: Sat Apr 1 12:55:39 2017 +0300
  154.  
  155. Fixed issue #1
  156.  
  157. commit a38fdcff8bcb8552e2c29d9e3918be8c17efce19
  158. Author: U-VLAB\student <student@IU7-01-27.vlab.bmstu.ru>
  159. Date: Sat Mar 18 13:35:29 2017 +0300
  160.  
  161. IDEF0 Test-work in class.
  162.  
  163. commit 034f9f088866343b51953a4e0a40f6f27fd13072
  164. Author: zhukovdaniil <ajaja49@gmail.com>
  165. Date: Sat Mar 4 13:20:21 2017 +0300
  166.  
  167. Fixed offset on 14 line, improved testing system: tests are executed from li st
  168.  
  169. commit d539305efe945f9c4a8ccf54597987a67ae957be
  170. Author: zhukovdaniil <ajaja49@gmail.com>
  171. Date: Sat Mar 4 13:15:03 2017 +0300
  172.  
  173. New test for programm
  174.  
  175. commit 7237db552d1db17d6b85b35ba3a76642fcb56b18
  176. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  177. Date: Sat Mar 4 12:30:37 2017 +0300
  178.  
  179. Ignore rule for python IDLE meta files
  180.  
  181. commit 17e2e4210e38fd8bdca8109143859f3585636a8a
  182. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  183. Date: Sat Mar 4 12:27:05 2017 +0300
  184.  
  185. Initial commit for lab_01.
  186.  
  187. commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
  188. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  189. Date: Sat Mar 4 12:19:19 2017 +0300
  190.  
  191. Renamed folder with training work.
  192.  
  193. commit 1964fb3308d177a4c723effd78d59897c35b0a7f
  194. Author: zhukovdaniil <ajaja49@gmail.com>
  195. Date: Fri Mar 3 23:55:28 2017 +0300
  196.  
  197. Initial version of programm was added.
  198.  
  199. commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
  200. Author: zhukovdaniil <ajaja49@gmail.com>
  201. Date: Fri Mar 3 23:54:35 2017 +0300
  202.  
  203. .gitignore was added.
  204.  
  205. commit b9bb020a0f1545db278c858b9b56178a95622972
  206. Author: Olenev Anton <aolenev@bmstu.ru>
  207. Date: Sat Feb 25 18:33:17 2017 +0300
  208.  
  209. Initial commit
  210. (END)
  211. commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
  212. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  213. Date: Sat Mar 4 12:19:19 2017 +0300
  214.  
  215. Renamed folder with training work.
  216.  
  217. commit 1964fb3308d177a4c723effd78d59897c35b0a7f
  218. Author: zhukovdaniil <ajaja49@gmail.com>
  219. Date: Fri Mar 3 23:55:28 2017 +0300
  220.  
  221. Initial version of programm was added.
  222.  
  223. commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
  224. Author: zhukovdaniil <ajaja49@gmail.com>
  225. Date: Fri Mar 3 23:54:35 2017 +0300
  226.  
  227. .gitignore was added.
  228.  
  229. commit b9bb020a0f1545db278c858b9b56178a95622972
  230. Author: Olenev Anton <aolenev@bmstu.ru>
  231. Date: Sat Feb 25 18:33:17 2017 +0300
  232.  
  233. Initial commit
  234. </pre>
  235. Здесь приведены все коммиты сделанные в этом репозитории, соответственно сверху находятся самые последние. Команда выводит номера коммитов, автора изменений, время и комментарий устанавливаемый автором.
  236.  
  237. Результат `git log --name-status`:
  238. <pre>
  239. commit 6367cbf5137c53b1a8cdcd4b744699300aef5d6b
  240. Author: zhukovdaniil <ajaja49@gmail.com>
  241. Date: Sat Apr 1 12:55:39 2017 +0300
  242.  
  243. Fixed issue #1
  244.  
  245. M lab_01/iarray.py
  246.  
  247. commit a38fdcff8bcb8552e2c29d9e3918be8c17efce19
  248. Author: U-VLAB\student <student@IU7-01-27.vlab.bmstu.ru>
  249. Date: Sat Mar 18 13:35:29 2017 +0300
  250.  
  251. IDEF0 Test-work in class.
  252.  
  253. A Test_01/1.rsf
  254. A Test_01/2.rsf
  255. A Test_01/3.rsf
  256.  
  257. commit 034f9f088866343b51953a4e0a40f6f27fd13072
  258. Author: zhukovdaniil <ajaja49@gmail.com>
  259. Date: Sat Mar 4 13:20:21 2017 +0300
  260.  
  261. Fixed offset on 14 line, improved testing system: tests are executed from list
  262.  
  263. M lab_01/main.py
  264.  
  265. commit d539305efe945f9c4a8ccf54597987a67ae957be
  266. Author: zhukovdaniil <ajaja49@gmail.com>
  267. Date: Sat Mar 4 13:15:03 2017 +0300
  268.  
  269. New test for programm
  270.  
  271. M lab_01/main.py
  272.  
  273. commit 7237db552d1db17d6b85b35ba3a76642fcb56b18
  274. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  275. Date: Sat Mar 4 12:30:37 2017 +0300
  276.  
  277. Ignore rule for python IDLE meta files
  278.  
  279. M .gitignore
  280.  
  281. commit 17e2e4210e38fd8bdca8109143859f3585636a8a
  282. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  283. Date: Sat Mar 4 12:27:05 2017 +0300
  284.  
  285. Initial commit for lab_01.
  286.  
  287. A lab_01/iarray.py
  288. A lab_01/main.py
  289.  
  290. commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
  291. Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
  292. Date: Sat Mar 4 12:19:19 2017 +0300
  293.  
  294. Renamed folder with training work.
  295.  
  296. R100 lab_01/iarray.py lab_00/iarray.py
  297. R100 lab_01/main.py lab_00/main.py
  298.  
  299. commit 1964fb3308d177a4c723effd78d59897c35b0a7f
  300. Author: zhukovdaniil <ajaja49@gmail.com>
  301. Date: Fri Mar 3 23:55:28 2017 +0300
  302.  
  303. Initial version of programm was added.
  304.  
  305. A lab_01/iarray.py
  306. A lab_01/main.py
  307.  
  308. commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
  309. Author: zhukovdaniil <ajaja49@gmail.com>
  310. Date: Fri Mar 3 23:54:35 2017 +0300
  311.  
  312. .gitignore was added.
  313.  
  314. A .gitignore
  315.  
  316. commit b9bb020a0f1545db278c858b9b56178a95622972
  317. Author: Olenev Anton <aolenev@bmstu.ru>
  318. Date: Sat Feb 25 18:33:17 2017 +0300
  319.  
  320. Initial commit
  321.  
  322. A README.md
  323. </pre>
  324. В данном случаи команда дополнительно выводит измененные/добавленные в ревизии файлы (*М* соответствует измененному файлу, а *А* добавленному).
  325. Чтобы увидеть историю изменений между двумя ревизиями используется команда `git log <commit1>...<commit2>`.
  326. Чтобы сравнить две версии одного и того же файла, но разных ревизий используется команда `git diff <commit1> <commit2> -- <path>`.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement