বাহ্যিক কোডে স্বেচ্ছাসেবী ফাংশন / শ্রেণিতে নিষিদ্ধ কল


12

সিস্টেমে নেতিবাচক পরিণতি রোধ করার জন্য বাহ্যিক গ্রন্থাগার এবং ফ্রেমওয়ার্কের API এ অ্যাক্সেস সীমাবদ্ধ করা মূল্যবান হতে পারে এমন ক্ষেত্রে আমি অভিজ্ঞতা অর্জন করেছি।

উদাহরণস্বরূপ, একটি শেয়ারপয়েন্ট অ্যাপ্লিকেশনটিতে এটি spList.Items.GetItemByIdলিস্ট আইটেম পেতে কল করা স্বাভাবিক বলে মনে হতে পারে , এমনকি একটি লুপেও, এটি উপলব্ধি না করেই এটি বিশাল কর্মক্ষমতা সমস্যার কারণ হতে পারে।

এটি এমনও হতে পারে যে পরীক্ষার পরিবেশে যখন আমরা সঠিকভাবে প্রক্সি তৈরি করতে পারি এবং সমস্ত ইমেলিং উপহাস করতে পারি তা নিশ্চিত করার জন্য, ইমেল প্রেরণের জন্য আমাদের নিজের শ্রেণিকে ব্যবহার করতে সবাইকে বাধ্য করার জন্য শ্রীমত্পক্লিয়েন্টের ব্যবহার নিষিদ্ধ করা দরকার।

আমাদের নিজস্ব কোডে নির্দিষ্ট নির্দিষ্ট জায়গা ব্যতীত বাহ্যিক কোডগুলিতে এই সীমাবদ্ধতাগুলি অর্জন করার জন্য কি কোনও নির্ভরযোগ্য এবং যুক্তিসঙ্গত সরল উপায় রয়েছে? একেবারে প্রতিটি পরিস্থিতিতে এই পদ্ধতিগুলি / শ্রেণীর অ্যাক্সেস প্রতিরোধ করার প্রয়োজন হয় না, উদাহরণস্বরূপ প্রতিফলন বা কেবল একরকম অক্ষমকরণ দ্বারা, এটি ব্যবহার করা উচিত নয় বরং এটির কঠোর সতর্কতা হওয়া উচিত। যদি প্রয়োজন / প্রয়োজন হয় তবে প্রোগ্রামারকে সক্রিয়ভাবে এই সীমাবদ্ধতাগুলিকে ওভাররাইড করার ব্যবস্থা গ্রহণ করতে বাধ্য করা।


11
এটি কোডিং শৈলীর একটি চূড়ান্ত ফর্ম (একটি নির্দিষ্ট লাইব্রেরি কল ব্যবহার করতে নিষিদ্ধ) বলয়ের মতো শোনাচ্ছে। সুতরাং আমার কাছে এটি পূর্বনির্ধারিত প্রশ্নটি উত্থাপন করে আপনি কোনও কোড পর্যালোচনা, বা স্টাইল চেক প্রথম স্থানে করেন?
পিটার এম

3
আপনি কি এই কলগুলি রানটাইম বা সংকলনের সময়গুলি ধরার এবং ব্লক করার আশা করছেন ?
মেটাফাইট

1
আপনি যেহেতু সি # ব্যবহার করছেন তাই আপনি কি কখনও স্টাইলকপ সম্পর্কে শুনেছেন ? আপনি কি জানেন আপনি নিজের পছন্দমতো কাস্টম বিধি তৈরি করতে পারবেন , তাই না?
মাচাদো

10
" আমাদের নিজস্ব কোডের নির্দিষ্ট নির্দিষ্ট জায়গা ব্যতীত বাহ্যিক কোডগুলিতে এই সীমাবদ্ধতাগুলি অর্জনের জন্য কি কোনও নির্ভরযোগ্য এবং যুক্তিসঙ্গত সহজ উপায় আছে? " হ্যাঁ: সংকলন ত্রুটি হিসাবে নির্দিষ্ট এপিআইতে অ্যাক্সেসের প্রতিবেদন করতে আপনার নিজস্ব রোজলিন অ্যানালাইজার লিখুন ।
ডেভিড আরনো

