Если Ваш коллега испытывает недостаток в опыте, пишущий тесты, возможно, он испытывает затруднения при тестировании вне простых ситуаций, и это проявляется как несоответствующее тестирование. Вот то, что я попробовал бы:
я особенно не подчеркнул бы фактор позора/вины. Стоит указать, что тестирование является широко принятой, хорошей практикой и что запись и поддержание хороших тестов являются профессиональной любезностью, таким образом, Ваши помощники команды не должны проводить свои выходные на работе, но я не лупил бы те точки.
, Если действительно необходимо "жестко вести себя" тогда, устанавливают беспристрастную систему; никому не нравится чувствовать, что они выбираются. Например, Ваша команда могла бы потребовать, чтобы код поддержал определенный уровень тестового покрытия (способный играться, но по крайней мере способная быть автоматизированной); потребуйте, чтобы новый код имел тесты; потребуйте, чтобы рецензенты рассмотрели качество тестов при выполнении обзоров кода; и так далее. Учреждение той системы должно прибыть из согласия команды. При модерировании обсуждения тщательно, Вы могли бы раскрыть другие базовые причины, тестирование Вашего коллеги не то, что Вы ожидаете.
Если у вас есть n точек данных (x [i], y [i], z [i]), вычислите симметричный размер 3x3. матрица A, элементы которой:
sum_i x[i]*x[i], sum_i x[i]*y[i], sum_i x[i]
sum_i x[i]*y[i], sum_i y[i]*y[i], sum_i y[i]
sum_i x[i], sum_i y[i], n
Также вычислите 3-элементный вектор b:
{sum_i x[i]*z[i], sum_i y[i]*z[i], sum_i z[i]}
Затем решите Ax = b для данных A и b. Три компонента вектора решения являются коэффициентами для плоскости аппроксимации методом наименьших квадратов {a, b, c}.
Обратите внимание, что это аппроксимация методом "обычных наименьших квадратов", которая подходит только тогда, когда ожидается, что z будет линейная функция от x и y. Если вы ищете в более общем плане "наиболее подходящую плоскость" в 3-м пространстве, вы можете узнать о "геометрических" методах наименьших квадратов.
Как и в случае любого метода наименьших квадратов, вы действуете следующим образом:
Запишите уравнение для плоскости в некоторой параметризации, скажем 0 = ax + by + z + d
в трех параметрах (a, b, d)
.
Найдите выражение D (\ vec {v}; a, b, d)
для расстояния от произвольной точки \ vec {v}
.
Запишите сумму S = \ sigma_i = 0, n D ^ 2 (\ vec {x} _i)
, и упростим, пока она не будет выражена в виде простых сумм компонентов v
например \ sigma v_x
, \ sigma v_y ^ 2
, \ sigma v_x * v_z
...
Запишите выражения для минимизации каждого параметра dS / dx_0 = 0
, dS / dy_0 = 0
... который дает вам набор из трех уравнений для трех параметров и суммы из предыдущего шага.
Решите этот набор уравнений для параметров.
(или для простых случаев просто найдите форму). Использование пакета символьной алгебры (например, Mathematica) может значительно облегчить вам жизнь.
Обратите внимание, что если на самом деле у вас было только три точки, вам лучше просто найти плоскость, которая проходит через них.
Кроме того, если аналитическое решение неосуществимо (не в случае плоскости, но возможно в целом), вы можете выполнить шаги 1 и 2, и использовать минимизатор Монте-Карло для суммы на шаге 3.
Все, что вам нужно сделать, это решить систему уравнений.
Если это ваше мнение: (1, 2, 3), (4, 5, 6), (7, 8, 9)
Это дает вам уравнения:
3=a*1 + b*2 + c
6=a*4 + b*5 + c
9=a*7 + b*8 + c
Итак, ваш вопрос на самом деле должен быть: Как мне решить систему уравнений ?
Поэтому я рекомендую прочитать этот SO вопрос.
Если я неправильно понял ваш вопрос, дайте нам знать.
РЕДАКТИРОВАТЬ :
Не обращайте внимания на мой ответ, поскольку вы, вероятно, имели в виду что-то еще.
Похоже, все, что вам нужно, это линейная регрессия с двумя регрессорами. На странице википедии по этой теме вы найдете все, что вам нужно знать, и кое-что еще.