PDA

View Full Version : تست کد در پروژه های بزرگ



jeson_park
سه شنبه 05 مهر 1390, 09:25 صبح
با سلام
نمی دونم جای این سوال اینجا هست یا نه ولی سوالی که برام پیش اومده اینه که در برنامه نویسی نرمافزار های بزرگ وقتی یک تیکه کد به پروژه اضافه می کنن چه جوری اون رو تست می کنن؟
آیا کل پروژه از اول کامپایل میشه؟؟ مسلما نه
مثلا فرض کنید ما داریم با سورس کرنل لینوکس کار می کنیم یه بخشی یه این کرنل اضافه می کنیم
کل کرنل رو که نمیایم از اول کامپایل کنیم
یا تحت ویندوز و فرضا زبان سی شارپ یه پروژ] با هزاران خط کد داریم
حالا یه فرم بهشه اضافه می کنیم
آیا برای تست اون یه فرم باید کل پروژه کامپایل شه؟

vcldeveloper
سه شنبه 05 مهر 1390, 12:43 عصر
در بسیاری از مواقع ماجول های مختلف یک نرم افزار بزرگ به صورت جداگانه ایی کامپایل میشند، در نتیجه در صورت تغییر در یک ماجول، فقط کامپایل اون ماجول و تست آن با نسخه کامپایل شده سایر ماجول های مرتبط با آن، کفایت میکنه. اما اگر هم یک ماجول خودش بخش های کوچکتری داشته باشه که همگی باید در یک فایل باینری کامپایل بشند، نیازی نیست که برنامه نویس خودش بعد از اعمال تغییرات، کل پروژه یا اون ماجول خاص را کامپایل کنه، و تا پایان آن هم صبر کنه.