3
@ মাখাদো, স্টাইলকপ কার্যকরভাবে একটি মৃত পণ্য। এটি স্টাইলকপ অ্যানালিজার্স দিয়ে প্রতিস্থাপন করা হচ্ছে যা রোজলিনের শীর্ষে নির্মিত। এই দিনগুলিতে কাস্টম স্টাইলকপ নিয়ম লেখার জন্য সময় বিনিয়োগ করা অবশ্যই ভাল ধারণা হবে না।
ডেভিড আরনো

উত্তর:


8

আমাদের নিজস্ব কোডে নির্দিষ্ট নির্দিষ্ট জায়গা ব্যতীত বাহ্যিক কোডগুলিতে এই সীমাবদ্ধতাগুলি অর্জন করার জন্য কি কোনও নির্ভরযোগ্য এবং যুক্তিসঙ্গত সরল উপায় রয়েছে?

যেহেতু প্রশ্নটি বিশেষত সি # সম্পর্কিত, এখানে একটি সংকলক ভিত্তিক সমাধান রয়েছে যা এখানে এই জাতীয় নিয়ম প্রয়োগ করতে ব্যবহার করা যেতে পারে: রোজলিন অ্যানালাইজার্স । আপনি আপনার নিজের বিশ্লেষক লিখতে পারেন যা সংকলন ত্রুটি বা সতর্কতা হিসাবে নির্দিষ্ট এপিআইগুলিতে অ্যাক্সেসের প্রতিবেদন করে।

বিশ্লেষকদের একটি উদাহরণ সেট, যা আপনার নিজের লেখার ক্ষেত্রে প্রচুর উদাহরণ কোড সরবরাহ করে, হ'ল স্টাইলকপ অ্যানালাইজার , যা সি # এর জন্য পুরানো স্টাইলকপ বৈশিষ্ট্যের প্রতিস্থাপন।

এই কথাটি বলার পরে, এই ধরনের স্বয়ংক্রিয় চেকগুলি সর্বদা "নিয়ম ভাঙ্গার" জন্য নির্ধারিত লোকের দ্বারা কাজ করা যেতে পারে। সুতরাং কার্ল বিলেফেল্টের উত্তরে আলোচিত এই পন্থাটি কোড পর্যালোচনার বিকল্প নয়। এটি এই জাতীয় পর্যালোচনাগুলিতে সহায়তা করতে পারে তবে তাদের প্রতিস্থাপন করা উচিত নয়।


এটি অন্য কোনও কিছু প্রতিস্থাপনের উদ্দেশ্য ছিল না, আমি কেবল আমার সরঞ্জামবাক্সের জন্য একটি বিশেষ সরঞ্জাম অনুসন্ধান করছি।
অ্যালেক্স

25

আপনি বাহ্যিক এপিআই এর চারপাশে একটি মোড়ক লেখার মতো সময় সাশ্রয়ী মূল্যের জিনিসগুলি করতে পারেন যা আপনার অযাচিত অপারেশনগুলি ছেড়ে দেয়, তবে প্রশিক্ষণ এবং কোড পর্যালোচনাকে কিছুই হারায় না কারণ আপনি যে স্ট্যান্ডার্ড বা প্রযুক্তিগত পদক্ষেপ রাখেন না কেন লোকেরা তাদের চারপাশে যাওয়ার সৃজনশীল উপায়গুলি আবিষ্কার করবে ।

উদাহরণস্বরূপ, আমাদের স্কালায় বেশ কয়েকটি পরিষেবা লিখিত রয়েছে এবং কোড পর্যালোচনার সময় আমরা যে জিনিসগুলির বিষয়ে জিজ্ঞাসা করি তার মধ্যে একটি হ'ল অপরিবর্তনীয়তার জন্য, তবে আমরা প্রায়শই এটিকে পরিত্রাণ হিসাবে যোগাযোগ করি vars। অন্য একদিন তালিকার একমাত্র আইটেম হিসাবে একটি একক পরিবর্তনশীল ভেরিয়েবল ধরে রাখার জন্য লিস্টবুফার [বুলিয়ান] -র জন্য অন্য কোনও ভল এক্স ব্যবহার করেছেন । আপনি এক্সকে অন্য কোনও বরাদ্দ করতে পারবেন না ListBuffer, তবে আপনি তালিকার আইটেমগুলিকে আপনার পছন্দ মতো জায়গায় প্রতিস্থাপন করতে পারেন। ক ব্যবহারের মতোই খারাপ var, তবে স্নেকিয়ার।

