এমবেডেড সি কোড নির্ভরযোগ্যতা উন্নত করতে কোন সরঞ্জাম বা মান ব্যবহার করা যেতে পারে?


9

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


1
আপনি সি ভাষার উপর কতটা সেট?
ব্রায়ান ড্রামন্ড

1
যদি খুব ভাল কেস এর জন্য তৈরি করা হয় তবে আমি অন্য কোনও কিছুতে স্যুইচ করতে প্ররোচিত হতে পারি। তবে এটি খুব ভাল ক্ষেত্রে হতে হবে।
স্টিফেন কলিংস

সি থেকে স্যুইচ করার জন্য "খুব ভাল কেস" দ্রুত তৈরি করা যায় না, এবং পিআইসির জন্য সম্ভবত সম্ভবত এখনও না। এভিআর, এআরএম বা এমএসপি ৪৩০ এর জন্য অ্যাডা গুরুত্ব সহকারে দেখতে পারা যায় (এটি যেমন নেতিবাচকতা আকর্ষণ করে তবুও আপনি দেখতে পাচ্ছেন!) এবং উচ্চ রিলিজের জন্য স্পার্ক এক নজর দেখার মতো।
ব্রায়ান ড্রামন্ড

স্ফুলিঙ্গ বনাম মিশ্রের-সি: আপনি পটভূমির তথ্য এই আগ্রহ জাগাতে পারে spark-2014.org/entries/detail/... এবং এই চলমান কেস স্টাডি: spark-2014.org/uploads/Nosegearpaper_1.pdf
ব্রায়ান ড্রুমন্ড

পিআইসি থেকে আধুনিক কোনও কিছুর দিকে সরে যাওয়ার জন্য কেস তৈরি করার জন্য আরও ভাল সময় বিনিয়োগ করা যেতে পারে ... বিশেষত আপনি যদি মিশর এবং স্পার্কের জন্য মূলত যে ধরণের মিশন-সমালোচনামূলক সিস্টেমগুলি তৈরি করেছিলেন তা ডিজাইন করছেন design
লন্ডিন

উত্তর:


11

এম্বেড করা কোডের বৈধতা জটিল, বিশেষত যখন পিকস-এর মতো সীমিত-সংস্থান অংশগুলি নিয়ে কাজ করে। এই অংশটির স্মরণীয় বাধা এবং প্রায়শই "রিয়েল-টাইম" প্রোগ্রামিংয়ের কারণে পরীক্ষার ক্ষেত্রে কোডিংয়ের বিলাসিতা আপনার কাছে থাকে না।

এখানে আমার কয়েকটি গাইডলাইন রয়েছে:

  1. যদি না থাকে তবে একটি অনুমান লিখুন: আপনি যদি কোনও অনুমানের বিরুদ্ধে কোডিং না করে থাকেন তবে আপনার কোডটি কী কী অনুমান করা হচ্ছে, বৈধ ইনপুটগুলি কী, প্রত্যাশিত আউটপুটগুলি কী, প্রতিটি রুটিনে কতক্ষণ সময় নেওয়া উচিত, কী কী পেতে পারে এবং কী পাওয়া যায় না তার নথিটি নথিভুক্ত করুন ক্লোবারড ইত্যাদি operation অপারেশন একটি তত্ত্ব, ফ্লোচার্টস, কোনও কিছুর চেয়ে ভাল।

  2. আপনার কোডটি মন্তব্য করুন: কেবল আপনার কাছে কিছু স্পষ্ট হওয়ার অর্থ এই নয় যে এটি অন্য কারও কাছে সুস্পষ্ট (বা সঠিক)। সমালোচনা এবং কোড রক্ষণাবেক্ষণ উভয়ের জন্যই সরল ভাষার মন্তব্যগুলি প্রয়োজনীয়।

  3. ডিফেন্সিভালি কোড: সাধারণ ইনপুটগুলির জন্য কেবল কোড অন্তর্ভুক্ত করবেন না। অনুপস্থিত ইনপুট, গাণিতিক ওভারফ্লোস ইত্যাদির বাইরে থাকা ইনপুটগুলি হ্যান্ডেল করুন - আপনার কোড ডিজাইনের সাহায্যে আপনি যত বেশি কোণে আবরণ করবেন তখন মোতায়েনের সময় কোডের কম ডিগ্রি থাকবে।

  4. স্থিতিশীল বিশ্লেষণ সরঞ্জামগুলি ব্যবহার করুন: পিসি-লিন্টের মতো কতগুলি বাগ সরঞ্জাম আপনার কোডে সন্ধান করতে পারে তা কেবল বিচলিত হতে পারে। গুরুতর পরীক্ষার জন্য একটি সূচনা পয়েন্ট হিসাবে একটি পরিষ্কার স্থিতিশীল বিশ্লেষণ রান বিবেচনা করুন।

  5. পিয়ারের পর্যালোচনাগুলি অপরিহার্য: আপনার কোডটি পরিষ্কার এবং যথেষ্ট ডকুমেন্টেড হওয়া উচিত যাতে এটি একটি स्वतंत्र পক্ষ দ্বারা দক্ষতার সাথে পর্যালোচনা করা যেতে পারে। আপনার অহংটি দরজায় পরীক্ষা করুন এবং যে কোনও সমালোচনা বা পরামর্শ দেওয়া হয়েছে তা গুরুত্ব সহকারে বিবেচনা করুন।

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

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