برنامه نویس تغییرات خودش را که شامل نوشتن unit test ها و نوشتن کدهای مورد نظر میشه، انجام میده، و این تغییرات را در مخزن کد پروژه ثبت (commit) میکنه. در تیم های درست و حسابی یا شرکت های نرم افزاری خوب، از build automation (http://en.wikipedia.org/wiki/Build_automation) استفاده میشه، به این صورت که بعد از ثبت هر تغییر در مخزن کد، پروژه (یا ماجول مورد نظر) به طور خودکار کامپایل میشه، و unit test ها و سایر تست های تعریف شده برای آن به طور خودکار اجرا میشند، و نتیجه اجرای اون تست ها هم به طور خودکار به bug tracker پروژه ارسال میشند. اگر هم build با خطا مواجه شده باشه، به برنامه نویس یا برنامه نویسان مرتبط با آن اطلاع داده میشه، تا تغییرات اعمال شده را بررسی کرده، و در صورت لزوم اصلاح کنند. پس شما به عنوان برنامه نویس دائما کدهای خودتان را می نویسید و ثبت می کنید، و به کار خودتون ادامه میدید. سیستم build automation شرکت هم با هر ثبت شما به طور خودکار عمل کامپایل و تست را انجام میده، و در صورت بروز خطا، شما را با خبر میکنه.

jeson_park
سه شنبه 05 مهر 1390, 13:30 عصر
میشه یه مثلا دقیق بزنید
مثلا در مورد همون کد لینکسی که گفتم
فرضا یه ماژول براش می نویسم با سی
حالا چه طوری این کد رو تست کنم؟؟

vcldeveloper
چهارشنبه 06 مهر 1390, 01:18 صبح
مثلا در مورد همون کد لینکسی که گفتم
من از نحوه توسعه هسته لینوکس اطلاع ندارم، یک راهکار کلی گفتم که به طور معمول در شرکت ها و تیم های نرم افزاری استفاده میشه.


فرضا یه ماژول براش می نویسم با سی
حالا چه طوری این کد رو تست کنم؟؟
تست های مختلفی ممکنه برای یک کد در نظر گرفته بشه، بعضی از اونها تست های خودکار هستند و بعضی دیگه تست هایی که توسط یک یا چند نفر تست کننده انجام میشند. معمولا ابتدایی ترین تستی که برای یک قطعه کد تعریف میشه، unit test هست، به این صورت که اون قطعه خاص رو به تنهایی، و با حذف متغیرهای خارجی موثر بر آن، از نظر عملکرد بررسی می کنند. مثلا اگر شما یک تابع داشته باشید که دو عدد صحیح را بر هم تقسیم میکنه، می تونید حالت های مختلفی که ممکنه برای آن بوجود بیاد را در نظر بگیرید، و برای هر کدام از آنها تست هایی تعریف کنید. مثلا شما اینطور در نظر میگیرید که در صورت ورود اعداد 4 و 2 به تابع، خروجی مورد انتظار از تابع هست، یا در صورتی که مقسوم علیه صفر باشد، تابع باید یک خطای مشخص برگشت بده، و غیره. اینها رو می تونید در قالب تست های مختلف که فقط همون بخش از کد را تست می کنند، بنویسید. ابزارهای مختلفی برای تسهیل unit testing وجود دارند که می تونند تست های نوشته شده برای هر بخش از کد را به طور خودکار اجرا کنند، و نتیجه را به شما گزارش کنند.
Unit testing فقط به تست هر قطعه از کد می پردازه. برای بررسی تعامل هر قطعه از کد با سایر قطعه ها از Integration testing استفاده میشه. در این حالت، شما بررسی می کنید که هر قطعه از کد در تعامل با سایر بخش ها، خروجی مناسبی تولید میکنه، و در اختیار سایر بخش های مرتبط با خودش قرار میده. برای این کار هم ابزارهای مختلفی وجود دارند که می تونند این فرآیند را خودکار سازی کنند. تست های دیگه هم متناسب با نوع نرم افزار ممکنه برای اون تعریف بشند؛ مثلا شما ممکنه نیاز داشته باشید از نظر امنیتی نرم افزارتان را تست کنید، یا شرایط خاص و بحرانی را برای نرم افزارتان شبیه سازی کنید و آن را در این شرایط خاص تست کنید؛ برای این کارها هم معمولا ابزارهای تخصصی وجود دارند، مثلا نرم افزارهایی که به طور خودکار به بررسی ضعف های امنیتی در یک نرم افزار می پردازند. حتی ابزارهایی وجود دارند که می تونند رفتار یک کاربر فرضی در تعامل با یک نرم افزار را شبیه سازی کنند؛ مثلا برنامه شما را اجرا کنند، موس را بر روی یک منوی خاص ببرند، آن گزینه منو را کلیک کنند، و غیره.

در Build Automation تا حد امکان این فرآیند ها خودکار سازی میشند و چگونگی انجام آنها و ترتیب انجامشان تعریف میشه. به این ترتیب، هر زمان که تغییری در سورس کد اعمال بشه، این فرآیندها به طور خودکار به ترتیبی که براشون تعریف شده، اجرا میشند. مثلا، شما یک تغییر در یک ماجول خاص اعمال می کنید، و این تغییر را در مخزن کد ثبت می کنید. نرم افزار کنترل ورژن شما به طور خودکار به نرم افزار مدیریت Build شما اعمال یک تغییر جدید را اطلاع میده. نرم افزار مدیریت Build شما هم فرآمینی را که از قبل براش تعریف کردید، اجرا میکنه؛ مثلا آخرین نسخه از سورس کد را از مخزن کد دریافت میکنه، آن را کامپایل میکنه، unit test تعریف شده را اجرا میکنه، Integration test و سایر تست های تعریف شده برای نرم افزار را اجرا میکنه، در صورت لزوم، بسته بندی نرم افزار در داخل یک Installer را انجام میده، تست های مربوط به Install نرم افزار و سایر تست هایی که ممکنه برای شبیه سازی رفتار کاربر طراحی شده باشند را اجرا میکنه، و گزارشات مربوط به انجام هر مرحله از این کارها را هم به یک نرم افزار مدیر پروژه یا bug tracker ارسال میکنه. حالا یک پروژه نرم افزاری ممکنه به فراخور نوعش و نیازهایش همه یا برخی از این مراحل براش تعریف شده باشند.

developing
دوشنبه 02 آبان 1390, 13:35 عصر
با سلام

ببخشيد كه يه كم دير وارد بحث مي شم.

به تازگي وارد شركتي شدم كه كارهاي گروهي انجام ميدن و قراره كه از اين به بعد پروژه هاي بزرگي بگيرن. از اونجايي كه قبلا كارشون سخت افزار و شبكه بوده چيزي از نرم افزار نمي دونن و من مي خوام پروژه هاشون رو به صورت استاندارد پيش ببرم.
1- آيا براي انجام پروژه ها نيازي به استفاده از تمامي مباحث مهندسي نرم افزار وجود داره؟
2- ليستي از نرم افزارها در تمامي زمينه هاي مهندسي نرم افزار ارائه نماييد.
3- براي شروع كار گروهي به چه تخصص ها و مباحثي از مهندسي نرم افزار نياز داريم؟
4- اگر تجربه اي در مورد كار كردن با اين نرم افزارها و كار گروهي داريد خوشحال مي شم كه در اينجا ذكر كنيد.
5- كتاب، ويدئو، ebook و ... كه در مورد هر كدوم از نرم افزارهاي فوق و يا مباحث مهندسي نرم افزار باشه معرفي كنيد.

با تشكر.

حمیدرضاصادقیان
دوشنبه 02 آبان 1390, 14:36 عصر
سلام.
بهترین مورد استفاده از یک مدیر پروژه باتجربه هست. زیرا کتاب و ... یک سری مسائل کلی رو بیان کردن و در دنیای واقعی پارامترهای زیادی در کار دخیل میشن که به مرور زمان کسب میشوند.

developing
سه شنبه 03 آبان 1390, 10:13 صبح
با سلام و تشكر

اما مدير پروژه از كجا بياريم؟ چون بودجه ما محدود است و نميخوايم كه هزينه ي زيادي انجام بديم.

لطف كنيد بگيد چطور مي تونيم از بچه هاي پروژه خودمون يكي رو به عنوان مدير انتخاب كنيم.
و اون بايد چه كارها و نرم افزارهايي رو ياد بگيره؟