অন্য কথায়, আপনাকে পরীক্ষা করতে হবে যে লোকেরা আপনার প্রযুক্তিগত সমাধানগুলি ঘুরে বেড়াচ্ছে কিনা। যদি এই প্রযুক্তিগত সমাধানগুলি ব্যয়বহুল হয় এবং জটিলতা যুক্ত হয়, তবে আপনি কেবল এটি সঠিকভাবে কোডিং করছেন কিনা তা পরীক্ষা করতে পারেন।


ধিক্কার!
WHN

@ এসএনবি এটি কেবল একটি বস্তু / মান ফেরত দিতে সক্ষম হতে এবং যথাযথ রেফারেন্স যুক্তি না পেয়ে জাভা হ্যাক হিসাবে যা করেছে তার সমতুল্য; পরিবর্তে একটি অ্যারে পাস করার সাথে এর বিষয়বস্তু আপডেট হবে। (কয়েকটি উদাহরণ: AtomicMarkableReference.getএবং AtomicStampedReference.get)।
জাব

আপনার উত্তরের জন্য ধন্যবাদ, তবে আমি অবশ্যই বাহ্যিক কোডের চারপাশে মোড়ক লেখার মতো সময় গ্রহণকারী জটিল জিনিসগুলি করতে আগ্রহী নই। তারা সম্ভবত উত্স যেতে পারে যেহেতু এটি সম্ভবত সাহায্য করবে না। এই উত্তরটি অনুমান করা যে একটি সমাধান বলে মনে হবে ব্যয়বহুল হতে এবং জটিলতা বাড়ায়। একটি খাঁটি এবং সহজ সমাধান সম্পর্কে কি?
অ্যালেক্স

1
@ অ্যালেক্সের সহজ সমাধানটি এখানেই রয়েছে: "প্রশিক্ষণ এবং কোড পর্যালোচনাগুলিকে কিছুই মারবে না"।
মিঃমিন্দর

2
"কেউ এটিকে ম্যানুয়ালি না করে মারছে" যতক্ষণ না কেউ এটিকে স্বয়ংক্রিয়ভাবে চালিত করে।
ইভান

0

কার্লের উত্তর 100% সঠিক। কনফারেন্সের গ্যারান্টি দেওয়ার কোনও উপায় নেই। তবে প্রশিক্ষণ এবং কোড পর্যালোচনা ছাড়াও সম্মতি নিশ্চিত করতে স্থির বিশ্লেষণ সরঞ্জামগুলির ব্যবহার বিবেচনা করুন। (দ্রষ্টব্য: আমি "এর সাথে" বলেছিলাম, যেহেতু কেউ সেইগুলিকে বাইপাস করতে পারে ঠিক যেমনভাবে কার্ল জানিয়েছেন))

স্থির বিশ্লেষণ সরঞ্জামগুলি ব্যবহার করার সুবিধা হ'ল "আইনিউমেবলের একাধিক ব্যবহার" উদাহরণস্বরূপ অনুসন্ধান করা ক্লান্তিকর মানব কোড বিশ্লেষণকে সরিয়ে ফেলা বা আপনি যে সপ্তাহে যে কোনও পারফরম্যান্স ইস্যুটি দেখছেন (বা কমপক্ষে, আমি সর্বদা বোধ করি আমিই বোধ করি দিকে তাকাও). এটি কোড পর্যালোচনা এবং প্রশিক্ষণকে আরও "আকর্ষণীয়" সমস্যাগুলিতে ফোকাস করার অনুমতি দেবে।

সি # এর জন্য, বিশেষত, আমি নীচে কিছু পরামর্শ অন্তর্ভুক্ত করেছি। এগুলি আপনার বিল্ড পরিবেশে প্লাগ করুন এবং আপনি যেতে ভাল। তবে, সাধারণত আপনি কোন ভাষা ব্যবহার করছেন তা বিবেচনা না করেই কোথাও কোনও স্থির বিশ্লেষণ সরঞ্জাম রয়েছে।

