1.قبل الDesign by Contract ربما سمعنا على الTDD اختصار Test-Driven Design , و هي انك تكتب كود للTest قبل ما تكتب كود Implementation. بمعنى تكتب كود يفحص ميثود فارغة , بالطبع بيعطيك خطأ (Not-Pass) ثم تكتب كود الميثود و تشغل الTest و تجرب و تكمل تعديل لحد ما يعطيك Pass.
(سلسلة)
(سلسلة)
2.الTest كما نعرف يكون عادة بعد كتابة الكود لكن احنا هنا نكتب Specification تعتمد على الRequirement اكثر منه Test للValidation. هذه فكرة الTDD باختصار و هي جزء اساسي في الAgile Development. الTDD ظهر مع الeXtreme Programming لمبتكرها @KentBeck و شرحها في كتابه في الصورة
3.مشروع الUnit Testing يفيدك ليس فقط للتاكد ان كلاسك يعمل بشكل صحيح لكن يفيدك ايضاً لما تحتاج تغير , فانت مع الوقت بيكون عندك نقاط Testing كثيرة لكل ميثود و لما تغير بتتأكد ان تغيير ما اثر على مكان اخر. فإذا شغلت الUnit Testing و اعطاك "أخضر" للكل فمعناه ان امورك في السليم.
5.الفكرة تقوم على ثلاثة اشياء لاحظها في الصورة السابقة
الPrecondition شرط مسبق مثلا لما نكتب دالة قسمة , نتأكد ان المقسوم عليه يجب أن لايساوي صفر.
الPostcondition نختبر فيه القيمة العائدة من الدالة ( الميثود) إن كانت مطابقة لما افترضنا سابقاً.
الInVariants تكون على مستوى الكلاس.
الPrecondition شرط مسبق مثلا لما نكتب دالة قسمة , نتأكد ان المقسوم عليه يجب أن لايساوي صفر.
الPostcondition نختبر فيه القيمة العائدة من الدالة ( الميثود) إن كانت مطابقة لما افترضنا سابقاً.
الInVariants تكون على مستوى الكلاس.
6.هذه الطريقة تعطيك كود نظيف و OOP بدل ما يمتلي الكلاس بجمل If statements و جمل الThrow Exceptions.
ممكن في بالك سؤال عن الفرق بين الUnit Testing و بين الDbC و ليه الأولى مشهورة و الاخرى لا. الDbC تتنفذ وقت الRun Time لكن الUnit Testing بعد الCompile Time مباشرة.
ممكن في بالك سؤال عن الفرق بين الUnit Testing و بين الDbC و ليه الأولى مشهورة و الاخرى لا. الDbC تتنفذ وقت الRun Time لكن الUnit Testing بعد الCompile Time مباشرة.
7.فالUnit Testing بتعطيك feedback اسرع. لكن ممكن تعطلك في حالة غيرت تصميمك فبتضطر انك تغير ايضاً في مشروع الUnit Testing. هناك مثال يقول ان الUnit Testing مثل الشرطة التي تباشر موقع الجريمة بعد حدوثه لكن الDbC مثل الشاهد الموجود اثناء وقوع الجريمة.
8.ايضاً لاحظ ان الDbC اقرب لكونها Checking أكثر منها Testing لذا المقارنة بينهما ليست في محلها. لن ادخل في التفاصيل لكنها تستحق التجربة و القراءة عنها و هذه مجرد مقدمة عنها و يمكن دمج الاثنين فليس الخيار إما هذا وإما ذا.
9.في اللغات المعروفة مثل جافا و بايثون و سي شارب
ربما قد تحتاج لمكتبات خارجية تسهل عليك استخدام الDbC
فقط اكتب اسم لغتك المفضلة في محرك البحث متبوع بـ
"Design By Contract".
ربما قد تحتاج لمكتبات خارجية تسهل عليك استخدام الDbC
فقط اكتب اسم لغتك المفضلة في محرك البحث متبوع بـ
"Design By Contract".
جاري تحميل الاقتراحات...