हाल ही में मैं एक "Scramble Squares" टाइल पहेली का समाधान निर्धारित करने के लिए एक रूबी कार्यक्रम ने लिखा है:अज्ञात उत्तर के साथ पहेली को हल करने के लिए मैं टीडीडी का उपयोग कैसे कर सकता हूं?
मैं TDD इस्तेमाल किया इसमें से अधिकांश को लागू करने, परीक्षण है कि इस तरह देखा करने के लिए अग्रणी:
it "has top, bottom, left, right" do
c = Cards.new
card = c.cards[0]
card.top.should == :CT
card.bottom.should == :WB
card.left.should == :MT
card.right.should == :BT
end
यह निचले स्तर के "सहायक" तरीकों के लिए अच्छा काम करता है: एक टाइल के "पक्ष" की पहचान करना, यह निर्धारित करना कि ग्रिड में टाइल को वैध रूप से रखा जा सकता है या नहीं।
लेकिन मैं पहेली को हल करने के लिए वास्तविक एल्गोरिदम कोडिंग करते समय एक समस्या में भाग गया। चूंकि मुझे समस्या के वैध संभावित समाधान नहीं पता था, मुझे नहीं पता था कि पहले परीक्षण कैसे लिखना है।
def play_game
working_states = []
after_1 = step_1
i = 0
after_1.each do |state_1|
step_2(state_1).each do |state_2|
step_3(state_2).each do |state_3|
step_4(state_3).each do |state_4|
step_5(state_4).each do |state_5|
step_6(state_5).each do |state_6|
step_7(state_6).each do |state_7|
step_8(state_7).each do |state_8|
step_9(state_8).each do |state_9|
working_states << state_9[0]
end
end
end
end
end
end
end
end
end
तो मेरे सवाल है: कैसे आप TDD प्रयोग करते हैं एक विधि लिखने के लिए जब आप पहले से ही पता नहीं है
मैं इसे हल करने के लिए एक बहुत बदसूरत, अपरीक्षित, एल्गोरिथ्म लेखन समाप्त हो गया मान्य आउटपुट?
आप रुचि रखते हैं, कोड GitHub पर है:
- टेस्ट: https://github.com/mattdsteele/scramblesquares-solver/blob/master/golf-creator-spec.rb
- उत्पादन कोड: https://github.com/mattdsteele/scramblesquares-solver/blob/master/game.rb
मुझे लगता है कि अगर आप एक को पता करने के लिए होगा इससे पहले कि आप इसके लिए परीक्षण लिख सकें, लिगोरिदम (या कम से कम इसके टुकड़े)। लिंक के लिए +1, बहुत दिलचस्प है। –
http://pindancing.blogspot.com/2009/09/sudoku-in-coders-at-work.html आपके लिंक से लिंक ओपी को "उत्तर" के प्रकार पर चर्चा करने लगता है। –
सभी के लिए लिंक के लिए धन्यवाद। ऐसा लगता है कि इस ** विशेष ** समस्या स्थान (एक पहेली को हल करने के लिए एक एल्गोरिदम उत्पन्न करना), "डिजाइन के रूप में डिजाइन करने के लिए परीक्षण परीक्षणों" का दृष्टिकोण बेकार या अक्षम समाधानों का कारण बनता है। यह मुझे [टीडीडी की इन आलोचनाओं] की याद दिलाता है (http://www.dalkescientific.com/writings/diary/archive/2009/12/29/problems_with_tdd.html)। मुझे यकीन नहीं है कि आप प्रक्रिया पर खुद को एक व्यापक निर्णय ले सकते हैं। कम से कम, मैं वास्तविक समस्या को हल करने में डाइविंग से पहले उपलब्ध निम्न स्तर की विधियों को काम करने (और परीक्षण) करने के लिए बहुत खुश था। – matthewsteele