Все, что я вижу, является более возможными точками отказа без реального выгодного возврата, если сниженная цена будет неправильной, тестовая команда все еще найдет проблему, как поблочное тестирование сохраняло какую-либо работу?
Поблочное тестирование, как действительно предполагается, не сохраняет работу, оно, как предполагается, помогает Вам найти и предотвратить ошибки. Это [еще 113] работа, но это - правильный вид работы. Это думает о Вашем коде на самых низких уровнях гранулярности и пишет тестовые сценарии, которые доказывают, что это работает под , ожидал условия, для данного набора исходных данных. Это изолирует переменные, таким образом, можно сохранить время путем взгляда в правильном месте, когда ошибка действительно представляет себя. Это сохранение , что комплект тестов так, чтобы можно было использовать их снова и снова, когда необходимо внести изменение в будущем.
я лично думаю, что большинство методологий не является многими шагами, удаленными от грузовая культовая разработка программного обеспечения , включенный TDD, но Вы не должны придерживаться строгого TDD для получения выгоды поблочного тестирования. Сохраните хорошие части и выведите части, которые приводят к небольшому преимуществу.
Наконец, ответ на Ваш номинальный вопрос" , Как делают Вас модульный тест модульный тест? " то, что Вы не должны иметь к. Каждый модульный тест должен быть до полусмерти простым. Назовите метод с определенным входом и сравните его с его ожидаемым выводом. Если спецификация для метода изменится тогда, то можно ожидать, что некоторые модульные тесты на тот метод должны будут измениться также. Это - одна из причин, что Вы делаете поблочное тестирование на таком низком уровне гранулярности, таким образом [только 117] [приблизительно 117] из модульных тестов должны измениться. Если Вы находите, что тесты для многих различных методов изменяются для одного изменения в требовании, то Вы не можете тестировать на достаточно прекрасном уровне гранулярности.
Я слышал, как это объясняется один из способов - использовать сотовый телефон или рацию. Вы (инструктор) держитесь за один конец и заявляете, что являетесь экземпляром объекта. Вы остаетесь в одном месте (например, в куче), в то время как ученики проходят другим концом (который находится на громкой связи, если это мобильный телефон) по классу.
Они могут взаимодействовать с вами через «ссылку», которую они должны вы, но в действительности у них нет «вас».
Мне нравится аналогия с URL-адресом, описывающая различия между ссылочными типами и типами значений. Вы можете передать URL как ссылку на некоторый контент. Вы можете изменить этот URL-адрес, не изменяя его содержимое. Вы также можете получить доступ к содержимому через URL-адрес, чтобы, возможно, изменить содержимое.
Это полезная ссылка:
http://www.yoda.arachsys.com/csharp/parameters.html
Попробуйте объяснить ссылки с помощью цифр , поскольку чистый текст иногда не доходит до большинства людей. Многие ресурсы и книги по этой теме пытаются объяснить с помощью цифр, поскольку трудно связать распределение только посредством вербального общения (для большинства людей это в основном вопрос концентрации внимания).
По крайней мере, попытайтесь указать, как объекты связаны друг с другом, простой пример будет простой ссылкой.
Дано:
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 содержит массив массивов.
Я нашел эту статью действительно полезной для объяснения передачи параметров в C #. В статье также хорошо объясняются типы значений и ссылок в общих чертах.
Это больше наглядное представление, которое мне очень помогло.
Когда я был Изучая VB6, ссылки на самом деле меня немного запутали. Затем я попробовал изучить C ++, и после работы с указателями ссылки стали для меня совершенно понятными. Мне было легче понять это с точки зрения того, что происходит на самом деле, чем с точки зрения концепций. Может быть, ты сможешь на своем уроке пройтись по тайным вещам.
Рисунки и диаграммы.
Люди формируют мысленные образы понятий, которые они изучают, и визуальное представление ссылок и их отношения к связанным с ними objects - хороший способ начать. Аналогичным образом, визуализация объекта как содержащего члены переменных (которые включают ссылки на другие объекты) и методы членов , как диаграммы UML, очень полезны.
Позже вы сможете подробно изучить, как на самом деле реализуются ссылки и примитивные типы, если почувствуете в этом необходимость. Но отложите эти обсуждения как можно дольше, так как люди могут увязнуть в попытках связать абстрактные концепции с репрезентативными деталями, что отвлекает от изучения абстрактных концепций.