সফটওয়ার প্রকৌশলঃ সফটওয়ার বিশ্লেষণ ও ডিজাইন টুলস (Software Analysis & Design Tools)

সফটওয়ার প্রকৌশলঃ সফটওয়ার বিশ্লেষণ ও ডিজাইন টুলস
রিদওয়ান বিন শামীম

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

সফটওয়ার বিশ্লেষণ ও ডিজাইন মধ্যবর্তী ধাপ যা মানুষের পঠনযোগ্য ডকুমেন্টকে প্রকৃত কোডে রূপান্তরিত করে।

সফটওয়ার ডিজাইনাররা ব্যবহার করেন এমন কিছু বিশ্লেষণ ও ডিজাইন টুলস নিয়ে আলোচনা করা যাক।

ডাটা ফ্লো ডায়াগ্রামঃ কোন ইনফরমেশন সিস্টেমের ডাটা ফ্লোয়ের গ্রাফিক্যাল উপস্থাপনা হল ডাটা ফ্লো ডায়াগ্রাম। এটি গৃহীত ডাটা ফ্লো, বহির্গামী ডাটা ফ্লো ও সঞ্চিত ডাটা প্রকাশ করে। কীভাবে সিস্টেমে ডাটা ফ্লো প্রবাহিত হয় সেটি ডাটা ফ্লো ডায়াগ্রাম দেখায় না।

ডাটা ফ্লো ডায়াগ্রামের প্রকারঃ ডাটা ফ্লো ডায়াগ্রাম দুই প্রকার হয়, লজিকাল ও ফিজিকাল।

• লজিকাল ডাটা ফ্লো ডায়াগ্রামঃ সিস্টেমের প্রক্রিয়া ও সিস্টেমে ডাটা ফ্লোয়ের উপর মনোনিবেশ করে। যেমন, ব্যাংকিং সফটওয়ারে যেভাবে তথ্যগুলো বিভিন্ন সত্ত্বার মধ্যে চলাচল করে তা লজিকাল ডাটা ফ্লো ডায়াগ্রাম সিস্টেমের উদাহরণ।

• ফিজিকাল ডাটা ফ্লো ডায়াগ্রামঃ এটি দেখায় কীভাবে সিস্টেমে প্রয়োগ করা হয়, এটি প্রয়োগের দিক থেকে অনেক বেশি সংশ্লিষ্ট ও বিস্তারিতভাবে বিবৃত।

ডাটা ফ্লো ডায়াগ্রামের উপাদানঃ ডাটা ফ্লো ডায়াগ্রাম নিচের উপাদানগুলো ব্যবহার করে তথ্যের উৎস, গন্তব্য, স্টোরেজ, ও প্রবাহ প্রকাশ করতে পারে।

• সত্তাঃ বিভিন্ন সত্ত্বাগুলো তথ্যের উৎস ও গন্তব্য। ডাটা ফ্লো ডায়াগ্রামে একে সমকোণী চতুর্ভুজাকারে দেখানো হয়, তাদের সংশ্লিষ্ট নাম সহ।

• প্রক্রিয়াঃ তথ্যের উপর নেয়া পদক্ষেপ ও কার্যক্রম যা ডাটা ফ্লো ডায়াগ্রামে বৃত্ত বা গোলাকার কোনবিশিষ্ট চতুর্ভুজাকারে প্রকাশ করা হয়।

• ডাটা স্টোরেজঃ ডাটা ফ্লো ডায়াগ্রামে ডাটা স্টোরেজকে দুইভাবে দেখানো যেতে পারে, একে সমকোণী চতুর্ভুজাকারে দেখানো হয় যার ছোট বাহুদুটির একটি বা উভয়দুটিই অনুপস্থিত থাকতে পারে।

• ডাটা ফ্লোঃ ডাটার চলাফেরা তীরচিহ্ন দিয়ে প্রকাশ করা হয়, তীরের মাথা তথ্যের প্রবাহের দিক নির্দেশ করে।

ডাটা ফ্লো ডায়াগ্রামের লেভেলসমূহঃ

