Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Лабораторная работа 1
- **Вариант 2.**
- ## Общее назначение программы
- Программа состоит из двух модулей python:
- * `iarray.py`
- * `main.py`
- На вход программы принимаются размер и набор значений одномерного массива, после чего программа выводит в качестве результата позицию максимального элемента в переданном массиве.
- ## Описание функций программы
- ### Модуль `iarray`
- | Имя функции | Аргументы | Возвращаемые значения | Описание |
- |:----------------:|:--------------:|:--------------------------------:|:-----------:|
- | get_max_pos | arr(list), n(int) | j(int) | Возвращает позицию максимального элемента в массиве. |
- | print_array | arr(list), n(int) | - | Выводит переданный массив на экран. |
- ### Модуль `main`
- | Имя функции | Аргументы | Возвращаемые значения | Описание |
- |:----------------:|:--------------:|:--------------------------------:|:-----------:|
- | test_1| - | arr(list), n(int) | Тестовые данные. |
- ## Подготовка
- Перед началом работы с Git сконфигурируем имя пользователя и адрес электронной почты:
- `git config --global user.name zhukovdaniil`
- `git config --global user.email ajaja49@gmail.com`
- Был склонирован удаленный репозиторий на локальный компьютер с помощью команды `git clone http://git.iu7.bmstu.ru/iu7-software-engineering-labs-2017/iu7-software-engineering-labs-2017-zhukovdaniil.git`. После получения локальной версии репозитория переходим в созданный каталог и создаем новую ветвь *develop*.
- `git branch develop`
- И затем переходим в вновь созданную ветвь:
- `git checkout develop`
- Первым коммитом (*commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048*) добавлен файл .gitignore, отвечающий за исключение файлов из под версионного контроля.
- <pre>
- **/__pycache__/**
- .idea
- **/.idlerc/**
- </pre>
- С помощью команды `git add .gitignore` файл был помещен под версионный контроль. Фиксация изменения произведена командой `git commit`.
- Помимо папок, содержащих кэш, были добавлены в исключения папки с мета-информацией редакторов кода.
- ## Поиск ошибки и ее описание
- Был создан второй тестовый набор данных. Выполним команду `git status`, чтобы увидеть изменения в репозитории.
- <pre>
- На ветке develop
- Изменения, которые будут включены в коммит:
- (используйте «git reset HEAD <файл>...», чтобы убрать из индекса)
- изменен: lab_01/iarray.py
- </pre>
- Результаты git diff:
- <pre>
- diff --git a/lab_01/main.py b/lab_01/main.py
- index 2c8aaa2..6d37fd9 100644
- --- a/lab_01/main.py
- +++ b/lab_01/main.py
- @@ -9,6 +9,12 @@ def test_1():
- arr.append(8)
- return arr, 4
- + ^M
- + ^M
- + def test_2():^M
- + arr = [10, 1, 2, 3, 4]^M
- + ^M
- + return arr, 5^M
- def main():
- </pre>
- Зафиксировано изменение (*commit d539305efe945f9c4a8ccf54597987a67ae957be*).
- По результатам выполнения команды `git diff` можно наблюдать добавленную в файл `main.py`функцию *test2*.
- Особенностью этого тестового набора данных является то, что он начинается с максимального элемента, что и приводит к ошибке выполнения программы.
- Изменена и доработана функцию main для запуска нескольких тестов переданных в виде списка функций (*commit 034f9f088866343b51953a4e0a40f6f27fd13072*)
- <pre>
- diff --git a/lab_01/main.py b/lab_01/main.py
- index 6d37fd9..ab8fc86 100644
- --- a/lab_01/main.py
- +++ b/lab_01/main.py
- @@ -11,19 +11,22 @@ def test_1():
- return arr, 4
- - def test_2():
- +def test_2():^M
- arr = [10, 1, 2, 3, 4]
- return arr, 5
- def main():
- - arr, n = test_1()
- + tests = [test_1, test_2]^M
- + for test in tests:^M
- + print("Running test " , tests.index(test))^M
- + arr, n = test()^M
- - print_array(arr, n)
- -
- - print("Max pos = " + str(get_max_pos(arr, n)))
- + print_array(arr, n)^M
- + ^M
- + print("Max pos = " + str(get_max_pos(arr, n)))^M
- if __name__ == '__main__':
- </pre>
- В ходе выполнения второго теста возникла ошибка `UnboundLocalError: local variable 'j' referenced before assignment`, означающая, что в области видимости в момент выполнения отсутствует переменная *j*. После обнаружения ошибки был создан отчет (issue #1).
- ## Исправление ошибки
- Очевидно, ошибка вызвана тем, что присваивание переменной *j* значения происходит внутри условного оператора в цикле, до этого переменная *j* непроинициализирована. Следовательно необходимо до начала цикла присвоить ей начальное значение.
- Результаты `git diff`:
- <pre>
- diff --git a/lab_01/iarray.py b/lab_01/iarray.py
- index b0b6360..fb72353 100644
- --- a/lab_01/iarray.py
- +++ b/lab_01/iarray.py
- @@ -1,6 +1,7 @@
- def get_max_pos(arr, n):
- - max = arr[0];
- + max = arr[0]^M
- + j = 0^M
- i = 1
- while (i < n):
- if (arr[i] > max):
- </pre>
- Теперь при запуске тесты корректно выполняются. Можно фиксировать изменения. После закрытия отчета об ошибке (issue #1) все изменения были опубликованы в удаленном репозитории с помощью команды `git push origin develop`.
- <pre>
- Подсчет объектов: 4, готово.
- Delta compression using up to 2 threads.
- Сжатие объектов: 100% (4/4), готово.
- Запись объектов: 100% (4/4), 377 bytes | 0 bytes/s, готово.
- a38fdcf..6367cbf develop -> develop
- </pre>
- ## Анализ истории
- Результаты `git log`:
- <pre>
- commit 6367cbf5137c53b1a8cdcd4b744699300aef5d6b
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Apr 1 12:55:39 2017 +0300
- Fixed issue #1
- commit a38fdcff8bcb8552e2c29d9e3918be8c17efce19
- Author: U-VLAB\student <student@IU7-01-27.vlab.bmstu.ru>
- Date: Sat Mar 18 13:35:29 2017 +0300
- IDEF0 Test-work in class.
- commit 034f9f088866343b51953a4e0a40f6f27fd13072
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Mar 4 13:20:21 2017 +0300
- Fixed offset on 14 line, improved testing system: tests are executed from li st
- commit d539305efe945f9c4a8ccf54597987a67ae957be
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Mar 4 13:15:03 2017 +0300
- New test for programm
- commit 7237db552d1db17d6b85b35ba3a76642fcb56b18
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:30:37 2017 +0300
- Ignore rule for python IDLE meta files
- commit 17e2e4210e38fd8bdca8109143859f3585636a8a
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:27:05 2017 +0300
- Initial commit for lab_01.
- commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:19:19 2017 +0300
- Renamed folder with training work.
- commit 1964fb3308d177a4c723effd78d59897c35b0a7f
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:55:28 2017 +0300
- Initial version of programm was added.
- commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:54:35 2017 +0300
- .gitignore was added.
- commit b9bb020a0f1545db278c858b9b56178a95622972
- Author: Olenev Anton <aolenev@bmstu.ru>
- Date: Sat Feb 25 18:33:17 2017 +0300
- Initial commit
- (END)
- commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:19:19 2017 +0300
- Renamed folder with training work.
- commit 1964fb3308d177a4c723effd78d59897c35b0a7f
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:55:28 2017 +0300
- Initial version of programm was added.
- commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:54:35 2017 +0300
- .gitignore was added.
- commit b9bb020a0f1545db278c858b9b56178a95622972
- Author: Olenev Anton <aolenev@bmstu.ru>
- Date: Sat Feb 25 18:33:17 2017 +0300
- Initial commit
- </pre>
- Здесь приведены все коммиты сделанные в этом репозитории, соответственно сверху находятся самые последние. Команда выводит номера коммитов, автора изменений, время и комментарий устанавливаемый автором.
- Результат `git log --name-status`:
- <pre>
- commit 6367cbf5137c53b1a8cdcd4b744699300aef5d6b
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Apr 1 12:55:39 2017 +0300
- Fixed issue #1
- M lab_01/iarray.py
- commit a38fdcff8bcb8552e2c29d9e3918be8c17efce19
- Author: U-VLAB\student <student@IU7-01-27.vlab.bmstu.ru>
- Date: Sat Mar 18 13:35:29 2017 +0300
- IDEF0 Test-work in class.
- A Test_01/1.rsf
- A Test_01/2.rsf
- A Test_01/3.rsf
- commit 034f9f088866343b51953a4e0a40f6f27fd13072
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Mar 4 13:20:21 2017 +0300
- Fixed offset on 14 line, improved testing system: tests are executed from list
- M lab_01/main.py
- commit d539305efe945f9c4a8ccf54597987a67ae957be
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Sat Mar 4 13:15:03 2017 +0300
- New test for programm
- M lab_01/main.py
- commit 7237db552d1db17d6b85b35ba3a76642fcb56b18
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:30:37 2017 +0300
- Ignore rule for python IDLE meta files
- M .gitignore
- commit 17e2e4210e38fd8bdca8109143859f3585636a8a
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:27:05 2017 +0300
- Initial commit for lab_01.
- A lab_01/iarray.py
- A lab_01/main.py
- commit dabc5996ed593bd7acf84ace82a8bcc3a09af346
- Author: U-VLAB\student <student@IU7-01-40.vlab.bmstu.ru>
- Date: Sat Mar 4 12:19:19 2017 +0300
- Renamed folder with training work.
- R100 lab_01/iarray.py lab_00/iarray.py
- R100 lab_01/main.py lab_00/main.py
- commit 1964fb3308d177a4c723effd78d59897c35b0a7f
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:55:28 2017 +0300
- Initial version of programm was added.
- A lab_01/iarray.py
- A lab_01/main.py
- commit f7da4a0fdd6f9fba5eb21a0cc46011983239b048
- Author: zhukovdaniil <ajaja49@gmail.com>
- Date: Fri Mar 3 23:54:35 2017 +0300
- .gitignore was added.
- A .gitignore
- commit b9bb020a0f1545db278c858b9b56178a95622972
- Author: Olenev Anton <aolenev@bmstu.ru>
- Date: Sat Feb 25 18:33:17 2017 +0300
- Initial commit
- A README.md
- </pre>
- В данном случаи команда дополнительно выводит измененные/добавленные в ревизии файлы (*М* соответствует измененному файлу, а *А* добавленному).
- Чтобы увидеть историю изменений между двумя ревизиями используется команда `git log <commit1>...<commit2>`.
- Чтобы сравнить две версии одного и того же файла, но разных ревизий используется команда `git diff <commit1> <commit2> -- <path>`.
Add Comment
Please, Sign In to add comment