আমরা অনেকগুলি অ্যালগরিদম বাস্তবায়িত করছি যা সাধারণত প্রচুর ভাগ, সর্বজনীনভাবে পরিচিত এবং সুরক্ষা-সম্পর্কিত পরামিতি রয়েছে।
বর্তমানে, আমরা কেবলমাত্র সমস্ত পরামিতি এবং দুটি পূর্বনির্ধারিত গ্লোবাল অবজেক্ট ধারণ করে একটি শ্রেণি ব্যবহার করি:
class PublicParams(object):
p = q = 0
def __init__(self, p, q):
self.p = p
self.q = q
# used for tests
publicParams_test = PublicParams(15,7)
# Some 2048 bit numbers for example
publicParams_secure = PublicParams(128378947298374928374,128378947298374928374)
আলগোরিদিমগুলি তখন একটি PublicParams
বস্তুকে আর্গুমেন্ট হিসাবে গ্রহণ করে যা উত্পাদনকারীকে ডিফল্ট করেpublicParams_secure
def AlgoOne(n, publicParams = publicParams_secure):
# do stuff with publicParams.p
# ...
AlgoTwo(x, publicParams)
এবং
def AlgoTwo(x, publicParams= publicParams_secure):
# do stuff with publicParams.q
এইভাবে আমরা আরও সহজ ইউনিট পরীক্ষার জন্য বিভিন্ন পাবলিক পরামিতি ইনজেক্ট করতে পারি:
class AlgoOneTest(unittest.TestCase):
def test(self):
# compare with manually computed result
self.assertTrue(AlgoOne(1, publicParams_test) == 10)
এই পদ্ধতির বিষয়ে আমি যা পছন্দ করি না:
publicParams
কিছু অ্যালগরিদম কল করার সময় ডিফল্ট মান প্রদান এটি alচ্ছিক করে তোলে। তবে এরAlgoTwo
মধ্যে থেকে কল করার সময় এটি পাস করা ভুলে যাওয়া সহজ হয়ে যায়AlgoOne
, যার ফলে পরীক্ষার বস্তুটি পাস করা হলে দুটি পৃথক অবজেক্ট ব্যবহার করা হবেAlgoOne
আরও ভাল উপায় আছে যা ঝুঁকিপূর্ণ কম তবে এখনও ইউনিট পরীক্ষার জন্য নমনীয়তা সরবরাহ করে? এটি কি সত্যিই সেরা অনুশীলন?