<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حمیدرضا شریف زاده</title>
        <link>https://virgool.io/feed/@hamidrezash2000</link>
        <description>توسعه دهنده نرم افزار</description>
        <language>fa</language>
        <pubDate>2026-06-17 10:27:28</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/110779/avatar/1dptkA.png?height=120&amp;width=120</url>
            <title>حمیدرضا شریف زاده</title>
            <link>https://virgool.io/@hamidrezash2000</link>
        </image>

                    <item>
                <title>تست‌های دروغ‌گو!</title>
                <link>https://virgool.io/@hamidrezash2000/flaky-tests-w0cej8qly6rb</link>
                <description>مقدمهشما هم احتمالا در فرآیند برنامه‌نویسی به این مشکل خورده‌اید که بعد از انجام تغییراتی در کد و اجرای تست‌ها، در برخی موارد با نتایج ناموفقی روبرو می‌شوید که ارتباطی به تغییرات کد شما نداشته و در صورت تکرار اجرای آن‌ها، به طرز عجیبی مشکلی دیده نخواهد شد. در متن پیش رو، به بررسی تست‌های Flaky می‌پردازیم.به چه تستی Flaky می‌گوییم؟به طور خلاصه به هر تستی که برای یک کد یکسان، می‌تواند هم نتیجه‌ی «موفق» و هم نتیجه‌ی «ناموفق» در پی داشته باشد، تست Flaky می‌گوییم. این تست‌ها در صورت ناموفق شدن، با اجرای دوباره یا چندباره بالاخره موفق خواهند شد.چه مشکلاتی را به وجود می‌آورد؟این تست‌ها علاوه بر آزاردهنده بودن، هزینه‌بر و زمان‌بر نیز هستند. سناریو زیر را در نظر بگیرید:توسعه‌دهنده‌ای در روز چندین بار کد خود را push کرده و منتظر نتایج تست از سمت سیستم CI می‌ماند. سیستم CI بعد از دقایقی چند مورد تست با اجرای ناموفق را گزارش می‌دهد. توسعه‌دهنده مجبور می‌شود که تست‌ها را یکی یکی بررسی کرده تا از عدم وجود مشکل در کد خود مطمئن شود. اگر پس از بررسی متوجه شد که مشکل از کدش نبوده یا حتی از قبل می‌دانست که این تست‌ها Flaky هستند، سعی می‌کند دوباره تست‌ها را اجرا کند تا زمانی که اجرای موفقی داشته باشند.این تست‌ها باعث می‌شوند فرآیند CI دیگر مطمئن نباشد. در هربار اجرای ناموفق CI، فرد مسئول نمی‌داند الان باید دوباره تست را اجرا کند یا نسبت به آن بی‌توجه باشد. این بی‌توجهی اثرات مخرب دیگری دارد که ممکن است رغبت توسعه‌دهندگان به نوشتن و اجرای تست را کاهش دهد.با اجرای دوباره یا چندباره این تست‌ها، زمان اجرای پایپلاین افزایش یافته و باعث اتلاف وقت و انرژی توسعه‌دهندگان می‌شود. با زیاد شدن زمان Commit Stage که زمان توصیه شده برای نگه‌داشت آن زیر ۱۰ دقیقه است، ممکن است توسعه‌دهنده روی کار دیگری متمرکز شده که این تغییر کار و پرش، خود هزینه‌زا خواهد بود.همچنین باعث می‌شوند تا اجرای پایپلاین شاخه‌ی master مخزن کد با مشکل مواجه شده و آدم‌های زیادی را به خود مشغول کند. بعد از چند بار رخ دادن این موضوع نیز ممکن است افراد به این هشدارها بی‌توجهی کرده و این بی‌توجهی به تست‌های مشکل‌دار بررسی نشده، محیط عملیاتی را هم دچار مشکل کند.بعضی برای خلاص شدن، این تست‌ها را به صورت موقت یا دائمی غیرفعال می‌کنند که احتمالا این کار نیز موجب بروز اشکالاتی در محیط عملیاتی خواهد شد.شرکت بزرگی مثل گوگل نیز از این قاعده مستثنی نبوده و می‌گوید ۱.۵ درصد از تست‌های تولید شده توسط توسعه‌دهندگان، Flaky است. این حالت برای یک پروژه معمولی گوگل که ۱۰۰۰ تست دارد، باعث می‌شود تا اجرای حدود ۱۵ تست به اشتباه ناموفق اعلام شود. بررسی هرباره‌ی ۱۵ تست کار پرهزینه‌ای بوده که معمولا توسعه‌دهندگان با توجه به تاریخچه‌ی اعلام غلط نتایج ‌تست‌ها، تصمیم ‌می‌گیرند به آن توجهی نکنند.منشا تست‌های Flaky چیست؟موارد مختلفی وجود دارد که ممکن است باعث شود تست‌ها Flaky شوند و با هربار اجرا روی یک کد یکسان، نتایج متفاوتی به دست آید. در زیر، به بعضی از این موارد اشاره شده است:هم‌روندی (Concurrency)در تست‌های بزرگ (Integration Test) ممکن است کامپوننت‌ها و Threadهای موازی تاثیر‌گذار باشند. اگر در محیط عملیاتی یا شبه‌عملیاتی مشغول تست هستید، ممکن است دیگر درخواست‌های خارج از محدوده‌ی تست نیز تاثیرگذار باشند. همچنین ممکن است اجرای تست‌ها به صورت موازی روی هم اثر بگذارند.ایزوله‌ی ناکافی محیط (Insufficient Isolation)منابع مشترک در بین تست‌ها مانند دیتابیس، صف، فایل و ... ممکن است باعث شود تا این تست‌ها با مشکل مواجه شوند. دقت کنید این اشتراکات روی هم تاثیرگذار نباشند و یا اگر تاثیر‌گذار هستند به صورت همزمان اجرا نشوند.وابستگی به ترتیب اجرا (Test Order Dependency)یکی از حالت‌های مشکل قبل، وابستگی یک تست به محیط تست اجرا شده‌ی پیشین خود است. با اجرای تست‌ها با ترتیبی تصادفی، این تست‌ها را می‌توان شناسایی کرد.آماده کردن و پاکسازی محیط (Test Setup &amp; Tear Down)این ایراد نیز از حالت‌های محیط با ایزوله‌ی ناکافی ‌است. محیط اجرای تستِ خوب باید قبل و بعد از اجرای تست یکسان باشد. دقت کنید بعد از اجرای هر تست، منابع استفاده شده را پاکسازی و به حالت قبل برگردانید. مثلا برای تست نیازمند به دیتابیس، میتوان عملیات را در یک transaction انجام داد تا بعد از اجرا به راحتی پاکسازی شود.زمان (Time)بعضی اوقات timeoutهایی که در این نوع تست‌ها برای یک درخواست استفاده می‌کنیم، کافی نیستند. بعضی اوقات با تغییر timezone محیط تست، این مشکل به وجود می‌آید. بعضی اوقات ممکن است در ساعت خاصی از شب یا در ساعت تغییر زمان تابستانه این اتفاق بیفتد. بهتر است شرایط زمانی محیط تست خود را ثابت کرده تا بسته به شرایط مختلف، تست‌های متفاوت و دقیق‌تری داشته باشید.استفاده از منابع خارجی (3rd Party Systems)استفاده از منابع خارجی به دلایل مختلفی مانند قطعی یا سرعت پایین شبکه، ناپایداری خود منبع و ... ممکن است باعث اجرای ناموفق شود. در تست‌های کوچک باید از راه‌حل‌های جایگزین قابل‌اتکاتری مثل mock استفاده کرد. البته استفاده از سیستم‌های واقعی در برخی از آزمون‌ها غیر قابل اجتناب است.تصادفی بودن ورودی (Random Inputs)در تست‌هایی با ورودی‌ تصادفی (Fuzz Testing)، این احتمال همیشه وجود دارد که اجرای تست ناموفق باشد. نتایج این نوع تست‌ها به خودی خود درست و قابل اتکا بوده و در صورت مشکل باید آن را به طور کامل بررسی کرد. نکته مهم این است که با اجرای دوباره‌ی تست ناموفق، نباید از ورودی جدیدی استفاده شود و همچنان باید این تست ناموفق تلقی شود تا بعدا، آن ورودی بررسی و مشکل حل شود.در مواجهه با تست‌های Flaky چه کنیم؟بدیهی‌ترین راه‌حل که به ذهن می‌رسد اجرای اتوماتیک دوباره‌ی تست است تا مطمئن شویم اجرای قبلی اتفاقی نبوده. گوگل نیز از همین روش استفاده کرده و هر تست که با اجرای ناموفق مواجه شود را تا ۳ بار دیگر اجرا می‌کند. این روش با درصد خطای کمی که دارد مورد قبول بوده و سطح اطمینان از نتایج تست‌ را بالا برده است.هر موردی را که به عنوان تست Flaky شناسایی شد، باید در جایی مناسب و مشترک بین توسعه دهنده‌ها مکتوب کنیم تا بقیه افراد نیز تا رفع مشکل، از آن آگاه باشند. این کار علاوه بر این که باعث می‌شود تا بقیه توسعه‌دهنده‌ها در صورت برخورد با این تست زمان کم‌تری مصرف کنند، باعث می‌شود حس اطمینان نسبت به نتایج اجرای بقیه تست‌ها باقی بماند. این فرایند می‌تواند دستی یا به صورت اتوماتیک باشد. بهتر است فردی به طور خاص این نتایج را تحلیل و به توسعه‌دهندگان مربوطه برای رفع مشکل تست اطلاع دهد.سخن پایانیبه طور کلی تست‌های Flaky موضوعی نیست که بتوان آن‌را یکبار برای همیشه حل نمود. این چالش برای شرکت‌های بزرگ تا کوچک به طور مستمر وجود دارد و سعی می‌شود تا با روش‌هایی، اثرات آن را به حداقل رساند.منابع برای مطالعهدر نوشتن این متن بعضی از منابع زیر کمک‌کننده بود. اگه دوست داشتید اطلاعات بیش‌تری کسب کنید، میتوانید به آن‌ها سری بزنید.Developer Productivity EngineeringFlaky Tests at Google and How We Mitigate ThemFlaky Tests - A War that Never EndsHow to Deal With and Eliminate Flaky TestsEradicating Non-Determinism in TestsQuarantine: Flaky Test Detector Toolمعضل تست‌های متزلزلشما هم اگه تجربه‌ای در مواجه با این تست‌ها دارید، خوشحال میشم راه‌حلتون رو به اشتراک بگذارید.</description>
                <category>حمیدرضا شریف زاده</category>
                <author>حمیدرضا شریف زاده</author>
                <pubDate>Wed, 05 May 2021 11:15:27 +0430</pubDate>
            </item>
                    <item>
                <title>همکاری موثر با تیم از‌ راه‌ دور</title>
                <link>https://virgool.io/@hamidrezash2000/%D9%87%D9%85%DA%A9%D8%A7%D8%B1%DB%8C-%D9%85%D9%88%D8%AB%D8%B1-%D8%A8%D8%A7-%D8%AA%DB%8C%D9%85-%D8%A7%D8%B2-%D8%B1%D8%A7%D9%87-%D8%AF%D9%88%D8%B1-k2ivn0g79h7e</link>
                <description>ارتباط از راه دور همیشه آسان نیست. آیا این مثال‌ها برای شما آشنا نیست؟ساعت ۱۰ شب یک وکیل از یک همکار پیامی دریافت می کند (نه برای اولین بار) و تعجب می‌کند که آیا آدابی در مورد ارسال متن‌های مربوط به کار بعد از یک ساعت خاص وجود دارد؟بعد از یک شام حسابی، یک مدیر تبلیغات ایمیلی از رئیس خود می‌بیند که به او یادآوری می‌کند هزینه‌های خود را به‌موقع ارسال کند. او که از این مديريت جزءنگر اذیت می‌شود، بلافاصله با افکار بی‌ملاحظه پاسخ می‌دهد.در کنفرانس مجازی هفتگی تیم، یک عضو تیم در مورد تاخیر همکارش در جواب دادن به یک سوال شک دارد که واقعا روی حالت بی‌صدا بوده یا بی محلی کردهوقتی می‌شود با یک دکمه، میکروفون را قطع کرد، به‌راحتی می‌توان گفت که ما در دوران چالش‌برانگیزی زندگی می‌کنیم. عصر دیجیتال انقلابی را در ارتباطات ایجاد کرده‌است که شبیه به زمان به‌وجود‌آمدن چاپخانه است. این مسئله نحوه صحبت ما و همچنین چیزی را که می‌شنویم تحت تأثیر قرار می‌دهد، زیرا اطلاعات درهمی که به دست ما می‌رسد می‌تواند منجر به سوء‌تفاهم‌ها و سردرگمی‌های مکرر شود.تیم‌هایی که دورکاری می‌کنند با این چالش‌ها به صورت مداوم روبرو هستند. براساس برآوردهای اخیر گالوپ و دفتر آمار کار، ۲۲ درصد از آمریکایی‌ها از خانه کار می‌کنند، در حالی که تقریبا ۵۰ درصد درگیر کار تیمی از راه‌ دور یا مجازی هستند. این تغییر مداوم، طیف جدیدی از رفتارها و مهارت‌ها را می‌طلبد.چرا همکاری در تیم‌های از راه‌ دور مهارت‌های جدیدی را می‌طلبد؟ چه چیزی از متن، ایمیل، تماس کنفرانسی و سایر ارتباطات دیجیتالی ما گم شده‌است؟ ما حتی وقتی کنار هم هستیم، لحن متن یا رسمیت ایمیل باعث تفسیرهای متفاوت می‌شود تا جایی که حتی نزدیک‌ترین دوستان ما دچار سردرگمی می‌شوند. این تفسیرهای نادرست باعث ایجاد تشویش ذهن می‌شود که می‌تواند پرهزینه شود و بر روحیه، تعامل، بهره‌وری و نوآوری تأثیر بگذارد.ارتباط از راه‌ دور می تواند سرعت عادی مکالمات ما را تغییر دهد. تأخیر بین پیام‌های ما اغلب می‌تواند واکنش‌های عاطفی به اظهارات ما را به تأخیر بیندازد یا پنهان کند. چند بار ایمیل نوشتید و بلافاصله پس از زدن دکمه ارسال، احساس نگرانی در مورد چگونگی فهم مخاطب از آن را داشتید؟ آیا رئیس شما می تواند ایمیل اواخر شب خود را ببینید و آن را یک مزاحمت برای زمان خصوصی خود تلقی کند؟ آیا او به شما می گفت اگر این چنین بود؟ در حالی که ممکن است ما به این نوع تعامل‌های ناهمزمان عادت کرده باشیم، آن‌ها هنوز هم می‌توانند با قوانین عادی ما برای تعامل اجتماعی مغایرت داشته‌باشند. در صورت عدم پاسخ فوری، می‌توانیم پریشان شویم، اعتماد به نفس خود را از دست دهیم و یا حتی از تیم‌هایمان ناامید شویم.برای انجام کار در بالاترین سطح، تیم‌های از راه‌ دور باید روش‌های جدید و بهتری برای کار پیدا کنند.ابتدا در نظر بگیرید که در همکاری از راه‌ دور سه نوع فاصله وجود دارد: فیزیکی (مکان و زمان)، عملیاتی (اندازه تیم، پهنای باند و سطح مهارت) و همبستگی (ارزش‌ها ، اعتماد و اتکاء متقابل). بهترین روش برای مدیران جهت هدایت عملکرد تیم، تمرکز بر افزایش همبستگی است. بیشترین ارتباط از راه دور را به تماس‌های ویدیویی معمولی تغییر دهید، که وسیله بسیار بهتری برای ارائه گزارش و ایجاد همدلی نسبت به ایمیل یا تماس صوتی است. و ایجاد آئین‌های تعامل مجازی تیم که به افراد فرصت می‌دهد به طور منظم در تعامل باشند و مهارت‌های تعاملی خود را در عمل تجربه کنند.هنگامی که تیم‌های از راه دور به خوبی ارتباط برقرار می‌کنند و از نقاط قوت خود بهره می‌گیرند، در واقع می‌توانند برتری نسبت به سایر تیم‌ها به‌دست آورند. در ادامه نکات مهم ارتباط از راه دور آمده‌است:ارتباطات کوتاه و ارتباطات واضح را با هم اشتباه نگیرید: در تلاش ما برای کارآمد بودن، بعضی اوقات از کلمات کمتری برای ارتباط استفاده می‌کنیم. اما چنین کمبودی می‌تواند به معنای این باشد که بقیه تیم وقت بیش‌تری برای تفسیر پیام‌های شما تلف می‌کنند و به هر حال ممکن است آنها را به اشتباه تفسیر کنند. فرض نکنید که دیگران علائم و اصطلاحات شخصی شما را می‌دانند. از وقت خود برای برقراری ارتباط کاملا واضح استفاده کنید. در واقع، شما هرگز نمی توانید کاملا واضح باشید، اما بسیار آسان است که کمتر از آنچه که باید، واضح باشید.تیم خود را با پیام‌ها بمباران نکنید: آیا از طریق ایمیل، متن و تلفن کار خود را پیگیری می کنید؟ آیا می‌خواهید از افراد سوال کنید که آیا پیام قبلی شما را دریافت کرده اند؟ سوءاستفاده از راه‌های ارتباطی می تواند نوعی تسلط دیجیتالی، آزار و اذیت بی‌امان و ناراحت‌کننده باشد. راه ارتباطی که انتخاب می‌کنید، زمان پاسخ متفاوتی را طلب می‌کند. استفاده از همه آن‌ها برای ارسال یک پیام مشابه بی‌اثر و همچنین آزار دهنده است. راه ارتباطی خود را عاقلانه انتخاب کنید.ایجاد هنجارهای ارتباطی: تیم های از راه دور باید هنجارهای جدیدی ایجاد کنند که وضوح در برقراری ارتباط ایجاد کند. شرکت هایی مانند Merck برای ارتباطات دیجیتالی خود، کلمات اختصاری مانند &quot;چهار ساعت پاسخ (4HR)&quot; و &quot;بدون نیاز به پاسخ (NNTR)&quot; ایجاد کرده‌اند که قابل پیش‌بینی و اطمینان در مکالمات مجازی است. تیم‌های فردی همچنین می توانند هنجارهای خاص خود را ایجاد کنند. به عنوان مثال، از نرم‌افزارهای Slack یا Google Docs یا Whatsapp استفاده کنند. همچنین هنجارها می توانند در سطح فردی وجود داشته باشند. مانند زمان پاسخ ترجیحی افراد، سبک نوشتن و لحن. به عنوان مثال، برخی از افراد پیام‌های کوتاه و سریع را ترجیح می دهند، در حالی که برخی دیگر پاسخ‌های طولانی و مفصل را ترجیح می‌دهند. همچنین آدم‌ها تحملشان نسبت به شوخ طبعی و غیررسمی بودن متفاوت است.در حالی که ما اغلب پیش‌بینی‌پذیر بودن انسان را به عنوان یک نقص در نظر می گیریم، چند ویژگی در کار بیشتر مورد توجه است، به ویژه در همکاری‌های مجازی. همه ما منحصر‌به‌فرد هستیم، اما رفتارهای مداوم ما به دیگران كمك می كند تا آنچه ما انجام می دهیم را پیش‌بینی كنند و به نوبه خود به آنها كمک می‌كند تا ما را بفهمند و همه ما از فهمیده‌شدن سود می بریم. با ایجاد یک آداب و رسوم شخصی شفاف و چسبیدن به آن به طور مداوم، می توانید این کار را برای دیگران راحت‌تر کنید.فرصت‌های پنهان در ارتباطات نوشتاری را دریابید: قرارگرفتن در پشت پرده می تواند فرصت‌های جدیدی را برای اعضای خاص تیم ایجاد کند، و این فضا را برای کسانی که ممکن است تمایل کمتری به صحبت در گروه‌ها داشته باشند ایجاد کند. ارتباطات متنی اهمیت کمتری را به مهارت‌های بین‌فردی و ظاهر فیزیکی می‌دهد و روشی موثر برای به‌اشتراک‌گذاشتن قدرت و تصمیم‌گیری ارائه می‌کند. تحقیقات نشان می دهد که افراد درونگرا در تعامل آنلاین و در مقابل تعامل‌های آفلاین کمتر مهار می‌شوند. با این حال، شما باید مراقب تعصب ناخودآگاه مجازی باشید، جایی که نگارش، گرامر و انتخاب کلمه ممکن است نگرش مغرضانه‌ای را نسبت به گروه‌های خاص نشان دهد.عدم وجود زبان بدن به این معنا نیست که ما در ارتباط از راه دور چیزی بیشتر از آنچه که قصد داریم را منتقل نمی‌کنیم. هنوز هم فرا ارتباط و نشت زیادی وجود دارد که در محیط‌های دیجیتال اتفاق می‌افتد و این فقط بستگی دارد که ما بخواهیم برداشتی از متن داشته باشیم که مستقیما گفته نشده است. به عنوان مثال، استفاده از علامت تعجب یا یک ایموجی منفی پس از اشاره به جنسیت، ملیت یا مذهب شخصی، به همان اندازه یک چهره منزجرکننده در واقعیت، نشانگر عدم پذیرش باشد.ایجاد فضای عمدی برای جشن: کیک های تولد مدرسه هنوز برای تیم های از راه دور مهم هستند. ایجاد فضاها و آئین‌های مجازی برای جشن‌ها و معاشرت می تواند روابط را تقویت کرده و زمینه‌ساز همکاری‌های آینده شود. روش‌هایی برای افزایش همبستگی پیدا کنید. یک شرکت که ما با آن‌ها کار می‌کردیم، برای کارکنانی که ۶ ماه در آن‌‌جا بودند، ایموجی شخصی درست می‌کرد. شما می‌توانید روش منحصر‌به‌فرد خود را در ایجاد فضاهای تیمی برای ارتباطات اجتماعی پیدا کنید. چگونگی انجام این کار اینقدر اهمیت ندارد و خود انجام کار مهم‌تر است.هرچه بیش تر و بیش تر تعامل های ما دیجیتالی اتفاق می افتد، ما مدل‌های جدیدی از سوء‌ارتباط و سوء‌تفاهم را تجربه خواهیم‌ کرد. راه‌حل آن از به‌کارگیری فناوری‌های جدید حاصل نمی‌شود (هرچند توسعه دهندگان تلاش خواهند کرد تا این شکاف را کم کنند). در عوض، راه‌حل آن، درک قوانین جدید در ساخت یک مجموعه مهارت‌های ارتباطی است که منعکس‌کننده خواسته‌های عصر دیجیتال ما باشد.و باتشکر از علی نصرتی جهت تصحیح متن ترجمه شده.How To Collaborate Effectively If Your Team Is Remote (by Erica Dhawan and Tomas Chamorro-Premuzic)</description>
                <category>حمیدرضا شریف زاده</category>
                <author>حمیدرضا شریف زاده</author>
                <pubDate>Thu, 09 Apr 2020 08:59:45 +0430</pubDate>
            </item>
            </channel>
</rss>