• লেভেল জিরোঃ ডাটা ফ্লো ডায়াগ্রামের সবচেয়ে বিমূর্ত লেভেলকে লেভেল জিরো দ্বারা প্রকাশ করা হয়,এটি সমস্ত তথ্যসিস্টেমকে অন্যান্য তথ্য ছাপিয়ে একটি মাত্র ডায়াগ্রামে প্রকাশ করে। একে কনটেক্সট লেভেল ডাটা ফ্লো ডায়াগ্রামও বলে।
• লেভেল ওয়ানঃ লেভেল জিরোকে আরও বিস্তারিত প্রকাশের জন্য ভেঙ্গে লেভেল ওয়ান দ্বারা প্রকাশ করা হয়। লেভেল ওয়ান সিস্টেমের মডিউল ও বিভিন্ন মডিউলে তথ্যের প্রবাহ প্রকাশ করে। মৌলিক প্রক্রিয়া ও তথ্যের উৎসও লেভেল ওয়ান প্রকাশ করে।
• লেভেল টুঃ লেভেল টুতে দেখানো হয় লেভেল ওয়ানে কীভাবে ডাটা ফ্লো সজ্জিত থাকে।

উঁচু শ্রেণীর ডাটা ফ্লো ডায়াগ্রাম বিভাজিত হতে হতে আরও বিস্তারিতভাবে নির্ধারিত নিচু শ্রেণীর ডাটা ফ্লো ডায়াগ্রামে বিশ্লেষিত হতে পারে যতক্ষণ পর্যন্ত না কাঙ্খিত মানের লেভেল পাওয়া যায়।

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

• মডিউলঃমডিউল কাজের প্রক্রিয়া বা সাবরুটিন বা কাজকেই প্রকাশ করে। কন্ট্রোল মডিউল একাধিক সাবমডিউলকে নিয়ন্ত্রণ করে। লাইব্রেরী মডিউল পুনরায় ব্যবহারযোগ্য ও অন্য মডিউলে তথ্যশেয়ারের যোগ্য ।
• কন্ডিশনঃ কাঠামো চার্টে মডিউলের নিচে হীরকাকৃতির চিহ্ন দ্বারা প্রকাশ করা হয়। কন্ট্রোল মডেল কিছু শর্তানুসারে যেকোনো সাবরুটিন নির্দেশ করতে পারে, এটিই কন্ডিশন নির্দেশ করে।
• জাম্পঃ মডিউলে একটি তীরচিহ্ন দ্বারা প্রকাশ করা হয়, এটি প্রকাশ করে কন্ট্রোল কোন সাবমডিউলের মাঝখানে নির্দেশিত হতে পারে।
• লুপঃএকটি বাঁকানো তীরচিহ্ন। সাবমডিউলের পুনরাবৃত্তিক অবস্থা প্রকাশে ব্যবহার করা হয়।
• ডাটা ফ্লোঃ লেজে ফাঁকা বৃত্তসহ তীরচিহ্নই ডাটা ফ্লো নির্দেশ করে।
• কন্ট্রোল ফ্লোঃ লেজে ভরাট বৃত্তসহ তীরচিহ্ন কন্ট্রোল ফ্লো নির্দেশ করে।

হিপো ডায়াগ্রামঃ HIPO (Hierarchical Input Process Output) ডায়াগ্রাম সিস্টেম বিশ্লেষণ ও ডকুমেন্টেশনের দুটি সুগঠিত পদ্ধতির সমন্বয়, ১৯৭০ সালে আইবিএম এই মডেলটি উদ্ভাবন করেছিল। হিপো ডায়াগ্রামে সফটওয়ার সিস্টেমের মডেলগুলোকে ক্রমানুসারে দেখানো হয়। বিশ্লেষকরা সিস্টেম ফাংশনের উঁচু মানের পর্যবেক্ষণের জন্য হিপো ডায়াগ্রাম ব্যবহার করে থাকেন। এটি ফাংশনকে স্তরবিন্যাসগত পদ্ধতিতে সাবফাংশনে ভাগ করে। এটি সিস্টেমের কৃত ফাংশন প্রকাশ করে।

ডকুমেন্টেশনের জন্য হিপো ডায়াগ্রাম খুব উপযোগী, এর গ্রাফিক্যাল রিপ্রেজেন্টেশন সিস্টেম কাঠামোর দৃশ্যমান পরিকল্পনা করতে ডিজাইনার ও ব্যবস্থাপকদের সহায়তা করে থাকে।

আইপিও ডায়াগ্রামের(IPO,Input Process Output) তুলনায়, যেটি এক মডিউলে কন্ট্রোল ফ্লো ও ডাটা প্রকাশ করে, হিপো ডায়াগ্রাম কোন ডাটা ফ্লো বা কন্ট্রোল ফ্লোয়ের কোন তথ্য প্রকাশ করে না।

উদাহরণঃ হিপো ডায়াগ্রামের দুটি অংশ, স্তরবিন্যাসগত প্রেজেন্টেশন ও আইপিও চার্ট দুটিই সফটওয়ার প্রোগ্রামের কাঠামোগত ডিজাইন ও ডকুমেন্টেশনের জন্য ব্যবহৃত হয়।

কাঠামোগত ইংরেজিঃ বেশিরভাগ প্রোগ্রামারই সফটওয়ারের বৃহৎ চিত্র সম্পর্কে ধারণা করতে পরে না তাই তাদের ব্যবস্থাপকের নির্দেশনার উপর নির্ভর করে থাকতে হয়।
উচ্চতর সফটওয়ার ব্যবস্থাপনার দায়িত্ব হল প্রোগ্রামারদের পর্যাপ্ত তথ্য সরবরাহ করা যেন তারা দ্রুত কিন্তু নির্ভুল কোড ডেভেলাপ করতে পারেন।

অন্যান্য পদ্ধতি যেগুলো ডায়াগ্রাম বা গ্রাফ ব্যবহার করে গঠিত, সেগুলো বিভিন্ন মানুষের কাছে বিভিন্ন অর্থ প্রকাশ করতে পারে।

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

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

কাঠামোগত ইংরেজি কাঠামোগত প্রোগ্রামিং প্রেক্ষাপটে বিশুদ্ধ ইংরেজি শব্দ ব্যবহার করে। এটি বিশুদ্ধ কোড নয় কিন্তু কোডিঙের জন্য কি দরকার আর কীভাবে দরকার তার বিবরণ এর সাথে সম্পর্কযুক্ত। কাঠামোগত প্রোগ্রামিংএর কিছু টোকেন নিম্নরূপ,
IF-THEN-ELSE,
DO-WHILE-UNTIL
বিশ্লেষকরা একই চলক ও নাম ব্যবহার করেন যা ডাটা ডিরেক্টরিতে সংরক্ষিত থাকে এবং কোড বোঝা ও লিখা সহজ করে।

উদাহরণঃ অনলাইন বাণিজ্যিক পরিবেশে গ্রাহক প্রত্যয়ন লাভের জন্য কোন প্রোগ্রামে কাঠামোগত ইংরেজিতে লিখা যেতে পারে,
Enter Customer_Name
SEEK Customer_Name in Customer_Name_DB file
IF Customer_Name found THEN
Call procedure USER_PASSWORD_AUTHENTICATE()
ELSE
PRINT error message
Call procedure NEW_CUSTOMER_REQUEST()
ENDIF

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

সিওডো কোডঃ সিওডো কোড প্রোগ্রামিং ল্যাঙ্গুয়েজের কাছাকাছি ভাবে লেখা হয়। একে মন্তব্য ও বিবরণে সমৃদ্ধ তুলনামূলক প্রোগ্রামিং ল্যাঙ্গুয়েজ বলে ধরা যায়। সিওডো কোড চলক বিবৃতি এড়িয়ে চলে কিন্তু C, Fortran, Pascal এসব মৌলিক প্রোগ্রামিং ল্যাঙ্গুয়েজের উপাদান ব্যবহার করে।

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

উদাহরণঃ ফিবনাচ্চি সংখ্যারাশিকে n পর্যন্ত প্রিন্ট করতে যে কোড লিখব তা হল,
void function Fibonacci
Get value of n;
Set value of a to 1;
Set value of b to 1;
Initialize I to 0
for (i=0; i< n; i++)
{
if a greater than b
{
Increase b by a;
Print b;
}
else if b greater than a
{
increase a by b;
print a;
}
}
ডিসিশন টেবিলঃ ডিসিশন টেবিল সংবদ্ধ উপায়ে কন্ডিশন ও তা সম্পন্ন করার জন্য কার্যাবলী প্রকাশ করে। এটি সংশোধন ও ভুল এড়ানোর ক্ষেত্রে একটি শক্তিশালী টুল। এটি সদৃশ তথ্যগুলোকে গ্রুপে সাজিয়ে একটি টেবিলে সাজাতে সাহায্য করে, এরপর টেবিলগুলোকে একসাথে করে সহজ ও সুবিধাজনক সিদ্ধান্ত নিতে সাহায্য করে।
ডিসিশন টেবিল তৈরি করাঃ ডিসিশন টেবিল তৈরি করতে প্রোগ্রামারদের চারটি মৌলিক নিয়ম মেনে চলতে হয়,
• সম্ভাব্য সব কন্ডিশন খুঁজে বার করা,
• সব কন্ডিশনের জন্য কর্মপন্থা খুঁজে বার করা,
• সম্ভাব্য সর্বাধিক নিয়ম তৈরি করা,
• প্রত্যেক নিয়মের জন্য কর্মপন্থা খুঁজে বার করা

এন্ড ইউজারদের দ্বারা ডিসিশন টেবিল ভেরিফাই করাতে হয়। পরে ডুপ্লিকেট নিয়ম ও কর্মকাণ্ড খুঁজে বের করে বাদ দিয়ে প্রক্রিয়া সহজ করে ফেলা যায়।

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

Conditions/Actions Rules
Conditions Shows Connected N N N N Y Y Y Y
Ping is Working N N Y Y N N Y Y
Opens Website Y N Y N Y N Y N
Actions Check network cable X
Check internet router X X X X
Restart Web Browser X
Contact Service provider X X X X X X
Do no action

এনটিটি রিলেশনশিপ মডেলঃ এনটিটি রিলেশনশিপ মডেল একধরনের ডাটাবেস মডেল যেটি বাস্তব জগতের সত্ত্বা ও তাদের মধ্যেকার সম্পর্কের ধারনাকে কাজে লাগানো হয়েছে।আমরা বাস্তব জগতের সত্ত্বাকে এনটিটি রিলেশনশিপ মডেলের মাধ্যমে তুলে ধরতে পারি। এনটিটি রিলেশনশিপ মডেল স্বতন্ত্র সত্ত্বা ও তাদের প্রয়োগের একটি সেট তৈরি করে, সীমাবদ্ধতার একটি সেট তৈরি করে তাদের মধ্যে সম্পর্ক বিবৃত করে।

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

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

