Что такое качественный пример реального мира TDD в действии? [закрытый]

Python отделяет правое выражение от назначения левой стороны. Сначала оценивается правая часть, и результат сохраняется в стеке, а затем имена левой стороны назначаются с использованием кодов операций, которые снова принимают значения из в стек.

Для назначений кортежей с 2 ​​или 3 элементами Python просто использует стек напрямую:

>>> import dis
>>> def foo(a, b):
...     a, b = b, a
... 
>>> dis.dis(foo)
  2           0 LOAD_FAST                1 (b)
              3 LOAD_FAST                0 (a)
              6 ROT_TWO             
              7 STORE_FAST               0 (a)
             10 STORE_FAST               1 (b)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE        

После двух LOAD_FAST опкодов (которые выталкивают значение из переменной на стек), верхняя часть стека содержит [a, b]. Код операции ROT_TWO заменяет верхние две позиции в стеке, поэтому стек теперь имеет [b, a] вверху. Два STORE_FAST opcodes затем берут эти два значения и сохраняют их в именах в левой части присваивания. Первый STORE_FAST выводит значение вершины стека и помещает его в a, затем снова появляется вспять, сохраняя значение в b. Вращение необходимо, потому что Python гарантирует, что назначения в целевом списке с левой стороны выполняются слева направо.

Для назначения 3-имени, ROT_THREE а затем ROT_TWO выполняется, чтобы отменить три верхних элемента в стеке.

Для более длинных назначений слева строит явный кортеж:

>>> def bar(a, b, c, d):
...     d, c, b, a = a, b, c, d
... 
>>> dis.dis(bar)
  2           0 LOAD_FAST                0 (a)
              3 LOAD_FAST                1 (b)
              6 LOAD_FAST                2 (c)
              9 LOAD_FAST                3 (d)
             12 BUILD_TUPLE              4
             15 UNPACK_SEQUENCE          4
             18 STORE_FAST               3 (d)
             21 STORE_FAST               2 (c)
             24 STORE_FAST               1 (b)
             27 STORE_FAST               0 (a)
             30 LOAD_CONST               0 (None)
             33 RETURN_VALUE        

Здесь стек с [d, c, b, a] используется для сборки кортежа (в обратном порядке снова появляется BUILD_TUPLE из стека, нажимая полученный кортеж в стек), а затем UNPACK_SEQUENCE снова выталкивает кортеж из стека, снова выталкивает все элементы из кортежа обратно в стек для операций STORE_FAST.

Последний может показаться расточительной операцией, но правильный - сторона стороны присваивания может быть чем-то совершенно другим, вызов функции, который создает кортеж, возможно, поэтому интерпретатор Python не делает предположений и всегда использует код операции UNPACK_SEQUENCE. Он делает это даже для операций назначения двух и трех имен, , но более поздняя (оптимизация) шаг оптимизации заменяет комбинацию BUILD_TUPLE / UNPACK_SEQUENCE с 2 или 3 аргументами с указанным выше ROT_TWO и ROT_THREE для эффективности.

13
задан Nick Craver 26 August 2011 в 10:17
поделиться

7 ответов

Вот некоторые примеры:

  • NUnit
  • CodeCampServer Любой из
  • инструменты Rhino от Ayende (например, Насмешки Носорога)
  • ASP.NET MVC
  • Cuyahoga (система CMS)
  • Быстрый NHibernate
6
ответ дан 1 December 2019 в 23:33
поделиться

Это может или не может быть тем, что Вы после, но Библиотека MS Enterprise имеет полный набор модульных тестов (NUnit) как часть распределения исходного кода, я рассматривал бы это как довольно реальный мир.

Kev

3
ответ дан 1 December 2019 в 23:33
поделиться

TDD является процессом, который главным образом происходит промежуточный, соглашается на репозиторий.

При рассмотрении проектов с открытым исходным кодом Вы будете только видеть снимки кода, которые взяты, когда разработчик фиксирует.

Не должно быть никакого практического различия между фиксациями, сделанными разработчиком, который делает хороший дизайн и реализует много модульных тестов и хорошего разработчика это методы TDD. Различие - то, что процесс TDD оказывает давление на разработчике для создания чистой разработки и реализации большим количеством модульных тестов.

Рассмотрение проекта с открытым исходным кодом, на Котором делают пробную поездку, только позволит Вам видеть результат процесса TDD, не, как на Делать пробную поездку самим.

Для реального изучения этого действительно необходимо наблюдать, что кто-то делает TDD. Книга может помочь, но трудно показать процесс в книге. Намного лучше видеть сделанный в режиме реального времени. Лучший способ был бы к парной программе с кем-то, на ком делают пробную поездку. Следующей лучшей была бы живая демонстрация на конференции или собирающийся - возможно, у Вас есть группа локального пользователя?

При сбое этого существуют некоторые демонстрационные видео онлайн. Вот два:

3
ответ дан 1 December 2019 в 23:33
поделиться

Если Вы изучаете это для персонального использования TDD, я не думаю, просматривая другие проекты, действительно поможет Вам. Вместо этого необходимо погрузиться в и просто сделать это и учиться, когда Вы идете.

Для начала работы проверьте эта статья о тестировании и как начать, и эта книга о TDD Kent Beck (очень простой, легкий понять и проницательный).

3
ответ дан 1 December 2019 в 23:33
поделиться

Я не прошел через все вебкасты сам, таким образом, я не могу засвидетельствовать о том, как хорошо Rob Conery реализовал TDD, но его , серия MVC Storefront, как предполагается, использует TDD.

1
ответ дан 1 December 2019 в 23:33
поделиться

У Ron Jeffries есть много хороших статей о xprogramming.com . Если Вы делаете C#, ищете "Приключения в C#". Или купите книгу.

Его стиль записи покрывает большинство аспектов выполнения TDD, даже неправильные обороты, которые мы предназначены для взятия. Я изучил много его статей за эти годы, даже статей на более экзотических языках.

1
ответ дан 1 December 2019 в 23:33
поделиться

Приблизительно неделю назад Переговоры IT отправили очень интересный доклад, сделанный Kent Beck, который сфокусировался на TDD (но также и затронул шаблоны и экстремальное программирование). Ничто 'мясистое' до подробных инструкций относительно TDD, но информативный так или иначе. Определенно стоящий слушания, если Вы увеличиваете свои навыки TDD.

0
ответ дан 1 December 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: