উন্নয়ন পদ্ধতি যখন শত শত বিকাশকারী একটি একক সমাধানে কাজ করছেন?


19

আমরা প্রায় 200 বিকাশকারীদের সমন্বয়ে গঠিত একটি সংস্থা যা একটি একক পণ্য (পুনর্বিবেচনা নিয়ন্ত্রণ গিট ব্যবহার করে) অবিরত কাজ করে যা নির্দিষ্ট তারিখে প্রকাশের পরিকল্পনা করা হয়েছে।

বিপুল সংখ্যক বিকাশকারীদের কারণে আমরা প্রতিটি দলে প্রায় 10 জন বিকাশকারীকে নিয়ে "ক্রস ফাংশনাল" দল তৈরি করার চেষ্টা করছি, যার ফলে সংস্থায় প্রায় 20 টি উন্নয়ন দল রয়েছে।

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

আমি প্রশ্নটি কীভাবে বাক্যবিন্যাস করব তা সম্পর্কে আমি কিছুটা অনিশ্চিত, তবে আমি ভাবছি যে আমি একক পণ্যটিতে কাজ করা এত বড় গ্রুপের বিকাশকারীদের জন্য বিকাশ পদ্ধতিগুলির কোনও পরামর্শ পেতে পারি।

আমাদের মতে, বর্ণালীর এক প্রান্তটি প্রতিটি বিকাশকারীকে সরাসরি মূল ভান্ডারটিতে সরাসরি প্রতিশ্রুতিবদ্ধ করার অনুমতি দেওয়া হয়, তবে আমরা আশঙ্কা করি যে "মুখ্য সংগ্রহস্থল" ক্রমাগতভাবে একটি ভাঙা পর্যায়ে থাকতে পারে এমন সংখ্যক বিকাশকারী / অঙ্গীকারের কারণে। প্রতি প্রতিশ্রুতিবদ্ধতার জন্য আমাদের কাছে "মানের গেট" থাকতে পারে না।

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

এই সমস্ত পটভূমি তথ্য এবং মতামত বর্ণিত সঙ্গে, আমরা কীভাবে এত বিকাশকারীদের জন্য প্রস্তাবিত বিকাশ পদ্ধতি শিখতে এবং পড়তে পারি? বড় সংস্থা (মাইক্রোসফ্ট, ফেসবুক, উবুন্টু, ইত্যাদি) কীভাবে তাদের বিকাশ তৈরি করে?


3
আমি উত্তরটি নিশ্চিত নই, তবে সত্যই বড় সিস্টেমে, এমনকি সবচেয়ে বড় / সেরা (/ সবচেয়ে ঘৃণ্য?) সংস্থাগুলিও সমস্যার মুখোমুখি হতে পারেন: moishelettvin.blogspot.co.uk/2006/11/…
ওজ

13
বড় প্রকল্পগুলি একে অপরের সাথে কথা বলার জন্য অনেকগুলি ছোট প্রকল্প ...
জরিস টিমারম্যানস

1
ভাগ করুন এবং বিজয় করুন
সুপারম

Conways আইন এখানে প্রযোজ্য। আপনার দলকে ফিট করার জন্য আপনার আর্কিটেকচারটি সামঞ্জস্য করুন।
ডেভ হিলিয়ার

উত্তর:


23

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

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

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

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

এটি স্ক্রমের মতো একটি চৌকস বিকাশ প্রক্রিয়া বিবেচনা করার মতো হতে পারে যার উদ্দেশ্য একটি জটিল পণ্যটিকে পণ্য বর্ধনের (যা স্প্রিন্টস বলা হয়) ম্যানেজ করার অংশগুলিতে পরিণত করা। এগুলি সংগ্রহস্থলের মধ্যে সংহতকরণের সুযোগ দেবে।


7

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

এমনকি ছোট দলগুলিকে দলগুলিকে গাইড করতে এবং পৃথক উপাদানগুলি বিকাশ করার সাথে সাথে তাদের কাজ পর্যালোচনা করার জন্য নেতাদের প্রয়োজন। তাদের টিম পর্যায়ে কোয়ালিটি কন্ট্রোল প্রক্রিয়া হওয়া উচিত।

সুতরাং, হ্যাঁ, আপনার ভাণ্ডার সম্পর্কিত একটি শ্রেণিবদ্ধ কাঠামো অনুসরণ করা উচিত। এটি সামগ্রিকভাবে প্রকল্পের শ্রেণিবদ্ধ কাঠামোর সাথে মেলে to

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

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

এটি একটি ভাল বিষয়ও যে "যদি একীভূত দ্বন্দ্ব দেখা দেয় তবে সমস্যাটি অন্য বিকাশকারীদের উপর আসে" - বিশেষত, কোনও উচ্চতর স্তরের বিকাশকারীকে কোনও বিরোধকে কীভাবে সমাধান করবেন সে সিদ্ধান্ত নিতে হবে।