উইকিপিডিয়া পৃষ্ঠা থেকে সরাসরি অনুলিপি / আটকান, সাম্প্রতিক তথ্য এবং লিঙ্কগুলির জন্য উইকি পৃষ্ঠাটি ব্যবহার করুন: https://en.wikedia.org/wiki/List_of_tools_for_static_code_analysis#.NET

  • । নেট কম্পাইলার প্ল্যাটফর্ম (কোডনাম রোজলিন) - মাইক্রোসফ্ট। নেট দ্বারা বিকাশিত সি # এবং ভিজ্যুয়াল বেসিক। নেট জন্য ওপেন সোর্স সংকলক কাঠামো। সিনট্যাক্স বিশ্লেষণ এবং ম্যানিপুলেট করার জন্য একটি API সরবরাহ করে।
  • CodeIt.Right - স্ট্যাটিক কোড বিশ্লেষণ এবং সর্বোত্তম অনুশীলনের সাথে স্বয়ংক্রিয় রিফ্যাক্টরিং সংযুক্ত করে যা কোড ত্রুটি এবং লঙ্ঘনের স্বয়ংক্রিয় সংশোধন করতে দেয়; সি # এবং ভিবি.এনইটি সমর্থন করে।
  • কোডআরশ - ভিজ্যুয়াল স্টুডিওর জন্য একটি প্লাগইন যা ব্যবহারকারীদের সেরা অনুশীলনের লঙ্ঘন সম্পর্কে সতর্ক করে।
  • এফএক্সকপ - মাইক্রোসফ্ট। নেট প্রোগ্রামের জন্য নিখরচায় স্থির বিশ্লেষণ যা সিআইএলকে সংকলন করে। কিছু স্ট্যান্ডার্ড এবং মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও সংস্করণগুলিতে সংহত; মাইক্রোসফ্ট দ্বারা।
  • এনডিপেন্ডেড - কোড নির্ভরতা বিশ্লেষণ এবং ভিজ্যুয়ালাইজ করার মাধ্যমে, ডিজাইনের বিধিগুলি সংজ্ঞায়িত করে, প্রভাব বিশ্লেষণ করে এবং কোডের বিভিন্ন সংস্করণের তুলনা করে একটি জটিল .NET কোড বেস পরিচালনা সহজ করে। ভিজ্যুয়াল স্টুডিওতে একীভূত হয়।
  • প্যারাসফট ডটটিইএসটি - ভিজ্যুয়াল স্টুডিওর জন্য একটি স্ট্যাটিক বিশ্লেষণ, ইউনিট টেস্টিং এবং কোড পর্যালোচনা প্লাগইন; মাইক্রোসফ্ট। নেট ফ্রেমওয়ার্ক এবং সি নেট, ভিবি.এনইটি, এএসপি.এনইটি এবং পরিচালিত সি ++ সহ মাইক্রোসফ্ট .NET ফ্রেমওয়ার্ক এবং .NET কমপ্যাক্ট ফ্রেমওয়ার্কের সাথে ভাষার সাথে কাজ করে।
  • সোনারগ্রাফ - নির্ভরতা বিশ্লেষণ, স্বয়ংক্রিয় আর্কিটেকচার চেক, ম্যাট্রিক্স এবং কাস্টম মেট্রিক এবং কোড-চেকার যুক্ত করার ক্ষমতাতে ফোকাস সহ সি #, জাভা এবং সি / সি ++ সমর্থন করে।
  • স্টাইলকপ - স্টাইল এবং ধারাবাহিকতা নিয়মের একটি সেট প্রয়োগ করতে সি # উত্স কোড বিশ্লেষণ করে। এটি মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিওর অভ্যন্তর থেকে চালানো যেতে পারে বা এমএসবিল্ড প্রকল্পে সংহত করা যেতে পারে।

-1

অন্য উত্তরে উত্থাপিত "প্রশিক্ষণ এবং কোড পর্যালোচনা" পরামর্শটি বিশদভাবে বর্ণনা করার জন্য: যে কোডটি আপনি নিষিদ্ধ করতে চান তা আইনি কোড, তাই আপনি এটি রোধকারী সংকলকটির উপর নির্ভর করতে পারবেন না, এবং আপনাকে পরবর্তী কোনও প্রক্রিয়াতে নির্ভর করতে হবে, অস্ত্রোপচার.