+1 সমস্ত শব্দ পরামর্শ। আমি আশা করি যে কোনও পেশাদার ফার্মওয়্যার বিকাশকারী এটি পড়ার সময় কেবল হাসি এবং মঞ্জুরি দেবে।
লন্ডিন

2
পিয়ার রিভিউগুলির একটি গুরুত্বপূর্ণ বিষয় হ'ল পর্যালোচনা কোডটি সম্পর্কে, প্রোগ্রামার সম্পর্কে নয়। যদি আপনি "প্রথমে আমি এটি করি, তবে আমি এটি করি" এর মতো শর্তাদি সহ আপনার কোড বিশ্লেষণ করেন, আপনি সম্ভবত সমস্যায় পড়েছেন। "প্রথমে কোডটি এটি করে, তারপরে এটি এটি করে" এটি সম্পর্কে চিন্তা করার সঠিক উপায়। এবং একইটি পর্যালোচকদের ক্ষেত্রে প্রযোজ্য: "আপনি এটি কেন করলেন?" না, "কোড কেন এটি করে?"।
পিট বেকার

আপনি যোগ করার বিষয়েও বিবেচনা করতে পারেন: ১. চক্রবিজ্ঞান সংক্রান্ত জটিলতা পরীক্ষা করা ২. সংস্করণ নিয়ন্ত্রণ সফ্টওয়্যার
আলফাগোকু

4

একটি পিসিতে নির্ভরযোগ্য সফ্টওয়্যার তৈরির জন্য একই কৌশলগুলির বেশিরভাগ এম্বেডড বিকাশের জন্য প্রযোজ্য। আপনার অ্যালগরিদমগুলিকে হার্ডওয়্যার-নির্দিষ্ট কোড থেকে আলাদা করতে এবং ইউনিট পরীক্ষা, সিমুলেশন, স্থির বিশ্লেষণ এবং ভালগ্রাইন্ডের মতো সরঞ্জামগুলির সাথে পৃথকভাবে পরীক্ষা করতে এটি সহায়ক। এইভাবে অনেক কম কোড রয়েছে যা কেবলমাত্র হার্ডওয়ারে পরীক্ষা করা হয়।

আমি সি ছেড়ে যাব না, যদিও অ্যাডা-এর মতো ভাষাগুলি কিছু ছোটখাটো গ্যারান্টি দিতে পারে, তবে ভাষা সত্যিকার অর্থে যতটা প্রতিশ্রুতি দেয় তার চেয়ে বেশি ভাবার ফাঁদে পড়ে যাওয়া সহজ।


ভ্যালগ্রিড একটি 8-বিট এমসইউ-র চেয়ে পিসির জন্য আরও কিছুটা প্রাসঙ্গিক হতে পারে :)
লন্ডিন

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

3

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

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

মিজরা-সি দস্তাবেজের দুটি সংস্করণ রয়েছে যা প্রয়োগ হতে পারে। হয় মিস্রা-সি: 2004, যা এখনও এম্বেডড ইন্ডাস্ট্রি ডি ফ্যাক্টো স্ট্যান্ডার্ড। অথবা নতুন মিশ্র-সি: 2012 যা C99 মানকে সমর্থন করে। আপনি যদি এর আগে কখনও মিস্রা-সি ব্যবহার না করে থাকেন তবে আমি আপনাকে পরবর্তীকালের বাস্তবায়ন করার পরামর্শ দিচ্ছি।

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

সিদ্ধান্ত নেওয়ার আগে আপনি অবশ্যই মিস্রা ডকুমেন্টটি পড়ে শুরু করতে পারেন এবং এটিতে কী প্রবিষ্ট হয় তা দেখুন। এটি Misra.org থেকে 10 ডলারে কেনা যাবে , আইএসও মানগুলির জন্য দামের তুলনায় বেশ সাশ্রয়ী মূল্যের।


1

ম্যাথ ওয়ার্কস (ম্যাটল্যাব ভাবেন) এর পলিসস্পেস নামে একটি স্ট্যাটিক কোড বিশ্লেষণ সরঞ্জাম রয়েছে

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

আপনি সুরক্ষা-সমালোচনামূলক কোড ডিজাইনের জন্য মাইসরা সহ, তবে ইউএল 1998, এবং আইইসি 61508 মানদণ্ডগুলিও দেখতে চাইতে পারেন।


আমি না হলে আইসিসি 61508 এর কাছে যাওয়ার প্রস্তাব দিই না। এটি সফ্টওয়্যারটির উল্লেখ করে তবে এর দাবির জন্য আধুনিক, বৈজ্ঞানিক উত্সের অভাব রয়েছে। এই স্ট্যান্ডার্ডটি 30 বছর অনেক দেরিতে এসেছিল - যদি 70 এর দশকে এর বেশিরভাগ তথাকথিত "উত্স" এর মতো প্রকাশিত হত তবে এটি কার্যকর হতে পারে।
লুন্ডিন

