کد نویسی و تست کردن آن در المپیاد کامپیوتر-اول مشاور
17 اسفند 1395

کد نویسی و تست کردن آن در المپیاد کامپیوتر-اول مشاور

کد نویسی
• هدف از کد زدن٬ صرفا سریع کد زدن نیست. هدف آن است که در انتها شما یک کد صحیح و تمیز داشته باشید. صرف وقت برای زدن کد صحیح و تمیز٬ شما را از مواجهه با باگ نجات می‌دهد مخصوصا باگ‌هایی که در دقایق پایانی به آن‌ها پی می‌برید و دیگر فرصتی برای رفعشان نیست.
• قبل از شروع کد، حتما ساختار کلی آن را در ذهن خود (و در موارد پیچیده‌، حتما روی کاغذ) مرور کنید. به سؤالات از این دست باید پاسخ‌های مشخصی داشته باشید:
o هر قسمت از برنامه چه چیزهایی را (به‌عنوان ورودی و داده‌های کمکی) نیاز دارد و چه چیزهایی را (به‌عنوان خروجی) فراهم می‌کند؟
o متغیرهای سراسری برنامه کدام‌ها خواهند بود و چه چیزهایی تنها در یک قسمت خاص برنامه کاربرد دارد؟
o گلوگاه‌های زمان اجرا و حافظه‌ی برنامه کجاها خواهند بود؟
o اگر لازم شود زمان اجرای برنامه را بهبود دهیم کجاهای برنامه تغییر می‌کنند و این تغییرات چه‌قدر در بخش‌های دیگر برنامه تأثیر می‌گذارند؟
o قسمت‌های پیچیده‌تر برنامه و جاهایی که احتمال باگ زدن در آن‌ها بیشتر است کدام‌اند؟
• هر قسمت از کد را که می‌نویسید آن قسمت را تست کنید که از درستی آن مطمئن شوید. تست کردن قسمت‌های کوچک برنامه خیلی ساده‌تر از تست کردن یک برنامه بزرگ چندقسمتی است. هرچه در برنامه‌ی خود از بلوک‌هایی استفاده کنید که قبلا تست شده‌اند، بیشتر می‌توانید توجه و تمرکز خود را صرف بخش‌های دیگر برنامه کنید.
• اگر به‌ترتیب روند اجرای برنامه کدتان را بنویسید، می‌توانید از داده‌های ورودی نمونه که در اختیارتان گذاشته شده برای تست هر قسمت جدیدی که می‌نویسید استفاده کنید.
• برای قسمت‌هایی که احساس می‌کنید به خاطر سپردنشان سخت است حتما پیام بگذارید. چرا که بعضی وقت‌ها بعد از مدت طولانی به آن قسمت برمی‌گردید و اگر کامنتی ننوشته باشید فهم آن قسمت از کد،از شما زمان زیادی خواهد گرفت.
• هرگاه قرار است بخشی از کدتان را با کد جدیدی جایگزین کنید (مثال وقتی باید یک قسمت از کد خود را بهینه بکنید)٬ حتما یک کپی از کد فعلی خود را در یک فایل دیگر ذخیره کنید. فایل اصلی خود را که در حال نوشتن در آن هستید، هیچ‌گاه تغییر نام ندهید و تنها نسخه‌های پشتیبان را با نام‌های مشخص بسازید. مثلا اگر در حال نوشتن در book.cpp هستید، همیشه برنامه‌ی اصلی خود را که در حال ویرایش و تست (و نهایتا submit) هستید در همین فایل بگذارید و نسخه‌های پشتیبان را با نام‌هایی مانند book0.cpp یا book-n2.cpp ذخیره کنید. این قرارداد باعث می‌شود از خطاهای رایج جابه‌جا گرفتن فایل‌ها در زمان اجرا و تست و ارسال برنامه‌ها جلوگیری شود.
• اگر در هر قسمتی از کد، نکته‌ای از جای دیگر کد به‌ذهن‌تان خطور کرد، حتما در جایی یادداشت کنید. استفاده از حافظه در این موارد اصلا توصیه نمی‌شود. داشتن یک TODO-List برای هر سؤال مفید است.
• به قوانین مهندسی نرم‌افزاری در زمینه‌ی کد‌زدن حتما در طول زمان اصلی کدزنی پای‌بند باشید. فقط در فاز نهایی و رفع باگ، اجازه‌ی شکستن قواعد را به‌خود بدهید.
تست کردن
• هیچ‌گاه برای دادن تست‌ها به برنامه‌تان از تایپ با صفحه‌کلید یا copy-paste در کنسول استفاده نکنید. هر تست را در یک فایل متنی ذخیره کنید و با redirection آن را به‌برنامه‌ی خود دهید. با این کار ممکن است هزینه‌ی اجرای هر تست برای بار اول، کمی بیشتر از حالت عادی باشد، ولی امکان اجرای سریع تست‌ها در دفعات بعدی، این هزینه‌ی زمانی را به‌سرعت جبران می‌کند. معمولا در شروع تست برنامه، یک احساس نادرست می‌گوید دفعه‌ی بعدی‌ای در کار نیست و در نتیجه رعایت این قاعده لازم نیست. ولی کافی است به تجربه‌ی خود مراجعه کنید تا ببینید احتمال این چه‌قدر است که برنامه‌تان در اولین اجرا همه‌ی تست‌ها را به‌درستی جواب دهد و دیگر نیاز به تغییر و تست مجدد نداشته باشد. علاوه‌بر آن، تست‌های ذخیره‌شده هستند که تست بلوک‌بلوک برنامه را امکان‌پذیر می‌کنند.
• حتما وقت مناسبی در حد نیم ساعت (در یک آزمون ۵ ساعته) برای تست برنامه خود بگذارید.
• اگر فرصت دارید یک راه‌حل صحیح و ساده (هرچند کند) برای مسئله بنویسید و در ضمن یک تولید کننده تست‌ دیتا نیز آماده کنید.
• خروجی برنامه اصلی و برنامه کندی که آماده کرده‌اید را روی تست دیتاهایی که آماده کرده‌اید مقایسه کنید. برای انجام این مقایسه هم کافی است که یک برنامه کوچک بنویسید یا آن را با دستورهای موجود در سیستم‌عامل موجود انجام دهید.
• تست حالت‌های خاص فراموش نشود. باگ‌ها بیشتر در گوشه‌ و کنارها دیده می‌شوند!
• در یک مجموعه تست خوب، هر خط و هر عبارت برنامه‌ لااقل در یک تست اجرا می‌شود.
• حتما روی چند تست نمونه‌ی بزرگ برنامه خود را تست کنید که مثلا به خاطر overflow برنامه شما اشتباه کار نکند، یا اگر به‌خاطر اشتباه، زمان اجرا یا حافظه برنامه‌تان خارج از حد مجاز می‌شد، متوجه این موضوع بشوید.
• اساسا تست یک برنامه توسط سازنده‌اش خلاف فطرت اوست! هرچه احساس گریز بیشتری نسبت به تست برنامه‌تان دارید، احتمال داشتن باگ در آن برنامه بیشتر است!