এটি ম্যানুয়াল এবং স্বয়ংক্রিয় পর্যালোচনা পদক্ষেপ উভয়ই অন্তর্ভুক্ত করতে পারে (এবং হওয়া উচিত):

  • পরিচিত সমস্যাগুলির একটি চেকলিস্ট প্রস্তুত করুন এবং আপনার ম্যানুয়াল কোড রিভিউগুলিতে একে একে যান। চেকলিস্টটি পর্যালোচনা এবং আপডেট করার জন্য একটি পুনরাবৃত্তি সভা করুন। যখনই কোনও বাজে বাগটি ধরা পড়ে এবং বিশ্লেষণ করা হয় তখন এটিকে চেকলিস্টে যুক্ত করুন।

  • পরিচিত নিদর্শনগুলি সন্ধান করতে নিয়মে চেক যুক্ত করুন। এটি লিখতে জটিল হতে পারে তবে একটি বৃহত প্রকল্পের জন্য সময়ের সাথে সাথে এটি কার্যকর হতে পারে। টিএফএস আপনাকে সি # তে বিধি লিখতে দেয় এবং অন্যান্য বিল্ড সিস্টেমের নিজস্ব হুক থাকে। প্যাটার্নের সাথে মেলে এমন চেক-ইনগুলি প্রত্যাখ্যান করতে গেটেড বিল্ডগুলি ব্যবহার করার বিষয়ে বিবেচনা করুন। হ্যাঁ, এটি উন্নয়নকে ধীর করে দেয় তবে একটি নির্দিষ্ট প্রকল্পের আকার এবং জটিলতার পরে ডেভসকে ধীর করে দেওয়া ভাল জিনিস হতে পারে।


-1

হয়ত সংকলক আপনাকে অযাচিত কলগুলি ধরতে সহায়তা করতে পারে।

আপনার নিজস্ব লাইবে কোডগুলির ক্লাস / পদ্ধতিগুলির নাম পরিবর্তন করুন যা বাহ্যিক lib ক্লায়েন্টদের ব্যবহার করা উচিত নয়। পর্যায়ক্রমে ক্লাস / পদ্ধতিগুলি অভ্যন্তরীণ করুন এবং তাদের ব্যবহারের অনুমতিপ্রাপ্ত শ্রেণীর কাছে দৃশ্যমান ইন্টার্নাল যুক্ত করুন।

বাহ্যিক lib ব্যবহারকারীগণ একটি সংকলন ত্রুটি পদ্ধতি / শ্রেণি পাওয়া যায় নি।

পাবলিক লাইব্রেরি থেকে নিষিদ্ধ শ্রেণি / পদ্ধতি: আপনার লাইবে একই নামস্থান / শ্রেণি / পদ্ধতি তৈরি করুন

বহিরাগত লিব ব্যবহারকারীগণ নকল শ্রেণীর সন্ধানের কারণে একটি সংকলন ত্রুটি পাবেন

[হালনাগাদ]

প্রতিটি পরিস্থিতিতে একেবারে এই পদ্ধতিগুলি / ক্লাসগুলিতে অ্যাক্সেস রোধ করা জরুরি নয়, উদাহরণস্বরূপ প্রতিফলন বা কেবল একরকম অক্ষমকরণ দ্বারা, ....

প্রোগ্রামারকে (... lib এর ক্লায়েন্ট ...) সক্রিয়ভাবে যদি প্রয়োজন / প্রয়োজন হয় তবে এই সীমাবদ্ধতাগুলিকে ওভাররাইড করার ব্যবস্থা গ্রহণ করতে বাধ্য করা হচ্ছে।


এটিকে গুরুত্ব দেওয়া নয়, এটি কেবল একটি অদ্ভুত হ্যাক নয়, তবে এটি সহজেই সি # (যা ওপিতে প্রশ্নটিকে ট্যাগ করেছে) সহ বহিরাগত উপনাম ব্যবহার করে সহজেই কাজ করা হয় ।
ডেভিড আরনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.