나는 (php/mysql) 시스템을 사용하여 사이트에서 일을하도록 사용자를 보상합니다. 질문을 위해 사용자가 5 개의 모든 의견에 대해 장미를 얻는다 고 가정 해 봅시다.함수는 실시간으로 호출되면 잘못된 값을 저장합니다. 수동으로 호출하여 올바른 값을 저장합니다. 무슨 일이야?
앞 페이지에는 오늘 얼마나 많은 장미를 받았으며, 몇 번이나 장미를 얻었는지 보여주는 카운터가 있습니다. 거친 논리는 다음과 같습니다 :
//Save a single, discrete event. $user --> numerical value, 1:1.
function first($user) {
//save values related to $user into TABLE_1;
return second($user);
}
//Calculate the sum() of all numerical events for $user for today and save that.
function second($user) {
//save values calculated from TABLE_1 into TABLE_2;
return third();
}
//Calculate the sum() of all numerical events for all users
function third() {
//save values calculated from TABLE_2 into TABLE_3;
return true/false;
}
코멘트가 저장 될 때, first()
기능이 개막된다. first()
은 사용자 ID, 이벤트의 숫자 값 (1 개의 주석이 저장되었으므로 1
) 및 타임 스탬프와 같이 TABLE_1에 주석 이벤트의 레코드를 저장합니다.
다음으로, second()
을 호출합니다. second()
사용자가이 코멘트를 사용하여 장미를 얻었는지 알아 내려면 몇 가지 계산을 수행하고 TABLE_2에 3 개의 값 (uid, roses_today, timestamp)을 저장합니다.
이 값은 엉망입니다. 웬일인지, roses_today의 가치는 때로는 높고 때로는 낮아 져야하는 것과 다릅니다. 패턴이 없습니다 - 일부 값은 격렬하게 높고, 일부는 간신히 너무 낮으며, 어떤 것은 맞습니다. 여기에는 운이나 이유가 없습니다.
작업에 렌치를 던지십시오. second($user)
을 수동으로 호출하면 TABLE_2에서 계산하여 저장하는 값이 정확합니다. 이 함수는 실시간으로 호출되는 경우에만 실패하는 것으로 보입니다.
편집 : 코드가없는 코드에 문제가 있거나 코드를 단계별로 실행해야한다고 제안하는 경우 이전 단락을 읽으십시오. 이 함수는 실시간으로 호출되는 경우에만 실패하는 것으로 보입니다. 매우 똑같은 기능을 수동으로 호출하면 올바른 결과가 생성됩니다.
UnitTest가 있습니까? 다른 말로하면,이 기능들이 실제로 당신이 생각하는대로 작동하는지 확인할 수 있습니까? 그리고 UnitTests를 얻은 경우 설명 된 시나리오를 테스트하는 기능 테스트가 있습니까? – Gordon
좋은 오래된 디버깅이 필요합니다. –
대부분의 경우 중요한 문제는 해당 기능의 실제 내용입니다. – JAL