1

এই প্রশ্নের সম্পূর্ণ উত্তরের জন্য, আমি "কোড নির্ভরযোগ্যতা" সম্পর্কে চিন্তাভাবনা দমন করব এবং পরিবর্তে "ডিজাইনের নির্ভরযোগ্যতা" সম্পর্কে চিন্তা করব, কারণ কোডটি কেবল ডিজাইনের চূড়ান্ত প্রকাশ।

সুতরাং, প্রয়োজনীয়তাগুলি দিয়ে শুরু করুন এবং সেগুলি লিখুন এবং পরিদর্শন করুন। আপনার যদি প্রয়োজনীয় কাগজপত্র না থাকে তবে কোডের এলোমেলো লাইনে নির্দেশ করুন এবং নিজেকে জিজ্ঞাসা করুন "সেই লাইনের দরকার কেন?" কোডের যে কোনও লাইনের প্রয়োজন শেষ পর্যন্ত প্রয়োজনের সন্ধান করা উচিত, এমনকি এটি যত সহজ / স্পষ্টভাবে "স্পষ্টভাবে ইনপুটটি 12-36 ভিডিসির মধ্যে হয় তবে বিদ্যুৎ সরবরাহ 5 ভিডিসি আউটপুট দেয়" " এ সম্পর্কে চিন্তাভাবনার একটি উপায় হ'ল কোডটির সেই লাইনটি যদি কোনও প্রয়োজনের সন্ধান করতে না পারে, তবে আপনি কীভাবে জানবেন যে এটি সঠিক কোড, বা এটি একেবারেই প্রয়োজন?

পরবর্তী, আপনার নকশা যাচাই করুন। এটি পুরোপুরি কোডে রয়েছে কিনা ঠিক আছে (উদাহরণস্বরূপ, মন্তব্যে), তবে কোডটি আসলে কী বোঝাতে চাইছে তা নিশ্চিত করা শক্ত করে তোলে। উদাহরণ হিসেবে বলা যায়, কোড একটি লাইন যে সার্চ থাকতে পারে output = 3 * setpoint / (4 - (current * 5)); কি current == 4/5একটি বৈধ ইনপুট যে একটি ক্র্যাশ হতে পারে? এই ক্ষেত্রে শূন্য দ্বারা বিভাজন রোধ করার জন্য কী করা উচিত? আপনি কি পুরোপুরি অপারেশনটি এড়িয়ে চলেছেন বা পরিবর্তে আউটপুট হ্রাস করবেন? এই ধরণের কেসগুলি কীভাবে পরিচালনা করতে হয় সে সম্পর্কে আপনার নকশা নথিতে একটি সাধারণ নোট থাকা উচ্চতর স্তরে নকশাটি যাচাই করা আরও সহজ করে তোলে। সুতরাং, এখন কোড পরিদর্শন করা সহজ কারণ কোডটি সেই নকশাটি সঠিকভাবে প্রয়োগ করে কিনা তা যাচাইয়ের বিষয়।

সেই সাথে, কোড পরিদর্শনটি এমন সাধারণ ত্রুটিগুলি যাচাই করা উচিত যা আপনার আইডিই ধরা দেয় না (আপনি কোনও আইডিই ব্যবহার করছেন, তাই না?) যেমন '=' যখন আপনি '==' বোঝাতে চেয়েছিলেন, অনুপস্থিত বন্ধনীগুলি যা 'যদি এর অর্থ পরিবর্তন করে 'বিবৃতি, সেমিকোলন যেখানে সেগুলি হওয়া উচিত নয়, ইত্যাদি

আমি যখন এটি লিখছি, আমার কাছে এটি ঘটে যে কয়েক বছরের সফটওয়্যার মানের প্রশিক্ষণ / একক পোস্টে অভিজ্ঞতা সংক্ষিপ্ত করা সত্যিই কঠিন। আমি চিকিত্সা ডিভাইসগুলির জন্য কোড লিখি এবং উপরেরটি কীভাবে আমরা এটিতে পৌঁছাচ্ছি তার একটি অত্যন্ত সরল সারসংক্ষেপ।


আমার বোধগম্যতা হল কোনও মেডিকেল ডিভাইসের কোড অংশটি প্রায় এটির মতো পরীক্ষিত হয় যেন এটি একটি পৃথক ডিভাইস। এটা কি সঠিক?
স্কট সিডম্যান

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

আমি বিশেষত এফডিএ গাইডেন্সের উল্লেখ করছিলাম, যেমন fda.gov/downloads/RegulatoryInifications/Guidance/ucm126955.pdf সফ্টওয়্যারটি আপনার যদি মেডিক্যাল ডিভাইসের অংশ, পরিকল্পনার পর্যায়ে এবং নকশাকরণ নিয়ন্ত্রণ থেকে শুরু করে, তার চেয়ে বেশি চিন্তা করে।
স্কট সিডম্যান

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