Обучающие ссылки в C#

Все, что я вижу, является более возможными точками отказа без реального выгодного возврата, если сниженная цена будет неправильной, тестовая команда все еще найдет проблему, как поблочное тестирование сохраняло какую-либо работу?

Поблочное тестирование, как действительно предполагается, не сохраняет работу, оно, как предполагается, помогает Вам найти и предотвратить ошибки. Это [еще 113] работа, но это - правильный вид работы. Это думает о Вашем коде на самых низких уровнях гранулярности и пишет тестовые сценарии, которые доказывают, что это работает под , ожидал условия, для данного набора исходных данных. Это изолирует переменные, таким образом, можно сохранить время путем взгляда в правильном месте, когда ошибка действительно представляет себя. Это сохранение , что комплект тестов так, чтобы можно было использовать их снова и снова, когда необходимо внести изменение в будущем.

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

Наконец, ответ на Ваш номинальный вопрос" , Как делают Вас модульный тест модульный тест? " то, что Вы не должны иметь к. Каждый модульный тест должен быть до полусмерти простым. Назовите метод с определенным входом и сравните его с его ожидаемым выводом. Если спецификация для метода изменится тогда, то можно ожидать, что некоторые модульные тесты на тот метод должны будут измениться также. Это - одна из причин, что Вы делаете поблочное тестирование на таком низком уровне гранулярности, таким образом [только 117] [приблизительно 117] из модульных тестов должны измениться. Если Вы находите, что тесты для многих различных методов изменяются для одного изменения в требовании, то Вы не можете тестировать на достаточно прекрасном уровне гранулярности.

5
задан Nicholas Armstrong 29 October 2009 в 20:34
поделиться

7 ответов

Я слышал, как это объясняется один из способов - использовать сотовый телефон или рацию. Вы (инструктор) держитесь за один конец и заявляете, что являетесь экземпляром объекта. Вы остаетесь в одном месте (например, в куче), в то время как ученики проходят другим концом (который находится на громкой связи, если это мобильный телефон) по классу.

Они могут взаимодействовать с вами через «ссылку», которую они должны вы, но в действительности у них нет «вас».

5
ответ дан 18 December 2019 в 10:46
поделиться
3
ответ дан 18 December 2019 в 10:46
поделиться

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

Это полезная ссылка:

 http://www.yoda.arachsys.com/csharp/parameters.html
2
ответ дан 18 December 2019 в 10:46
поделиться

Попробуйте объяснить ссылки с помощью цифр , поскольку чистый текст иногда не доходит до большинства людей. Многие ресурсы и книги по этой теме пытаются объяснить с помощью цифр, поскольку трудно связать распределение только посредством вербального общения (для большинства людей это в основном вопрос концентрации внимания).

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

Дано:

class A {
    B b = new B();
}

class B {
   int mine = 1;
}

При создании экземпляра класса A как объекта a из некоторого контекста на следующем рисунке будет показано, как все это будет выглядеть в куче. Смысл иллюстрации - показать, как разные объекты связаны друг с другом, и иметь ментальную модель того, как работает куча.

         +-A-----+
a: *---->|       |
         |       |   +-B--------+
         | b: *--+-->|          |
         |       |   | mine: 1  |
         +-------+   |          |
                     +----------+

Также попытайтесь объяснить разницу между распределением памяти в куче и стеке. Вызов метода с параметрами. Простой пример будет примерно таким:

Для следующего метода:

public void doSomething(B b) {
   int doMine = b.mine + 1;
}

При вызове doSomething и разрешении ему делать то же самое, в конце стек doSomething будет выглядеть что-то вроде ниже. Точка, показывающая, что объекты не находятся непосредственно внутри стека, а просто ссылаются на объект в куче, а объекты разделяются через ссылки.

whoever called doSomething *
                           |
                           v
+-doSomething-+   +-B--------+
| b: *--------+-->|          |
|-------------|   | mine: 1  |
| doMine: 2   |   +----------+
+-------------+

Другой иллюстративный пример может иллюстрировать массив, который является объектом, и многомерный array содержит массив массивов.

стек будет выглядеть примерно так, как показано ниже. Точка, показывающая, что объекты не находятся непосредственно внутри стека, а просто ссылаются на объект в куче, а объекты разделяются через ссылки.

whoever called doSomething *
                           |
                           v
+-doSomething-+   +-B--------+
| b: *--------+-->|          |
|-------------|   | mine: 1  |
| doMine: 2   |   +----------+
+-------------+

Другой иллюстративный пример может иллюстрировать массив, который является объектом, и многомерный array содержит массив массивов.

стек будет выглядеть примерно так, как показано ниже. Точка, показывающая, что объекты не находятся непосредственно внутри стека, а просто ссылаются на объект в куче, а объекты разделяются через ссылки.

whoever called doSomething *
                           |
                           v
+-doSomething-+   +-B--------+
| b: *--------+-->|          |
|-------------|   | mine: 1  |
| doMine: 2   |   +----------+
+-------------+

Другой иллюстративный пример может иллюстрировать массив, который является объектом, и многомерный array содержит массив массивов.

2
ответ дан 18 December 2019 в 10:46
поделиться

Я нашел эту статью действительно полезной для объяснения передачи параметров в C #. В статье также хорошо объясняются типы значений и ссылок в общих чертах.

Это больше наглядное представление, которое мне очень помогло.

1
ответ дан 18 December 2019 в 10:46
поделиться

Когда я был Изучая VB6, ссылки на самом деле меня немного запутали. Затем я попробовал изучить C ++, и после работы с указателями ссылки стали для меня совершенно понятными. Мне было легче понять это с точки зрения того, что происходит на самом деле, чем с точки зрения концепций. Может быть, ты сможешь на своем уроке пройтись по тайным вещам.

1
ответ дан 18 December 2019 в 10:46
поделиться

Рисунки и диаграммы.

Люди формируют мысленные образы понятий, которые они изучают, и визуальное представление ссылок и их отношения к связанным с ними objects - хороший способ начать. Аналогичным образом, визуализация объекта как содержащего члены переменных (которые включают ссылки на другие объекты) и методы членов , как диаграммы UML, очень полезны.

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

1
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

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