5

যখন আপনার কাছে কিছু বড় এবং (ফলস্বরূপ) অযৌক্তিকর বাইরে যাওয়ার উপায় তখন এটি ছোট এবং পরিচালনাযোগ্য টুকরোগুলিতে বিভক্ত করা হয়।

বেশ কয়েকটি পদক্ষেপ রয়েছে যা আপনাকে দল এবং প্রকল্পটি আরও ভালভাবে বজায় রাখতে সহায়তা করবে:

  1. মডিউলগুলিতে কার্যকারিতা ভাগ করুন। কার্যকারিতাটি উচ্চ সংহতি, কম সংযুক্তি এবং নির্ভরতা বিপরীত নীতিগুলি ব্যবহার করে স্বতন্ত্র সর্বাধিক মডিউলগুলিতে বিভক্ত করা উচিত। প্রথম নীতি আপনাকে যৌক্তিকভাবে সামঞ্জস্যপূর্ণ মডিউল তৈরি করতে সহায়তা করবে। দ্বিতীয়টি এই মডিউলগুলিকে যতটা সম্ভব স্বাধীন রাখতে সহায়তা করবে। তৃতীয়টি একই সাথে নির্ভরশীল মডিউলগুলি বিকাশে সহায়তা করবে (যদি মডিউল A মডিউল বি এর উপর নির্ভর করে, বি একটি এমন ইন্টারফেস প্রদান করবে যা বি সম্পূর্ণ প্রস্তুত না থাকা সত্ত্বেও এ ব্যবহার করতে পারে)।

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

  3. কাজের জন্য লোক (লোকের জন্য কখনই কাজ নয়)। কার্যকারিতাটিকে ছোট ছোট সেটে ভাগ করার পরে, এই সেটগুলিতে কাজ করার জন্য দল তৈরি করুন। দল তৈরি করা এই পর্যায়ে আরও সহজ হবে, কারণ প্রতিটি দল কী কাজ করবে তা আপনি ইতিমধ্যে জানেন। এবং কোড রিভিউয়ের মতো কাজগুলি প্রতিটি দলের ভিতরেই করা হবে।

  4. কার্যাদি পরিষ্কার পদ্ধতি। 200 বিকাশকারীদের প্রত্যেককেই কী কাজ করবেন তা স্পষ্টভাবে জানা উচিত। এটি আপনাকে ইতিমধ্যে কী করা হয়েছে, প্রতিটি ব্যক্তি কী কাজ করছে এবং কতটা কাজ বাকি রয়েছে তা ট্র্যাক রাখতে সহায়তা করবে।

  5. উৎস নিয়ন্ত্রণ. (আমি মনে করি এটি অন্যান্য উত্তরে এটি বেশ ভালভাবে বর্ণিত)))

এবং পরিশেষে, যতটা সম্ভব দল এবং মডিউলগুলির একটি সহজ কাঠামো তৈরি করার চেষ্টা করুন। আপনি এত বড় প্রকল্প নিয়ে জটিলতা বহন করতে পারবেন না।


2

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


1

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

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


0

আমি একটি বিরাট সিস্টেমে কাজ করেছি যার প্রায় একশো এমএলওসি নিয়ে একসাথে কয়েকশ বিকাশকারী কাজ করেছিল working এটি একটি মেইনফ্রেমে ছিল, সুতরাং আমরা ভিজ্যুয়াল স্টুডিওতে কথা বলছি না, তবে নীতিগুলি এখনও গ্রহণ করা যেতে পারে।

প্রথমত, আপনি যদি জাভা ব্যবহার করেন তবে আমি অবশ্যই মাভেন ব্যবহার বলব। আপনি যদি ভিএস ব্যবহার করছেন তবে আপনি নুগেটও ব্যবহার করতে পারেন যদিও মাভেনের সাথে এখনও আছে কিনা তা সম্পর্কে আমি নিশ্চিত নই (এটি কিছুটা আলাদা)। এই জাতীয় সিস্টেম ব্যবহার করা আপনাকে আপনার নির্ভরতাগুলি টানতে এবং তাদের স্বতন্ত্রভাবে কাজ করার অনুমতি দেয়। আপনার একটি বিল্ড স্ক্রিপ্ট প্রাসঙ্গিক নির্ভরতা টানতে এবং একটি ব্যাচ হিসাবে তৈরি করতে চাই।

আপনি সরাসরি কোনও প্রশ্ন জিজ্ঞাসা করছেন না তবে একটি পদ্ধতি জিজ্ঞাসা করছেন, আমি আপনাকে জানাব যে আমার পূর্ববর্তী নিয়োগকর্তা কীভাবে এটি পরিচালনা করেছিলেন।

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

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

আশা করি এটা কাজে লাগবে.

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