• এক থেকে এক
• এক থেকে অনেক
• অনেক থেকে এক
• অনেক থেকে অনেক
ডাটা ডিকশনারিঃ ডাটা ডিকশনারি ডাটা সম্পর্কিত তথ্যের কেন্দ্রীভূত সমষ্টি। এটি ডাটার উৎস ও অর্থ, অন্য ডাটার সাথে সম্পর্ক, ডাটার প্রায়োগিক ফরম্যাট ইত্যাদি সংরক্ষণ করে। ডাটা ডিকশনারি সকল নামের বিবৃতি কঠোরভাবে ও সংগঠিতভাবে সংরক্ষণ করে ডিজাইনার ও ব্যবহারকারীদের সুবিধার জন্য। ডাটা ডিকশনারিকে মেটা ডাটা(তথ্য বিষয়ে তথ্য!) সংগ্রহস্থলও বলা হয়। এটি সফটওয়ার প্রোগ্রামের ডাটা ফ্লো ডায়াগ্রামের সাথে তৈরি হয় এবং ডাটা ফ্লো ডায়াগ্রামের সাথেই আপডেটও হতে পারে।
ডাটা ডিকশনারির প্রয়োজনীয়তাঃ সফটওয়ার ডিজাইন ও প্রয়োগের সময় ডাটা ডিকশনারির সাহায্যে ডাটা সমন্বয় করা হয়, কোন অস্পষ্টতা থাকলে ডাটা ডিকশনারির সাহায্যে তা দূর করা হয়। প্রোগ্রামের সর্বত্র একই ধরণের অবজেক্ট রেফারেন্স ব্যবহার করার সময় এটি প্রোগ্রামার ও ডিজাইনারদের সাহায্য করে থাকে।
ডাটা ডিকশনারি পুরো ডাটাবেস সিস্টেমকে এক জায়গায় ডকুমেন্টেশন করতে সাহায্য করে। ডাটা ফ্লো ডায়াগ্রামের ভ্যালিডেশন ও ডাটা ডিকশনারির সাহায্যে হয়।
উপাদানঃ ডাটা ডিকশনারি যে বিষয়গুলোর তথ্য রাখতে পারে সেগুলো হল,
• ডাটা ফ্লো
• ডাটা কাঠামো
• ডাটার উপাদান
• ডাটা সংরক্ষণ
• ডাটা প্রক্রিয়াকরণ

ডাটা ফ্লো, ডাটা ফ্লো ডায়াগ্রামের নিয়ম মেনে চলে ও নিচে বর্ণিত গাণিতিক প্রকরণ মেনে চলে।
= Composed of
{} Repetition
() Optional
+ And
[ / ] Or

উদাহরণঃ ঠিকানা=বাড়ি নং+রাস্তা/ এলাকা+নগর+রাষ্ট্র।
কোর্স আইডি=কোর্স নাম্বার+কোর্স নাম+কোর্স লেভেল+কোর্স গ্রেড।

ডাটার উপাদানঃ ডাটার নাম ও বর্ণনা ডাটার উপাদানের অন্তর্ভুক্ত যাতে উপাদান, অভ্যন্তরীণ বা বাইরের ডাটা স্টোরেজ সহ নিচের বর্ণনাগুলিও সংশ্লিষ্ট ।

• প্রাথমিক নাম
• মাধ্যমিক নাম(Alias)
• ব্যবহার বিধি
• উপাদানের বর্ণনা
• সম্পুরক তথ্য(পূর্বনির্ধারিত ভ্যলু,সীমাবদ্ধতা ইত্যাদি)

ডাটা সংরক্ষণঃ এটি সেখানে তথ্য সংরক্ষণ করে যেখানে সিস্টেমের তথ্য আসে ও যেখান থেকে তথ্য চলে যায়। ডাটা সংরক্ষণে যে বিষয়গুলো থাকে তা হল,
ফাইলঃ
• অভ্যন্তরীণ থেকে সফটওয়ারে
• বাইরে থেকে সফটওয়ারে কিন্তু একই মেশিনে
• বাইরে থেকে সফটওয়ার ও সিস্টেমে, ভিন্ন মেশিনে।

টেবিলঃ
• নামের সন্নিবেশ
• বৈশিষ্ট্য লিপিবদ্ধকরণ
ডাটা প্রক্রিয়াকরণঃ দুই ধরণের ডাটা প্রক্রিয়াকরণ দেখা যায়,
লজিকালঃ ব্যবহারকারী দেখতে পারেন।
ফিজিকালঃ সফটওয়ার দেখতে পায়।

তথ্যসূত্রঃ http://www.tutorialspoint.com/software_engineering/software_analysis_design_tools.htm

Permanent link to this article: http://bangla.sitestree.com/%e0%a6%b8%e0%a6%ab%e0%a6%9f%e0%a6%93%e0%a7%9f%e0%a6%be%e0%a6%b0-%e0%a6%aa%e0%a7%8d%e0%a6%b0%e0%a6%95%e0%a7%8c%e0%a6%b6%e0%a6%b2%e0%a6%83-%e0%a6%b8%e0%a6%ab%e0%a6%9f%e0%a6%93%e0%a7%9f%e0%a6%be%e0%a6%b0/

Leave a Reply