)ﻣﻨﮭﺠﯿﺎت ﺗﻄﻮﯾﺮ اﻟﺒﺮﻣﺠﯿﺎت ( ھﻧﺎك طرق ﻣﺧﺗﻠﻔﺔ ﻟﺗطوﯾر ﻧظﺎم ﺑرﻣﺟﻲ .ﺑﺎﻟﺗﺄﻛﯾد ،ﯾﻣﻛﻧك ﻓﻘط اﺟﻠس واﺑدأ ﻓﻲ ﻛﺗﺎﺑﺔ ﺷﻔرة اﻟﻣﺻدر .ھذا ﯾﻌﻣل ﺣﺗﻰ ﻻ ﯾﻌﻣل. ﻷي ﺷﻲء أﻛﺛر ﺗﻌﻘﯾدا ﻣن ﺗطﺑﯾق ،Hello Worldﺳﺗﺣﺗﺎج إﻟﻰ طرﯾﻘﺔ ﻟﺗﻧظﯾم ﻋﻣﻠك .وإذا ﻛﻧت ﻻ ﺗﻌﻣل ﺑﻣﻔردك ،ﻓﺈن ﻋدم وﺟود ﺳﺗؤدي اﻟﻌﻣﻠﯾﺔ اﻟﻣﺣددة ﺟﯾدا )ﺑﺷﻛل ﻣﻌﻘول( إﻟﻰ اﻟﻔوﺿﻰ. ﻧظرا ﻟﺗﻌﻘﯾد اﻟﻣﺷروع وﻋدد اﻷﺷﺧﺎص اﻟﻣﻌﻧﯾﯾن ﺗزداد ،وﺗﺻﺑﺢ اﻟﺣﺎﺟﺔ إﻟﻰ ﻋﻣﻠﯾﺔ اﻟﺗﻧﻣﯾﺔ أﻛﺛر ﻓﺄﻛﺛر ﺳﺎﺋد)ﻣﻧﺷر(. ﺗم اﺧﺗراع أﺳﺎﻟﯾب ﻣﺧﺗﻠﻔﺔ .ﺳﻧﺗﺣدث ﻋن اﺛﻧﯾن ﻣن ﻣﻧﮭﺟﯾﺎت اﻟﺗﻧﻣﯾﺔ اﻷﻛﺛر ﺷﻌﺑﯾﺔ ،وھﻲ: ﻧﻣوذج اﻟﺷﻼل ،اﻟذي ﯾﺗطﻠب ﻣﻧك أن ﯾﻛون ﻟدﯾك ﺧطﺔ ﻣﻔﺻﻠﺔ ﻗﺑل اﺑدأ أي ﺗرﻣﯾز .ﯾﺟب إﺻﻼح اﻟﻣﺗطﻠﺑﺎت ،ﻟذﻟك ﻻ ﺗوﺟد ﺗﻐﯾﯾرات ﻣن اﻟﻣﺗوﻗﻊ أﺛﻧﺎء اﻟﺗطوﯾر. ﻧﮭﺞ Agileاﻟﺻدﯾق ﻟﻠﺗﻐﯾﯾر واﻟﻣﺗﺟﺎوب ،واﻟذي ﯾﻌﻣل ﺑﺷﻛل راﺋﻊ ﻣن أﺟل اﻟﻣﺷﺎرﯾﻊ اﻟﺗﻲ ﯾﻣﻛن أن ﺗﺗﻐﯾر ﻓﯾﮭﺎ اﻟﺗوﻗﻌﺎت ﺑﺳرﻋﺔ وﺑﺷﻛل ﻣﺗﻛرر. ﻗﺑل أن ﻧﺗﻌﻣق ﻓﻲ ھذه اﻟﻣﻧﮭﺟﯾﺎت ،ﯾﺟب أن أﺧﺑرك ﺑﺷﻲء واﺣد: وأﺳس اﻟﺗﺻﻣﯾم اﻟﻣوﺟﮭﺔ ﻟﻠﻛﺎﺋﻧﺎت UML ﻻ ﯾﻣﻛن ﻷي ﻣن ھذه اﻷﻧظﻣﺔ أن ﯾﺻف ﺑدﻗﺔ ﻛل ﺧطوة ﻣن ﺧطوات اﻟﺑرﻧﺎﻣﺞ ﻋﻣﻠﯾﺔ اﻟﺗطوﯾر. ﻟﻛﻧﻧﺎ ﻧﺣﺗﺎﺟﮭم ﺑﺎﻟﺗﺄﻛﯾد ﻟﻣزاﻣﻧﺔ وﺗﻧظﯾم اﻷﻧﺷطﺔ اﻟﻣﺗﻌﻠﻘﺔ ﺑﺎﻟﺗﻧﻣﯾﺔ؛ اﻷﻧﺷطﺔ اﻟﺗﻲ ﻻ ﺗﺷﻣل اﻟﺗرﻣﯾز ﻓﺣﺳب، ﺑل ﺗﺷﻣل أﯾﺿﺎ اﻟﺗﺻﻣﯾم وإدارة اﻟﻣﻧﺗﺟﺎت واﻟﻣﯾزﻧﺔ واﻻﺧﺗﺑﺎر واﻟﺗوﺛﯾق ،اﻹﻓراج واﻟﺻﯾﺎﻧﺔ. )ﻧﻤﻮذج اﻟﺸﻼل( اﻟﺷﻼل ھو ﻧﻣوذج ﺧطﻲ .إﻧﮫ ﯾﺣدد ﺧطوات أو ﻣراﺣل اﻟﺗطوﯾر .ﺗﺑدأ ﻓﻲ ﺗﻧﻔﯾذ ﺧطوة واﺣدة ،وأﻛﻣﻠﮭﺎ ﺛم ﺗﺑدأ اﻟﺧطوة اﻟﺗﺎﻟﯾﺔ. ﯾﻣﻧﺣﻧﺎ ھذا اﻟﻧﮭﺞ ﻧظﺎﻣﺎ ﺛﺎﺑﺗﺎ وﻧزوﻟﯾﺎ ً .وﻣن ھﻧﺎ ﺟﺎء اﻻﺳم ﺷﻼل. ﺗﺗدﻓق ﻋﻣﻠﯾﺔ اﻟﺗﻧﻣﯾﺔ ﻓﻲ اﻟﺷﻼﻻت .ﻛل ﻣرﺣﻠﺔ ﻣن ﻣراﺣل اﻟﺗطوﯾر ﯾﺗطﻠب إﻛﻣﺎل اﻟﺳﺎﺑق .دﻋﻧﺎ ﻧﺗﺣدث ﻗﻠﯾﻼ ﻋن ھؤﻻء اﻟﻣراﺣل. أوﻻ ،ﻧﻘوم ﺑﺟﻣﻊ وﺗﺣﻠﯾل اﻟﻣﺗطﻠﺑﺎت .اﻟﻣﺗوﻗﻊ ﻣن ذﻟك ﯾﺟب ﺗوﺿﯾﺢ وظﺎﺋف اﻟﺗطﺑﯾق اﻟﻣﺳﺗﻘﺑﻠﻲ ﺑﺎﺳﺗﺧدام أﺻﺣﺎب اﻟﻣﺻﻠﺣﺔ .ﯾﺟب ﺗوﺛﯾق ﺟﻣﯾﻊ اﻟﺗﻔﺎﺻﯾل ﺑدﻗﺔ .ھذا ﺟدا رﺑﻣﺎ ﺗﻛون اﻟﻣرﺣﻠﺔ اﻷوﻟﻰ ھﻲ اﻷﻛﺛر أھﻣﯾﺔ .ﻋﻧدﻣﺎ ﯾﺗم ذﻟك ﺑﺷﻛل ﺻﺣﯾﺢ ،ﺳﯾؤدي ﻧﻣوذج اﻟﺷﻼل إﻟﻰ اﻟﻧﺗﯾﺟﺔ اﻟﻣﺗوﻗﻌﺔ. ﺑﻌد ﺟﻣﻊ وﺗﺣﻠﯾل اﻟﻣﺗطﻠﺑﺎت ،ﯾﻣﻛﻧﻧﺎ اﻟﻣﺗﺎﺑﻌﺔ إﻟﻰ اﻟﻣرﺣﻠﺔ اﻟﺗﺎﻟﯾﺔ .إﻟﯾك اﻟﻣﻛﺎن اﻟذي ﻧﺣدد ﻓﯾﮫ اﻟﺗﺻﻣﯾم اﻟﻌﺎم ﻟﺑرﻧﺎﻣﺟﻧﺎ .ﯾﺷﺑﮫ ﺗﻌرﯾف اﻟﮭﻧدﺳﺔ اﻟﻣﻌﻣﺎرﯾﺔ إﻧﺷﺎء ﻣﺧطط ﻟﻠﻣﺑﻧﻰ .وﺑﺎﻟﺗﺎﻟﻲ ،ﯾﺟب أن ﯾﻛون اﻟﺗﺻﻣﯾم واﺿﺣﺎ وﻣﻔﺻﻼ ﻗدر اﻹﻣﻛﺎن .اﻟﺧﻼﺻﺔ اﻟﻘول ھﻲ :ﯾﺟب أن ﯾﻛون اﻟﻔرﯾق ﻗﺎدرا ﻋﻠﻰ ﺗﻧﻔﯾذ اﻟﻣﻧﺗﺞ ﺑﻧﺎء ﻋﻠﻰ ھذه اﻟﺧطﺔ .ﯾﺟب أن ﻧﺗﻧﺎول أﺳﺋﻠﺔ ﻣﺛل: ﻣﺎھﻲ اﻟﺤﺰم او اﻟﻤﻜﻮﻧﺎت اﻟﺘﻲ ﺳﺘﺸﻜﻞ ﻧﻈﺎﻣﻨﺎ؟ ﻣﺎھﻲ اﻷﻧﻮاع اﻷﺳﺎﺳﯿﺔ ﻟﻜﻞ ﻣﻜﻮن؟ ﻛﯿﻒ ﺗﺘﻔﺎﻋﻞ ھﺬه اﻷﻧﻮاع ﻣﻊ ﺑﻌﻀﮭﺎ اﻟﺒﻌﺾ ﻟﺘﺤﻘﯿﻖ اﻟﻮظﺎﺋﻒ اﻟﻤﻄﻠﻮﺑﺔ ؟ ھﻞ ﺑﺮﻧﺎﻣﺠﻨﺎ أﻣﻦ؟ ﻣﺎذا ﻋﻦ اﻷداء؟ ﻛﯿﻒ ﯾﺴﺘﺠﯿﺐ ﺑﺮﻧﺎﻣﺠﻨﺎ ﻟﻸﺧﻄﺎء؟ ﻛﯿﻒ ﻧﻌﺎﻣﻞ ﺣﺎﻻت اﻟﺤﺎﻓﺔ ؟ ھﻞ ﯾﺠﺐ ان ﻧﻮﺳﻊ ﻧﻈﺎﻣﻨﺎ ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ؟ ﻣﺎھﻲ ﺗﻮاطﺆات اﻟﻄﺮف اﻟﺜﺎﻟﺚ اﻟﺘﻲ ﻧﺴﺘﺨﺪﻣﮭﺎ؟ • • • • • • • UML اﻟﻤﻮﺟﮭﺔ ﻟﻠﻜﺎﺋﻨﺎت وأﺳﺲ اﻟﺘﺼﻤﯿﻢ ﯾﻣﻛن أن ﺗﻧﻣو اﻟﻘﺎﺋﻣﺔ أو ﺗﺗﻘﻠص اﻋﺗﻣﺎدا ﻋﻠﻰ اﻟﻣﺗطﻠﺑﺎت اﻟﺗﻲ ﺣددﻧﺎھﺎ ﻓﻲ اﻟﻣرﺣﻠﺔ اﻟﺳﺎﺑﻘﺔ. اﻟﺗﻧﻔﯾذ ﯾﺄﺗﻲ ﺑﻌد ذﻟك .ﻣرﺣﻠﺔ ﺗطوﯾر اﻟﺑرﻣﺟﯾﺎت ھﻲ ﻋﺎدة ﻣﺎ ﺗﻧﻘﺳم إﻟﻰ وﺣدات أﺻﻐر .ﺛم ﯾﺗم ﺗﻧﻔﯾذ ﻛل وﺣدة واﺧﺗﺑﺎرھﺎ ﻣن ﻗﺑل اﻟﻣطورﯾن. ﺑﻣﺟرد اﻻﻧﺗﮭﺎء ﻣن ﻣرﺣﻠﺔ اﻟﺗطوﯾر ،ﯾﺧﺿﻊ اﻟﻣﻧﺗﺞ ﻟﻣرﺣﻠﺔ اﻟﺗﺣﻘق .ﺧﻼل ھذه اﻟﺧطوة ،ﯾﺗم ﺗﻘﯾﯾم اﻟﺑرﻧﺎﻣﺞ ﺑﻧﺎء ﻋﻠﻰ ﻣﻌﺎﯾﯾر ﻣﺣددة ﻣﺳﺑﻘﺎ .ﯾﺟب أن ﻧﺗﺣﻘق ﻣﻣﺎ إذا ﻛﺎن اﻟﻣﻧﺗﺞ ﯾوﻓر اﻟوظﺎﺋف اﻟﺗﻲ اﺗﻔﻘﻧﺎ ﻋﻠﯾﮭﺎ. ﯾﺗم إﺟراء اﻻﺧﺗﺑﺎرات ﻟﻠﺗﺄﻛد ﻣن أن اﻟﺑرﻧﺎﻣﺞ ﯾﻌﻣل ﻛﻣﺎ ھو ﻣﺗوﻗﻊ .ﻧﺣن ﻧﺧﺗﺑر ﻟﻠﻣﺷﻛﻼت اﻟوظﯾﻔﯾﺔ واﻷداء واﻷﻣﺎن وﺳﮭوﻟﺔ اﻻﺳﺗﺧدام .ﺗم اﻛﺗﺷﺎﻓﮫ ﯾﺗم ﺗﺳﺟﯾل اﻟﻣﺷﺎﻛل وإﺻﻼﺣﮭﺎ .ﺗﺳﺗﻣر اﻟﻌﻣﻠﯾﺔ ﺣﺗﻰ ﻛل اﻷﺧطﺎء اﻟﺷدﯾدة ﺗم إﺻﻼﺣﮭﺎ. ﻗد ﺗؤدي ﻣرﺣﻠﺔ اﻟﺗﺣﻘق أﯾﺿﺎ إﻟﻰ ظﮭور أﺧطﺎء أﻋﻣق وﺣرﺟﺔ اﻟﻘﺿﺎﯾﺎ اﻟﺗﻲ ﻗد ﺗؤﺛر ﻋﻠﻰ اﻹﻓراج اﻟﻣﺧطط ﻟﮫ. ﺑﻣﺟرد اﻛﺗﻣﺎل ﻣرﺣﻠﺔ اﻻﺧﺗﺑﺎر وﺗﺳﻠﯾم اﻹﺻدار اﻟﻣﺣدد ،ﯾدﺧل اﻟﺑرﻧﺎﻣﺞ ﻣرﺣﻠﺔ اﻟﺻﯾﺎﻧﺔ .ﺑﺣﻛم اﻟﺗﻌرﯾف ،ﺗﺗﻌﻠق ﻣرﺣﻠﺔ اﻟﺻﯾﺎﻧﺔ ﺑﺈﺻﻼح اﻷﺧطﺎء اﻟﺻﻐﯾرة .ﻟﻛن ﻓﻲ أﻛﺛر اﻷﺣﯾﺎن ،إﻧﮫ ﻗد ﺗﺷﻣل أﯾﺿﺎ ﺗﺣﺳﯾﻧﺎت وظﯾﻔﯾﺔ. ﻗد ﯾﺄﺗﻲ اﻟﻌﻣﯾل ﺑﻣﺗطﻠﺑﺎت ﺟدﯾدة ﺗﻧطوي ﻋﻠﻰ ﻣﺗطﻠﺑﺎت ﻛﺑﯾرة اﻟﺗﻐﯾﯾرات .ﻗد ﺗﺷﻌر ﺑﺎﻹﻏراء ﻟﻠﺿﻐط ﻓﻲ "رﻗﻌﺔ واﺣدة أﺧرى ﻓﻘط" ﻓﻲ ﻣرﺣﻠﺔ اﻟﺻﯾﺎﻧﺔ .ﻋﺎدة ﻣﺎ ﺗﻛون ھذه ﻓﻛرة ﺳﯾﺋﺔ .ﻓﻲ ھذه اﻟﺣﺎﻟﺔ ،ﻧﺣﺗﺎج إﻟﻰ وﺿﻊ ﻗم ﺑﻣﺷروع ﺷﻼل ﺟدﯾد وﻛرر ﻛل اﻟﺧطوات. ﯾوﺿﺢ اﻟﺷﻛل اﻟﺗﺎﻟﻲ ﻣراﺣل ﻧﻣوذج اﻟﺷﻼل: ﯾﺳﺗﺧدم ﻧﻣوذج اﻟﺷﻼل ﻟﻠﺳﯾطرة ﻋﻠﻰ اﻟﺣﯾﺎة واﻷﻧظﻣﺔ اﻟطﺑﯾﺔ واﻟﻌﺳﻛرﯾﺔ .ﯾﺗطﻠب ﻣﻧﺎ ھذا اﻟﻧﻣوذج ﺗوﺿﯾﺢ ﺟﻣﯾﻊ اﻟﻣﺗطﻠﺑﺎت وإﻧﺷﺎء ﻣﻔﺻل ﺧطط ﻣﻘدﻣﺎ. اﻟﺷﻼل ھو اﻟﺧﯾﺎر اﻷﻣﺛل إذا ﺗم ﺗﺣدﯾد ﺟﻣﯾﻊ اﻟﻣﺗطﻠﺑﺎت ﺑدﻗﺔ وﻟن ﯾﺗﻐﯾر ﺑﻣرور اﻟوﻗت .ﺗﻠﻘﻰ اﻟﺷﻼل ﺑﻌض اﻻﻧﺗﻘﺎدات ﺑﺳﺑب ﻋدم ﻗدرﺗﮭﺎ ﻋﻠﻰ اﻻﺳﺗﺟﺎﺑﺔ ﻟﻠﺗﻐﯾرات .ﻧظرا ﻟﮭﯾﻛﻠﮫ اﻟﺧطﻲ ،اﻟﺟدﯾد ﻻ ﯾﻣﻛن اﻟﻧظر ﻓﻲ اﻟﻣﺗطﻠﺑﺎت ﻓﻲ اﻟﻣراﺣل اﻟﻼﺣﻘﺔ ﻣن اﻟﺗطوﯾر ﻋﻣﻠﯾﺔ. إذا ﻏﯾر اﻟﻌﻣﯾل رأﯾﮫ ﺑﺷﻛل ﻣﺗﻛرر ،أو ﻓﻘد ﺗﺻﻣﯾﻣﻧﺎ ﺿرورﯾﺎ اﻟﺟواﻧب ،ﺳﻧواﺟﮫ ﻣﺷﺎﻛل أﺛﻧﺎء اﻟﺗطوﯾر أو اﻻﺧﺗﺑﺎر .ﻓﻲ ﻣﺛل ھذا ﻓﻲ اﻟﺣﺎﻻت ،ﯾﺟب أن ﻧﺗﺑﻊ ﻧﮭﺟﺎ ﻣﺧﺗﻠﻔﺎ. Agileھو ﻧﮭﺞ ﺟدﯾد ﻧﺳﺑﯾﺎ ﻹدارة ﻣﺷﺎرﯾﻊ اﻟﺑرﻣﺟﯾﺎت .ﻛل ﺷﻲء ﺑدأت ﺑﺎﻟﺑﯾﺎن اﻟرﺷﯾق ﻓﻲ ﻋﺎم .2001ﻛﺎن ھذا اﻟﺑﯾﺎن ﻣﺣﺎوﻟﺔ لإﻧﮭﺎء اﻧﺗﺷﺎر اﻟﻣﻧﮭﺟﯾﺎت اﻟﺗﻲ ﺗطورت ﯾﺤﺪد اﻟﺒﯿﺎن اﻟﺮﺷﯿﻖ أرﺑﻊ ﻗﯿﻢ: اﻷﻓراد واﻟﺗﻔﺎﻋﻼت ﺣول اﻟﻌﻣﻠﯾﺎت واﻷدوات • ھذا ﻻ ﯾﻌﻧﻲ أﻧﻧﺎ ﻟن ﻧﺳﺗﺧدم اﻟﻌﻣﻠﯾﺎت واﻷدوات ﺑطرﯾﻘﺔ رﺷﯾﻘﺔ ﻣﺷﺎرﯾﻊ .ﻣﺎ زﻟﻧﺎ ﺑﺣﺎﺟﺔ إﻟﻰ أدوات وﻋﻣﻠﯾﺎت ،وﻟﻛن ﻻ ﯾﻧﺑﻐﻲ ﻟﮭم ذﻟك ﯾﻣﻧﻌﻧﺎ ﻣن ﺗﻧﻔﯾذ اﻟﻣﯾزات أو اﻟﺗﻐﯾﯾرات اﻟﻣطﻠوﺑﺔ .ﺑدﻻ ﻣن إﺟﺑﺎر اﻟﻧﺎس ﻋﻠﻰ اﺗﺑﺎع ﻋﻣﻠﯾﺔ ﺟﺎﻣدة ،ﻧﺣن ﺗﻧﻔﯾذ ﻋﻣﻠﯾﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺗﻛﯾف وﺗﺳﺗﺟﯾب ﻟﻠﺗﻐﯾﯾرات • ﺑرﻧﺎﻣﺞ اﻟﻌﻣل ﻋﻠﻰ اﻟوﺛﺎﺋق اﻟﺷﺎﻣﻠﺔ ھذا ﻻ ﯾﻌﻧﻲ أن اﻟﻣﺷﺎرﯾﻊ اﻟرﺷﯾﻘﺔ ﻻ ﺗﺳﺗﺧدم اﻟوﺛﺎﺋق ﻓﻲ ﻛل ﺷﻲء .ﯾﺟب أن ﻧﻧﺷﺊ وﺛﺎﺋق ﺣﯾث ﺗوﻓر ﻗﯾﻣﺔ .ﻟﯾﺳت ھﻧﺎك ﺣﺎﺟﺔ ﻹﻧﺷﺎء وﺛﺎﺋق ﺷﺎﻣﻠﺔ ﻓﻘط ﻣن أﺟل ﻣن أﺟل ذﻟك. • ﺗﻌﺎون اﻟﻌﻣﻼء ﺑﺷﺄن اﻟﺗﻔﺎوض ﻋﻠﻰ اﻟﻌﻘود ﻻ ﺗﻔﮭم ھذا اﻟﺧطﺄ أﯾﺿﺎ .ﺗﺗطﻠب اﻟﻣﺷﺎرﯾﻊ اﻟرﺷﯾﻘﺔ أﯾﺿﺎ ﻋﻘودا ﻹدارة ﺗوﻗﻌﺎت اﻟﻌﻣﻼء ﺑﺷﺄن اﻟﺗﻛﺎﻟﯾف واﻟﺟداول اﻟزﻣﻧﯾﺔ. وﻣﻊ ذﻟك ،ﻋﻠﻰ ﻋﻛس اﻟﻣﺷﺎرﯾﻊ اﻟﻘﺎﺋﻣﺔ ﻋﻠﻰ اﻟﺧطﺔ ،ھﻧﺎك روح اﻟﺷراﻛﺔ ﺑﯾن ﻓرﯾق اﻟﺗطوﯾر واﻟﻌﻣﯾل .ﺑﺳﺑب اﻟطﺑﯾﻌﺔ ﻏﯾر ﻣؤﻛدة إﻟﻰ ﺣد ﻣﺎ ﻟﻠﻣﺷﺎرﯾﻊ اﻟرﺷﯾﻘﺔ ،ﻛﻼ اﻟطرﻓﯾن أﻗر ﺑﺄن ﺑﻌض اﻟﻣﺗطﻠﺑﺎت واﻟﺗﻔﺎﺻﯾل ﻗد ﺗﺣﺗﺎج إﻟﻰ إﻋﺎدة ﺗﻌرﯾﻔﮭﺎ أو ﺗوﺿﯾﺣﮭﺎ ﺑﺷﻛل أﻛﺑر ﻣﻊ ﺗﻘدم اﻟﻣﺷروع .ﺗﻘﻧﯾﺔ اﻟﻣﻌﻠوﻣﺎت وﻏﻧﻲ ﻋن اﻟﻘول أن ھذا اﻟﻧوع ﻣن اﻟﺷراﻛﺔ ﯾﺗطﻠب اﻟﺗﻌﺎون واﻟﺛﻘﺔ. اﻻﺳﺗﺟﺎﺑﺔ ﻟﻠﺗﻐﯾﯾر ﻋﻠﻰ اﺗﺑﺎع ﺧطﺔ ﺗﺧﺗﻠف Agileﻋن اﻟﻧﮭﺞ اﻟﻘﺎﺋﻣﺔ ﻋﻠﻰ اﻟﺧطﺔ وﺗوﻓر اﻟﻣزﯾد اﻟﻣروﻧﺔ ﻣﻘﺎرﻧﺔ ﺑﻧﻣوذج اﻟﺷﻼل .اﻟﻔرق اﻟرﺋﯾﺳﻲ ھل ﺗرﺣب اﻟرﺷﯾﻘﺔ ﺑﺎﻟﺗﻐﯾﯾرات ﺣﺗﻰ ﻓﻲ اﻟﻣراﺣل اﻟﻼﺣﻘﺔ ﻣن دورة اﻟﺗﻧﻣﯾﺔ .ﺑﻌض اﻟﺗﺧطﯾط ﻣطﻠوب أﯾﺿﺎ ﻟﻠرﺷﯾﻘﺔ • اﻟﻣﺷروع ﺑﺄﻛﻣﻠﮫ ﻗﺑل اﻟﺑدء ﻓﻲ أي أﻧﺷطﺔ ﺗﻧﻣوﯾﺔ .ﻧﺗﯾﺟﺔ ﻟذﻟك ،ﻟن ﯾﺗم ﺣظرﻧﺎ ﺣﺗﻰ ﺟﻣﯾﻊ اﻟﻣﺗطﻠﺑﺎت ﯾﺗم ﺗوﺿﯾﺣﮭﺎ وﯾﺗم اﻹﺟﺎﺑﺔ ﻋﻠﻰ ﻛل ﺳؤال. اﻵن دﻋوﻧﺎ ﻧﺗﺣدث ﻋن ﻛﯾﻔﯾﺔ ﺣل ﻧﮭﺞ رﺷﯾق ﻟﻠﻣﺷﻛﻠﺔ اﻟﺗﻲ رأﯾﻧﺎھﺎ ﻣﻊ اﻟﺷﻼل اﻟﻔﻛرة اﻟرﺋﯾﺳﯾﺔ وراء Agileھﻲ أﻧﮫ ﯾﻣﻛﻧﻧﺎ ﺗوﻓﯾر ﺑراﻣﺞ وظﯾﻔﯾﺔ ﺑﺷﻛل ﻣﺗﻛرر ﺑدﻻ ﻣن ﺗﺳﻠﯾم اﻟﻣﺷروع ﺑﺄﻛﻣﻠﮫ دﻓﻌﺔ واﺣدة. اﻟﻌﻣل ﯾﺗم ﺗﻘﺳﯾﻣﮭﺎ إﻟﻰ ﻗطﻊ أﻗﺻر ﺗﺳﻣﻰ ﺳﺑﺎﻗﺎت اﻟﺳرﻋﺔ. ﻋﺎدة ﻣﺎ ﯾﻛون طول ﺳﺑرﯾﻧت ﻣن أﺳﺑوﻋﯾن إﻟﻰ أرﺑﻌﺔ أﺳﺎﺑﯾﻊ .ﻓﻲ ﻧﮭﺎﯾﺔ ﻛل ﺳﺑﺎق ،ﯾﺟب ﻋﻠﻰ اﻟﻔرﯾق ﺗﻘدﯾم ﻧﺳﺧﺔ ﺗﺣﺳﻧت ﻋن اﻟﻧﺳﺧﺔ اﻟﺳﺎﺑﻘﺔ ﻧﺗﯾﺟﺔ اﻟﻌدو. ﯾوﻓر ھذا اﻟﻧﮭﺞ اﻟﺗﻔﺎﻋﻠﻲ ﻓرﺻﺔ ﻟﻠﻣراﺟﻌﺔ ﺑﺷﻛل ﻣﺗﻛرراﻟﻣﻧﺗﺞ اﻟذي ﯾﺗم ﺗطوﯾره .ﻟدى أﺻﺣﺎب اﻟﻣﺻﻠﺣﺔ ﻓرﺻﺔ ﻟﺗﻘﯾﯾم اﻟﺑرﻧﺎﻣﺞ وﺗﻘدﯾم ﻣﻼﺣظﺎﺗﮭم ﻓﻲ وﻗت ﻣﺑﻛر ﺑدﻻ ﻣن ﻓﻲ اﻧﺗظﺎر ﺗﺳﻠﯾم اﻟﻣﻧﺗﺞ اﻟﻧﮭﺎﺋﻲ .ﻧﻘﺎط اﻟﺗﻔﺗﯾش اﻟﻣﺗﻛررة ھذه إﻧﮭﺎ ﻣﻔﯾدة ﻟﻠﻐﺎﯾﺔ ﻷﻧﮭﺎ ﺗﺿﻣن ﺗطور اﻟﻣﺷروع ﻓﻲ اﻟﯾﻣﯾن اﻻﺗﺟﺎه. ﻋﻠﻰ ﻋﻛس اﻟﺷﻼل ،ﻻ ﺗﻔﺻل اﻟﻣﻧﮭﺟﯾﺎت اﻟرﺷﯾﻘﺔ اﻻﺧﺗﺑﺎر ﻋن اﻟﺗﻧﻣﯾﺔ .ﯾﺗم دﻣﺞ اﻻﺧﺗﺑﺎر ﺑﺈﺣﻛﺎم ﻣﻊ اﻟﺗطوﯾر و ﯾﺗﺣﻣل اﻟﻔرﯾق ﺑﺄﻛﻣﻠﮫ ﻣﺳؤوﻟﯾﺔ ﺟودة اﻟﻣﻧﺗﺞ .أﯾﺿﺎ إن إﺷراك ﻣﺳﺗﺧدﻣﻲ اﻷﻋﻣﺎل ﻓﻲ ﻋﻣﻠﯾﺔ اﻟﺗطوﯾر ﯾﻘف ﻓﻲ ﺟوھر اﻟﻧﮭﺞ اﻟرﺷﯾﻘﺔ. ھﻧﺎك ﻋﻼﻗﺔ ﻗوﯾﺔ ﺑﯾن ﻓرﯾق اﻟﻣﺷروع وأﺻﺣﺎب اﻟﻣﺻﻠﺣﺔ وﻣﺳﺗﺧدﻣو اﻷﻋﻣﺎل .ﯾﻌﻣل ھذا اﻟﻧﻣوذج ﺑﺷﻛل أﻓﺿل ﻓﻲ اﻟﻣواﻗف ﺣﯾث ﻻ ﯾﻣﻛن ﺗﺣدﯾد اﻟﻣﺗطﻠﺑﺎت ﻣﻘدﻣﺎ. رﺷﯾﻘﺔ ﻣﻧﺎﺳﺑﺔ ﺗﻣﺎﻣﺎ ﻟﻣﺷﺎرﯾﻊ اﻟﺑرﻣﺟﯾﺎت اﻟﺗﻲ ﺗﻌﺗﻣد ﻋﻠﻰ اﻟﻌدﯾد ﻣﻧﮭﺎ ﻣن اﻟﻣﺗوﻗﻊ ﺣدوث ﻋواﻣل وﺗﻐﯾﯾرات ﻏﯾر ﻣؤﻛدة. واﺣدة ﻣن اﻟﻔواﺋد اﻟﻛﺑﯾرة ﻟﮭذا اﻟﻧﻣوذج اﻟﺗﻌﺎوﻧﻲ ھﻲ أﻧﮫ ﻋﺎدة ﻣﺎ ﯾؤدي إﻟﻰ ﻟزﯾﺎدة رﺿﺎ اﻟﻌﻣﻼء .ﻣن اﻟﻣرﺟﺢ أﯾﺿﺎ أن ﯾﻛون أﻋﺿﺎء اﻟﻔرﯾق أﻛﺛر ﺑداﻓﻊ ﻣن إﺷراك اﻟﻌﻣﻼء ﻣﺑﺎﺷرة. ﻻﺣظ أن Agileﻟﯾﺳت ﻣﻧﮭﺟﯾﺔ ﺑل طرﯾﻘﺔ ﺗﻔﻛﯾر ﻣﺣددة ﻣن ﺧﻼل ﻗﯾم وﻣﺑﺎدئ اﻟﺑﯾﺎن اﻟرﺷﯾق. اﻟرﺷﯾﻘﺔ ھﻲ طرﯾﻘﺔ ﻟﻠﺗﻔﻛﯾر. ﻋﺎدة ﻣﺎ ﯾﻧظر إﻟﻰ اﻟﺷﻼل ﻋﻠﻰ أﻧﮫ ﺟﺎﻣد وﺑﯾروﻗراطﻲ ﻣﻘﺎرﻧﺔ ﺑﻣﻧﮭﺟﯾﺎت رﺷﯾﻘﺔ .وﻣﻊ ذﻟك ،ﻛﻼھﻣﺎ ﻟﮭﻣﺎ ﻣﻛﺎﻧﮭما ھﻧﺎك ﺣﺎﻻت ﻟن ﺗﻧﺟﺢ ﻓﯾﮭﺎ اﻟﻣﻧﮭﺟﯾﺔ اﻟﻘﺎﺋﻣﺔ ﻋﻠﻰ اﻟﺧطﺔ .إذا ﻛﺎن ﻣﺳﺗوى ﻋدم اﻟﯾﻘﯾن ﻣرﺗﻔﻊ وﻻ ﯾﻣﻛن اﻹﺟﺎﺑﺔ ﻋﻠﻰ ﺟﻣﯾﻊ اﻷﺳﺋﻠﺔ ﺑﺷﻛل ﺻﺣﯾﺢ ﺑﻌﯾدا ،رﺑﻣﺎ ﯾﺟب ﻋﻠﯾك اﺧﺗﯾﺎر ﻣﻧﮭﺟﯾﺔ رﺷﯾﻘﺔ .ﻟﻶﺧرﯾن اﻟﻣﺷﺎرﯾﻊ ،ﺳﯾﻛون اﻟﻧﮭﺞ اﻟﺷﺑﯾﮫ ﺑﺎﻟﺷﻼل ﻣﻧﺎﺳﺑﺎ ﺑﺷﻛل أﻓﺿل. دﻋﻧﻲ أﻋطﯾك ﺑﻌض اﻷﻣﺛﻠﺔ. ﻋﻧد ﺗطوﯾر ﻧظﺎم ﻟﻣراﻗﺑﺔ اﻷﺳﻠﺣﺔ ،ﯾﻧﺑﻐﻲ أن ﺗﻛون اﻟﻣﺗطﻠﺑﺎت ﺗم ﺗوﺿﯾﺣﮫ ﻣﺳﺑﻘﺎ وﯾﺟب أن ﯾﻛون ﻣﺳﺗﻘرا .ﺗﻐﯾﯾر اﻟﻣﺗطﻠﺑﺎت ﻓﻲ ﻣﻧﺗﺻف اﻟطرﯾق ﺳﯾزﯾد اﻟﺗﻛﺎﻟﯾف ﺑﺷﻛل ﻛﺑﯾر وھذه اﻷﻧواع ﻣن اﻟﻣﺷﺎرﯾﻊ ﺑﺎھظﺔ اﻟﺛﻣن ﻋﻠﻰ أي ﺣﺎل .ﻧﮭﺞ اﻟﺷﻼل ﯾﺟﻌل اﻟﻛﻣﺎل ﺑﻣﻌﻧﻰ ﻓﻲ ھذه اﻟﺣﺎﻟﺔ.. إﻟﯿﻚ ﻣﺜﺎل آﺧﺮ )ﺣﻘﯿﻘﻲ( ﻣﻦ :Upwork "أﺗﻄﻠﻊ إﻟﻰ إﻧﺸﺎء ﻣﻨﺼﺔ اﻟﺘﻮاﺻﻞ اﻻﺟﺘﻤﺎﻋﻲ اﻟﻜﺒﯿﺮة اﻟﺘﺎﻟﯿﺔ ل IOSو أﻧﺪروﯾﺪ" اﻟﺧروج ﺑﺧطﺔ ﻣﻔﺻﻠﺔ ﺗﺳﺗﻧد إﻟﻰ اﻓﺗراﺿﺎت ﻟن ﯾﺟﻌل ﺷﻌور .اﻟوﺻف ﻏﺎﻣض ،وﻟن ﯾﺗﻣﻛن اﻟﻌﻣﯾل ﻣن ذﻟك ﺻف ﺑﺎﻟﺿﺑط ﻣﺎ ﯾﺣﺗﺎﺟون إﻟﯾﮫ .ھذا اﻟﻣﺳﺗوى اﻟﻌﺎﻟﻲ ﻣن ﻋدم اﻟﯾﻘﯾن ﯾدﻋو إﻟﻰ ﻧﮭﺞ رﺷﯾق .إﻧﺷﺎء ﺳﺗﺗطﻠب "اﻟﺷﺑﻛﺔ اﻻﺟﺗﻣﺎﻋﯾﺔ اﻟﻛﺑﯾرة اﻟﺗﺎﻟﯾﺔ" ﺗﻛرارات ﻣﺗﻌددة. ﻟذﻟك ،ﻟﺗﻠﺧﯾص ذﻟك ،ﯾﺟب ﻋﻠﯾك اﺳﺗﺧدام اﻟﺷﻼل ﻋﻧدﻣﺎ ﺗﻌرف ﻣﺎ ھو ﯾﺟب أن ﯾﻛون اﻟﻣﻧﺗﺞ اﻟﻧﮭﺎﺋﻲ ،وﻻ ﯾﻣﻛن ﻟﻠﻌﻣﻼء ﺗﻐﯾﯾر ﻧطﺎق ﻣﺷروع. ﯾﺟب اﺳﺗﺧدام ﻣﻧﮭﺟﯾﺎت رﺷﯾﻘﺔ ﻋﻧدﻣﺎ ﯾﻛون ھﻧﺎك اﻟﻛﺛﯾر ﻣن ﻋدم اﻟﯾﻘﯾن اﻟﻣﻌﻧﯾﺔ ،اﻟﻣﺗطﻠﺑﺎت ﻏﺎﻣﺿﺔ أو ﺳرﯾﻌﺔ اﻟﺗﻐﯾر واﻟﻌﻣﻼء ﻻ ﯾﻣﻛن أن ﺗﺻف ﺑدﻗﺔ ﻣﺎ ﯾﺟب أن ﯾﻔﻌﻠﮫ اﻟﻣﻧﺗﺞ اﻟﻧﮭﺎﺋﻲ أو ﯾﺑدو ﻋﻠﯾﮫ. CHAPTER 3 CORE OBJECT-ORIENTATION CONCEPTS This Dilbert comic walks us through the history of programming. It's a bit of an exaggeration, but programming was totally different a couple of decades ago. لكن، إنه نوع من المبالغة.البمجة عب تاري خ ر رDilbert يرشدنا هذا الكتاب الهزل ً البمجة كانت مختلفة .تماما قبل عقدين من الزمن ر Nowadays it is easy to get started with programming. There are various visual tools and sophisticated development environments that make learning fun. هناك العديد من األدوات المرئية.البمجة من السهل البدء ف ر، ف الوقت الحاض ً ممتعا وبيئات التطوير المتطورة الت تجعل التعلم. We can program drones and robots, create 3D-games or augmented reality apps. We can achieve all that without having to learn for years. We’re lucky to have all these great tools today. يمكننا برمجة الطائرات اآللية والروبوتات وإنشاء ألعاب ثالثية األبعاد أو تطبيقات نحن. يمكننا تحقيق كل ذلك دون الحاجة إل التعلم لسنوات.الواقع المعزز محظوظون ألن لدينا كل هذه األدوات الرائعة اليوم. 1 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Initially, computer programs were big, contiguous chunks of code. The unstructured programming was the earliest programming paradigm. The code consisted of sequentially ordered instructions. Each statement would go in a new line. Source code lines were numbered or identified by a label. كببة ومتجاورة من التعليمات كانت برامج الكمبيوتر عبارة عن أجزاء ر، ف البداية يتكون الكود من.للبمجة غب المهيكلة ه أقدم نموذج ر البمجة ر كانت ر.البمجية ر تم ترقيم خطوط. كل عبارة ستدخل ف سطر جديد.تعليمات مرتبة بشكل تسلسل كود المصدر أو تحديدها بواسطة تسمية. Here’s an example written in Sinclair Basic. This simple program converts from Fahrenheit to Celsius degrees: البنامج البسيط يتحول من درجة هذا مثال مكتوب بلغة هذا ر.سنكلب بيسك ر : فهرنهايت إل درجة مئوية 10 PRINT "Fahrenheit", "Celsius" 20 PRINT 30 INPUT "Enter deg F", F 40 PRINT F, (F-32)*5/9 50 GO TO 30 As the programs grew in complexity, the drawbacks of this approach had become apparent. Maintaining or even understanding such a code base was challenging. To make any changes or improvements, you had to check the statements line by line. كان الحفاظ عل قاعدة. أصبحت عيوب هذا النهج واضحة، مع تزايد تعقيد ا رلبامج ً ً الرموز هذه أو حت فهمها كان عليك، تغيبات أو تحسينات أمرا إلجراء أي ر.صعبا ً سطرا بسطر التحقق من البيانات. 2 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS This task becomes more and more difficult as the number of code lines increases. Non-structured programming was heavily criticized for producing hardly readable, so-called “spaghetti” code. ر غب البمجة ر تعرضت ر.تصبح هذه المهمة أكب صعوبة مع زيادة عدد أسطر الكود ً ما يسىم برمز "السباغيت، مقروءا "المهيكلة النتقادات شديدة بسبب إنتاجها بالكاد. The term spaghetti code is a pejorative description for complicated, difficult to understand, and impossible to maintain, software. ومن المستحيل، يصعب فهمها، تحقب رلبامج معقدة مصطلح رمز السباغيت هو وصف ر صيانتها. Structured programming emerged in the late 50s. Structured programming languages break down code into logical steps. They rely on subroutines, which contain a set of instructions to be carried out. Here’s an example of a program written in C, which is a procedural language: البمجة المهيكلة ف أواخر الخمسينيات ظهرت ر. ، أنها تعتمد عل اإلجراءات الفرعية.البمجة المهيكلة الكود إل خطوات منطقية تقسم لغات ر ف ما يل مثال عل برنامج مكتوب.والت تحتوي عل مجموعة من التعليمات ليتم تنفيذها : وه لغة إجرائية، C بلغة #include<stdio.h> int sum(int, int); int main() { int x, y; int sum; printf("Enter the first integer number: "); &x); scanf("%d", printf("Enter the second integer number: "); &y); sum = sum(x, y); printf("x: %d, y: %d\n", x, y); printf("Sum: %d\n", sum); 3 scanf("%d", UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS return 0; } int sum(int x,int y) { int sum; sum = x + y; return sum; } The function called main() is the entry point of our program. It calls the sum() function to add the two numbers entered by the user. إلضافةsum () يستدع الدالة. ه نقطة دخول برنامجناmain () الوظيفة المسماة . الرقمي اللذين أدخلهما المستخدم ر We can define additional methods. For example, if we need to calculate the average of the two numbers, we could create a function like this: إذا احتجنا إل حساب متوسط، عل سبيل المثال.يمكننا تحديد طرق إضافية : فيمكننا إنشاء دالة مثل هذه، العددين float average(float x, float y) { return (x + y) / 2; } These subroutines operate on variables and data structures. المتغبات وهياكل البيانات تعمل هذه اإلجراءات الفرعية عل. ر A variable represents a value of a given type that can be identified using a name. معي يمكن تحديده باستخدام اسم يمثل. المتغب قيمة من نوع ر ر int x, y; float salary; 4 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We use the name of the variable to access the stored value. This lets us modify the value during runtime. هذا يتيح لنا تعديل القيمة أثناء.المتغب للوصول إل القيمة المخزنة نستخدم اسم ر وقت التشغيل. int x = 10 // x has a value of 10 x = 42 // x is now 42 x = x + 1 // x is now 43 A data structure is a way of organizing and storing data in a computer program. Here’s a structure that aggregates the information needed to represent an employee: إليك هيكل يجمع.بنية البيانات ه طريقة لتنظيم وتخزين البيانات ف برنامج كمبيوتر :المعلومات الالزمة لتمثيل الموظف struct employee { int identifier; char name[30]; float salary; }; Structured programming was a significant improvement compared to the monolithic coding practices. Named functions improved the readability of the computer programs. The development time could be reduced substantially. ً ً ً تحسنا ر الوظائف.مب المتجانسة البمجة المنظمة كببا مقارنة بممارسات الب ر كانت ر كبب يمكن تقليل وقت التطوير بشكل ر.المسماة تحسن قابلية قراءة برامج الكمبيوتر. Even with the improved quality, developers started to face new challenges as the programs got bigger and bigger. Structured programming could not address all the increased complexity. بدأ المطورون ف مواجهة تحديات جديدة حيث أصبحت، حت مع الجودة المحسنة للبمجة المنظمة معالجة كل التعقيد المبايد ال يمكن ر.وأكب أكب ر البامج ر ر . 5 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Object-orientation was the next big step in the evolution of the programming paradigms. Object-oriented languages appeared in the 80s. The main idea was to split apart the program into self-contained objects. Each object represents a part of the system that gets mapped to a distinct entity. Basically, an object functions as a separate program by itself. It operates on its own data and has a specific role. ظهرت اللغات.البمجة كان توجيه الكائن هو الخطوة الكببة التالية ف تطور نماذج ر ر البنامج إل كائنات قائمة كانت الفكرة الرئيسية ه تقسيم ر.الشيئية ف الثمانينيات ً يمثل كل كائن.بذاتها يعمل الكائن، ف األساس.ممب جزءا من النظام يتم تعيينه لكيان ر تعمل عل بياناتها الخاصة ولها دور محدد.كبنامج منفصل ف حد ذاته ر. The objects that form the system interact with each other. Objectorientation aims to bring the world of programming closer to the real world. يهدف التوجه الكائت إل.الكائنات الت تشكل النظام تتفاعل مع بعضها البعض البمجة من العالم الحقيق تقريب عالم ر. 6 SECTION 3.1 OBJECTS While structured programming relies on actions, object-oriented programming is organized around objects. البمجة الموجهة للكائنات يتم تنظيم ر، البمجة المهيكلة عل اإلجراءات بينما تعتمد ر حول الكائنات. An object represents a thing. Just like in real life, objects can be simple or complex. البمجة للكائنات يتم تنظيم ر، البمجة المهيكلة عل اإلجراءات بينما تعتمد تعتمد ر حول الكائنات. A golf ball is an object, but so is Falcon Heavy. The way we define the object depends on the level of detail we need. تعتمد الطريقة الت نحدد بها الكائن. وكذلك فالكون هيق، كرة الجولف ه شء عل مستوى التفاصيل الت نحتاجها. With the launch of the Falcon Heavy, they also sent the Tesla Roadster with “Starman” in the driver’s seat toward Mars orbit. Objects may contain or refer to other objects. This can also happen in the objectoriented world. ً فStarman معTesla Roadster أرسلوا أيضا سيارة، Falcon Heavy مع إطالق يمكن.تشب إل كائنات أخرى قد تحتوي األشياء أو ر.مقعد السائق نحو مدار المري خ ً .أيضا ف العالم المعبض أن يحدث هذا 7 We can describe objects using their properties. They can have attributes like name, color, weight, velocity. A golf ball can be completely white, colored or it may even glow in the dark. It has a weight and a price. Some properties like its position, speed, and acceleration can change, while other attributes (its color for example) will stay the same. يمكن أن يكون لها سمات مثل االسم.يمكننا وصف األشياء باستخدام خصائصها يمكن أن تكون كرة الجولف بيضاء بالكامل أو ملونة أو قد.واللون والوزن والرسعة تتغب بعض الخصائص مثل موضعه يمكن أن ر. لها وزن وسعر.تتوهج ف الظالم بينما تظل السمات األخرى (لونها عل سبيل المثال) كما ه، ورسعته وتسارعه. All these properties describe an object in the real world. This approach works also in an object-oriented language. ً ً يعمل هذا النهج أيضا ف لغة.كل هذه الخصائص تصف كائنا ف العالم الحقيق موجهة للكائنات. 8 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Objects have their identity, their own state. Changing the state of an object doesn’t change the state of other objects. If we hit a golf ball, it won’t affect all the other balls. Their state is independent, each has its private identity. تغيب حالة الكائنات تغيب حالة الكائن إل ر ال يؤدي ر. دولتها الخاصة، األشياء لها هويتها دولتهم مستقلة. فلن تؤثر عل جميع الكرات األخرى، إذا ضبنا كرة الجولف.األخرى لكل منها هويتها الخاصة،. Besides properties and identity, an object has its own behavior. The behavior of an object is what it can do. سلوك الكائن هو ما يمكنه. الكائن له سلوكه الخاص، إل جانب الخصائص والهوية فعله. “The black dog barks” ""الكلب األسود ينبح In this sentence, we identify one object: the dog. “Bark” is the behavior, or the action performed by the “dog” object. And “black” is its color, one of its attributes. ً ً . الكلب: نحدد شيئا واحدا، ف هذه الجملة و "األسود" لونه أحد." أو اإلجراء الذي يقوم به كائن "الكلب، "النباح" هو السلوك .صفاته We can identify the object easily since it’s the noun in the sentence. The verb is the behavior, and the adjective is the property. والصفة ه، الفعل هو السلوك.يمكننا التعرف عل الكائن بسهولة ألنه االسم ف الجملة الخاصية. We describe an object using its properties, identity, and behavior. ً نحن نصف كائنا باستخدام خصائصه وهويته وسلوكه. 9 Quite straightforward, but how do we make this work in our code? For that, we need to introduce a new concept, the class. ً واضح نحن بحاجة، ولكن كيف نجعل هذا يعمل ف الكود الخاص بنا؟ لذلك، تماما وهو الفصل، إل تقديم مفهوم جديد. Section 3.2 The CLASS Building an object-oriented system starts by identifying the potential objects, their attributes, and responsibilities. We need to have a class before we can create an object. يبدأ بناء نظام موجه للكائنات من خالل تحديد الكائنات المحتملة وخصائصها نحتاج إل فصل دراش قبل أن نتمكن من إنشاء كائن.والمسؤوليات. The class is the blueprint of an object. الفئة ه مخطط كائن. You can think of a class as a plan, a description of what an object will be. An object is a realization of this blueprint. ً الكائن هو. ووصفا لما سيكون عليه الشء، التفكب ف الفصل باعتباره خطة يمكنك ر إدراك لهذا المخطط. Let’s say you want to use a Pokémon in your program. A class called Pokémon would provide a blueprint for what the Pokémon looks like and what it can do. Pokémon ستوفر فئة تسىم.لنفبض أنك تريد استخدام بوكيمون ف برنامجك ً . وما يمكن أن يفعلهPokémon مخططا لما يبدو عليه The class tells us that each object has a name, armor level and hit points. It doesn’t say what the name or the armor level is. ال يذكر االسم أو.يخبنا الفصل أن كل كائن له اسم ومستوى درع ونقاط إصابة ر مستوى الدرع . 10 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS A Pokémon can attack, and it can defend itself. These two actions define its behavior. يحدد هذان اإلجراءان سلوكه. ويمكنه الدفاع عن نفسه، يمكن لبوكيمون الهجوم. We created a class by giving it a name, declaring its properties and actions. We call these actions methods. Methods are blocks of code that can be called to execute certain operations. They may take input parameters and can also return values. Methods are like functions in structured programming languages. The methods are basically functions embedded in a class. ً ً أنشأنا فئة بإعطائها . نسىم هذه األساليب اإلجراءات.معلنا خصائصها وأفعالها ، اسما البمجية يمكن استدعاؤها لتنفيذ عمليات األساليب عبارة عن كتل من التعليمات ر ً األساليب ه مثل. قد يأخذون معلمات اإلدخال ويمكنهم أيضا إرجاع القيم.معينة الطرق ه ف األساس وظائف مضمنة ف الفصل.البمجة المهيكلة الدوال ف لغات ر. Given this class, we can create objects based on it. Upon object creation, we provide the values for the attributes declared in the class. Each object will have a name, armor level and hit points. The attack() and defend() behavior is provided by the class ً يمكننا إنشاء كائنات، بالنظر إل هذه الفئة نقدم قيم، عند إنشاء الكائن.بناء عليها يتم. سيكون لكل كائن اسم ومستوى درع ونقاط إصابة.السمات المعلنة ف الفصل .توفب سلوك الهجوم () والدفاع () من قبل الفصل ر 11 Given a blueprint, we can create as many instances as we need. يمكننا إنشاء العديد من األمثلة الت نحتاجها، بالنظر إل المخطط. Another big benefit of classes is that we can package them into libraries or frameworks. This lets us reuse them in other programs as well. يتيح لنا.كببة أخرى للفصول ه أنه يمكننا تجميعها ف مكتبات أو أطر عمل فائدة ر ً ذلك إعادة استخدامها ف برامج أخرى أيضا. All modern object-oriented programming languages provide such builtin frameworks. We don’t have to reinvent the wheel and implement the functionality that’s readily available. Instead, we can focus on creating and using the objects in our programs. ال.البمجة الحديثة الموجهة للكائنات مثل هذه األطر المضمنة توفر جميع لغات ر ً ، بدال من ذلك.يتعي علينا إعادة اخباع العجلة وتنفيذ الوظائف المتاحة بسهولة ر كب عل إنشاء الكائنات واستخدامها ف برامجنا يمكننا الب ر. 12 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Now each program has different requirements. The pre-made classes will rarely cover all our needs. You’ll often find yourself creating your own classes. ً ً .اآلن لكل برنامج متطلبات مختلفة نادرا ما تغط الفصول المعدة مسبقا جميع ً ستجد نفسك.احتياجاتنا ئ تنش فصولك الدراسية الخاصة غالبا We covered the object and the class. Next, we’ll take a look at the core object-orientation principles. سوف نلق نظرة عل مبادئ توجيه الكائن األساسية، بعد ذلك.غطينا الكائن والفئة. 3.3 ABSTRACTION Abstraction is a way of describing complex problems in simple terms, by ignoring some details. Eliminating the nitty-gritty details let us focus on the bigger picture. We can dig deeper once we have a broader understanding. من خالل تجاهل بعض، التجريد طريقة لوصف المشاكل المعقدة بعبارات بسيطة يمكننا.األكب التخلص من التفاصيل الدقيقة دعنا نركز عل الصورة.التفاصيل ر التعمق ر. أكب بمجرد أن يكون لدينا فهم أوسع How does abstraction work? كيف يعمل التجريد؟ If I say cat, you know what I’m talking about. I don’t need to say I was thinking of a male Persian cat, if it’s a kitten, if it’s big or small. لست بحاجة للقول إنت كنت أفكر ف ذكر قطة. فأنت تعلم ما أتحدث عنه، إذا قلت قطة صغبة إذا كانت قطة، فارسية. كببة أو ر إذا كانت ر، صغبة ر 13 You understand that I was talking about a cat. أنت تفهم أنت كنت أتحدث عن قطة. We are naturally good at generalizing things. We skip the irrelevant details, but people will still understand us. That’s because our brains are wired to understand abstract ideas like cat, house or car. ، غب ذات الصلة نتخط التفاصيل ر.نحن بطبيعة الحال جيدون ف تعميم األشياء ذلك ألن أدمغتنا مصممة لفهم األفكار المجردة مثل.لكن الناس ال يزالون يفهموننا القط أو المبل أو السيارة. Abstraction works the same way in the object-oriented world. When we start defining a class, we focus on the essential qualities of that class. عندما نبدأ ف تحديد الفصل.يعمل التجريد بنفس الطريقة ف العالم الموجه للكائنات فإننا نركز عل الصفات األساسية لتلك الفئة،. Focus on essential qualities, discard unimportant ones غب المهمة ركز عل الصفات األساسية وتجاهل الصفات ر .. 14 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Back to our Pokémon example: we started with the most important attributes and methods. We don’t need details like age, weight or height, so we can ignore them. ال نحتاج إل تفاصيل. بدأنا بأهم السمات واألساليب:بالعودة إل مثال بوكيمون لدينا لذا يمكننا تجاهلها، مثل العمر أو الوزن أو الطول. These attributes are unessential in our current application. غب ضورية ف تطبيقنا الحال هذه الصفات ر. So, that’s how abstraction works. We focus on what’s important and ignore all the details we don’t need. نحن نركز عل ما هو مهم ونتجاهل كل. هذه ه الطريقة الت يعمل بها التجريد، إذن التفاصيل الت ال نحتاجها. 15 3.4 ENCAPSULATION The next fundamental idea to keep in mind when dealing with OOP and classes is called encapsulation. والفئاتOOP الفكرة األساسية التالية الت يجب وضعها ف االعتبار عند التعامل مع .تسىم التغليف We encapsulate something to protect it and keep its parts together. ً نقوم بتغليف شء ما لحمايته والحفاظ عل أجزائه. معا Think of how medicine is enclosed in a shell called capsule. فكر ف كيفية وضع الدواء ف غالف يسىم كبسولة. In object-orientation, this translates to packing together our properties and methods in a class. Encapsulation also means hiding the gears and the levers. ً ُيبجم هذا إل تجميع خصائصنا وطرقنا، ف اتجاه الكائن يعت.معا ف الفصل ً التغليف أيضا إخفاء البوس والرافعات. Here’s an example. We can use a phone without understanding electronics. We don’t need to know how the touchscreen, the camera or the logic board works. ال نحتاج إل معرفة كيفية. يمكننا استخدام الهاتف دون فهم اإللكبونيات.هذا مثال الكامبا أو لوحة المنطق عمل شاشة اللمس أو. ر 16 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Similarly, we don’t want to expose the inner workings of our class. An object should only reveal the essential features. This concept is called data hiding. By hiding its internal details, the object is protected from external interference. يجب أن يكشف الكائن فقط. نحن ال نريد فضح األعمال الداخلية لفصلنا، وبالمثل من خالل إخفاء تفاصيله. هذا المفهوم يسىم إخفاء البيانات.عن السمات األساسية ً الخارج ر محميا من التدخل يكون الكائن، الداخلية. We restrict clients from modifying the object in ways we did not originally plan, whether it's intentional or accidental. Additionally, we prevent other parts of the system from relying on properties or behavior that may change. سواء كان ذلك، نحن نمنع العمالء من تعديل الكائن بطرق لم نخطط لها ف األصل ً ً فإننا نمنع أجزاء أخرى من النظام من االعتماد، باإلضافة إل ذلك.عرضيا مقصودا أو يتغب عل الخصائص أو السلوك الذي قد ر. If you replace your phone’s battery, that won’t affect the way you use your phone. That’s because you only interact with the touchscreen. Changes in the inner workings of your phone don’t matter to you. Our classes shouldn’t be any different either. هذا ألنك. فلن يؤثر ذلك عل طريقة استخدامك للهاتف، إذا استبدلت بطارية هاتفك ال ينبغ أن.التغيبات ف األعمال الداخلية لهاتفك ال تهمك.تتفاعل فقط مع شاشة اللمس ر ً تكون فصولنا مختلفة أيضا. If we expose unnecessary details, any changes to those attributes or methods may affect other parts of the system. Whereas if we restricted access to that data or behavior, we don’t have to worry about the ripple effect of our changes. تغيبات عل تلك السمات أو الطرق فقد تؤثر أي ر، غب ضورية إذا كشفنا عن تفاصيل ر حي أننا إذا قيدنا الوصول إل تلك البيانات أو السلوك ف ر.عل أجزاء أخرى من النظام لتغيباتنا التأثب المضاعف فال داع للقلق بشأن،. ر ر 17 Data hiding is not about selfishly keeping stuff for ourselves. It's rather about protecting our classes from unwanted external dependencies. إنها باألحرى حماية فصولنا.ال يعت إخفاء البيانات االحتفاظ باألشياء بأنانية ألنفسنا غب المرغوب فيها من التبعيات الخارجية ر. ئ As a rule of thumb: ش متعارف عليه: Expose only as much of your class properties and methods as needed for normal usage. اكشف فقط عن قدر ما يلزم من خصائص وطرق الفصل الدراش الخاص بك لالستخدام العادي. Data hiding plays an essential role in keeping the dependencies between objects to a minimum. ً يلعب إخفاء البيانات ً أساسيا ف الحفاظ عل التبعيات ربي الكائنات عند الحد دورا األدن. 18 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS A tightly coupled system, with most of the objects depending on each other, is the obvious sign of a bad design. Updating or maintaining such a system is a pain. Any tiny modification will cascade down and require you to change other parts of the system, too. It’s like a never-ending nightmare. عالمة، مع اعتماد معظم الكائنات عل بعضها البعض، يعد النظام شديد البابط واضحة عل التصميم ر ئ أي. تحديث أو الحفاظ عل مثل هذا النظام هو ألم.الست ً إنه مثل.تغيب أجزاء أخرى من النظام أيضا تعديل طفيف سيتدهور ويتطلب منك ر كابوس ال ينته Object-oriented programming principles are here to make our lives easier. Next up is the idea of Inheritance. المباث التال هو فكرة ر.البمجة الكينونية موجودة هنا لجعل حياتنا أسهل مبادئ ر. 19 SECTION 3.5 INHERITANCE Inheritance is a key concept in object-oriented programming. Without inheritance, we’d end up writing similar code over and over again. سننته بكتابة رمز مشابه، المباث بدون ر.البمجة الشيئية الوراثة مفهوم أساش ف ر مر ًارا وتكر ًارا. Inheritance means code reuse. That is, reusing an existing class implementation in new classes. أي إعادة استخدام تطبيق فئة موجود ف فئات.الوراثة تعت إعادة استخدام الكود جديدة. Let us start with an example. We modeled the Pokémon class with the main properties and behavior in mind. Given this class, we were able to create our Pokémon instances. قمنا بتصميم فئة بوكيمون مع وضع الخصائص الرئيسية والسلوك.دعونا نبدأ بمثال تمكنا من إنشاء نماذج بوكيمون الخاصة بنا، بالنظر إل هذه الفئة.ف االعتبار. 20 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Now, what if we need new types, like electric, water or flying Pokémon? We will need new classes since these new types have special abilities. مثل الكهرباء أو الماء أو بوكيمون الطائرة؟، ماذا لو احتجنا إل أنواع جديدة، اآلن سنحتاج إل فصول جديدة ألن هذه األنواع الجديدة لها قدرات خاصة. The Pokémon class has the properties name, armor and hit points, and it can attack and defend itself. The Electric, Water and Flying Pokémon have all these properties, and they are also able to attack and defend themselves. Additionally, they also have specialized functionality. ويمكنها مهاجمة نفسها، فئة بوكيمون لها خصائص االسم والدروع ونقاط الضبة ئ ئ وهم، والمان والطائر كل هذه الخصائص الكهربان يمتلك البوكيمون.والدفاع عنها ً لديهم، باإلضافة إل ذلك.قادرون أيضا عل مهاجمة أنفسهم والدفاع عن أنفسهم ً . أيضا وظائف متخصصة An Electric Pokémon has the ability to wild charge. This attack is only available to Electric-type Pokémons. AquaTail is a damaging Water Pokémon move, and Flying Pokémons can perform the dragon ascent attack. ئ هذا الهجوم متاح فقط للبوكيمونات.البي بوكيمون كهربان لديه القدرة عل الشحن ر ئ ويمكن ل، ضارةWater Pokémon عبارة عن حركةAquaTail .الكهربان من النوع .التني تنفيذ هجوم صعود رFlying Pokémons As you’ve probably realized, the three new classes are almost identical to the Pokémon class. The only difference is the special attack type. ً تقريبا مع فئة فإن الفئات الثالثة الجديدة متطابقة، كما كنت قد أدركت عل األرجح االختالف الوحيد هو نوع الهجوم الخاص.بوكيمون. 21 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We could add all these new behaviors to the Pokémon class. If we did that, we’d end up in a class that has too many responsibilities. Suddenly, all Pokémon objects could swim and fly and discharge electricity. فسننته، إذا فعلنا ذلك.يمكننا إضافة كل هذه السلوكيات الجديدة إل فئة بوكيمون يمكن لجميع كائنات بوكيمون السباحة، فجأة.الكثب من المسؤوليات ف فصل لديه ر والطبان وتفري غ الكهرباء. ر We definitely don’t want that. Our classes should be simple. They need to have a well-defined purpose. يجب أن يكون لديهم. يجب أن تكون فصولنا بسيطة.نحن بالتأكيد ال نريد ذلك ً غرض محدد جيدا. Object-orientation is about granularity and separation of concerns. Each class should focus on one set of specific functionalities and do that well يجب أن يركز كل فصل عل.التوجه الكائن يدور حول التفصيل وفصل االهتمامات مجموعة واحدة من الوظائف المحددة ويقوم بذلك بشكل جيد. Creating one-size-fits-all, monolithic classes is a major mistake in objectoriented software development. ً البامج يعد إنشاء فئات متجانسة مقاس واحد يناسب الجميع خطأ فادحا ف تطوير ر الموجهة للكائنات. So, how about keeping these classes separate? That sounds better. But now, we keep repeating the same code for the common functionality. There must be a better way. 22 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS نستمر ف تكرار، لكن اآلن. ماذا عن إبقاء هذه الفئات منفصلة؟ أن يبدو أفضل، إذن يجب أن تكون هناك طريقة أفضل.نفس الرمز للوظيفة المشبكة. Indeed, object-oriented programming languages have a solution for this kind of problem: Inheritance. الوراثة:البمجة الشيئية لديها حل لهذا النوع من المشاكل لغات ر، ف الواقع. A class can inherit all the attributes and behavior from another class. In our case, we let ElectricPokémon, WaterPokémon, and FlyingPokémon inherit from the Pokémon class. The data and the behavior from the Pokémon class are now available to all these classes, without us having to write a single line of code. تركنا، ف حالتنا.يمكن للفصل أن يرث جميع السمات والسلوك من فئة أخرى ترث من فئةFlyingPokémon وWaterPokémon وElectricPokémon ، متاحة اآلن لجميع هذه الفئاتPokémon البيانات والسلوك من فئة.Pokémon .البمجية دون الحاجة إل كتابة سطر واحد من التعليمات ر Now we can add specialized behavior or attributes to the classes that inherit from Pokémon. يمكننا اآلن إضافة سلوك أو سمات متخصصة إل الفئات الت ترث من بوكيمون. If we enhance or modify the Pokémon class, all the other classes will automatically receive those changes. 23 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS فستتلق جميع الفئات األخرى هذه، أو تعديلهاPokémon بتحسي فئة إذا قمنا ر ً .تلقائيا التغيبات ر In object-oriented terms, Pokémon is a parent or superclass. Whereas the ElectricPokémon, WaterPokémon, and FlyingPokémon are subclasses or child classes. ف. بوكيمون هو أحد الوالدين أو الطبقة العليا، ف المصطلحات الموجهة للكائنات ه فئاتFlyingPokémon وWaterPokémon وElectricPokémon حي أن ر .فرعية أو صفوف أطفال Inheritance is a powerful idea which can save us from a lot of typing. الكثب من الكتابة المباث فكرة قوية يمكن أن تنقذنا من. ر ر Besides, it paves the road to another handy feature called Polymorphism. لمبة مفيدة أخرى تسىم تعدد األشكال فإنه يمهد الطريق ر، إل جانب ذلك. 24 SECTION 3.6 POLYMORPHISM Here’s another term you’ll often hear when it comes to objectorientation: Polymorphism. ً إليك مصطلح آخر ستسمعه ر. ئ تعدد األشكال:الشيت كثبا عندما يتعلق األمر بالتوجه The word has Greek origins, and it consists of two words: “polys”, which means many, much and “morphé,” meaning form or shape. و، الكثب والت تعت، "polys" :كلمتي وتتكون من، الكلمة لها أصول يونانية ر ر . وتعت الشكل أو الشكل، ""مورف If you look up the word polymorphism, you’ll find the following definition: : ستجد التعريف التال، إذا بحثت عن كلمة تعدد األشكال The condition of occurring in several different forms. حالة حدوثها بعدة أشكال مختلفة. How does this apply to programming? البمجة؟ كيف ينطبق هذا عل ر To understand how polymorphism works, we have to revisit the idea of inheritance. علينا إعادة النظر ف فكرة الوراثة، لفهم كيفية عمل تعدد األشكال. Here’s our Pokémon superclass and its subclasses. ها ه فئة بوكيمون الفائقة وفئاتها الفرعية. 25 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS The Electric, Water and FlyingPokémon all inherit the data and the behavior of their superclass. So, they have a name, armor, hit points and they can attack and defend themselves. . البيانات وسلوك الطبقة الفائقةFlyingPokémon وWater وElectric يرث كل من . لديهم اسم ودرع ونقاط إصابة ويمكنهم مهاجمة أنفسهم والدفاع عن أنفسهم، لذلك The WaterPokémon inherits the attack behavior from the Pokémon superclass. Now, what if we need WaterPokémon types to cause more damage than basic Pokémons? ماذا لو، اآلن. سلوك الهجوم من فئة بوكيمون الفائقةWaterPokémon يرث إلحداث أضار رWaterPokémon احتجنا إل أنواع Pokémons أكب من األساسية؟ For that, we need to provide a specialized implementation of the attack behavior. This is what we call method overriding. هذا ما نسميه تجاوز.توفب تنفيذ متخصص لسلوك الهجوم نحتاج إل ر، لذلك .الطريقة 26 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS By overriding a method of the superclass, we tell that we want a different behavior in our subclass than the one we inherited. ً ً نقول إننا نريد سلوكا مختلفا ف فئتنا الفرعية، من خالل تجاوز طريقة الطبقة الفائقة عن السلوك الذي ورثناه. Method overriding is straightforward: we re-implement the method with the same name and parameters as the one defined in the parent class and provide our own behavior ً يعد تجاوز الطريقة ً فنحن نعيد تنفيذ الطريقة بنفس االسم والمعلمات:مبارسا أمرا كتلك المحددة ف الفئة األصلية ونقدم سلوكنا الخاص By doing so, our WaterPokémon objects will have a different attack() behavior than their Pokémon superclass. Calling the attack() method on the Electric and Flying Pokémon objects will use the logic implemented in their superclass, since we did not override the attack() method in their case. الخاصة بنا سلوكWaterPokémon سيكون ألجسام، من خالل القيام بذلك استدعاء طريقة الهجوم () عل. الفائقةPokémon هجوم () مختلف عن فئة ، كائنات البوكيمون الكهربائية والطائرة ستستخدم المنطق المطبق ف فئتهم الفائقة .ألننا لم نتجاوز طريقة الهجوم () ف حالتهم So, that’s method overriding. Polymorphism lets us work with objects created from any of these classes. We don’t need to know whether its a Water, Flying or Electric Pokémon instance to call any of the common methods defined in the superclass. 27 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS لذلك ،هذه ه الطريقة الت تغلب عليها .يتيح لنا تعدد األشكال العمل مع الكائنات الت تم إنشاؤها من أي من هذه الفئات .ال نحتاج إل معرفة ما إذا كان مثيل بوكيمون Waterأو Flyingأو Electric Pokémonالستدعاء أي من األساليب الشائعة المحددة ف الطبقة الفائقة. We could create an army of mixed Pokémons and tell them to attack at once. .يمكننا إنشاء جيش من البوكيمون المختلط ونطلب منهم الهجوم ف الحال Each of them will execute the right attack() method without us having to know their exact type. All we know is that they are all instances of the Pokémon type or one of its subclasses. سيقوم كل منهم بتنفيذ أسلوب الهجوم الصحيح () دون الحاجة إل معرفة نوعه ً جميعا أمثلة لنوع بوكيمون أو إحدى فئاته الفرعية. بالضبط .كل ما نعرفه هو أنها 28 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Polymorphism is about working freely with instances of many different classes that share a common superclass. يتعلق تعدد األشكال بالعمل بحرية مع حاالت من العديد من الفئات المختلفة الت تشبك ف فئة فائقة مشبكة. It’s probably easier to grasp it when using it in a real program, so let me show you an example. I’m going to use Swift and Xcode on a Mac. لذا دعت أوضح لك، ربما يكون من األسهل فهمه عند استخدامه ف برنامج حقيق ً Mac. عل جهازXcode وSwift سأستخدم.مثاال We’ll implement the Pokémon class and all the subclasses. This is an overly simplified example but it’s good enough to show you how polymorphism works in a real program. So, here’s our Pokémon class. The attack() method just displays a message to the console. هذا مثال مبسط للغاية ولكنه جيد بما.سنطبق فئة بوكيمون وجميع الفئات الفرعية ها هو فصل البوكيمون.يكق لتوضيح كيفية عمل تعدد األشكال ف برنامج حقيق . فقط رسالة إل وحدة التحكمattack )( تعرض طريقة.لدينا class Pokémon { var name: String init(name: String) { self.name = name } 29 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS func attack() { print("Pokémon attack!") } } The Electric, Water and Flying Pokémon classes inherit from the Pokémon class. This is how we do it in Swift: we put the name of the superclass after the name of the child class separated by a colon. هذه ه الطريقة.ترث فصول البوكيمون الكهربائية والمائية والطائرة من فئة بوكيمون ً نضع اسم الطبقة الفائقة بعد اسم فئة الطفل مفصوال:Swift الت نقوم بها ف .بنقطتي ر class ElectricPokémon: Pokémon { } class WaterPokémon: Pokémon { } class FlyingPokémon: Pokémon { } I override the attack method in the WaterPokémon class. To specify that I’m overriding a method in the superclass I’m using the override keyword. For this example, we’ll simply display a different message: لتحديد أنت أتجاوز طريقة.WaterPokémon لقد تجاوزت طريقة الهجوم ف فصل سنعرض، ف هذا المثال. فأنا أستخدم الكلمة الرئيسية لإللغاء، ف الفئة الممتازة :ببساطة رسالة مختلفة class WaterPokémon: Pokémon { override func attack() { print("WaterPokémon attack!") } } Next, I’ll create some Pokémon instances. One Pokémon object, a WaterPokémon, then an Electric and a FlyingPokémon, too. let eevie = Pokémon(name: "Eevie") let misty = WaterPokémon(name: "Misty") let pikachu = ElectricPokémon(name: "Pikachu") let charizard = FlyingPokémon(name: "Charizard") 30 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Then, I define a list with these objects. Now, I can traverse this list and call the attack() method on the objects in the list. We don’t need to know the class they were instantiated from. يمكنت اجتياز هذه القائمة واستدعاء، اآلن. أحدد قائمة بهذه الكائنات، بعد ذلك ال نحتاج إل معرفة الفصل الذي.طريقة الهجوم () عل الكائنات الموجودة ف القائمة .تم إنشاء مثيل له منه let pokémons = [eevie, pikachu, misty, charizard] for pokémon in pokémons { pokémon.attack() } If I run the demo, we’ll see in the console that the attack method produced the same output in the console for all the objects but one. فسبى ف وحدة التحكم أن طريقة الهجوم، إذا قمت بتشغيل العرض التوضيح أنتجت نفس اإلخراج ف وحدة التحكم لجميع الكائنات باستثناء كائن واحد. Pokémon attack! Pokémon attack! WaterPokémon attack! Pokémon attack! That object was of type WaterPokémon, which overrides the attack() method. )( والذي يتجاوز طريقة الهجوم، WaterPokémon كان هذا الكائن من النوع 31 32 CHAPTER 4 OBJECT-ORIENTED ANALYSIS AND DESIGN Building an object-oriented application requires some preliminary steps. These steps are similar regardless of the development methodology. هذه الخطوات.يتطلب إنشاء تطبيق موجه للكائنات بعض الخطوات األولية متشابهة بغض النظر عن منهجية التطوير. First, we need to collect the requirements. During the requirements collection phase, we answer the following questions: ً نجيب عىل األسئلة، خالل مرحلة جمع المتطلبات. نحتاج إىل جمع المتطلبات، أوال :التالية - What’s the problem we're trying to solve? الت نحاول حلها؟ ه المشكلة ي ما ي What does our app or framework need to do to accomplish that functionality? - ما الذي يحتاج تطبيقنا أو إطار العمل الخاص بنا إىل القيام به إلنجاز هذه الوظيفة؟ The requirements collection step involves a lot of brainstorming and discussions. Once we come to an agreement, we need to document our ideas. The requirements need to be as clear as possible. بمجرد أن.الذهت والمناقشات الكثي من العصف تتضمن خطوة جمع المتطلبات ر ي يجب أن تكون المتطلبات واضحة قدر. نحتاج إىل توثيق أفكارنا، نتوصل إىل اتفاق اإلمكان. Only write down the decisions that underline what the system is going to do. Vague thoughts will lead to conflicts later on. ستؤدي األفكار الغامضة إىل.الت تحدد ما سيفعله النظام اكتب فقط القرارات ي ً رصاعات الحقا. 1 Once the requirements are clear, we come up with a description of the software system. We should describe the app from the user’s perspective. يجب أن نصف التطبيق.الينامج نخرج بوصف لنظام ر، بمجرد أن تتضح المتطلبات من وجهة نظر المستخدم. Depending on the project, we may pick an agile or a waterfall methodology. For agile projects, it is completely fine if we don’t provide an accurate description. We can still fill the gaps or refine our thoughts later on. The point here is to gain as much clarity as needed to start the next step. ً اعتمادا عىل ر بالنسبة للمشاري ع الرشيقة. قد نختار منهجية رشيقة أو شالل، المشوع ً ً ً فال بأس، ال يزال بإمكاننا سد الثغرات أو صقل أفكارنا.تماما إذا لم نقدم وصفا دقيقا ً . أكي قدر من الوضوح حسب الحاجة لبدء هنا مهمة ال النقطة ا الحق ه الحصول عىل ر ي الخطوة التالية. This step of describing the app may include the creation of visual mockups, wireframes or even prototypes. If it helps in communicating your thoughts to the client, then do it. قد تتضمن هذه الخطوة يف وصف التطبيق إنشاء نماذج باألحجام الطبيعية المرئية أو ، إذا كان ذلك يساعد يف توصيل أفكارك للعميل.إطارات سلكية أو حت نماذج أولية فافعل ذلك. I’ve used wireframes and nonfunctional prototypes for most of my projects. These prototypes proved to be extremely useful. Especially if the client was not familiar with the platform or he had no precise expectations. ر أثبتت.وعات لقد استخدمت إطارات سلكية ونماذج أولية ر غي وظيفية لمعظم مش ي خاصة إذا لم يكن العميل عىل دراية بالمنصة أو.هذه النماذج األولية أنها مفيدة للغاية لم يكن لديه توقعات دقيقة. 2 Let’s say a customer asks you to create an iOS version of their Android app. A prototype will help the client understand that the iOS version will look and behave differently. الخاصAndroid من تطبيقiOS لنفيض أن أحد العمالء يطلب منك إنشاء إصدار سيبدو ويترصف بشكلiOS األوىل العميل عىل فهم أن إصدار سيساعد النموذج.به ي .مختلف UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS 3 By communicating our vision precisely, we avoid surprises and false expectations. نتجنب المفاجآت والتوقعات الخاطئة، من خالل توصيل رؤيتنا بدقة. Next comes the third phase. During this step, we aim to identify the things that form our system. These are the potential players that have a specific, well-defined role in our application. الت نهدف إىل تحديد األشياء، خالل هذه الخطوة.تأت المرحلة الثالثة بعد ذلك ي ي ً هؤالء هم الالعبون المحتملون الذين لديهم دور محدد ومحدد جيدا يف.تشكل نظامنا تطبيقنا. Picking the essential entities won't be challenging if we did a good job at the previous two steps. We’ll realize that we need a class that represents say an item that has a name, a price, and some other attributes; or a class responsible for securely communicating with a server. Another class may manage your local persistence, and so on. ً ً لن يكون اختيار الكيانات األساسية الخطوتي صعبا إذا قمنا بعمل جيد يف أمرا ر ً عنرصا عىل سبيل المثال له اسم سوف ندرك أننا بحاجة إىل فئة تمثل.السابقتي ر قد يتوىل.وسعر وبعض السمات األخرى ؛ أو فئة مسؤولة عن االتصال اآلمن بالخادم وما إىل ذلك، المحىل فصل آخر إدارة إرصارك. ي In the final phase, we describe the behavior of our system in a formal way. This last step is about creating visual representations of our classes, their attributes and behavior. We also model the interaction between the objects. األخية تتعلق هذه الخطوة. نصف سلوك نظامنا بطريقة رسمية، يف المرحلة النهائية ر ً نقوم أيضا بنمذجة التفاعل ربي. وصفاتها وسلوكها، بإنشاء تمثيالت مرئية لفصولنا الكائنات. We’ll rely on the Unified Modeling Language, in short, UML. UML is a graphical notation that provides a set of standard diagrams. These diagrams let us describe object-oriented systems in a standard way. 4 رسوم سنعتمد عىل لغة النمذجة الموحدة باختصار UML. UMLعبارة عن تدوين ي يوفر مجموعة من الرسوم البيانية القياسية .تتيح لنا هذه المخططات وصف األنظمة الموجهة بالكائنات بطريقة قياسية. This may sound overwhelming now, but no worries. We’re going to discuss each of these concepts in the upcoming chapters. ً داع للقلق .سنناقش كل من هذه المفاهيم يف قد يبدو هذا صعبا اآلن ،لكن ال ي .الفصول القادمة 5 SECTION 4.1 COLLECTING REQUIREMENTS The initial step of building a software system is crucial. It’s often called requirement collection phase or requirements analysis. But regardless of how we call it, it paves the road for all the other phases of the objectoriented software design. ً .الخطوة األوىل لبناء نظام برمجيات حاسمة وغالبا ما يطلق عليه مرحلة تجميع ، الت نسميها بها ولكن بغض النظر عن الطريقة ي.المتطلبات أو تحليل المتطلبات الينامج الموجه للكائنات فإنها تمهد الطريق لجميع المراحل األخرى من تصميم ر. Requirement means “a thing that is needed or wanted.” And exactly that’s what we need to focus on during this initial step: المطلب يعت ر كي عليه خالل وهذا بالضبط ما نحتاج إىل الي ر.""الشء المطلوب أو المطلوب ي ي :هذه الخطوة األولية We must clarify what’s needed or wanted in our application. .يجب أن نوضح ما هو مطلوب أو مطلوب يف طلبنا The features of the system are the so-called functional requirements. Functional requirements represent what the app needs to provide feature-wise, how it should react to a particular input, or what’s the expected behavior in a specific situation. تمثل المتطلبات الوظيفية ما.ه ما يسىم بالمتطلبات الوظيفية ر ميات النظام ي معي وكيف يجب أن يتفاعل مع إدخال ر، الميات يحتاجه التطبيق لتقديمه من حيث ر معي أو ما هو السلوك المتوقع يف موقف ر،. Let’s say you’re about to develop an app for runners. You should answer questions like: : يجب أن تجيب عىل أسئلة مثل.للعدائي لنفيض أنك عىل وشك تطوير تطبيق ر - Should the actual speed always be visible on the main screen? 6 - ً هل يجب أن تكون الشعة الفعلية مرئية دائما عىل الشاشة الرئيسية؟ Do we allow imperial and metric units? اإلمييالية والميية؟ هل نسمح بالوحدات ر Should we make this configurable by the user? Or automatically adjust the units based on the phone's settings instead? - ً هل يجب أن نجعل هذا قابال للتكوين بواسطة المستخدم؟ أو ضبط الوحدات ً ً تلقائيا ً بناء عىل إعدادات الهاتف بدال من ذلك؟ We’ll usually also have nonfunctional requirements. These are the requirements that are not directly related to a feature or behavior of the software system but are important, nevertheless. ً . ه المتطلبات ال يت ال تتعلق هذه وظيفية غي متطلبات ا أيض عادة ما تكون لدينا ر ي ر مع ذلك، الينامج ولكنها مهمة بمية أو سلوك نظام ر مباشة ر. Think of performance requirements: you don’t want to ruin the user experience with an unresponsive app. Also, you may need to address legal requirements. Does the app collect sensitive user data? Does it allow users to browse the internet? ً أيضا.غي مستجيب فأنت ال تريد إفساد تجربة المستخدم مع تطبيق ر:فكر يف متطلبات األداء هل يجمع التطبيق بيانات المستخدم. قد تحتاج إىل معالجة المتطلبات القانونية، للمستخدمي بتصفح اإلنينت؟ الحساسة؟ هل يسمح ر Documentation and support are also nonfunctional requirements. Your software may need to adhere to certain standards or regulations. 7 غي وظيفية .قد يحتاج برنامجك إىل االليام ه أيضا متطلبات ر التوثيق والدعم ي .بمعايي أو لوائح معينة ر Nonfunctional requirements are equally important. Ignoring them may cause serious legal issues and all sorts of other problems. غي الوظيفية مهمة بنفس القدر .قد يؤدي تجاهلها إىل مشاكل قانونية المتطلبات ر .خطية وجميع أنواع المشاكل األخرى ر Now, how do we handle this? There are different ways to gather the requirements. The easiest way is just to write them down. Here’s an example from a project I’ve been working on. ه اآلن ،كيف نتعامل مع هذا؟ هناك طرق مختلفة لجمع المتطلبات .أسهل طريقة ي كتابتها .هذا مثال من ر مشوع كنت أعمل عليه . 8 Functional requirements المتطلبات الوظيفية - - - The app must store travel expenses organized by trips. يجب أن يخزن التطبيق نفقات السفر المنظمة حسب الرحالت. Each trip must have a home currency. The default currency is fetched from the phone’s settings. User setting must override the default home currency. يتم جلب العملة االفياضية من إعدادات.يجب أن يكون لكل رحلة عملة محلية يجب أن يتجاوز إعداد المستخدم العملة المحلية االفياضية.الهاتف. Expenses can be entered in any of the supported currencies. The app must automatically convert the amounts to the home currency. يجب أن يقوم التطبيق.يمكن إدخال المرصوفات بأي من العمالت المدعومة ً تلقائيا بتحويل المبالغ إىل العملة المحلية . 9 Nonfunctional requirements غي مجدية متطلبات ر - The app must run on iOS 9 and newer versions. . واإلصدارات األحدثiOS 9 يجب أن يعمل التطبيق عىل نظام التشغيل - The app must avoid unnecessary network roundtrips to reduce data roaming fees and preserve battery. - عي الشبكة لتقليل رسوم غي الرصورية ر يجب أن يتجنب التطبيق الرحالت ر تجوال البيانات والحفاظ عىل البطارية. - The app must include the support email and the link to the app’s website. - وت الخاص بالدعم والرابط إىل يجب أن يشتمل التطبيق عىل ر الييد اإللكي ي موقع الويب الخاص بالتطبيق. These are short, concise phrases in the form: قصية وموجزة بالشكل هذه عبارات ر: “The app/system must do something.” ً " النظام شيئا ما/ يجب أن يفعل التطبيق." You don’t want to write lengthy descriptions, and feel free to adapt this format to your needs. وال تيدد يف تكييف هذا التنسيق مع احتياجاتك، ال تريد كتابة أوصاف مطولة. You should use some electronic form, but at early stages, pen and paper or a whiteboard are also fine. Just make sure you store them somehow, for example by taking photos. ال بأس، ولكن يف المراحل المبكرة، يجب عليك استخدام بعض النماذج اإللكيونية ً عىل، فقط تأكد من تخزينها بطريقة ما.أيضا باستخدام القلم والورق أو السبورة سبيل المثال عن طريق التقاط الصور. 10 There are also more formal ways, tools, and systems that support the requirements collection step. I won’t talk about these tools because this book is not about tools, but rather about principles. ً أيضا طرق وأدوات وأنظمة ر لن.أكي رسمية تدعم خطوة جمع المتطلبات هناك ولكن باألحرى عن، أتحدث عن هذه األدوات ألن هذا الكتاب ال يتعلق باألدوات المبادئ. To summarize, the requirements collection step boils down to this: : تتلخص خطوة جمع المتطلبات يف هذا، للتلخيص We need to formulate what our software must do and which are the constraints and boundaries we need to consider. الت نحتاج إىل ه القيود والحدود ي نحتاج إىل صياغة ما يجب أن يفعله برنامجنا وما ي مراعاتها. If we’re using a Waterfall approach, we need to clarify all the requirements in advance. ً فنحن بحاجة إىل توضيح جميع المتطلبات مسبقا، إذا كنا نستخدم نهج الشالل. For Agile projects, it’s perfectly acceptable if we continue without having all the answers. We may even miss some of the questions. Agile lets us revisit and refine the requirements as we iterate through the software development process. 11 ً من المقبول، Agile بالنسبة لمشاري ع تماما أن نستمر دون الحصول عىل جميع إعادة النظر يف المتطلباتAgile يتيح لنا. قد نفوت حت بعض األسئلة.اإلجابات .اليامج وتحسينها بينما نكرر عملية تطوير ر SECTION 4.2 MAPPING REQUIREMENTS TO TECHNICAL DESCRIPTIONS Once we’ve gathered the requirements, we can feed them to the next step of the software design process. This is where we provide short, accurate descriptions of our system’s functionality from the user’s perspective. يمكننا إطعامهم إىل الخطوة التالية من عملية تصميم، بمجرد أن نجمع المتطلبات ً قصية ودقيقة لوظائف نظامنا من هذا هو المكان الذي نقدم فيه أوصافا ر.الينامج ر منظور المستخدم. One way of documenting our system’s features is through use-cases. A use-case needs a title. Something like “Create New Trip,” “Edit Expense” or “Convert Currencies.” Note that each use-case should represent a distinct functionality. 12 ميات نظامنا يف حاالت االستخدام .حالة االستخدام تحتاج تتمثل إحدى طرق توثيق ر ر شء مثل "إنشاء رحلة جديدة" أو "تعديل النفقات" أو "تحويل إىل عنوان .ي ممية. العمالت" .الحظ أن كل حالة استخدام يجب أن تمثل وظيفة ر Next, we define the actor who’s using this functionality. We call it an “actor” since it can represent a user who’s interacting with the app, but also a non-human entity, like another system. بعد ذلك ،نحدد الممثل الذي يستخدم هذه الوظيفة .نطلق عليه اسم "ممثل" ألنه ً ً ً غي ر بشي ، يمكن أن يمثل مستخدما يتفاعل مع التطبيق ،ولكنه يمثل أيضا كيانا ر مثل نظام آخر. Then, we describe the details of this specific use-case. This is called the scenario. بعد ذلك ،نصف تفاصيل حالة االستخدام المحددة هذه .هذا يسىم السيناريو. Here we should write one or more sentences that explain what and how the system works in this particular case. Here’s an example: هنا يجب أن نكتب جملة واحدة أو ر أكي ر تشح ماذا وكيف يعمل النظام يف هذه الحالة بالذات .هذا مثال: Create new trip - this is the title of our use case. The actor is the user of the mobile app. إنشاء رحلة جديدة -هذا هو عنوان حالة االستخدام الخاصة بنا .الفاعل هو مستخدم التطبيق المحمول. The user can initiate the creation of a new trip from the main screen. - .يمكن للمستخدم بدء إنشاء رحلة جديدة من الشاشة الرئيسية - The title is mandatory. All the other settings are optional. ام .جميع اإلعدادات األخرى اختيارية .العنوان إلز ي Optionally, the user can write a short description and set a start and end date for the trip. ً قصي وتحديد تاري خ بدء الرحلة اختياريا ،يمكن للمستخدم كتابة وصف ر .وتاري خ انتهائها 13 - - - The app assigns a default home currency based on the phone’s settings. Users can override the default home currency with any of the supported currencies. ّ ً يعي التطبيق عملة رئيسية افياضية يمكن.بناء عىل إعدادات الهاتف ر للمستخدمي تجاوز العملة الرئيسية االفياضية بأي من العمالت المدعومة. ر - The app allows setting a budget for the trip. This setting is optional. - هذا اإلعداد اختياري.ميانية للرحلة يتيح التطبيق تحديد ر. - Also, the user can assign a custom thumbnail to a trip. ً تعيي صورة مصغرة مخصصة للرحلة يمكن للمستخدم ر، أيضا. - And the user can save the trip or cancel the trip creation process. - ويمكن للمستخدم حفظ الرحلة أو إلغاء عملية إنشاء الرحلة. You can write this as a paragraph or as a bulleted list. The format doesn’t really matter. But it’s important to avoid technical terms. Again, this description should be understood by all stakeholders, including the end users. ً لكن من. ال يهم الشكل حقا.نقط يمكنك كتابة هذا كفقرة أو كقائمة ذات تعداد ي يجب فهم هذا الوصف من قبل جميع، مرة أخرى.المهم تجنب المصطلحات الفنية النهائيي المستخدمي بما يف ذلك، أصحاب المصلحة. ر ر The format of the use-case document may vary from company to company. Some may include additional details, but that won’t change the essence of it. قد يتضمن البعض.قد يختلف تنسيق مستند حالة االستخدام من رشكة إىل أخرى يغي جوهرها لكن ذلك لن ر، تفاصيل إضافية. The use-case document aims to provide a clear and human-friendly description. What a specific part of the software does and how the actor interacts with it.And this is a textual description. We’ll talk about the use-case diagrams later. 14 تهدف وثيقة حالة االستخدام إىل تقديم وصف واضح وسهل االستخدام .ما يفعله نص .سنتحدث عن الينامج وكيف معي من ر جزء ر يتفاعل الممثل معه وهذا وصف ي ً .مخططات حالة االستخدام الحقا User stories are another common way of describing certain features or parts of our application. User stories are shorter than use-case descriptions, usually only one-two sentence long. They typically follow this format: ميات أو أجزاء معينة من تعد قصص المستخدم طريقة شائعة أخرى لوصف ر تطبيقنا .قصص المستخدم أقرص من أوصاف حالة االستخدام ،وعادة ما تكون ً جملتي فقط .يتبعون عادة هذا التنسيق: بطول جملة واحدة أو ر As a < type of user >, I want < some goal > so that < some reason >. Examples: “As a user, I want to add notes to my expenses, so that I can identify ”them later on. ً نفقات ،حت أتمكن من التعرف عليها مستخدما ،أريد إضافة مالحظات إىل بصفت ي " ً ي الحقا". “As a power user, I want to retrieve the app’s database file, so that I can ”inspect it on any computer. ً ً متمرسا ،أريد اسيداد ملف قاعدة بيانات التطبيق ،حت أتمكن مستخدما "بصفت ي من فحصه عىل أي جهاز كمبيوتر". If you can’t describe a user story in one or two sentences, you may need to split it into multiple, smaller user stories. These larger user stories are known as epics. Epics cover a bigger chunk of functionality, like in the following case: جملتي ،فقد تحتاج إىل إذا لم تتمكن من وصف قصة مستخدم يف جملة واحدة أو ر ُ األكي هذه تقسيمها إىل قصص مستخدم متعددة وأصغر .تعرف قصص المستخدم ر بالمالحم .تغط المالحم ً أكي من الوظائف ،كما يف الحالة التالية: جزءا ر ي 15 “As a traveler, I want to track my expenses while abroad, so that I don’t exceed my budget.” ً حت ال أتجاوز، نفقات أثناء تواجدي بالخارج أرغب يف تتبع، مسافرا "بصفت ي ي ".انيت ر مي ي This epic could be split into many user stories including these: :يىل يمكن تقسيم هذه الملحمة إىل العديد من قصص ر المستخدمي بما يف ذلك ما ي “As a user, I want to create new trips, so that I can track each of my travels separately.” ً حت أتمكن من تتبع كل رحلة من، أريد إنشاء رحالت جديدة، مستخدما "بصفت ي ".رحالت عىل حدة ي “As a business traveler, I want to tag my business trips, so that I can separate them from my private travels.” ً ، أود وضع عالمات عىل رحالت العمل الخاصة ر يت، مسافرا بغرض العمل "بصفت ي ".رحالت الخاصة حت أتمكن من فصلها عن ي User stories are often written on sticky notes or index cards. You’ll see them arranged on walls or tables during meetings and discussions. ستراها.غال ًبا ما تتم كتابة قصص المستخدم على مالحظات الصقة أو بطاقات فهرسة مرتبة على الجدران أو الطاوالت أثناء االجتماعات والمناقشات. 16 Unlike use-case descriptions, user stories don’t capture the feature details. They serve as discussion starters instead. هم.المية ال تلتقط قصص المستخدم تفاصيل ر، عىل عكس أوصاف حالة االستخدام .بمثابة بداية مناقشة بدال من ذلك User stories are about communication, and you’ll usually see them in agile projects. Whereas use-case descriptions are preferably used by Waterfall methodologies. بينما. وعادة ما تراها يف مشاري ع رشيقة، المستخدمي حول التواصل تدور قصص ر .يفضل استخدام أوصاف حالة االستخدام بواسطة منهجيات الشالل SECTION 4.3 WHY DO WE NEED A COMMON DESCRIPTIVE LANGUAGE? The first two steps of the object-oriented analysis don’t require any special tool or design language. .خطوتي من التحليل الموجه للكائنات أي أداة خاصة أو لغة تصميم ال تتطلب أول ر 17 We only need some text-editing software. Even a piece of paper or a whiteboard would be sufficient to collect the requirements and jot down the use-cases or user stories. حت قطعة من الورق أو السبورة.نحتاج فقط إىل بعض برامج تحرير النصوص .المستخدمي ستكون كافية لجمع المتطلبات وتدوين حاالت االستخدام أو قصص ر The next steps require us to depict the classes that form our system. How they behave and what attributes they need. ه كيف يترصفون وما ي.الت تشكل نظامنا تتطلب الخطوات التالية منا تصوير الفئات ي .الت يحتاجون إليها السمات ي We also need to visualize how the objects interact with each other. ً .أيضا إىل تصور كيفية تفاعل الكائنات مع بعضها البعض نحتاج 18 The development community faced this very same problem. The lack of a commonly accepted design language lead to the proliferation of different nonstandard approaches. يؤدي عدم وجود لغة تصميم مقبولة بشكل عام.واجه مجتمع التنمية هذه المشكلة نفسها .إلى انتشار مناهج مختلفة غير قياسية We could also try to come up with a way to draw everything from classes to object interactions. Luckily, we don’t have to. ً أيضا محاولة التوصل إىل طريقة لرسم كل ر .شء من الفئات إىل تفاعالت الكائن يمكننا ي . ليس علينا ذلك، لحسن الحظ The Unified Modeling Language is a common design language that was released in 1997. UML provides a set of standard diagram types that can be used to describe both the structure and the behavior of software systems. UML يوفر.1997 لغة النمذجة الموحدة هي لغة تصميم شائعة تم إصدارها في عام مجموعة من أنواع المخططات القياسية التي يمكن استخدامها لوصف كل من بنية وسلوك أنظمة البرامج We’ll dig deeper into UML in the upcoming section. سوف نتعمق ر . يف القسم القادمUML أكي يف 19 CHAPTER 5 UML BASICS AND FUNDAMENTAL DIAGRAM TYPES Understanding a software system just by looking at its source code can be very time-consuming. And communicating ideas about software design or business processes is even harder if there’s no commonly accepted way to do it. ويكون.برمج بمجرد النظر إىل كود المصدر الخاص به مضيعة للوقت قد يكون فهم نظام ي توصيل األفكار حول تصميم البامج أو العمليات التجارية ر أكب صعوبة إذا لم تكن هناك طريقة مقبولة بشكل عام للقيام بذلك. The Unified Modeling Language - in short UML - was introduced to solve this problem. UML is not a textual programming language, but rather a graphical notation; a set of diagrams that help in designing and communicating software systems. ليست لغةUML . لحل هذه المشكلة- UML باختصار- تم تقديم لغة النمذجة الموحدة الت تساعد يف تصميم ه رمز مجموعة من الرسوم البيانية ي.رسوم ي بل ي، برمجة نصية .وتوصيل أنظمة البمجيات We can use these diagrams to describe the objects that form a system and their interactions. UML has many diagram types. We’ll be discussing the most common ones. يوجد يف.الت تشكل النظام وتفاعالتها يمكننا استخدام هذه المخططات لوصف الكائنات ي ً سنناقش ر. العديد من أنواع المخططاتUML .أكبها شيوعا The use-case diagram describes the functional model of a system. That is, the functionality of a system from the user’s point of view. وظيفة النظام من وجهة نظر، أي.الوظيف للنظام يصف مخطط حالة االستخدام النموذج ي .المستخدم 1 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS To describe the structure of a system, UML provides structural diagrams. We’ll talk about the class diagram, which can be used to describe the structure of a system in terms of objects, attributes, operations, and relations. والذي، سنتحدث عن مخطط الفصل. مخططات هيكليةUML يوفر، لوصف هيكل النظام .يمكن استخدامه لوصف هيكل النظام من حيث العنارص والسمات والعمليات والعالقات UML lets us model dynamic behavior, too. The behavioral diagrams describe the functionality of the system, focusing on what happens and the interactions between objects. 2 ً ، تصف المخططات السلوكية وظائف النظام.الديناميك أيضا نمذجة السلوكUML يتيح لنا ي .مع البكب عىل ما يحدث والتفاعالت بي الكائنات UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We’ll talk about the actual diagrams shortly. ً سنتحدث عن المخططات الفعلية .قريبا The best part about UML is that it’s independent of any particular programming language. We can start coding an object-oriented software based on UML diagrams. If those diagrams are detailed enough, they can be converted to source code. يمكننا البدء يف ترمب برنامج. هو أنه مستقل عن أي لغة برمجة معينةUML أفضل جزء يف ً ، كاف ٍ إذا كانت هذه المخططات مفصلة بشكل.UML كائت المنج بناء عىل مخططات ي .فيمكن تحويلها إىل كود المصدر 3 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Now, let’s see some ways of using UML in real-life.We can quickly draw a diagram to sketch a specific part of a software or a new functionality. I did that myself on numerous occasions. Whenever something was unclear, I started to sketch UML diagrams before writing a single line of code. يمكننا برسعة رسم مخطط. يف الحياة الواقعيةUML دعنا نرى بعض طرق استخدام، اآلن كلما.بنفس يف مناسبات عديدة فعلت ذلك.لرسم جزء معي من برنامج أو وظيفة جديدة ي قبل كتابة سطر واحد منUML بدأت يف رسم مخططات، شء غب واضح كان هناك ي .التعليمات البمجية The benefit was that I not only understood what I should implement, I also had a design. A documentation that could be used to communicate my ideas with other team members. ً .أيضا بل كان لدي تصميم، أنت لم أفهم فقط ما يجب أن أقوم بتنفيذه ه ي كانت الفائدة ي .وثيقة يمكن استخدامها لتوصيل أفكاري مع أعضاء الفريق اآلخرين Another frequent use of UML is drawing diagrams from existing code. This technique is called reverse engineering, and it helps to understand and document a system. تسىم هذه التقنية. هو رسم مخططات من كود موجودUML استخدام متكرر آخر لـ . وه تساعد عىل فهم النظام وتوثيقه ي، بالهندسة العكسية 4 We can also use UML to create the detailed blueprint of a system. While sketches focus only on the essential aspects of a system, the blueprint is about completeness. Detailed UML blueprints are usually required for software developed using a Waterfall-approach - and less frequently for Agile projects. ً بينما تركز الرسومات فقط عىل.تفصيىل للنظام إلنشاء مخططUML يمكننا أيضا استخدام ي ً عادة ما تكون مخططات. فإن المخطط يدور حول االكتمال، الجوانب األساسية للنظام وف كثب من األحيان ي- الت تم تطويرها باستخدام نهج الشالل المفصلة مطلوبة للبامج يUML .Agile أقل لمشاري ــع You can use UML diagrams to describe any system that’s developed using an object-oriented programming language. UML has become so popular that it's also used for non-object-oriented projects. لوصف أي نظام تم تطويره باستخدام لغة برمجة موجهةUML يمكنك استخدام مخططات ً ً ً شائعا جدا لدرجة أنه يستخدم أيضا للمشاري ــع غب الموجهة UML أصبح.للكائنات .للكائنات 5 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS SECTION 5.1 THE USE-CASE DIAGRAM Let’s start with the use-case diagram. It’s one of the simplest UML diagrams. .UML إنه أحد أبسط مخططات.لنبدأ بمخطط حالة االستخدام Its purpose is to visualize the functional requirements of the system. Use-case diagrams show groups of related use-cases. Sometimes they may include all the use-cases. ُ تظهر مخططات حالة االستخدام.والغرض منه هو تصور المتطلبات الوظيفية للنظام يف بعض األحيان قد تشمل جميع حاالت.مجموعات من حاالت االستخدام ذات الصلة .االستخدام The result is an overview of the system that may include several written use-cases. You’ll rarely create use-case diagrams for a single use-case description. ً .والنتيجة ه نظرة عامة عىل النظام قد تتضمن العديد من حاالت االستخدام المكتوبة نادرا ي ئ .ستنس مخططات حالة االستخدام لوصف حالة استخدام واحدة ما To represent a use-case, we draw an oval in the middle of the screen and put the title of the use case in it. نقوم برسم شكل بيضاوي يف منتصف الشاشة ووضع عنوان حالة، لتمثيل حالة االستخدام .االستخدام فيه “Create a Trip Entry,” “Edit Trip,” “Export App Database” - these are examples of use-cases from our Travel Expense app mentioned before. هذه أمثلة- " "تصدير قاعدة بيانات التطبيق، " "تحرير الرحلة، ""إنشاء إدخال رحلة ً .لحاالت االستخدام من تطبيق مصاريف السفر المذكور سابقا 6 We use stick figures to represent the actors. As you may recall, actors are human beings or other systems that may interact with our system. الممثلون هم برس أو أنظمة أخرى، كما قد تتذكر.نستخدم األشكال الالصقة لتمثيل الممثلي .قد تتفاعل مع نظامنا We draw the stick person to the left or the right of the diagram. The actor’s name goes below the stick figure. اسم الممثل يذهب إىل ما دون.التخطيط نرسم شخص العصا إىل يسار أو يمي الرسم ي .الشكل العصا We usually draw the primary actors on the left side and the secondary ones on the right side of the use-case diagram. عادة ما نرسم الممثلي األساسيي عىل الجانب األيرس واألطراف الثانوية عىل الجانب األيمن .من مخطط حالة االستخدام Next, we draw lines to represent the interaction between an actor and a use-case. A mobile user can create or edit a trip entry, but he cannot export the app’s database. The power user can perform all these actions. 7 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS ً بعد ذلك ،نرسم خطوطا لتمثيل التفاعل بي الفاعل وحالة االستخدام .يمكن لمستخدم ّ الجوال إنشاء إدخال رحلة أو تعديله ،لكن ال يمكنه تصدير قاعدة بيانات التطبيق .يمكن للمستخدم القوي تنفيذ كل هذه اإلجراءات. We need to visualize our system’s boundaries if it interacts with other systems. For that, we draw a frame around all use-cases and actors that belong to a given system. نحتاج إىل تصور حدود نظامنا إذا كان يتفاعل مع أنظمة أخرى .لذلك ،نرسم ً إطارا حول تنتىم إىل نظام معي. الت ي جميع حاالت االستخدام والجهات الفاعلة ي Let’s say that we’re relying on an external iCloud-based storage. I’ll represent this external system as a separate actor on the right side. I even changed its visual representation to show that it’s not a human actor. Most tools allow you to do that. لنفبض أننا نعتمد عىل وحدة تخزين خارجية قائمة عىل .iCloudسأقوم بتمثيل هذا النظام ئ المرئ إلظهار أنه أنت غبت تمثيله الخارج ي كعنرص فاعل منفصل عىل الجانب األيمن .حت ي ي ً ً ليس ممثال برسيا .تسمح لك معظم األدوات بفعل ذلك. UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS 8 The “Create a Trip Entry” and the “Edit Trip” use cases would rely on the cloud to back up their data. So, I connect these use-cases with the external system. تعتمد حاالت استخدام "إنشاء دخول رحلة" و "تحرير الرحلة" عىل السحابة لنسخ بياناتهم ً .الخارج أقوم بتوصيل حاالت االستخدام هذه بالنظام، لذلك.احتياطيا ي The frame makes it obvious where our app’s boundaries end. Use-case diagrams provide a clear way to communicate the high-level features and the scope of the system. توفر مخططات حالة االستخدام طريقة واضحة.تنته حدود تطبيقنا يوضح اإلطار أين ي .لتوصيل المبات عالية المستوى ونطاق النظام You can quickly tell what our system does just by looking at this usecase diagram. .يمكنك معرفة ما يفعله نظامنا برسعة بمجرد النظر إىل مخطط حالة االستخدام هذا 9 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS This system lets users create new trips and edit existing ones. Power users can even export the database. The app relies on an external cloud system to store its data. يمكن.يتيح هذا النظام للمستخدمي إنشاء رحالت جديدة وتعديل الرحالت الحالية سحائ يعتمد التطبيق عىل نظام.للمستخدمي المتمرسي حت تصدير قاعدة البيانات ي .خارج لتخزين بياناته ي Such a simple diagram makes it clear what the system does and what it doesn’t do. A customer or a user can easily see if needed features are missing. The absence of use cases shows what the system doesn’t do. يمكن للعميل أو.التخطيط البسيط ما يفعله النظام وما ال يفعله يوضح هذا الرسم ي يظهر غياب حاالت.المستخدم بسهولة معرفة ما إذا كانت المبات المطلوبة مفقودة .االستخدام ما ال يفعله النظام The UML use-case diagram includes other artifacts and relationships between use-cases. We’re going to ignore them as they tend to overcomplicate our design and the benefits are questionable. مصنوعات وعالقات أخرى بي حاالتUML يتضمن مخطط حالة االستخدام يف . سوف نتجاهلها ألنها تميل إىل تعقيد تصميمنا بشكل مفرط والمزايا موضع شك.االستخدام You can’t go wrong if you focus on the actors, the use-cases, and their interactions. You’ll be able to easily create your own use-case diagrams and communicate your ideas in a clear and concise way. ً ستكون.تخط إذا ركزت عىل الممثلي وحاالت االستخدام وتفاعالتهم ئ قادرا عىل ال يمكنك أن .إنشاء مخططات حالة االستخدام الخاصة بك وإيصال أفكارك بطريقة واضحة وموجزة 10 Use-case diagrams provide an easy-to-understand overview of the features of our system. .توفر مخططات حالة االستخدام نظرة عامة سهلة الفهم عىل مبات نظامنا They are not a replacement for written use-case descriptions, though. Use-case descriptions include more information to ensure that we don’t miss any of the important details or requirements. ً تتضمن أوصاف حالة.فه ليست بديال عن أوصاف حالة االستخدام المكتوبة ، ومع ذلك ًي االستخدام مزيدا من المعلومات لضمان عدم تفويت أي من التفاصيل أو المتطلبات .المهمة 11 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS SECTION 5.2 THE CLASS DIAGRAM Without any doubt, class diagrams are the most frequently used UML diagram types. After identifying the entities that form our system, we start creating class diagrams for each of them. ً فإن الرسوم البيانية للفئة ه ر، بدون أدئ شك بعد.استخداما UML أكب أنواع مخططات ي . نبدأ يف إنشاء الرسوم البيانية للفصول لكل منها، الت تشكل نظامنا تحديد الكيانات ي A class is represented on the class diagram as a rectangle with three compartments. First, we need to list the class’s name. ً نحتاج إىل، أوال.يتم تمثيل فئة يف مخطط الفصل عىل شكل مستطيل مكون من ثالث أقسام .رسد اسم الفصل When naming our classes, we must adhere to some rules. These rules are known as naming conventions. A class name should be a noun in the singular, and it needs to start with an uppercase letter. ُ تعرف هذه القواعد باسم اصطالحات. يجب أن نلبم ببعض القواعد، عند تسمية فصولنا ً يجب أن يكون اسم الفصل.التسمية . ويجب أن يبدأ بحرف كبب، اسما بصيغة المفرد If the name consists of multiple words, we need to uppercase each word, like in this example: كما، فنحن بحاجة إىل كتابة كل كلمة بأحرف كببة، إذا كان االسم يتكون من كلمات متعددة :يف هذا المثال 12 This style is called UpperCamelCase, which is CamelCase with the first letter capitalized. مع كتابة الحرفCamelCase وهو عبارة عن، UpperCamelCase يسىم هذا النمط .األول بحرف كبب CamelCase is the practice of starting each word in a compound word or sentence with a capital. .ه ممارسة بدء كل كلمة يف كلمة مركبة أو جملة بحرف كبب يCamelCase Why do we need rules? Why can’t we just use any character sequence to name our classes? Well, we could do that. ً ، لماذا نحتاج القواعد؟ لماذا ال يمكننا استخدام أي تسلسل أحرف لتسمية فصولنا؟ حسنا .يمكننا فعل ذلك Yet, a naming convention lets us focus on important issues instead of arguing over syntax and names. With a commonly accepted set of rules, we can easily read the source code written by other developers, even if they’re from another company, country or continent. Standards are useful. ً فإن اصطالح التسمية يتيح لنا البكب عىل القضايا المهمة بدال من الجدل حول، ومع ذلك يمكننا بسهولة قراءة، من خالل مجموعة القواعد المقبولة بشكل عام.بناء الجملة واألسماء . حت لو كانوا من رسكة أو بلد أو قارة أخرى، شفرة المصدر المكتوبة بواسطة مطورين آخرين .المعايب مفيدة 13 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS All right, so our class name should be a noun in UpperCamelCase. Let’s fill the other two compartments, too. The next one lists the attributes. ً ً يجب أن يكون اسم الفصل الخاص بنا، حسنا دعونا نمأل.UpperCamelCase اسما يف ً .التاىل يرسد السمات .أيضا المقصورتي األخريي ي The attribute names should be concise, and they should follow the lowerCamelCase format, that is, with the first letter lowercase and the first letters of subsequent words in uppercase. أي أن، السفىل السفىل ويجب أن تتبع تنسيق الحرف، يجب أن تكون أسماء السمات موجزة ي ي ً .صغبا والحروف األوىل من الكلمات الالحقة بأحرف كببة يكون الحرف األول A Trip has a name, it has a creation date (createdAt); it needs to have a home currency (homeCurrency), a start date (startsAt) and an end date (endsAt). لها تاري ــخ إنشاء (تم إنشاؤها يف) ؛ يجب أن يكون لها عملة محلية (عملة، رحلة لها اسم .)(ينته وتاري ــخ بدء (بداية) وتاري ــخ انتهاء، )مبلية ي UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS It’s useful to specify the type of the attribute. We can do that by writing the data type after the attribute’s name separated by a colon. So, here’s our Trip class with the attribute names and types: يمكننا القيام بذلك عن طريق كتابة نوع البيانات بعد اسم.من المفيد تحديد نوع السمة ً ً : إليك فئة الرحلة مع أسماء السمات وأنواعها، حسنا .السمة مفصوال بنقطتي 14 The data types need to be adjusted to whatever programming language you’re using. This example makes perfect sense in Swift. For ObjectiveC, you may want to use different types, like NSString instead of String and NSDate for dates. ً هذا المثال منطف.يجب تعديل أنواع البيانات لتالئم أي لغة برمجة تستخدمها تماما يف ي NSString مثل، قد ترغب يف استخدام أنواع مختلفة، Objective-C بالنسبة إىل.Swift ً . للتواري ــخNSDate وString بدال من Even if we leave it as it is, nobody will have issues understanding that you refer to a String or a Date or an integer. فلن يواجه أي شخص مشكالت يف فهم أنك تشب إىل سلسلة أو تاري ــخ، حت لو تركناه كما هو .أو عدد صحيح Next comes the operations compartment. This is where we list the class’s methods. Method names should be verbs in lowerCamelCase. يجب أن تكون. هذا هو المكان الذي نرسد فيه طرق الفصل.يأئ قسم العمليات بعد ذلك ي .LowerCamelCase أسماء الطرق عبارة عن أفعال مكتوبة بأحرف 15 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We can also specify method arguments. The parameters appear within the parenthesis as name-data type pairs, like in setName(value: String) ً تظهر المعلمات داخل األقواس كأزواج من نوع بيانات.يمكننا أيضا تحديد حجج الطريقة . .)String : (القيمةsetName كما هو الحال يف، االسم To show that a method returns something, we add a colon after the closing parenthesis followed by the return type: ُ ً ً :متبوعا بنوع اإلرجاع نضيف نقطتي بعد قوس اإلغالق، لتوضيح أن العملية ترجع شيئا ما getName(): String And we can also have methods that have arguments and a return type. ً .أيضا أن يكون لدينا عمليات تحتوي عىل وسيطات ونوع إرجاع ويمكننا 16 getEntries(from: Date, to: Date): List takes two arguments called fromDate and endDate, both of type Date. The method returns a List of entries. This list could contain multiple values or just a single value, or it could even be empty. We don’t specify this in our class diagram. وfromDate تأخذ القائمة وسيطتي تسىم:to: Date) ،getEntries (from: Date يمكن أن تحتوي. تقوم الطريقة بإرجاع قائمة اإلدخاالت.Date كالهما من النوع، endDate نحن ال نحدد هذا يف. أو قد تكون فارغة، هذه القائمة عىل قيم متعددة أو قيمة واحدة فقط .مخطط الفصل لدينا SECTION 5.3 VISIBILITY Now, let’s talk about visibility. UML allows us control who can access the attributes and the methods of our classes. التحكم يف من يمكنه الوصول إىل سمات وطرقUML يتيح لنا. لنتحدث عن الرؤية، اآلن .فصولنا الدراسية We have the following visibility levels in UML: :UML لدينا مستويات الرؤية التالية يف • + means public visibility. A class method or attribute marked as public can be used by code outside of the object. الت تم تميبها يمكن استخدام طريقة الفئة أو السمة ي.تعت الرؤية العامة ) ي+ ( • .عىل أنها عامة بواسطة رمز خارج الكائن • - denotes private access. Private attributes and methods can only be used within the class that defines them. Elements marked as private can’t be accessed directly from other classes. ال يمكن استخدام السمات واألساليب الخاصة إال.) تشب إىل الوصول الخاص-( • العنارص الممبة عىل أنها خاصة ال يمكن الوصول إليها.داخل الفصل الذي يحددها .مبارسة من الفئات األخرى • UML uses # to mark an element as protected. Protected visibility means that only child classes (and the defining class) will be able to access that attribute or method. 17 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS تعت الرؤية المحمية أن الفئات لتميب عنرص عىل أنه# UML • يستخدم ي.محىم ي الفرعية فقط (والفئة التعريفية) ستكون قادرة عىل الوصول إىل تلك السمة أو .الطريقة • ~ denotes package visibility, which makes sense in some programming languages that let us group our code into logical units and provide a namespace for this group. Using package visibility, we make our elements available within its enclosing package. الت تسمح لنا وهو أمر، يشب ~ إىل رؤية الحزمة منطف يف بعض لغات البمجة ي ي .بتجميع الكود الخاص بنا يف وحدات منطقية وتوفب مساحة اسم لهذه المجموعة . نجعل عنارصنا متاحة داخل الحزمة المرفقة، باستخدام رؤية الحزمة • UML provides these visibility tags, but it’s up to us to adapt it to the language we’re using. There’s one rule that’s commonly applicable to all object-oriented languages: .الت نستخدمها ولكن األمر مبوك لنا لتكييفها مع اللغة ي، عالمات الرؤية هذهUML توفر :هناك قاعدة واحدة تنطبق بشكل عام عىل جميع اللغات الشيئية Expose only as much as needed and hide everything else. .شء آخر فضح فقط قدر الحاجة وإخفاء كل ي Class attributes will usually have private or protected access. We should provide public setters and getters instead of allowing everybody to access our class’s data. This lets us control what the callers do with our class’s attributes. ً ُ الم َحددين ُ يجب أن نوفر.عادة ما يكون لسمات الفئة وصول خاص أو محىم والمعرفي ِ ي ً . العامي بدال من السماح للجميع بالوصول إىل بيانات صفنا يتيح لنا ذلك التحكم يف ما يفعله .المتصلون بسمات صفنا In our Trip class, we could make the name attribute public. Callers could set and retrieve it, which seems to work as expected. والذي، يمكن للمتصلي ضبطه واسبداده. يمكننا جعل سمة االسم عامة، يف فصل الرحلة .يبدو أنه يعمل كما هو متوقع 18 But, what if we need to make sure that a Trip’s name is never shorter than say three characters? ماذا لو احتجنا إىل التأكد من أن اسم الرحلة ال يكون أقرص من ذكر ثالثة أحرف؟، ولك ن There’s no way to enforce this requirement. .ال توجد طريقة لفرض هذا المطلب Another example. The trip’s start date needs to be earlier than its end date. Yet, callers can freely set any start or end date. يمكن للمتصلي، ومع ذلك. يجب أن يكون تاري ــخ بدء الرحلة قبل تاري ــخ انتهائها.مثال آخر .تعيي أي تاري ــخ بدء أو تاري ــخ انتهاء بحرية 19 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS I’m going to change the visibility of all these attributes to private. Now, we can access them exclusively from within the class’s own methods. After this change, other objects can’t set or retrieve these attributes. ً يمكننا الوصول إليها ح، اآلن.سأقوم بتغيب مستوى رؤية كل هذه السمات إىل خاص رصيا من .داخل األساليب الخاصة بالفصل . ال يمكن للكائنات األخرى تعيي أو اسبداد هذه السمات، بعد هذا التغيب They are, well, private to the Trip class. ً . خاصون بفئة الرحلة، حسنا ، هم Awesome! But then, how do we set, retrieve or modify them? كيف يمكننا ضبطها أو اسبدادها أو تعديلها؟، مدهش! ولكن بعد ذلك Here’s the solution: I provide public getters and setters for each of these attributes: : أقدم معلومات عامة ومحددات لكل سمة من هذه السمات:إليكم الحل 20 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Now we can check whether the name is at least three characters long by validating the name parameter in the setName() method. If it’s shorter, we just print a warning message and return. يمكننا اآلن التحقق مما إذا كان االسم يتكون من ثالثة أحرف عىل األقل عن طريق التحقق من فنحن نطبع رسالة تحذير، إذا كانت أقرص.)( setName صحة معلمة االسم يف طريقة .ونرجع class Trip { public func setName(value: String) { if value.count < 3 { print("Name too short!") return } //... } } Also, we validate the start and the end date in the corresponding setters. ً . نتحقق من صحة تاري ــخ البدء واالنتهاء يف المحددات المقابلة، أيضا public func setStartDate(date: Date) { if date > endDate { print("Trip's start date > end date") return } //... } public func setEndDate(date: Date) { 21 if date < startDate { print("Trip's end date < start date") return } //... } We are now in full control of our class’s internal data. Setters let us check the input argument, and getters allow us to modify the value before returning it. For example, we could return a date in the user’s time zone. تسمح لنا الحروف بفحص وسيطة.نحن اآلن نتحكم بشكل كامل يف البيانات الداخلية لفصلنا يمكننا إرجاع، عىل سبيل المثال. وتسمح لنا الحروف بتعديل القيمة قبل إعادتها، اإلدخال .تاري ــخ يف المنطقة الزمنية للمستخدم So far, we’ve seen how to represent a single class. Class diagrams let us also show the relationships between the classes in our system. We’ll talk about relationships next. ً تتيح لنا مخططات الفصل أيضا إظهار العالقات.لقد رأينا حت اآلن كيفية تمثيل فئة واحدة . سنتحدث عن العالقات بعد ذلك.بي الفئات يف نظامنا SECTION 5.4 ASSOCIATIONS The next logical step after identifying the key classes in our system is figuring out the relationships between them. Use-cases or user stories will help us during this process. .ه معرفة العالقات بينها الخطوة المنطقية التالية بعد تحديد الفئات الرئيسية يف نظامنا ي .ستساعدنا حاالت االستخدام أو قصص المستخدم خالل هذه العملية 22 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Here’s one of the functional requirements of the TravelExpense app. TravelExpense. إليك أحد المتطلبات الوظيفية لتطبيق “As a traveler, I want to track my expenses while abroad, so that I don’t exceed my budget.” ً ".انيت أرغب يف تتبع، مسافرا "بصفت ي حت ال أتجاوز مب ي، نفقائ أثناء تواجدي بالخارج ي We have a Trip and an Expense class. Each trip will include it’s travel expenses. So, there needs to be some relationship between the Trip and the Expense class. يجب أن تكون هناك، لذلك. ستشمل كل رحلة نفقات السفر.لدينا فئة الرحلة والمرصوفات .عالقة بي الرحلة وفئة المصاريف To express this relationship, we draw a solid line between these classes. ً ً .متينا بي هذه الفئات نرسم خط ا، للتعبب عن هذه العالقة This line represents an association. The association tells us that the classes refer to each other. . تخبنا الجمعية أن الفصول تشب إىل بعضها البعض.هذا الخط يمثل ارتباط We can be more specific here. The Trip class needs to know about its expenses. Should the Expense class also know about the Trip class? ً يمكننا أن نكون ر هل يجب أن يعرف. يحتاج فصل الرحلة إىل معرفة نفقاته.أكب تحديدا هنا ً فصل المصاريف أيضا عن فئة الرحلة؟ We’ve already talked about the drawbacks of tightly coupled systems. Tight coupling is something that you should definitely try to avoid. Let me illustrate the issue it causes. 23 شء يجب أن االقبان الضيق هو ي.لقد تحدثنا بالفعل عن عيوب األنظمة شديدة االقبان .الت تسببها اسمحوا يىل أن أوضح المشكلة ي.تحاول بالتأكيد تجنبه The Trip refers to the Expense class. That's fine, since a trip can have expenses associated with it. What happens if also the Expense refers to the Trip class? . ألن الرحلة يمكن أن يكون لها نفقات مرتبطة بها، ال بأس.تشب الرحلة إىل فئة المصاريف ً ماذا يحدث إذا كانت المصاريف تشب أيضا إىل فئة الرحلة؟ Because of this reference, if we tried to use the Expense class in other parts of the system, we’d need to also bring the Trip class with it. ، إذا حاولنا استخدام فئة المصاريف يف أجزاء أخرى من النظام، بسبب هذا المرجع ً .أيضا إىل إحضار فئة الرحلة معها فسنحتاج This doesn’t make sense, as we should be able to use an Expense without a Trip. . حيث يجب أن نكون قادرين عىل استخدام المصاريف بدون رحلة، منطف هذا غب ي UML lets us express directed associations. By drawing a solid line that ends with an open arrowhead, we show that only one of the classes 24 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS refers to the other one. The arrow points to the class that’s referred to by the other class. ينته برأس سهم من خالل رسم خط متصل. التعبب عن االرتباطات الموجهةUML يتيح لنا ي يشب السهم إىل الفصل الذي يشب إليه. نظهر أن فئة واحدة فقط تشب إىل األخرى، مفتوح .الفصل اآلخر In our current example, the association is bi-directional. Let’s change it to a directed association. . دعونا نغبها إىل ارتباط موجه. تكون الرابطة ثنائية االتجاه، الحاىل يف مثالنا ي Now it shows that the Expense is associated with the Trip, but the Expense class doesn’t know anything about the Trip class. شء عن فئة لكن فئة المصاريف ال تعرف أي ي، يظهر اآلن أن المصاريف مرتبطة بالرحلة .الرحلة A Trip will usually have multiple expenses. We can represent the multiplicity of associated objects as follows: :التاىل يمكننا تمثيل تعدد الكائنات المرتبطة عىل النحو ي.عادة ما يكون للرحلة نفقات متعددة • - a Trip can have zero or more Expenses يمكن أن تحتوي الرحلة عىل مصاريف صفرية أو رأكب - 1 - a Trip must have exactly one homeCurrency يجب أن تحتوي الرحلة عىل عملة مبلية واحدة بالضبط- 1 0..1 - a Trip may or may not have a single note - قد تحتوي الرحلة أو ال تحتوي عىل مالحظة واحدة- 1..0 - - 25 Associations can show multiplicities at both ends of the line. The default multiplicity is one. So, if there’s no multiplicity shown, you can safely assume it’s one. إذا لم، لذلك.اض هو واحد يمكن أن تظهر الجمعيات تعدد يف التعدد االفب ي.طرف السطر ي . فيمكنك افباض أنه واحد، يكن هناك تعدد معروض We can also display the name of the class property for the given association. ً .أيضا عرض اسم خاصية الفئة لالرتباط المحدد يمكننا The association isn’t the only kind of relationship we can have between classes. Next, we’re going to talk about generalization. ، بعد ذلك.الت يمكن أن تكون لدينا بي الطبقات الرابطة ليست النوع الوحيد من العالقات ي .سوف نتحدث عن التعميم 26 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS SECTION 5.5 GENERALIZATION In UML, we use generalization to express that one model element is based on another model element. Generalization is represented as a solid line with a hollow arrowhead that points to the parent. نستخدم التعميم للتعبب عن أن عنرص نموذج واحد يعتمد عىل عنرص نموذج، UML يف . يتم تمثيل التعميم كخط متصل برأس سهم مجوف يشب إىل األصل.آخر Let’s say that we need a special Trip class for our business trips. .لنفبض أننا بحاجة إىل فئة رحلة خاصة لرحالت العمل لدينا BusinessTrip would inherit from the Trip class and this is how we represent it in UML: :UML الت نمثلها يف ه الطريقة ي سوف ترث رحلة العمل من فئة الرحلة وهذه ي Because BusinessTrip inherits everything from its parent, we must only specify the attributes and operations that are specific to the child. ً يجب علينا فقط تحديد السمات، شء من الرسكة األم يرث كل يBusinessTrip نظرا ألن .والعمليات الخاصة بالطفل 27 A parent can have multiple children. .يمكن أن يكون للوالد عدة أطفال And we can also have child classes that inherit from different parents. ً .أيضا أن نحصل عىل فصول أطفال ترث من آباء مختلفي ويمكننا Some programming languages support multiple inheritance; C++, Perl, Python - just to name a few. عىل سبيل المثال ال- Python ،Perl ،C ++ تدعم بعض لغات البمجة الوراثة المتعددة ؛ .الحرص Many modern programming languages only allow single inheritance, that is, inheriting from one parent class. Single inheritance reduces the complexity and avoids the ambiguity that comes with multiple inheritance. أي الوراثة من فئة أصل، تسمح العديد من لغات البمجة الحديثة فقط بالمباث الفردي .يأئ مع الوراثة المتعددة المباث الفردي يقلل من التعقيد ويتجنب الغموض الذي ي.واحد 28 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Some argue that multiple inheritance has more benefits than drawbacks. However, it’s certainly easier to make mistakes when using multiple inheritance. يجادل البعض بأن الوراثة المتعددة لها فوائد ر فمن األسهل، ومع ذلك.أكب من العيوب .بالتأكيد ارتكاب األخطاء عند استخدام الوراثة المتعددة UML doesn’t restrict generalization to classes. It can also be used in usecase or component diagrams. This lets us indicate that a child element receives it’s parent’s attributes, operations and relationships. ً يمكن استخدامه أيضا يف حالة االستخدام أو المخططات. التعميم عىل الفئاتUML ال يقيد .الفرع يتلف سمات وعمليات وعالقات الوالدين يتيح لنا هذا اإلشارة إىل أن العنرص.المكونة ي SECTION 5.6 DEPENDENCY, AGGREGATION, COMPOSITION AND REALIZATION We talk about a dependency relationship if changes in one of the classes may cause changes to the other. .نتحدث عن عالقة تبعية إذا كانت التغيبات يف أحد الفصول قد تسبب تغيبات يف اآلخر In UML, dependency is represented as a dashed line that ends with an open arrowhead. The arrow points to the dependency. يشب السهم إىل.ينته برأس سهم مفتوح يتم تمثيل التبعية كخط متقطع، UML يف ي .التبعية A dependency is a directed relationship. .ه عالقة موجهة التبعية ي 29 Dependency is often confused with Association, but there’s a big difference. Association indicates that a class has an attribute of the other class’s type. ً يشب االرتباط إىل أن الفصل. ولكن هناك فرق كبب، غالبا ما يتم الخلط بي التبعية واالرتباط .اش له سمة من نوع الفصل اآلخر الدر ي Whereas dependency is usually created when a class receives a reference to the other class (for instance, through a member function parameter). ً يف حي يتم إنشاء التبعية عادة عندما يتلف الفصل إشارة إىل الفئة األخرى (عىل سبيل المثال .) من خالل معلمة وظيفة العضو، AGGREGATION AND COMPOSITION Aggregation represents a part-whole relationship and is drawn as a solid line with a hollow diamond at the owner’s end. .كامل ويتم رسمه كخط متصل مع ماسة مجوفة يف نهاية المالك-يمثل التجميع عالقة جزء 30 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS This relationship is considered redundant because it expresses the same thing as the association. So, these two diagrams are equivalent: هذين، إذن.السء مثل االرتباط تعتب هذه العالقة زائدة عن الحاجة ألنها تعب عن نفس ي :المخططي متكافئي Composition is a stronger form of association. It shows that the parts live and die with the whole. In other words, composition implies ownership: بمعت. يظهر أن األجزاء تعيش وتموت مع الكل.التكوين هو شكل أقوى من أشكال االرتباط :يعت الملكية البكيب ي، آخر when the owning object is destroyed, the contained objects will be destroyed, too. ً .أيضا سيتم تدمب الكائنات الموجودة، عندما يتم تدمب الكائن المالك 31 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS The composition is represented as a filled diamond on the owner’s end connected with a solid line with the contained class. .يتم تمثيل التكوين كألماس معبأ يف نهاية المالك متصل بخط متصل مع الفئة المضمنة 32 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS The Expenses of a trip can’t exist without the Trip. If we delete the Trip instance, ، إذا حذفنا مثيل الرحلة.ال يمكن أن توجد نفقات الرحلة بدون الرحلة its expenses are going to be removed, too: ً :أيضا ستتم إزالة نفقاتها Realization indicates that a class implements the behavior specified by another model element. .يشب اإلدراك إىل أن الفئة تنفذ السلوك المحدد بواسطة عنرص نموذج آخر It is represented as a hollow triangle on the interface end connected with dashed lines with the implementer classes. .يتم تمثيله كمثلث مجوف عىل نهاية الواجهة متصل بخطوط متقطعة بفئات المنفذ 33 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We could specify an interface to ensure that all current and upcoming trip classes provide a common set of methods. This is a useful feature that allows polymorphic behavior. يمكننا تحديد واجهة للتأكد من أن جميع فئات الرحالت الحالية والقادمة توفر مجموعة . هذه مبة مفيدة تسمح بالسلوك متعدد األشكال.مشبكة من األساليب Here’s a quick summary of the relationships and their graphical representation: :الرسوم يىل ملخص رسي ــع للعالقات وتمثيلها ي فيما ي 34 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS 35 SECTION 5.7 SEQUENCE DIAGRAMS Use case and class diagrams are static diagrams. They are great at representing the structure of our system. ُ . إنها رائعة يف تمثيل هيكل نظامنا.تعد مخططات الحالة والفئة مخططات ثابتة What if we need to show how the objects interact with each other? When are objects created and for how long are they around? Static diagrams can’t answer these questions. ماذا لو احتجنا إىل إظهار كيفية تفاعل األشياء مع بعضها البعض؟ مت يتم إنشاء األشياء وإىل .مت تكون موجودة؟ الرسوم البيانية الثابتة ال يمكنها اإلجابة عىل هذه األسئلة UML provides dynamic diagrams to represent how objects communicate with each other. The most common dynamic diagram is the sequence diagram. الرسم. مخططات ديناميكية لتمثيل كيفية تواصل الكائنات مع بعضها البعضUML يوفر ً ر .شيوعا هو مخطط التسلسل األكب الديناميك التخطيط ي ي We use the sequence diagram to describe the flow of logic in one particular scenario. .نستخدم مخطط التسلسل لوصف تدفق المنطق يف سيناريو واحد معي A sequence diagram starts by drawing boxes at the top of the page. Each box represents an object. Since these are objects, we name them differently. “aTrip” instead of “Trip” and “anExpense” rather than “Expense.” ً . كل مربــع يمثل كائن.يبدأ مخطط التسلسل برسم مربعات ف أعىل الصفحة نظرا ألن هذه ي ً ً " بدال منan Expense" " وTrip" " بدال منaTrip" . فإننا نسميها بشكل مختلف، كائنات ."Expense" 36 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS We can also display the type after the instance’s name separated by a colon. This may be helpful in some cases: ً ً ً قد يكون هذا مفيدا يف بعض.يمكننا أيضا عرض النوع بعد اسم المثيل مفصوال بنقطتي :الحاالت The lifeline of an object is represented by the dotted lines beneath each box. This line shows the time the instance exists during the scenario. يوضح هذا الخط وقت وجود.يتم تمثيل شريان الحياة للكائن بالخطوط المنقطة أسفل كل مربع .المثيل أثناء السيناريو The sequence diagram also lets us show the messages sent from one object to the other. A message is basically a method call. ً ه يف الرسالة ي.يتيح لنا مخطط التسلسل أيضا إظهار الرسائل المرسلة من كائن إىل آخر .األساس استدعاء طريقة Now, let me illustrate the various messages in a practical example. I’ll be using StarUML, a UML diagramming software that can be downloaded for free from www.staruml.io. وهو، StarUML سأستخدم.عمىل اسمحوا يىل أن أوضح الرسائل المختلفة يف مثال، اآلن ي ً www.staruml.io. يمكن تبيله مجانا منUML تخطيط برنامج رسم ي 37 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Let’s assume that we have a persistenceManager object. This object is responsible for storing and retrieving entities in the app’s local database. هذا الكائن مسؤول عن تخزين واسبداد.persistentManager لنفبض أن لدينا كائن .الكيانات يف قاعدة البيانات المحلية للتطبيق The persistenceManager needs to create and store a TripEntity instance. First, I add the TripEntity object. The persistenceManager instance sends a create message to initiate a tripEntity object. The create message is represented as a dashed line with a stick arrowhead. ً أقوم بإضافة، أوال. وتخزينهTripEntity إىل إنشاء مثيلpersistenceManager يحتاج .tripEntity رسالة إنشاء لبدء كائنpersistentManager يرسل مثيل.TripEntity كائن .يتم تمثيل رسالة اإلنشاء عىل هيئة خط متقطع برأس سهم Next, the persistenceManager sends a regular message to the already created trip entity. This message corresponds to calling the addNote(note: String) method on the TripEntity instance. A regular message is shown as a solid line with a filled arrowhead. We can add parameters to our messages if we wish: رسالة عادية إىل كيان الرحلة الذي تم إنشاؤهpersistentManager يرسل، بعد ذلك سلسلة) يف مثيل: (مالحظةaddNote تتوافق هذه الرسالة مع استدعاء طريقة.بالفعل ئ يمكننا إضافة معلمات.ممتىل تظهر الرسالة العادية كخط متصل مع رأس سهم.TripEntity :إىل رسائلنا إذا أردنا 38 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Although we could display the return message, only do it if it’s important. Return messages are implicit for synchronous messages, so we don’t have to display them. تعتب. إال أنها ال تفعل ذلك إال إذا كانت مهمة، عىل الرغم من أنه يمكننا عرض رسالة اإلرجاع . لذلك ال يتعي علينا عرضها، رسائل اإلرجاع ضمنية للرسائل المبامنة Asynchronous messages are drawn as solid lines with a stick arrowhead. The controller object sends an asynchronous save(trip: Trip) message to the persistenceManager. Disk operations are slow, so inserting a new record into the database is a perfect candidate for an asynchronous call. يرسل كائن وحدة التحكم.يتم رسم الرسائل غب المبامنة كخطوط متصلة برأس سهم عصا ، عمليات القرص بطيئة.persistentManager رحلة) إىل:رسالة حفظ غب مبامن (رحلة .مثاىل الستدعاء غب مبامن لذا فإن إدخال سجل جديد يف قاعدة البيانات هو مرشح ي When an object sends any async message, it doesn’t need to wait for a response. The asynchronous call gets executed in the background, and it 39 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS returns once it completes. Unlike synchronous calls, it doesn’t block the caller. يتم تنفيذ االستدعاء غب.داع النتظار الرد فال ي، عندما يرسل كائن أي رسالة غب مبامنة فإنه ال يحظر، عىل عكس المكالمات المبامنة. ويعود بمجرد اكتماله، المبامن يف الخلفية .المتصل Asynchronous behavior stands at the core of modern software systems. They improve responsiveness on multicore processors and provide better user experience because lengthy operations won’t block the user interface. تعمل عىل تحسي االستجابة عىل.السلوك غب المبامن هو جوهر أنظمة البمجيات الحديثة المعالجات متعددة النواة وتوفر تجربة مستخدم أفضل ألن العمليات المطولة لن تمنع .واجهة المستخدم So, you’ll probably draw async messages a lot. ً من المحتمل أن ترسم رسائل غب مبامنة، لذلك .كثبا The issue is that the difference between regular and async messages is very subtle: stick arrowhead instead of a filled arrowhead. To avoid misunderstanding, you can add an extra note to make it visible it’s an async message. قم بلصق رأس:تكمن المشكلة يف أن االختالف بي الرسائل العادية وغب المبامنة دقيق للغاية ً يمكنك إضافة مالحظة إضافية، لتجنب سوء الفهم.السهم بدال من رأس السهم المملوء .لجعلها مرئية عىل أنها رسالة غب مبامنة We also have self-messages. These represent a method calling another method of the same object. ً . هذه تمثل طريقة استدعاء طريقة أخرى لنفس الكائن.أيضا رسائل ذاتية لدينا 40 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS An object can also send a delete message to another object. The persistenceManager sends a delete message to the tripEntity instance. ً رسالةpersistentManager يرسل.يمكن للكائن أيضا إرسال رسالة حذف إىل كائن آخر tripEntity. حذف إىل مثيل The TripEntity gets destroyed, and its lifeline gets terminated by a cross symbol. . ويتم إنهاء رسيان الحياة الخاص به بواسطة رمز متقاطع، TripEntity يتم تدمب Sequence diagrams should provide an overview of what’s going on in a given scenario. We don’t try to represent all the method calls precisely. Instead, we focus on the most relevant parts. 41 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS ال نحاول.يجب أن تقدم مخططات التسلسل نظرة عامة عىل ما يحدث يف سيناريو معي ً ر .األكب صلة نركز عىل األجزاء، بدال من ذلك.تمثيل جميع استدعاءات الطريقة بدقة Sequence diagrams help us in clarifying the interactions between objects in a specific scenario. By getting more profound insights into the inner workings of our objects, we may need to refine their behavior. Or even add new classes or establish new relationships between our classes. من خالل.تساعدنا مخططات التسلسل يف توضيح التفاعالت بي الكائنات يف سيناريو محدد ً الحصول عىل رؤى ر قد نحتاج إىل تحسي، أكب عمقا حول األعمال الداخلية ألجسامنا . أو حت إضافة فصول جديدة أو إنشاء عالقات جديدة بي صفوفنا.سلوكهم And that’s perfectly fine. The process of designing a software system is all about finding out what’s missing, what needs to be enhanced or changed. ً وهذا جيد ت برمج حول اكتشاف ما هو مفقود وما يحتاج تتمحور عملية تصميم نظام.ماما ي .إىل تحسي أو تغيب 42 SECTION 5.8 ACTIVITY DIAGRAMS Activity diagrams can be used to describe workflows. The actions are represented by nodes. We start an activity diagram with an initial node drawn as a small, filled circle. We can then transition to the next node. The transition is called flow, and it’s shown as a line that ends with an open arrowhead. The arrow points the direction of the logic flow from one action to the other. يتم تمثيل اإلجراءات بواسطة.يمكن استخدام مخططات النشاط لوصف مهام سب العمل ً نبدأ.العقد ً يمكننا بعد.تخطيطيا للنشاط مع عقدة أولية مرسومة كدائرة صغبة مملوءة رسما ينته برأس ويظهر كخط، ُيطلق عىل االنتقال اسم التدفق.ذلك االنتقال إىل العقدة التالية ي .المنطف من إجراء إىل آخر يشب السهم إىل اتجاه التدفق.سهم مفتوح ي Activity diagrams can also express conditional logic. We model a decision node as a diamond. It has a single incoming flow and two or more outbound flows. ً لها. نصمم عقدة القرار عىل أنها ماسة.ط الرس المنطق عن ا أيض يمكن أن تعب مخططات النشاط ي تدفق وارد واحد واثنان أو ر .أكب من التدفقات الصادرة 43 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS Each outbound flow has a guard, which is a Boolean condition placed inside square brackets. The guards need to be mutually exclusive. Whenever we reach a decision, we can choose only one of the outbound flows. . وهو عبارة عن حالة منطقية موضوعة داخل أقواس مربعة، واف يحتوي كل تدفق صادر عىل ي يمكننا اختيار واحد فقط من، عندما نتوصل إىل قرار.يجب أن يكون الحراس حرصيي .التدفقات الصادرة UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS After a decision, the flows can be merged using a merge activity. A merge has multiple input flows and a single output flow. يحتوي الدمج عىل تدفقات. يمكن دمج التدفقات باستخدام نشاط الدمج، بعد اتخاذ القرار .إدخال متعددة وتدفق إخراج واحد 44 Activity diagrams support parallel behavior. To express concurrent flows, we use a fork drawn as a thick horizontal line. A fork has one incoming flow and several outgoing concurrent flows. نستخدم شوكة، للتعبب عن التدفقات المبامنة.مخططات النشاط تدعم السلوك الموازي تحتوي الشوكة عىل تدفق وارد واحد وعدة تدفقات مبامنة.مرسومة كخط أف يف سميك .صادرة We need to synchronize the tasks that execute concurrently. For example, we can’t display the image while it’s being read from the local persistence or downloaded from the server. A join represents a synchronization point. ال يمكننا، عىل سبيل المثال.الت يتم تنفيذها بشكل مبامن نحن بحاجة إىل مزامنة المهام ي تمثل الصلة نقطة.عرض الصورة أثناء قراءتها من المثابرة المحلية أو تبيلها من الخادم .البامن The final node represents the end of the workflow. .تمثل العقدة النهائية نهاية سب العمل 45 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS The following activity diagram describes a simplified version of the trip creation process. .التاىل نسخة مبسطة من عملية إنشاء الرحلة يصف مخطط النشاط ي We begin with the initial node. The user decides to create a new trip. . يقرر المستخدم إنشاء رحلة جديدة.نبدأ بالعقدة األولية 46 Next, he’s asked to type the trip’s name. Now, the app needs to check whether a trip with the same name already exists. ُ يحتاج التطبيق إىل التحقق مما إذا كانت هناك، اآلن. طلب منه كتابة اسم الرحلة، بعد ذلك . رحلة بنفس االسم موجودة بالفعل If it does, we prompt the user to enter a new name or cancel the trip creation process. If he decides to cancel the flow, we end the activity. Otherwise, we validate the name again. إذا قرر. فإننا نطلب من المستخدم إدخال اسم جديد أو إلغاء عملية إنشاء الرحلة، إذا حدث ذلك . نقوم بالتحقق من صحة االسم مرة أخرى، خالف ذلك.ننه النشاط فإننا ي، إلغاء التدفق 47 UML AND OBJECT-ORIENTED DESIGN FOUNDATIONS If the trip name isn't taken, we let the user fill the remaining trip data. Finally, the user hits the save button. We may also want to let him cancel the process here. ً . فسنسمح للمستخدم بملء بيانات الرحلة المتبقية، إذا لم يتم أخذ اسم الرحلة يضغط، أخبا ً .أيضا يف السماح له بإلغاء العملية هنا قد نرغب.المستخدم عىل زر الحفظ Now, I’ll use a fork to show that we perform some actions in parallel. Storing the new trip into the local persistence and uploading it to the cloud server happen concurrently. يتم تخزين الرحلة الجديدة يف. سأستخدم شوكة إلظهار أننا نقوم ببعض اإلجراءات بالتوازي، اآلن .السحائ بشكل مبامن المثابرة المحلية وتحميلها عىل الخادم ي 48 If both actions succeed, we inform the user about the successful trip creation, and we’re done. . وقد انتهينا، فإننا نبلغ المستخدم بإنشاء رحلة ناجحة، إذا نجح كال اإلجراءين We can add more details and further actions to our activity diagram if that’s useful. ً .مفيدا يمكننا إضافة المزيد من التفاصيل واإلجراءات إىل مخطط أنشطتنا إذا كان ذلك The activity diagram is a useful technique to represent behavioral logic. I wouldn’t recommend it when working with nontechnical people, though. أوض به عند العمل مع أشخاص ال.السلوك مخطط النشاط هو تقنية مفيدة لتمثيل المنطق ي ي .غب تقنيي 49 SECTION 5.9 STATECHART DIAGRAMS The Statechart or State Machine diagram models how an object transitions from one state to another over its lifetime. كيف ينتقل كائن من حالة إىلState Machine أو مخططStatechart يوضح مخطط .أخرى عىل مدار حياته It describes the state changes of an object in response to certain events. .يصف تغبات حالة كائن ما استجابة ألحداث معينة A state is a condition in which an object exists. Think of object states like New, Pending Changes or Completed. فكر يف حاالت الكائن مثل التغيبات الجديدة أو المعلقة أو.ه حالة يوجد فيها كائن الحالة ي .المكتملة These states can change when some event gets triggered. The Pending Changes state transitions to Saved after a successful save event. تنتقل حالة التغيبات المعلقة.يمكن أن تتغب هذه الحاالت عندما يتم تشغيل بعض األحداث .إىل تم الحفظ بعد حدث حفظ ناجح And the Saved state will change to the final Terminated state if the object is deleted. .وستتغب الحالة المحفوظة إىل حالة اإلنهاء النهائية إذا تم حذف الكائن The state machine diagram starts with an initial state. This is not a real state, but rather the entry point. States are drawn as rectangles with rounded corners with the state’s name. The transitions from one state to another are shown as lines that end in an open arrow. يتم.ه نقطة الدخول بل ي، هذه ليست دولة حقيقية.يبدأ مخطط آلة الحالة بالحالة األولية تظهر االنتقاالت من حالة إىل أخرى.رسم الحاالت كمستطيالت بزوايا دائرية مع اسم الوالية .تنته بسهم مفتوح كخطوط ي 50 Each transition can be labeled with an event name and a guard. .يمكن تسمية كل انتقال باسم حدث وحارس The guard appears between angle brackets; it’s a Boolean condition that needs to be true for the state change to occur. يظهر الحارس بي قوسي زاوية ؛ إنها حالة منطقية يجب أن تكون صحيحة حت يحدث .تغيب الحالة Let’s assume that pending changes can only be saved if the device is connected to the internet. We can represent conditional logic in statechart diagrams as follows: ً يمكننا تمثيل.لنفبض أنه ال يمكن حفظ التغيبات المعلقة إال إذا كان الجهاز متصال باإلنبنت :التاىل عىل النحو يstatechart ط يف مخططات المنطق الرس ي The final state shows that the state machine is completed, and it also implies the deletion of the object. . تعت حذف الكائن كما أنها ي، توضح الحالة النهائية أن آلة الحالة قد اكتملت Use statechart diagrams to describe the object states of a system while identifying the events responsible for the state changes. استخدم مخططات الحالة لوصف حاالت كائن النظام أثناء تحديد األحداث المسؤولة عن . تغيبات الحالة 51 1 great software development Pleasing your customer I used to think all programmers got paid in bananas for their projects... but now that I’m developing great software, I get cold, hard cash. If your customer’s unhappy, everyone’s unhappy! Every great piece of software starts with a customer’s big idea. It’s your job as a professional software developer to bring that idea to life. But taking a vague idea and turning it into working code—code that satisfies your customer—isn’t so easy. In this chapter you’ll learn how to avoid being a software development casualty by delivering software that is needed, on time, and on budget. Grab your laptop, and let’s set out on the road to shipping great software. ! فالجميع غير سعيد،إذا كان عميلك غير سعيد لكن أخذ فكرة غامضة وتحويلها إلى رمز عمل.كل برنامج رائع يبدأ بفكرة العميل الكبيرة إنها وظيفتك كمطور برامج محترف إلحياء هذه الفكرة يرضي عميلك ليس باألمر السهل في هذا الفصل ستتعلم كيفية تجنب الوقوع ضحية لتطوير البرمجيات عن طريق تقديم البرامج المطلوبة وفي ودعونا ننطلق على طريق شحن برامج رائعة،الوقت المحدد وعلى الميزانية االستيالء على الكمبيوتر المحمول الخاص بك this is a new chapter 1 Tom’s Trails Tom’s Trails is going online Trekkin’ Tom has been providing world-famous trail guides and equipment from his shack in the Rockies for years. Now, he wants to ramp up his sales using a bit of the latest technology. مسارات توم تسير على اإلنترنت ، في جبال روكي لمدة عامlus shack منqupinent يقرب أدلة درب رائعة عالميا ومTrekkin' Tom كان اآلن؛ إنه يريد زيادة مبيعاته باستخدام القليل من أحدث التقنيات No one does trail guides like mine...But the big TrailMix Conference is coming, and I want to show everybody what the next evolution in hiking looks like, Webstyle. 2 Chapter 1 great software development Most projects have two major concerns Talk to most customers and, besides their big idea, they’ve probably got two basic concerns: معظم المشاريع لديها شاغالن رئيسيان ربما لديهم شاغالن أساسيان؛، وإلى جانب فكرتهم الكبيرة،تحدث إلى معظم العمالء How much will it costY No surprise here. Most customers want to figure out how much cash they’ll have to spend. In this case, though, Tom has a pile of money, so that’s not much of a concern for him. كم ستتكلف؟ ، لدى توم كومة من المال، على الرغم من ذلك، في هذه الحالة. يرغب معظم العمالء في معرفة مقدار النقود التي سيتعين عليهم إنفاقها.ال عجب هنا لذلك هذا ليس مصدر قلق كبير بالنسبة له How long will it takeY The other big constraint is time. Almost no customer ever says, “Take as long as you want!” And lots of the time, you have a specific event or date the customer wants their software ready for. In Tom’s case, he wants his website available in three months’ time, ready for the big TrailMix Conference coming up. كم من الوقت سوف يستغرق؟ تقريبا ال يوجد.القيد الكبير اآلخر هو الوقت "خذ الوقت الذي، زبون من أي وقت مضى لديك حدث معين أو، تريده!" والكثير من الوقت ً جاهزا لـ تاريخ العميل يريد برنامجهم يريد موقعه اإللكتروني متا ًحا في.في حالة توم وجاهزة لمؤتمر تريل ميكس العالي، ثالثة شهور .قادم النقد هو قيد في هذا، عادة توم لديه المال، حالة و األرقام، لتجنيبه سيتحول إلى ما ينفقه كومة أكبر the Big Bang approach The Big Bang approach to development With only a month to get finished, there’s no time to waste. The lead developer Tom hired gets right to work. نهج االنفجار الكبير للتنمية ليس هناك، مع وجود شهر واحد فقط على االنتهاء .وقت نضيعه يحصل علىTom "المطور الرئيسي الذي عينه الحق في العمل Here are my rough ideas for you to get started on. Some HTML, CSS, a little backend Java...this will be a piece of cake. Code... ...code... 4 Chapter 1 great software development Flash forward: two weeks later Tom’s lead developer has pulled out all the stops to build Tom’s Trails Online, putting all her finest coding skills into play and producing what she thinks Tom wants her to build. فالش إلى األمام؛ بعد أسبوعين الرئيسي كل ما في وسعه للبناءTom لقد بذل مطور تضع فيها أفضل مهارات، Tom's Trails Online البرمجة د أن توم يريد.تلعب وتنتج ما تعتقد أن توم يريد منها أن تبنيها .منها أن تبنيها Whew! That was hard work! I’ve been coding like crazy, working stupid hours, but at least now it’s time to collect that paycheck... ...Deliver! ...more code... ثم، كثيرا ً اعمل:Big Bang شيء ضخم و المعقدة يخرج من العمل كله مره، بانغ .و احده المعروف أيضا باسم "الذهاب إلى الظالم" كما يراك و ثم تختفي حتى البرنامج، العميل في بداية المشروع يتم تسليمها في النهاية you are here 5 the Big Bang ends with a big mess Big bang development usually ends up in a BIG MESS عادة ما ينتهي تطور االنفجار العظيم يصل في رسالة كبيرة إال أن توم لم يفعل، على الرغم من بذل الكثير من العمل في المشروع .ذلك رأيت أي ًا من األعمال المنجزة التي نأمل أن تكون قد اكتملت حتى اآلن دعونا نرى ما يفكر فيه حول الموقع المكتمل Even though a lot of work went into the project, Tom hasn’t seen any of the (hopefully) completed work yet. Let’s see what he thinks about the completed website. What the heck is this? The site isn’t anything like I thought it would be. You couldn’t have taken a little more time and gotten it right? It’s like you didn’t even know what I wanted... If your customer isn’t happy, you built the wrong software. Big bang software usually means working a whole lot, but it also means not showing the customer much until your work is done. The risk with that approach is you think you’re building what the customer wants with no real feedback until you think you’re finished. And, no matter how great YOU think your software is, it’s the customer you have to make happy. So if the customer doesn’t like what you’ve built, don’t waste time trying to tell them they’re wrong. Just get ready to do some rework. But how do you figure out what the customer really wants? It’s not always easy... 6 Chapter 1 . فأنت بناء البرنامج الخاطئ، إذا لم يكن عميلك سعيد ًا العمل بملفBig bang عادة ً ما يعني برنامج ضا عدم عرض ملف ً ولكن هذا يعني أي، الكثير الخطر.كثيرا حتى يتم االنتهاء من عملك ً العميل مع هذا االمتياز تعتقد أنك تبني ما يريده العميل دون أي ردود فعل حقيقية حتى تعتقد أنك .انتهيت ، إنه العميل الذي يتعين عليك تكوينه سعيد، وبغض النظر عن مدى روعة رأيك البرنامج ال تضيع الوقت في محاولة تفجيرهم إنهم، لذلك إذا كان الكاستامر ال يحب ماذا أنت تبني مخطئون فقط استعد للقيام ببعض إعادة العمل ولكن كيف تحدد ما هو الزبون .اريد حقا؟ ليس من السهل دائما هل يمكنك معرفة أين سارت األمور بشكل خاطئ؟ فيما يلي ثالثة مهمتك هي اختيار.أشياء قالها توم أراد أن يسمح موقعه بذلك .الخيار أدناه كل عنصر يتطابق بشكل وثيق مع ما يعنيه توم حظ سعيد. عليك أن تكتشف ما يعنيه بنفسك، وللثالث Can you figure out where things went wrong? Below are three things Tom said he wanted his site to allow for. Your job is to choose the option underneath each item that most closely matches what Tom means. And for the third one, you’ve got to figure out what he means on your own. Good luck! 1 Tom says, “The customer should be able to search for trails.” The customer should see a map of the world and then enter an addressto search for trails near a particular location. The customer should be able to scroll through a list of tourist spots and find trails that lead to and from those spots. The customer should be able to enter a zip code and a level of difficultyand find all trails that match that difficulty and are near that zip code. ".قادرا على البحث عن الممرات ً يقول توم "يجب أن يكون العميل يجب على العميل رؤية خريطة العالم ثم إدخال العنوان للبحث عن مسارات بالقرب منo .موقع معين قادرا على التجول في قائمة المواقع السياحية و العثور على السمات ً يجب أن يكون العميلo .التي تؤدي من وإلى تلك المواقع قادرا على إدخال الرمز البريدي ومستوى الصعوبة والعثور على ً يجب أن يكون العميلo .جميع المسارات التي تتطابق مع تلك الصعوبة وتقع بالقرب من الرمز البريدي 2 Tom says, “The customer should be able to order equipment.” The customer should be able to view what equipmentTom has and thencreate an order for items that are in stock. The customer should be able to order any equipment they need, but depending on stock levels the order may take longer if some of theitems are back-ordered. ".قادرا على طلب المعدات ً يقول توم "يجب أن يكون العميل قادرا على عرض المعدات التي يمتلكها توم وبعد ذلك إنشاء طلب للعناصر ً يجب أن يكون العميلo .الموجودة في المخازن ، ولكن اعتمادًا على مستويات المخزون، قادرا على طلب أي معدات يحتاجها ً يجب أن يكون العميلo .قد يستغرق األمر وقتًا أطول إذا كان بعض من تم طلب العناصر مرة أخرى 3 Tom says, “The customer should be able to book a trip.” فقط... هل أنت محتار بشأن ما قصده توم حقًا؟ ال بأس إذا كنت تواجه صعوبة في معرفة.ابذل قصارى جهدك افعل أفضل ما، هذا طبيعي تما ًما، أي ملف اختيار وسوف نقضي الكثير من الوقت في الحديث في، لديكم ، هذا الفصل حول كيفية معرفة ما يعنيه العميل Confused about what Tom really meant? It’s okay... just do your best. If you’re having a hard time figuring out which option to choose, that’s perfectly normal. Do your best, and we’ll spend a lot more time in this chapter talking about how to figure out what the customer means. great software development is... Can you figure out where things went wrong? Your job was to choose the option underneath each item that most closely matches what Tom means. And for the third one, you had to figure out what he means on your own. هل يمكنك معرفة أين سارت األمور بشكل خاطئ؟ كانت مهمتك أن تختار الخيار الموجود أسفل كل عنصر يتطابق بشكل وثيق مع ما يعنيه توم وبالنسبة . كان عليك معرفة ما يعنيه بنفسك، للثالث A big question mark? That’s your answer? How am I supposed to developgreat software when I don’t even knowfor sure what the customer wants? If you’re not sure what the customer wants, or even if you think you’re sure, always go back and ask When it comes to what is needed, the customer is king. But it’s really rare for the customer to know exactly what he wants at the beginning of the project. إذا لم تكن متأكدًا من ماهية العميل ، أو حتى إذا كنت تعتقد أنك متأكد، يريد دائما ارجع واسأل عندما يتعلق األمر بما يكون الزبون هو الملك لكن، هو مطلوب من النادر حقًا أن يعرف العميل ذلك .بالضبط ماذا يريد في بداية المشروع ، عندما تحاول فهم ما لديك يريد العميل ال يوجد حتى حق، في بعض األحيان ناهيك عن، "اإلجابة في "رأس العميل الخاص بك! إذا تختفي بسرعة وتبدأ في أو. ربما فقط نصف القصة، البرمجة لكن البرامج ال ينبغي أن تكون.حتى أقل تحتاج تأكد من أنك تطور برامج.تخمينية رائعة حتى عندما ما هو مطلوب ليس لذا اذهب واسأل العميل.واضحا مقدما اطلب منهم المزيد.ماذا يقصدون اسألهم عن خيارات حول كيف.التفاصيل يمكنك ذلك يطالب حول أفكارهم الكبيرة When you’re trying to understand what your customer wants, sometimes there’s not even a right answer in the customer’s head, let alone in yours! If you disappear in a hurry and start coding, you may only have half the story... or even less. But software shouldn’t be guesswork. You need to ensure that you develop great software even when what’s needed is not clear up front. So go ask the customer what they mean. Ask them for more detail. Ask them for options about how you might implement about their big ideas. برمجة التنمية ال تخمين تحتاج إلى االحتفاظ بها العميل في الحلقة المراد صنعها متأكد أنك على .المسار الصحيح Software deveLopment is NOT guesswork. You need to keep the customer in the Loop to make sure you’re on the right path. great software development .. تطوير البرمجيات الرائع هو لقد تحدثنا عن العديد من األشياء التي ستحتاجها أو تحتاجها برامج ناجحة We’ve talked about several things that you’ll need for successful software. وأموالهم التي، لديك أفكار كبيرة للعمالء للتعامل معها You’ve got the customer’s big ideas to deal with, their money you’re spending, عليك أن. وجدول زمني يجب أن تقلق بشأنه.تنفقها and a schedule you’ve got to worry about. You’ve got to get all of those things إنشاء تحصل على كل هذه األشياء صحيح إذا كنت تنوي right if you’re going to build consistently great software. .برامج رائعة باستمرار Great software development is... Great software development delivers... يسلم تطوير البرمجيات العظيم What is needed, خالف ذلك يسمى، ما يحتاجه العميل سنتحدث أكثر.البرنامج المتطلبات حول المتطلبات في اليوم التالي الفصل On Time, عندما اتفقنا مع الزبون أن البرنامج سينتهي and On Budget عدم فوترة العميل للحصول على أموال أكثر من تم االتفاق عليه Can you think of three examples of software you’ve been involved with where at least one of these rules was broken? delivering with iteration الوصول إلى الهدف مع ITERATION سر تطوير البرمجيات الرائع هو التكرار .لقد رأيت ذلك بالفعل ال يمكنك ببساطة تجاهل العميل أثناء التطوير .لكن التكرار يوفر طريقة لطرح السؤال ،في كل خطوة من خطوات التطوير " ،كيف أنا تفعل؟ "في ما يلي مشروعان :أحدهما بدون تكرار واآلخر به Getting to the goal with ITERATION The secret to great software development is iteration. You’ve already seen that you can’t simply ignore the customer during development. But iteration provides you a way to actually ask the question, at each step of development, “How am I doing?” Here are two projects: one without iteration, and one with. حتى اآلن ،سواء عن طريق الحظ أو المهارة ،ظل التطور مع المسار األمثل إلى حد كبير Without iteration... —Suppose you take the Big Bang approach to development or any other approach where you’re not constantly checking in with the customer. The likely outcome? Missing what the customer wanted, and by a lot, not just a little. مسار التنمية لقد أخت بالفعل بدون تكرار. لنفترض أنك أخذت تقييم بيغ بانغ للتطويرأو أي طريقة أخرى ال تتحقق فيها باستمرار مع العميل النتيجة المحتملة؟ في عداد المفقودين ما أراد العميل ،وبالكثير ، ليس فقط القليل. Start يتغير كل مشروع بمرور الوقت ،مع متطلبات الحصول بمهارة تغيرت ،أو قرارات بشأن ماذا للعمل على جعل كل زمن. الطريق لك يجب أن تأخذ زمن في وقت مبكر التجريبي لمعرفة ما يعتقد العميل غير الزبون رأيهم حول ميزة هنا ،ولكن منذ ذلك الحين كنت تقوم بتسجيل الوصول ، قمت بعمل ملف تعديل صغير وكيبل ذاهب. With iteration... This time, you decide that every time you make significant progress you’ll check with the customer and refine what you’re working on. You also don’t make any major decisions without incorporating customer feedback. مع التكرار. هذه المرة ،قررت أنه في كل مرة تكون فيها ذات أهمية التقدم سوف تحقق مع العميل وتحسن ما تعمل عليه .أنت أيضا ال تجعل أي تخصص القرارات دون دمج آراء العمالء. Start بعد أيام قليلة فقط ،أوضحت ما قصده العميل فيما يتعلق بميزة معينة. Chapter 1 10 great software development بحلول الوقت الذي تقدم فيه البرنامج الخاص بك ،تكون متوقفًا عن متطلبات العميل ثم نفذت بعض الميزات األخرى في بطريقة مختلفة عما قصده العميل وبنا ًء على ذلك ،تم اتخاذ بعض قرارات التصميم المختلفة ??? لكن بعد ذلك أنت نفذت ميزة بشكل مختلف عما يريده العميل حقًا. لم تقم بتسجيل الوصول مع العميل ،وتزداد الفجوة بين برامجهم المثالية وما تقوم ببنائه The Goal ما الفرق الذي يحدثه التكرار! نقطة النهاية الخاصة بك وما كان يبحث عنه العميل في Converge Payday استمر في التكرار حتى النهاية التكرار هو بمثابة فحص متكرر لبرنامجك .ستعرف دائ ًما كيف حالك. The Goal Iteration is Like a frequent checkup for your software. You’LL aLways know how you’re doing. في بعض األحيان ،تكون على الطريق الصحيح ،لكنك تكرر على أي حال ،فهذا يعزز أن ما تعمل عليه هو مجرد إثبات لكن التكرار يبقيك على المسارالصحيح كان من الممكن أن تتخذ نفس القرار السيئ كما هو موضح أعاله an iteration delivers working software Q: Q: A: more time getting to know what the customer really wants, really getting the requirements down tight, than always letting the customer change their mind midstream? What if I’m sure that I know what the customer wants at the beginning of a project? Do I still need to iterate? Absolutely. Iteration and getting feedback from your customer is important especially when you think you know it all up front. Sometimes it can seem like a complete no-brainer on a simple piece of software, but checking back with the customer is ALWAYS worth it. Even if the customer just tells you you’re doing great, and even if you actually do start out with all the right requirements, iteration is still a way to make sure you’re on the right track. And, don’t forget, the customer can always change their mind. Q: My entire project is only two months long. Is it worth iterating for such a short project? A: Yep, iteration is still really useful even on a very short project. Two months is a whopping 60 days of chances to deviate from the customer’s ideal software, or misunderstand a customer’s requirement. Iteration lets you catch any potential problems like this before they creep into your project. And, better yet, before you look foolish in front of your customer. Wouldn’t it just be better to spend A: You’d think so, but actually this is a recipe for disaster. In the bad old days, developers used to spend ages at the beginning of a project trying to make sure they got all the customer’s requirements down completely before a single line of code or design decision was made. Unfortunately, this approach still failed. Even if you think that you completely understand what the customer needs at the beginning, the customer often doesn’t understand. So they’re figuring out what they want as much as you are. You need a way of helping your team and your customer grow their understanding of their software as you build it, and you can’t do that with a Big Bang, up-front requirements approach that expects everything to be cast in stone from day one. Q: A: Who should be involved in an iteration? Everyone who has a say in whether No matter how big the team, or how Long the project, iteration is ALWAYS one of the keys to buiLding great software. 12 Chapter 1 your software meets its requirements, and everyone who is involved in meeting those requirements. At a minimum, that’s usually your customer, you, and any other developers working on the project. Just read. Q: But I’m only a team of one, do I still need to iterate? A: Good question, and the answer is yes (starting to detect a theme here?). You might only be a development team of one, but when it comes to your project there are always, at a minimum, two people who have a stake in your software being a success: your customer and you. You still have two perspectives to take into account when making sure your software is on the right path, so iteration is still really helpful even in the smallest of teams. Q: How early in a project should I start iterating? A: As early as you have a piece of software running that you can discuss with your customer. We normally recommend around 20 work days—1 calendar month, per iteration as a rule of thumb—but you could certainly iterate earlier. One- or two-week iterations are not unheard of. If you aren’t sure about what a customer means on Day 2, call them. No sense waiting around, guessing about what you should be doing, right? Q: What happens when my customer comes back with bad news, saying I’m way off on what I’m building. What do I do then? A: Great question! When the worst happens and you find that you’ve deviated badly during an iteration, then you need to bring things back into line over the course of the next couple of iterations of development. How to do this is covered later on, but if you want to take a peek now, fast-forward to Chapter 4. great software development OK, I get it, iteration is important. But you said I should iterate every time I have working software, around every 30 calendar days, or 20 work days. What if I don’t have anything that can run after a month? What can I show the ?customer 20يوم عمل ليست سوى دليل .قد تختار أن يكون لديك تكرارات أطول أو أقصر _شروعك حسن ًا ،فهمت ،التكرار أنه مهم .لكنك قلت إنني يجب أن أكرر في كل مرة لدي برنامج عمل ،كل 30يو ًما تقريبًا أو 20يوم عمل .ماذا لو لم يكن لدي أي شيء يمكنه الركض بعد شهر؟ ماذا يمكنني أن أظهر عميل؟ An iteration produces working software With the old Big Bang approach to developing software, you probably wouldn’t have any software ready until the end of the project, which is the worst time to realize that you’ve !gone wrong تم تناول البناء واaختبار ا_ستمر في الفصل 6 bو 7 With iteration, you check every step of the way that you’re going in the right direction. That means making sure your software builds from almost day one (and more like hour one if you can manage it). You shouldn’t have long periods where code doesn’t work or compile, even if it’s just small bits of functionality. Then you show your customer those little pieces of functionality. It’s not much, sometimes, but you can still get an OK from the customer. يُحدث بناء العمل ً أيضا كبيرا في إنتاجية فر ًقا ً فريقك jنه aيتع bعليك قضاء الوقت في إصlح رمز شخص آخر قبل أن تتمكن من متابعة مهامك الخاصة تمكن توم من رؤية برنامج يعمل ،وقدم بعض التعليقات ا_همة التي يمكنك معالجتها على الفور Hey, that’s looking good. ?But can we go with rounded tabs Oh, and I’d rather call it “Get in touch” than “Contact Us.” Last thing... can we add an option for ”?“Order Status ينتج عن التكرار برنامج عمل مع نهج Big Bangالقديم لتطوير البرامج ،ربما لن يكون لديك أي برنامج جاهز حتى نهاية ا_شروع ،وهو أسوأ وقت }دراك أنك أخطأت! باستخدام التكرار ،تتحقق من كل خطوة في الطريق الذي تسير فيه في اaتجاه الصحيح .هذا يعني التأكد من أن برنامجك يبني من اليوم اjول تقريبًا )وأكثر مثل الساعة اjولى إذا كان بإمكانك إدارتها(a . ينبغي أن يكون لديك فترات طويلة حيث aتعمل الشفرة أو يتم تجميعها ، حتى لو كانت مجرد أجزاء صغيرة من الوظائف. كثيرا ،في ثم تُظهر لعميلك تلك اjجزاء الصغيرة من الوظائف .ليس ً بعض اjحيان ،ولكن aيزال بإمكانك الحصول على موافقة من العميل. إليك جزء بسيط ج ًدا من موقع Tom's Trails على الويب .إنه يحتوي على ميزة التنقل فقط ، ولكن aيزال من الجدير رؤية ما يعتقده توم 13 you are here بد ًaمن بناء ا_وقع بالكامل مرة واحدة ،قمنا بتقسيم ا_شكلة إلى أجزاء أصغر من الوظائف. يمكن بعد ذلك عرض كل قطعة للعميل على حدة كل تكرار هو مشروع صغير باستخدام التكرار ،تتخذ الخطوات التي تتبعها لبناء ا_شروع بأكمله ، وتضع هذه الخطوات في كل تكرار .في الواقع ،كل تكرار عبارة عن مشروع صغير ،له متطلباته الخاصة وتصميمه وترميزه واختباره وما إلى ذلك ،وقد تم تضمينه بشكل صحيح .لذا فأنت aتعرض الرسائل غير ا_رغوب فيها لعميلك ...فأنت تعرض عليهم وحدات بت مطورة جي ًدا من البرنامج النهائي. فكر في كيفية تطوير معظم البرامج :تقوم بجمع ا_تطلبات )ما يريده عميلك( ،وإنشاء تصميم للمشروع بأكمله ،ووضع التعليمات البرمجية لفترة طويلة ،ثم اختبار كل شيء .يبدو قلي lمثل هذا: an iteration is a complete development cycle Each iteration is a mini-project With iteration, you take the steps you’d follow to build the entire project, and put those steps into each iteration. In fact, each iteration is a miniproject, with its own requirements, design, coding, testing, etc., built right in. So you’re not showing your customer junk... you’re showing them welldeveloped bits of the final software. هذا تصميم رئيسي ...عليك بناء بنية لكل ميزة في ا_شروع بأكمله .قد يستغرق أسابيع ...أو شهور! Think about how most software is developed: You gather requirements (what your customer wants), build a design for the entire project, code for a long time, and then test everything. It looks a bit like this: كم من الوقت سيستغرق ا_حاولة والحصول Design Requirements Each iteration is QUALITY software يعني تشغيل البرنامج الكامل في نهاية كل تكرار أنه يمكننا أن نسأل العميل "هل نحن بخير؟" غالبا D Ideas in.. But suppose you didn’t look at iteration as just a way to write big software. Think of iteration as little cycles, where you’re gathering requirements, designing, writing code, and testing. Each cycle produces working, quality software: R T C D R T C D يحتوي التكرار على جميع مراحل العملية الكاملة R Ideas in.. كل تكرار عبارة عن برنامج عالي الجودة لكن لنفترض أنك لم تنظر إلى التكرار على أنه مجرد طريقة لكتابة برامج كبيرة .فكر في التكرار على أنه دورات صغيرة ،حيث تقوم بجمع ا_تطلبات والتصميم وكتابة التعليمات 14برامج عمل تنتج كل دورة البرمجية 1واaختبار. Chapter عالية الجودة: great software development أنت ا•ن تختبر كل شيء .يمكن أن تستمر هذه ا_رحلة jسابيع أو أكثر من تلقاء نفسها ً أيضا. ويفترض أنك حصلت على جميع ا_تطلبات بشكل صحيح هذه هي ا_رة اjولى التي يمكن لعميلك أن يقدم لك مlحظات ها هو ...الجزء الذي تكتب فيه كل سطر من كل جزء من الوظائف .طن من التعليمات البرمجية Final Software Out Code Test بعد فوات اjوان }جراء تغييرات ا•ن ،من اjفضل أن صحيحا يكون هذا ً Final Software Out T You’ve checked this software at the end of every iteration, so there’s a much better chance this is what the customer wants. 15 you are here C D R لقد قمت بفحص هذا البرنامج في نهاية كل تكرار ،لذلك هناك فرصة أفضل بكثير jن هذا هو ما يريده العميل T C D R T C build a plan out of iterations and features It’s time to bring iterations into play on Tom’s Trails. Each of the features that Tom wants for Trails Online has had estimates added to specify how long it will take to actually develop. Then we figured out how important each is to Tom and then assigned a priority to each of them (10 being the highest priority, 50 being the lowest). Take each feature and position them along the project’s timeline, adding an iteration when you think it might be useful. حان الوقت لتطبيق التكرارات على .Tom’s Trailsتمت إضافة تقديرات لكل من ا_يزات التي يريدها توم لـ Trails Onlineلتحديد ا_دة التي سيستغرقها التطوير الفعلي .ثم اكتشفنا مدى أهمية • كل منهما بالنسبة إلى توم ثم قمنا بتعي bأولوية لكل منهما ) 10تمثل اjولوية القصوى ،و 50هي اjقل( .خذ كل ميزة ووضعها على طول الجدول الزمني للمشروع ،مع إضافة تكرار عندما تعتقد أنه قد يكون مفي ًدا يتوافق كل صندوق مع ميزة واحدة يحتاجها توم تم بالفعل إضافة هذه ا_يزة والتكرار لك ما مدى أهمية هذه ا_يزة لتوم .يعني الرقم " "10أنه أمر بالغ اjهمية ح ًقا احتفظ بالتكرار حوالي 20يوم عمل إن أمكن .تذكر أننا نعمل خارج أشهر التقويم ،وبأخذ عطlت نهاية اjسبوع في اaعتبار ،يكون هذا على اjكثر 20يوم عمل في كل تكرار Chapter 1 16 great software development أوه ،شيء واحد آخر a .يريد توم أن يتمكن العمlء من شراء ا_عدات إ aإذا قاموا بتسجيل الدخول إلى موقع الويب .تأكد من أخذ ذلك في اaعتبار في خطتك. Oh, one other thing. Tom doesn’t want customers to be able to buy equipment unless they’ve logged in to the web site. Be sure and take that into account in your plan. تحتوي كل ميزة على 5 تقديرات }ظهار ا_دة التي يجب أن يستغرقها تطوير هذه ا_يزة في أيام العمل الفعلية( 10ذات أولوية عالية ،و 50 منخفضة ،سننظر في سبب زيادة هذه اjولويات بمقدار 10في الفصل 3 aتنس إضافة العديد من التكرارات التي تعتقد أنها ستكون مفيدة 17 you are here deciding on a iteration tempo for your project كانت مهمتك إنشاء خطة تكرار _سارات توم .كان يجب أن تكون قد توصلت إلى شيء مثل ما فعلناه أدناه: Your job was to build an iteration plan for Tom’s Trails. You should have come up with something like we did, below: كان علينا وضع ميزة ذات أولوية أقل في مكانها هنا j ،ن ا_يزة ذات اjولوية العالية لدينا تعتمد عليها قصيرا ،و aبأس كان التكرار اjخير ً بذلك ً أيضا Your project ends with an iteration, where the customer gets to “sign off” on what you’ve built. ينتهي مشروعك بتكرار ،حيث يحصل العميل على "تسجيل الخروج على ما قمت بإنشائه حوالي 20يوم عمل لكل تكرار سيستغرق اكتمال هات bا_يزت 17 bيوم عمل ...هذا قريب من شهر تقويمي ، لذلك نكررها عندما ننتهي هنا ربما تكون هذه هي الخطة الوحيدة التي تخدم أولويات العميل ،وتحافظ على التكرارات بطول يمكن التحكم فيه ،وتنجز ا_همة .إذا توصلت إلى شيء مختلف ،فقم بإلقاء نظرة فاحصة على سبب قيامك بخيارات مختلفة عما اتخذناه Chapter 1 18 يساعدك التكرار على.يجب أن يكون طول التكرار با}يقاع ا_ناسب _شروعك وبالتالي قد تقرر إجراء تكرارات أقصر أو أطول، البقاء على ا_سار الصحيح تl ولكن ضع في اعتبارك عط، ًlثون يو ًما قد تبدو وقت ًا طويl ث. يو ًما30 من يو ًما من العمل20 رجح علىj وهذا يعني أنك ستحصل على ا، سبوعjنهاية ا يو ًما تقويميًا لكل30 فجرب ، إذا لم تكن متأك ًدا.ا}نتاجي الفعلي لكل تكرار ّ ت على مشروعك حسبl وبعد ذلك يمكنك إجراء تعدي، تكرار كنقطة بداية جيدة .الحاجة كثيرا بما يكفي ل—مساك بنفسك عندما تنحرف عن التكرار هو هنا ا_فتاح ً ستعداد لنهايةaكثيرا لدرجة أنك تقضي كل وقتك في ا ولكن ليس، الهدف ً مر وقت ًا }ظهار ما قمت به للعميل ثم إجراء تصحيحاتj يستغرق ا.التكرار لذا تأكد من مراعاة هذا العمل عند تحديد ا_دة التي يجب أن، للمسار .تستغرقها عمليات التكرار great software development I decided to have the customer check on the project after each feature. That’s even better than iterating every calendar month, right? قررت أن أجعل العميل يتحقق .من ا_شروع بعد كل ميزة هذا أفضل من التكرار كل أليس كذلك؟، شهر تقويمي Your iteration length should be at the right tempo for YOUR project An iteration helps you stay on track, and so you might decide to have iterations that are shorter or longer than 30 days. Thirty days might seem like a long time, but factor in weekends, and that means you’re probably going to get 20 days of actual productive work per iteration. If you’re not sure, try 30 calendar days per iteration as a good starting point, and then you can tweak for your project as needed. The key here is to iterate often enough to catch youself when you’re deviating from the goal, but not so often that you’re spending all your time preparing for the end of an iteration. It takes time to show the customer what you’ve done and then make course corrections, so make sure to factor this work in when you are deciding how long your iterations should be. Q: The last feature scheduled for my iteration will push the time needed to way over a month. What should I do? A: Consider shifting that feature into the next iteration. Your features can be shuffled around within the boundaries of a 20-day iteration until you are confident that you can successfully build an iteration within the time allocated. Going longer runs the risk of getting off course. Q: Ordering things by customer priority is all fine and good, but what happens when I have features that need to be completed before other features? A: When a feature is dependent on another feature, try to group those features together, and make sure they are placed within the same iteration. You can do this even if it means doing a lower-priority feature before a high-priority one, if it makes the high-priority feature possible. This occurred in the previous exercise where the “Log In” feature was actually a low customer priority, but needed to be in place before the “Buy Equipment” feature could be implemented. Q: A: If I add more people to the project, couldn’t I do more in each of my iterations? Yes, but be very careful. Adding another person to a project doesn’t halve the time it takes to complete a feature. We’ll talk more about how to factor in the overhead of multiple people in Chapter 2, when we talk about velocity. Q: What happens when a change occurs and my plan needs to change? A: Change is unfortunately a constant in software development, and any process needs to handle it. Luckily, an iterative process has change baked right in...turn the page and see what we mean. you are here 19 change happens شياءjالعميل سوف يغير ا لقد.Iteraton 1 واكتمل، وقع توم على خطتك مورjوصلت ا•ن إلى التكرار الثاني للتطوير وا ... ثم يتصل توم.تسير على ما يرام The customer WILL change things up Tom signed off on your plan, and Iteraton 1 has been completed. You’re now well into your second iteration of development and things are going great. Then Tom calls... Things are really starting to look great, but I had some thoughts after that last iteration. I think it’s really important that Tom’s Trails Online has a mailing list, so my customers can communicate with each other. لكن، مور تبدو رائعة ح ًقاjبدأت ا فكار بعد ذلكjكان لدي بعض ا أعتقد أنه من ا_هم.خيرjالتكرار ا Tom’s Trails ح ًقا أن يكون لدى لذا فأنا، قائمة بريديةOnline ء التواصل مع بعضهمlيمكن للعم .البعض a إذا كان برنامجك، تذكر فلن، يفعل ما يريده العميل تذهب بعي ًدا في تطوير البرمجيات It’s up to you to make adjustments Tom’s new idea means three new features, all high-priority. And we don’t even know how long they’ll take, either. But you’ve got to figure out a way to work these into your projects. تlمر متروك لك }جراء التعديjا جميعها ذات أولوية، ث ميزات جديدةlتعني فكرة توم الجديدة ث لكن. نعرف حتى كم من الوقت سيستغرقونa كما أننا.عالية .عليك اكتشاف طريقة للعمل بها في مشاريعك But there are some BIG problems... 20 Chapter 1 great software development أنت بالفعل في طريق طويل نحو التطور ... الهدف اjصلي .. You’re already a long way into development... أنت على هذا الطريق البعيد نحو تقديم برامج رائعة لقد كنت تكرر التصويب نحو الهدف .... ولكن ا•ن انتقل الهدف! ...و aيزال لديك ميزات أخرى يمكنك إنشاؤها ... ... and you’ve still got other features to build... These features are still in the pipeline. هذه ا_يزات aتزال في طور ا}عداد ...ولم يتغير ا_وعد النهائي. ... and the deadline hasn’t changed. ما يزيد قلي ًlعن شهر واحد حتى مؤتمر !TrailMix تذكر ا_وعد النهائي من الصفحة 3؟ لم يتغير ، على الرغم من تغير عقل توم 21 you are here handle change with iteration Iteration handles change automatically Your iteration plan is already structured around short cycles, and is built to handle lots of individual features. Here’s what you need to do: 1 تتغير مقابض التكرار تلقائيًا تم تصميم خطة التكرار الخاصة بك بالفعل حول دورات قصيرة إليك ما. وهي مصممة للتعامل مع الكثير من ا_يزات الفردية، :عليك القيام به Estimate the new features 1 First, you need to estimate how long each of the new features is going تحتاج إلى تقدير ا_دة التي، ًaتقدير ا_يزات الجديدة أو to take. We’ll talk a lot more about estimation in a few chapters, but for كثيرا عن التقدير في سنتحدث.ستستغرقها كل ميزة جديدة ً now, let’s say we came up with these estimates for the three new features: لنفترض أننا توصلنا، ولكن في الوقت الحالي، بضعة فصول :ثة الجديدةlإلى هذه التقديرات للميزات الث 2 22 Have your customer prioritize the new features Tom already gave everything a priority of “20,” right? But you really need him to look at the other features left to implement as well, and prioritize in relation to those. Chapter 1 2 ولوية للميزات الجديدة أعطى تومjاطلب من عميلك إعطاء ا أليس كذلك؟ لكنك تحتاجه، "20" ولوية لكل شيءjبالفعل ا ً خرى ا_تبقية للتنفيذjح ًقا للنظر في ا_يزات ا وتحديد، أيضا .ولويات فيما يتعلق بهاjا great software development 3 3 الترتيب بنا ًء على تحديدb يتم تعي.أعد صياغة خطة التكرار مع، لذا ا•ن تقوم بتغيير خطتك. توجد أي تبعياتa و، ولوياتjا .مراعاة طول التكرار والجدول العام Rework your iteration plan The ordering is set based on prioritization, and there aren’t any dependencies. So now you change your plan, keeping your iteration length and the overall schedule in mind. O 4 Check your project deadline Remember the TrailMix Conference? You need to see if the work you’ve got left, including the new features, still can get done in time. Otherwise, Tom’s got to make some hard choices. ؟TrailMix حقق من ا_وعد النهائي _شروعك هل تذكر مؤتمر بما في ذلك، تاج إلى معرفة ما إذا كان العمل الذي تركته . يزال من ا_مكن إنجازه في الوقت ا_ناسبa ، يزات الجديدة ً بعضا يجب أن يصنع توم، ف ذلكl (Days of work Left) Organize a Trekking Group (Days Left before deadLine) View = Can you do it? you are here 23 use the right process for you حصلت، العملية هي في الحقيقة مجرد سلسلة من الخطوات العملية. على سمعة سيئة، خاصة في تطوير البرمجيات، العملية هي مجرد سلسلة من الخطوات التي تتبعها من أجل القيام بشيء لذلك عندما كنا نتحدث عن. تطوير البرامج، في حالتنا- ما كنا نتحدث بالفعل عن عملية، ولويات والتقديرjالتكرار وتحديد ا ً من أن تكون أي مجموعة رسمية من القواعدa بد.تطوير البرامج ختبار الذي يجب عليكaحول ا_خططات أو التوثيق أو حتى ا ، (!ختبار شيء نوصي به بالتأكيدaإجراؤه )على الرغم من أن ا .فإن العملية هي في الحقيقة ما يجب القيام به ومتى يتم القيام به نهتمa نحن. فقط يجب أن تعمل... تحتاج إلى اختصارa وهي طا_ا أنها تحتوي على ا_كونات، ح ًقا بالعملية التي تستخدمها التي تضمن لك الحصول على برامج رائعة وعالية الجودة في نهاية .دورة التطوير الخاصة بك أليس، أنت على وشك أن تصدمني بعملية تطوير خيالية كبيرة أو أيًاDRUM أوQuick أوRUP كذلك؟ كما لو كنت أستخدم سأبدأ بطريقة سحرية في ا}نتاج، كان أليس كذلك؟، برنامج رائع You’re about to hit me with a big fancy development process, aren’t you? Like if I use RUP or Quick or DRUM or whatever, I’m magically going to start producing great software, right? A process is really just a sequence of steps Process, particularly in software development, has gotten a bit of a bad name. A process is just a sequence of steps that you follow in order to do something—in our case, develop software. So when we’ve been talking about iteration, prioritization, and estimation, we’ve really been talking about a software development process. Rather than being any formal set of rules about what diagrams, documentation, or even testing you should be doing (although testing is something we’d definitely recommend!), a process is really just what to do, and when to do it. And it doesn’t need an acronym...it just has to work. We don’t really care what process you use, as long as it has the components that ensure you get great, quality software at the end of your development cycle. أليس كذلك؟، يبدو أنه يمكن تطبيق التكرار على أي عملية The right software deveLopment process for YOU is one that heLps YOU deveLop and deLiver great software, on time and on budget. 24 Chapter 1 It seems like iteration could be applied to any process, right? Iteration is more than a process Regardless of the actual steps involved in the process you choose, iteration is a best practice. It’s an approach that can be applied to any process, and it gives you a better chance of delivering what is needed, on time and on budget. Whatever process you end up using, iteration should be a major part. عملية تطوير البرامج ا_ناسبة لك هي عملية تساعدك على تطوير برامج رائعة في الوقت ا_حدد وفي حدود .ا_يزانية التكرار هو أكثر من مجرد عملية بغض النظر عن الخطوات الفعلية ا_تضمنة في فإن التكرار هو، العملية التي تختارها إنه نهج يمكن تطبيقه على.أفضل ممارسة ويمنحك فرصة أفضل لتقديم ما، أي عملية في الوقت ا_حدد وفي حدود، هو مطلوب مهما كانت العملية التي تنتهي.ا_يزانية يجب أن يكون التكرار جز ًءا، باستخدامها .رئيسيًا great software development Your software isn’t complete until it’s been RELEASED لم يكتمل برنامجك حتى يتم إصداره وا•ن انتهيت أنت وفريقك ا_شروع في، لقد أضفت ا_يزات الجديدة كنت، في كل خطوة على الطريق.الوقت ا_حدد وفي ا_وعد ا_حدد مع دمج تلك، تحصل على تعليقات من العميل في نهاية كل تكرار ا•ن يمكنك تسليم.التعليقات وا_يزات الجديدة في التكرار التالي . ومن ثم تدفع لك، البرنامج الخاص بك You added the new features, and now you and your team have finished the project on time and on schedule. At every step of the way, you’ve been getting feedback from the customer at the end of each iteration, incorporating that feedback, and new features, into the next iteration. Now you can deliver your software, and then you get paid. ، أتلقى مكا_ات بالفعل.ممتاز .والناس يحبون ا_وقع الجديد ، سبوعjوارتفعت طلباتنا هذا ا ء الجدد الذينlمعظمها من العم شاهدوا عرضنا التوضيحي عبر .TrailMix ا}نترنت في .عمل جيد Excellent. I’m already getting calls, and people love the new site. And our orders are up this week, mostly off of new customers that saw our online demo at TrailMix. Nice work. " The Goal Q: What happens when the customer comes up with new requirements and you can’t fit all the extra work into your current iteration? A: This is when customer priority comes into play. Your customer needs to make a call as to what really needs to be done for this iteration of development. The work that cannot be done then needs to be postponed until the next iteration. We’ll talk a lot more about iteration in the next several chapters. Q: What if you don’t have a next iteration? What if you’re already on the last iteration, and then a top priority feature comes in from the customer? A: If a crucial feature comes in late to your project and you can’t fit it into the last iteration, then the first thing to do is explain to the customer why the feature won’t fit. Be honest and show them your iteration plan and explain why, with the resources you have, the work threatens your ability to deliver what they need by the due date. The best option, if your customer agrees to it, is to factor the new requirement into another iteration on the end of your project, extending the due date. You could also add more developers, or make everyone work longer hours, but be wary of trying to shoehorn the work in like this. Adding more developers or getting everyone to work longer hours will often blow your budget and rarely if ever results in the performance gains you might expect (see Chapter 3). you are here 25 أدوات _ربع أدوات تطوير البرمجيات الخاص بك تطوير البرمجيات هو كل شيء عن تطوير وتقديم برامج رائعة .في هذا الفصل، لقد تعلمت العديد من التقنيات }بقائك على ا_سار الصحيح .للحصول على قائمة كاملة من اjدوات في الكتاب ،انظر ا_لحق الثاني. your software development toolbox Tools for your Software Development Toolbox The feedback that comes out of each iteration is the best tool for ensuring that your software meets the needs of your customers. ■ An iteration is a complete project in miniature. ■ Successful software is not developed in a vacuum. It needs constant feedback from your customer using iterations. ■ Good software development delivers great software, on time and on budget. ■ It’s always better to deliver some of the features working perfectly than all of the features that don’t work properly. ■ Good developers develop software; great developers !ship software ■ ■ ردود الفعل التي تأتي من كل تكرار هو أفضل وسيلة لضمان ذلك يلتقي برنامجك مع احتياجات عمlئك. ■ التكرار هو كامل مشروع في صورة مصغرة. ■ البرامج الناجحة ليست كذلك وضعت في فراغ .هو -هي يحتاج إلى مlحظات مستمرة من عميلك باستخدام التكرارات. ■ تطوير برمجيات جيد يسلم برامج رائعة ،على الوقت وا_يزانية. دائما التسليم بعض ا_يزات ■ من اjفضل ً تعمل بشكل مثالي أكثر من الجميع من ا_يزات التي a اعمل جيدا. ■ ا_طورون الجيدون يطورون البرمجيات؛ مطورين رائع bبرنامج السفينة! مبادئ التنمية قم بتوصيل البرامج ا_طلوبة تسليم البرنامج في الوقت ا_حدد تقديم البرامج على ا_يزانية CHAPTER 1 Software Development is all about developing and delivering great software. In this chapter, you learned about several techniques to keep you on track. For a complete list of tools in the book, see Appendix ii. تقنيات التنمية التكرار يساعدك على البقاء في ا_سار الصحيح قم بالتخطيط والتوازن ب bالتكرارات الخاصة بك عندما ) aيحدث( التغيير ينتج عن كل تكرار برنامج عمل ويجمع تعليقات من عميلك في كل خطوة على الطريق Chapter 1 26 great software development Software Development Cross Let’s put what you’ve learned to use and stretch out your left brain a bit. All of the words below are somewhere in this chapter. Good luck! 1 2 4 3 5 6 7 8 9 10 11 12 13 14 15 16 17 Across Down 2. I'm the person or company who ultimately decides if your software is worth paying for. 4. Good Developers develop, great developers ......... 6. An iteration produces software that is ......... 7. Aim for........... working days per iteration. 9. The number of development stages that are executed within an iteration. 12. I am one thing that your software needs to do. 13. The date that you need to deliver your final software on. 15. Iteration is ........... than a process. 16. The single most important output from your development process. 17. Software isn't complete until it has been ......... 1. A .......... is really just a sequence of steps. 3. When a project fails because it costs too much, it is ......... 5. I contain every step of the software development process in micro and I result in runnable software. 8. The minimum number of iterations in a 3 month project. 10. Software that arrives when the customer needs it is ......... 11. An iteration is a complete mini-......... 14. The types of software development projects where you should use iteration. you are here 27 exercise solutions Software Development Cross Solution 1 2 P C U S T R 4 S H C T W E 5 I N 6 W 8 T O E Y 9 F H R S R A D E T G E E Q U I R 28 Chapter 1 E R K I N E O M 14 A D L I N L S E E 10 N D D P N R T O I J M O 11 O 15 C A G R E 16 E U T L R E B O 17 R S R D M E P T 12 13 O V O 7 3 E O R E C T 2 gathering requirements Knowing what the customer wants I know I said I wanted a Mustang, but I was really looking for the fiveliter, turbocharged model... دائما على ما تريده ... دائما الحصول على ما تريد ...ولكن يجب على العميل أ 3تحصل 3يمكنك ً ً ولكن يجب على العميل أن يقدم التطوير الرائع للبرامج ما يريده العميل .يدور هذا الفصل حول التطوير الرائع للبرامج ويقدم ما يريده العميل .يتعلق هذا الفصل بالتحدث إلى العمRء Pعرفة متطلباتهم لبرنامجك .التحدث إلى العمRء Pعرفة متطلباتهم لبرنامجك .سوف تتعلم كيف تساعدك قصص اPستخدم ، dوالعصف الذهني ،ولعبة التقدير في فهمك .وستتعلم كيف تساعدك قصص اPستخدم ،والعصف الذهني ،ولعبة التقدير في الوصول إلى ذهن العميل .بهذه الطريقة ،بحلول الوقت الذي تنتهي فيه من مشروعك ،ستكون داخل رأس عميلك .بهذه الطريقة ،بحلول الوقت الذي تنتهي فيه من مشروعك ،ستكون واث ًقا من أنك قمت ببناء ما يريده عميلك ...وليس مجرد تقليد سيء. واثق من أنك بنيت ما يريده عميلك ...وليس مجرد تقليد سيء. !You can’t always get what you want...but the customer should Great software development delivers what the customer wants. This chapter is all about talking to the customer to figure out what their requirements are for your software. You’ll learn how user stories, brainstorming, and the estimation game help you get inside your customer’s head. That way, by the time you finish your project, you’ll be confident you’ve built what your customer wants...and not just a poor imitation. 29 this is a new chapter Download at WoweBook.Com orion’s orbits مدارات أوريون قيد التحديث Orion’s Orbits is modernizing Orion’s Orbits provides quality space shuttle services to discerning clients, but their reservation system is a little behind the times, and they’re ready to take the leap into the 21st century. With the next solar eclipse just four weeks away, they’ve laid out some serious cash to make sure their big project is done right, and finished on time. ، ميزينPء اR خدمات نقل فضائية عالية الجودة للعمOrion’s Orbits توفر تخاذ3 وهم على استعداد، ً عن العصرRولكن نظام الحجز لديهم متأخر قلي مع اقتراب الكسوف الشمسي القادم.قفزة في القرن الحادي والعشرين موال الجادة للتأكد من أنx فقد وضعوا بعض ا، بأربعة أسابيع فقط .حددP وانتهى في الوقت ا، مشروعهم الكبير قد تم بشكل صحيح لذلك، dوظفP اd ذوي الخبرة من بdبرمجP فريق من اOrion يوجد لدى3 قاموا بتعيينك أنت وفريقك من خبراء البرمجيات للتعامل مع تطوير نظام مر متروك لك للقيام بذلك بشكل صحيح وتسليمه فيx ا.الحجز الخاص بهم .حددPالوقت ا Orion’s doesn’t have an experienced team of programmers on staff, though, so they’ve hired you and your team of software experts to handle developing their reservation system. It’s up to you to get it right and deliver on time. We need a web site showing our current deals, and we want our users to be able to book shuttles and special packages, as well as pay for their bookings online. We also want to offer a luxury service that includes travel to and from the spaceport and accommodation in a local hotel... ونريد، نحن بحاجة إلى موقع ويب يعرض صفقاتنا الحالية ت مكوكية وباقات خاصةRأن يتمكن مستخدمونا من حجز رح نريد. با‚ضافة إلى الدفع مقابل حجوزاتهم عبر ا‚نترنت، ً أيضا تقديم خدمة فاخرة تشمل السفر من وإلى ... ميناء فضائي وا‚قامة في فندق محلي How close do you think your final software will be to what the CEO of Orion Orbits wants? 30 إلى أي مدى تعتقد أن برنامجك النهائي سيكون قريبًا مما ؟Orion Orbits يريده الرئيس التنفيذي لشركة Chapter 2 Download at WoweBook.Com gathering requirements Your job is to analyze the Orion’s CEO’s statement, and build some initial requirements. A requirement is a single thing that the software has to do. Write down the things you think you need to build for Orion’s Orbits on the cards below. . Here’s one torted. وبناء، Orion مهمتك هي تحليل بيان الرئيس التنفيذي لشركة طلب هو شيء واحد يجب علىP ا.وليةxتطلبات اPبعض ا شياء التي تعتقد أنك بحاجة إلىx اكتب ا.البرنامج القيام به . على البطاقات أدناهOrion’s Orbits بنائها من أجل get you sta Sh ow cu rre nt de als ll . هذه واحدة لتبدأ بهاDescription: Th e we b site wi sh ow cu rre nt de als to Or ion’s Or bit s use rs. Title: Title: Description: Title: Description: Title: Description: Title: Title: Description: Description: Remember, each requirement should be a single thing the system has to do. .تذكر أن كل متطلب يجب أن يكون شيئ ًا واح ًدا على النظام فعله .تطلباتP فهي مثالية لتدوين ا، إذا كان لديك بطاقات فهرسة If you’ve got index cards, they’re perfect for writing requirements down. you are here 4 Download at WoweBook.Com 31 تطلبات مما يطلبه الرئيس التنفيذيPلنبدأ بكسر ا خذ أفكاره الفضفاضة.Orbit's Orbits لشركة مع كل مقتطف يلتقط شيئ ًا، وح ّولها إلى مقتطفات ... واح ًدا تعتقد أن البرنامج سيحتاج إلى فعله requirements start with customer ideas Let’s start by breaking out the requirements from what the Orion’s Orbits CEO is asking for. Take his loose ideas and turn them into snippets, with each snippet capturing one thing that you think the software will need to do... Sho w cur ren t dea ls site wil l Description: The web sho w cur ren t dea ls to Ori on’s Orbits use rs. Title: Boo k pac kage An Ori on’s Orbits Description: use r wil l be able to boo k a spe cial pac kage wit h ext ras onl ine . Book a shut tle An Orion’s Orbit s user will be able to book a shut tle. Title: Description: Each card captures one thing that the software will need to provide. Title: Arrange travel Orbits use r Description: An Ori on’s wil l be able to arrange travel to and from the spacep ort. Title: Q: Pay online Description: An Orion’s Orbits user will be able to pay for their bookings online Title: Book a hotel Description: An Orion’s Orbits user will be able to book a hotel. Title: Q: Should we be using a specific format for writing these down? Aren’t these requirements just user stories? A: A: No. Right now you’re just grabbing and sorting out the ideas that your customer has and trying to get those ideas into some sort of manageable order. 32 You’re not far off, but at the moment they are just ideas. In just a few more pages we’ll be developing them further into fullfledged user stories. At the moment it’s just useful to write these ideas down somewhere. Chapter 2 Download at WoweBook.Com Q: These descriptions all seem really blurry right now. Don’t we need a bit more information before we can call them requirements? A: Absolutely. There are lots of gaps in understanding in these descriptions. To fill in those gaps, we need to go back and talk to the customer some more... gathering requirements علوماتPتحدث إلى عميلك للحصول على مزيد من ا Talk to your customer to get MORE information There are always gaps in your understanding of what your software is supposed to do, especially early in your project. Each time you have more questions, or start to make assumptions, you need to go back and talk with the customer to get answers to your questions. :ول مع الرئيس التنفيذيxسئلة التي قد تطرحها بعد اجتماعك اxفيما يلي بعض ا Here are a few questions you might have after your first meeting with the CEO: 1 How many different types of shuttles does the software have to support? 2 Should the software print out receipts or monthly reports (and what should be on the reports)? 3 Should the software allow reservations to be canceled or changed? 4 Does the software have an administrator interface for adding new types of shuttles, and/or new packages and deals? 5 Are there any other systems that your software is going to have to talk to, like credit card authorization systems or Air/Space Traffic Control? 6 ا يفترضP دائما فجوات في فهمك هناك ً خاصة في وقت مبكر، أن يفعله برنامجك في كل مرة يكون لديك.من مشروعك أو تبدأ في وضع، سئلةxزيد من اPا تحتاج إلى العودة والتحدث، افتراضات .سئلتكx مع العميل للحصول على إجابات ختلفة التي يجب أن يدعمهاPكوكات اPكم عدد أنواع ا1 البرنامج؟ ت أو التقارير الشهرية3 هل ينبغي للبرنامج طباعة ا‚يصا2 )وماذا يجب أن يكون في التقارير(؟ هل يجب أن يسمح البرنامج بإلغاء الحجوزات أو تغييرها؟3 هل يحتوي البرنامج على واجهة مسؤول ‚ضافة أنواع4 أو حزم وصفقات جديدة؟/ كوكات وPجديدة من ا على برنامجك التحدثd هل هناك أي أنظمة أخرى سيتع5 ئتمان أو التحكم في3 مثل أنظمة ترخيص بطاقات ا، إليها الفضائية؟/ رور الجويةPحركة ا 6 Can you come up with another question you might want to ask the CEO? OK, thanks for coming back to me. I’ll get to those questions in just a bit, but I thought of something else I forgot to mention earlier... Try to gather additional requirements. Talking to the customer doesn’t just give you a chance to get more details about existing requirements. You also want to find out about additional requirements the customer didn’t think to tell you about earlier. There’s nothing worse than finishing a project and the customer saying they forgot some important detail. So how do you get the customer to think of everything you need to know, before you start building their software? يمنحك التحدث3 .تطلبات ا‚ضافيةPحاول جمع ا إلى العميل فقط فرصة للحصول على مزيد من ً تريد.تطلبات الحاليةPالتفاصيل حول ا أيضا تطلبات ا‚ضافية التي لم يفكر العميلPالتعرف على ا يوجد أسوأ من إنهاء3 .في إخبارك بها مسب ًقا شروع ويقول العميل إنه نسى بعض التفاصيلPا إذن كيف تجعل العميل يفكر في كل ما.همةPا قبل البدء في إنشاء برامجهم؟، تحتاج إلى معرفته you are here 4 Download at WoweBook.Com 33 العصف الذهني. فكر جي ًدا، عندما تتكرر مع العميل بشأن متطلباته بشرط أن يشعر، d وعشرة رؤوس أفضل من رأس، مع أناس آخرين؛ رأسان أفضل من رأس . فقط التقط كل شيء- تستبعد أي أفكار في البداية3 .ساهمة دون نقدPالجميع أنه يمكنهم ا ا أنتم جمي ًعا ما زلتم نسمي هذا اللونP طا، فكار الجامحةx بأس إذا توصلت إلى بعض ا3 وهذا ما يسمى.ساسية التي يحاول البرنامج تلبيتهاxحتياجات ا3زرق الذي يركز على اxا .بلوسكيينج للمتطلبات capturing what’s in your customer’s heads Bluesky with your customer When you iterate with the customer on their requirements, THINK BIG. Brainstorm with other people; two heads are better than one, and ten heads are better than two, as long as everyone feels they can contribute without criticism. Don’t rule out any ideas in the beginning— just capture everything. It’s OK if you come up with some wild ideas, as long as you’re all still focusing on the core needs that the software is trying to meet. This is called blueskying for requirements. We call this blue skying because the sky’s the limit. Uses Ajax for a slick user interface. Pay with a credit card and PayPal. Write a review of a flight. Order a DVD of my shuttle flight. Your developm en t team The developer The customer’s team You can include the users themselves. Order in-flight drinks or meals. Avoid office politics. Nothing will stifle creative bluesky thinking like a boss that won’t let people speak up. Try as much as possible to leave job descriptions and other baggage at the door when blueskying requirements. Everyone should get an equal say to ensure you get the most out of each brainstorming session. 34 Chapter 2 Download at WoweBook.Com Choose aisle or window seating. .كتبPتجنب سياسات ا شيء سيخنق موسيقى البلوز ا‚بداعية3 يسمح للناس3 يفكر مثل رئيس ستطاع لP حاول قدر ا.تكلم خرىxمتعة اxوصاف الوظيفية واxاترك ا يجب أن يكون لكل.blueskying عند الباب عند متطلبات شخص رأي متساو لضمان حصولك على أقصى استفادة .ذهنيthe من كل جلسة عصف Never forget to include customer in these sessions. زرق وأنشئ بطاقةxخذ أربعة أفكار من العصف الذهني ا ً تحقق.جديدة لكل متطلب محتمل أيضا مما إذا كان يمكنك . بكd خاصd إضافيdالخروج بمتطلب Take four of the ideas from the bluesky brainstorm and create a new card for each potential requirement. Also, see if you can come up with two additional requirements of your own. Title: gathering requirements We can refer to each requirement easily by using its title. Pay with Visa/MC/PayPal Users will be able to pay for their bookings by credit card. Description: Title: Title: Description: Title: Description: Description: Make these two your own. Title: Title: Description: Description: Answers on page 38. you are here 4 Download at WoweBook.Com 35 getting more with role playing and observation ... أحيانًا تبدو جلستك الزرقاء هكذا Sometimes your bluesky session looks like this... Sometimes, no matter how hard you try, your bluesky sessions can be as muffled as a foggy day in winter. Often the people that know what the software should really do are just not used to coming out of their shell in a brainstorming environment, and you end up with a long, silent afternoon. Some people will give you lots of information... ...and others will clam up and give you the silent treatment. بغض النظر عن مدى، حيانxفي بعض ا يمكن أن تكون جلساتك، حاولةPصعوبة ا .الزرقاء مكتومة مثل يوم ضبابي في الشتاء شخاص الذين يعرفون ماxغالبًا ما يكون ا يجب أن يفعله البرنامج ح ًقا غير معتادون على الخروج من قوقعتهم في بيئة العصف مر بقضاء فترة ماx وينتهي بك ا، الذهني .بعد الظهيرة طويلة صامتة < Nothing > Order in-flight drinks or meals. تطلباتPعاليات مفتاح تحديد اPتطلبات الجيدة الطرق لجمع اPزن ا إذا كان.صلحةPالجيدة هو إشراك أكبر عدد ممكن من أصحاب ا اطلب منهم تبادل، يعمل3 الحصول على الجميع في نفس الغرفة فكار بشكل فردي ثم اجتمعوا م ًعا وطرحوا كل أفكارهم على السبورةxا ابتعدوا وفكروا في ما حدث وعدوا سويًا في.ًRأفكارا أكثر قلي وطرحوا ً اجتماع ثان The zen of good requirements The key to capturing good requirements is to get as many of the stakeholders involved as possible. If getting everyone in the same room is just not working, have people brainstorm individually and then come together and put all their ideas on the board and brainstorm a bit more. Go away and think about what happened and come back together for a second meeting. 36 Chapter 2 Download at WoweBook.Com هناك الكثير من الطرق لجمع إذا لم ينجح.تطلبات الجيدةPا فما عليك سوى، ساليبxأحد ا تجربة طريقة أخرى There are LOTS of ways to gather good requirements. If one approach doesn’t work, simply TRY ANOTHER. gathering requirements اكتشف ما يفعله الناس ح ًقا قي وقانوني( هو لعبة عادلة إلى حد كبير عندما تحاولRكل شيء )هذا أخ هناك طريقتان مفيدتان بشكل.الوصول إلى رأس عميلك لفهم متطلباته .راقبةPدوار واxخاص تساعدك على فهم العميل وهما لعب ا Find out what people REALLY do Everything (that’s ethical and legal) is pretty much fair game when you’re trying to get into your customer’s head to understand their requirements. Two particularly useful techniques that help you understand the customer are role playing and observation. دوار إذا كان عميلك يجد صعوبة في تصور كيف يحتاجxلعب ا أنت تتظاهر بأنك البرنامج ويحاول. فقم بذلك، برنامجه للعمل ثم اكتب كل شيء يحتاج.عميلك إرشادك إلى ما يود أن تفعله تطلبات الخاصةPالبرنامج إلى القيام به على إحدى بطاقات ا .بك Role playing If your customer is finding it hard to visualize how they need their software to work, act it out. You pretend to be the software and your customer attempts to instruct you in what they would like you to do. Then write down each thing the software needs to do on one of your requirement cards. And now I’d select the dates for the booking... You pretend to “be” your software. OK, so now I display a calendar widget (and add display dates to my “Create a booking” card...) Your customer pretends that you ar the software and tr e ies to do their job. شخاص مع برنامجك هي مشاهدتهاx تكون أفضل طريقة لفهم كيفية عمل ا، حيانxحظة في بعض اRPا حظة ح ًقاRP ويمكن أن تساعد ا، باشرةPدلة اx شيء يتفوق على ا3 .ناسب لبرنامجكPكان اP ومعرفة ا، زرق أو حتى في لعبxفي إبراز القيود والتفاصيل التي ربما تكون قد فاتتك في العصف الذهني ا ً حاول.دوارxا تكتسب انطبا ًعا لدى3 حتىdت أكثر من مرة مع عدة مراقبRأيضا مراقبة نفس التفاع .شخص واحد عن حدث ما Observation Sometimes the best way to understand how people will work with your software is to watch them, and figure out where your software will fit in. Nothing beats firsthand evidence, and observation can really help to bring out constraints and details that might have been missed in bluesky brainstorming or even in role playing. Also, try to observe the same interactions more than once with multiple observers so you don’t just gain one person’s impression of an event. Yes, we offer a selection of different types of seats... If you can, try three people observing on around three occasions Hmm, that requirement hasn’t come up before... ion Try to keep your observbleat. as unobtrusive as possi you are here 4 Download at WoweBook.Com 37 customer-oriented requirements كانت مهمتك أن تأخذ كل فكرة من جلسة وإنشاء بطاقة35 في الصفحةbluesky .جديدة لكل متطلب محتمل Our Your job was to take each of the ideas from the bluesky session on page 35 and create a new card for each potential requirement. You should also role play and observe. Pay with Visa/MC/PayPal Users will be able to Description: pay for their book ings by credi t card or PayPal. A nonfunctional constraint, but it is still captured as a user story Title: Order Flight DVD A user will be able to Description: order a DVD of a flight they have been on. Review flight Description: A user will be able to leave a review for a shuttle flight they have been on. Title: Order in-flight meals to Description: A user will be able they s drink and speci fy the meals want during a flight. Title: Support 3,000 concurren t users Description: The traffic for Orion’s Orbits is expected to reach 3,000 users, all using the site at the same time. We’ve added to our cards from page 32 after the brainstorming with the customer. Title: Title: Bo ok a sh ut tle utab A usBoerokwaillshbe tlele le: to scrip tion: A Bo bo okDeaTit ok a sh ut sh ut usify er wi tle ll sp be ec ab ing th etle De daleteto rip okescaof tio shth an d bo A utn: us tle tim er sp wi ec ll be ify ing leta th eabda to ok a sheutfligh t. anbo d tim DescTit riple: tion: e of thtle ec ify ing th e data e flispgh an d time of th e fli t. gh t. These were the requirements we came up with; yours could have been different. Choose seating A user will be able to choose aisle or window seating. Title: Description: Us e Aj ax fo r th e UI Th e us er in te rf ac e Description: lo gies to w ill us e Aj ax te ch no sl ic k on line prov ide a co ol an d ex pe rien ce . And we’ve added more detaroilugh where it was uncovered thg, or brainstorming, role playin observation. Title: These are really looking good, but what’s Ajax? Isn’t that a kitchen cleaner or something? The boss isn’t sure he understands what this requirement is all about. 38 Title: Chapter 2 Download at WoweBook.Com gathering requirements يجب أن تكون متطلباتك موجهة نحو العميل Your requirements must be CUSTOMER-oriented تمت كتابة متطلبات كبيرة من منظور عميلك، في الواقع 3 تعتبر أي متطلبات.تصف ما سيفعله البرنامج للعميل A great requirement is actually written from your customer’s perspective نهاx نظرا ً ، مة تحذيرية فوريةRيفهمها العميل بمثابة ع describing what the software is going to do for the customer. Any requirements that .ليست أشياء يمكن أن يطلبها العميل your customer doesn’t understand are an immediate red flag, since they’re not things that :طلب بلغة العميل وقراءته كقصة مستخدمPيجب كتابة ا the customer could have possibly asked for. مع البرنامج الذي تقومdستخدمPقصة حول كيفية تفاعل ا A requirement should be written in the customer’s language and read like a user story: عند تحديد ما إذا كانت لديك متطلبات جيدة أم.بإنشائه : احكم على كل واحد وف ًقا للمعايير التالية، 3 a story about how their users interact with the software you’re building. When deciding if you have good requirements or not, judge each one against the following criteria: ستخدمPيجب أن قصص ا User stories SHOULD... .صف شيئ ًا واح ًدا يحتاج البرنامج إلى فعله للعميل ... describe one thing that the software needs to do for the customer. .أن تكتب بلغة يفهمها العميل You should be able to check each box for each of your user stories. ... be written using language that the customer understands. .أن يكتب من قبل العميل ... be written by the customer. .ث جملR يزيد عن ث3 تهدف إلى ما. كن قصيرا... This means the customer drives each one, no matter who scribbles on a notecard. ... be short. Aim for no more than three sentences. If a user story is lon you should try and g, break it up into mult smaller user stories (seiplee page 54 for tips). ... ستخدمP تكون قصص ا3يجب أ User stories SHOULD NOT... .يكون مقال طويل ... be a long essay. . استخدم مصطلحات فنية غير مألوفة للعميل... ... use technical terms that are unfamiliar to the customer. ... mention specific technologies. Us e Aj ax fo r th e UI Th e us er in te rf ac e Description: lo gies to w ill us e Aj ax te ch no sl ic k on line prov ide a co ol an d ex pe rien ce . Title: . أذكر تقنيات محددة... This card is not a user story at all; it’s really a design decision. Save it for later, when you start implementing the software. DESIGN IDEAS Think “by the customer, for the customer” ستخدم مكتوبة من وجهةPقصة ا يجب أن تفهم أنت.نظر العميل ستخدمPوعميلك ما تعنيه قصة ا A user story is written from the CUSTOMER’S PERSPECTIVE. Both you AND your customer should understand what a user story means. you are here 4 Download at WoweBook.Com 39 إن الشيء العظيم في.( مرة أخرى، اسأل العميل )نعم keep your customer in the loop هو أنه من السهل عليك وعلى العميلdستخدمPقصص ا عندما تكتب.قراءتها ومعرفة ما قد يكون مفقو ًدا ستجد غالبًا أنهم يقولون أشياء، ءRالقصص مع العم ً نحن نفعل هذا، مثل "أوه ، أو "في الواقع، "... أيضا " هذه رائعة فرص... ًRنفعل ذلك بطريقة مختلفة قلي إذا وجدت أنك غير. وجعلها أكثر دقة، متطلباتكdتحس فقد حان الوقت ‚جراء مناقشة، واضح بشأن أي شيء عد واسألهم مجموعة أخرى من.أخرى مع عميلك رحلة التاليةPنتقال إلى اR أنت مستعد فقط ل.سئلةxا سئلة ويكون عميلكxزيد من اP يكون لديك ا3 عندما ً سعي ًدا تلتقط كل ماdستخدمPن جميع قصص اx أيضا . في الوقت الحالي- يحتاجون إلى البرنامج للقيام به Great, so now you’ve created more user stories, and gotten a bunch more questions. What do you do with all these things you’re still unclear about? Ask the customer (yes, again). The great thing about user stories is that it’s easy for both you and the customer to read them and figure out what might be missing. When you’re writing the stories with the customer, you’ll often find that they say things like “Oh, we also do this...”, or “Actually, we do that a bit differently...” Those are great opportunities to refine your requirements, and make them more accurate. If you find that you are unclear about anything, then it’s time to have another discussion with your customer. Go back and ask them another set of questions. You’re only ready to move on to the next stage when you have no more questions and your customer is also happy that all the user stories capture everything they need the software to do—for now. Q: What’s the “Title” field on my user stories for? Doesn’t my description field have all the information I need? A: The title field is just a handy way to refer to a user story. It also gives everyone on the team the same handy way to refer to a story, so you don’t have one developer talking about “Pay by PayPal,” another saying, “Pay with credit card,” and find out they mean the same thing later on (after they’ve both done needless work). Q: Won’t adding technical terms and some of my ideas on possible technologies to my user stories make them more useful to me and my team? A: No, avoid tech terms or technologies at this point. Keep things in the language of the customer, and just describe what the software needs to do. Remember, the user stories are written from the customer’s perspective. The customer has to tell you whether you’ve gotten the story right, so a bunch of tech terms will just confuse them (and possibly obscure whether your requirements are accurate or not). If you do find that there are some possible technical decisions that you can start to add when writing your user stories, note those ideas down on another set of cards (cross referencing by title). When you get to coding, you can bring those ideas back up to help you at that point, when it’s more appropriate. Q: And I’m supposed to do all this refining of the requirements as user stories with the customer? 40 Chapter 2 Download at WoweBook.Com A: Yes, absolutely. After all, you’re only ready for the next step when both you and the customer finally decide that you completely understand the software requirements. You can’t make that decision on your own, so keeping your customer in the loop is essential. Q: This seems like a lot of requirements work up front at the beginning of the project. What about when things change? A: The work you’ve done so far is just your first attempt at gathering requirements at the beginning of your prject. You’ll continue to refine and capture new requirements throughout your project, feeding those requirements where necessary into your project’s iterations. فكار فيx تلك اdء وتحسRكانت الخطوات التي اتبعناها حتى ا—ن تدور حول استيعاب أفكار العم في بداية كل تكرار للتأكد من أن، بشكل أو بآخر، تقوم بتنفيذ هذه الخطوات.dستخدمPقصص ا دعونا نرى كيف تبدو هذه. تنتقل إلى التكرار التاليgathering يزات التيPمن اrequirements جموعة الصحيحةPدائما ا لديك ً ... العملية حاليًا ءRحظات العمRل مRطور متطلباتك من خ Develop your requirements with customer feedback The steps we’ve followed so far have been all about coming to grips with the customer’s ideas and refining those ideas into user stories. You execute these steps, in one form or another, at the beginning of each iteration to make sure that you always have the right set of features going into the next iteration. Let’s see how that process currently looks... 2 1 ? ? Remember, this process happens at the beginning of each iteration, not just the beginning of your entire project. Bluesky Brainstorming Capturing basic ideas Customer ideas... 3 You keep the customer involved at each step. Constructing User Stories Title: Bo ok a sh ut tle utab A usBoerokwaillshbe tlele le: to scrip tion: A Bo bo okDeaTit ok a sh ut sh ut us tle er tle wi ll th sp be ec ify in g De eabdaletato sc rip oke aof tio shth an d bo A utn: us tle tim er sp ec ifywi ll be ing leta th eabda to ok a sheutfligh t. anbo d tim DescTit riple: tion: e of thtle ec ify ing th e data e flispgh an d time of th e fli t. gh t. ?? 4 Refining your initial set of user stories Your first set of re ire ments; you’ll add and clarifyquth es further throughout your e project’s iterations. Finding holes and adding clarity on details using the customer’s feedback Choos e seating Bo okwill A user a sh beutable tle to Boerok aillshbe choos e aisle or windo utab A tle us w seatin g. le to w le: scrip tion: A Bo bo okDeaTit ok a sh ut sh ut usify tle er wi tle sp ec ll be in g th De eabdaletato rip okescaof tio shth an d bo Aspus utn: tle tim er wi ec ll ify be ing e fli leta th to eabda ok ae sh ut gh t. anbo d tim Title: Title: Description: DescTit riple: tion: of thtle ec ify ing th e data e flispgh an d time of th e fli t. gh t. oal This is the g this stage. at 5 Clear, customer-focused user stories you are here 4 Download at WoweBook.Com 41 user stories capture what your software needs to do User Story Exposed This week’s interview: The many faces of a User Story Head First: Hello there, User Story. User Story: Hi! Sorry it’s taken so long to get an interview, I’m a bit busy at the moment... Head First: I can imagine, what with you and your friends capturing and updating the requirements for the software at the beginning of each iteration, you must have your hands pretty full. User Story: Actually, I’m a lot busier than that. I not only describe the requirements, but I’m also the main technique for bridging the gap between what a customer wants in his head and what he receives in delivered software. I pretty much drive everything from here on in. Head First: But don’t you just record what the customer wants? User Story: Man, I really wish that were the case. As it turns out, I’m pretty much at the heart of an entire project. Every bit of software a team develops has to implement a user story. Head First: So that means you’re the benchmark against which every piece of software that is developed is tested? User Story: That means if it’s not in a user story somewhere, it ain’t in the software, period. As you can imagine, that means I’m kept busy all the way through the development cycle. Head First: Okay, sure, but your job is essentially done after the requirements are set, right? User Story: I wish. If there’s anything I’ve learned, requirements never stay the same in the real world. I might change right up to the end of a project. 42 Head First: So how do you handle all this pressure and still keep it together? User Story: Well, I focus on one single thing: describing what the software needs to do from the customer’s perspective. I don’t get distracted by the rest of the noise buzzing around the project, I just keep that one mantra in my head. Then everything else tends to fall into place. Head First: Sounds like a big job, still. User Story: Ah, it’s not too bad. I’m not very sophisticated, you know? Just three lines or so of description and I’m done. The customers like me because I’m simple and in their language, and the developers like me because I’m just a neat description of what their software has to do. Everyone wins. Head First: What about when things get a bit more formal, like with use cases, main and alternate flows, that sort of thing? You’re not really used then, are you? User Story: Heck, I can smarten myself up with some more details to be a use case if that’s what you need, and lots of people do dress me up that way for their bosses. The important thing is that we all describe what a piece of software needs to do, no matter how we look. Use cases are more or less user stories in a tuxedo. Head First: Well, you heard it here first folks. Next week we’ll be catching up with Test to see how he guarantees that software does what a user story requires. Until then, take care and remember, always do only what your user story says, and not an ounce more! Chapter 2 Download at WoweBook.Com gathering requirements تحدد التقديرات متى... ماهية مشروعكdستخدمPتحدد قصص ا User stories define the WHAT of your project... estimates define the WHEN After your initial requirement-capture stage you will have a set of clear, customer-focused user stories that you and the customer believe capture WHAT it is you’re trying to build, at least for the first iteration or so. But don’t get too comfortable, because the customer will want to know WHEN all those stories will be built. This is the part where the customer asks the big question: How long will it all take? سيكون لديك مجموعة من، وليةxتطلبات اPبعد مرحلة التقاط ا ستخدم الواضحة التي تركز على العميل والتيPقصص ا قلx على ا، تعتقد أنت والعميل أنها تلتقط ما تحاول بناءه ن العميلx ، كثيرا ترتاح3 لكن.ول أو نحو ذلكxللتكرار ا ً .سيرغب في معرفة متى سيتم إنشاء كل هذه القصص كم من:هذا هو الجزء الذي يطرح فيه العميل السؤال الكبير مر كله؟xالوقت سيستغرق ا Hmm, great. Now what do I do? How do I figure out how long everything is going to take when all I have so far is a pack of user stories? ستخدم الخاصة بكPتقدير مشروعك هو مجموع تقديرات قصص ا Your project estimate is the sum of the estimates for your user stories To figure out how long it will take to complete all of the requirements captured in your user stories, you need to use a two-step process. You need to: دة التي سيستغرقها إكمال جميعPعرفة اP تطلبات التي تم التقاطها في قصصPا تحتاج إلى استخدام، ستخدم الخاصة بكPا .dعملية من خطوت :تحتاج إلى If you can get تقديرا لكل قصة مستخدم للمدة التي تعتقد أنها ستستغرق لتطوير أضف ً .(ختبار وتقديم3هذه الوظيفة )أي التصميم والتشفير وا figured out... this Add an estimate to each user story for how long you think it will take to develop (that is, design, code, test, and deliver) that functionality. Add up all the estimates to get a total estimate for how long your project will take to deliver the required software. اجمع جميع التقديرات للحصول على تقدير إجمالي للمدة .طلوبةPالتي سيستغرقها مشروعك لتقديم البرامج ا ...then this will be a piece of cake. you are here 4 Download at WoweBook.Com 43 estimates come with assumptions Welcome to the Orion’s Orbits Development Diner. Below is the menu...your job is to choose your options for each dish, and come up with an estimate for that dish—ahem—user story. You’ll also want to note down any assumptions you made in your calculations. Entrées Pay Credit Card or Paypal Visa .......................................2 days Mastercard ............................2 days PayPal ...................................2 days American Express .................5 days Discover ................................4 days Order Flight DVD Stock titles with standard definition video .....................2 days Provide custom titles .............5 days High Definition video ...........5 days Order In-Flight Meals Choose Seating Choose aisle or window seat ..........................2 days Choose actual seat on shuttle ........................... 10 days Select from list of three meals & three drinks .......................5 days Allow special dietary needs (Vegetarian, Vegan) ...............2 days Desserts Create Flight Review Create a review online ..........3 days Submit a review by email .....5 days 44 Chapter 2 Download at WoweBook.Com gathering requirements Pay with Visa/MC/PayPal Users will be able to Description: pay for their book ings by credi t card or PayPa l. Estimate for each user story in days Assumptions? Title: Write your estimate for the user story here. Order Flight DVD A user will be able to Description: of a flight they have DVD a order been on. Title: Jot down any assumptions you think you’re making in your estimate. Cho ose seating will be able to Description: A user seating . dow cho ose aisle or win Title: Order in-flight meals A user will be able to speci fy the meals and drink s they want during a flight. Title: Description: Review flight A user will be able to leave a review for a shuttle flight they have been on. Title: Description: you are here 4 Download at WoweBook.Com 45 assumptions kill confidence in your user stories What did you come up with? Rewrite your estimates here. Bob and Laura also did estimates...how did yours compare to theirs? Your estimates Bob’s estimates Laura’s estimates Put your estimates here. Title: Title:: Title:: Title:: Title:: Pay with Visa/MC/PayPal Order Flight DVD Cho ose seating Order in-flight meals Review flight 10 15 2 20 12 2 2 7 3 3 Well, at least we seem to agree here... It looks like everyone has a different idea for how long each user story is going to take. Which estimates do you think are RIGHT? 46 Chapter 2 Download at WoweBook.Com gathering requirements Cubicle conversation So Laura, we can’t both be totally wrong. But how did we get such completely different estimates? Laura: Well, let’s start with the first user story. How did you come up with 10 days? Bob: That’s easy, I just picked the most popular credit cards I could think of, and added time to support PayPal... Laura: But lots of high-end executives only use American Express, so my assumption was that we’d have to cope with that card, too, not just Visa and MasterCard. Bob: Okay, but I’m still not feeling entirely happy with that. Just that one assumption is making a really big difference on how long it will take to develop that user story... Laura: I know, but what can you do, we don’t know what the customer expects... Bob: But look at this...you came up with 20 days for “Ordering a Flight DVD,” but even with all the options, that should be 14 days, max! فتراضات هو أهم نشاط للتوصل إلى3التخلص من ا .تقديرات تؤمن بها Getting rid of assumptions is the most important activity for coming up with estimates you believe in. Laura: I was actually being on the conservative side. The problem is that creating a DVD is a completely new feature, something I haven’t done before. I was factoring in overhead for researching how to create DVDs, installing software, and getting everything tested. Everything I thought I’d need to do to get that software written. So it came out a lot higher. Bob: Wow, I hadn’t even thought of those things. I just assumed that they’d been thought of and included. I wonder if the rest of the estimates included tasks like research and software installation? Laura: In my experience, probably not. That’s why I cover my back. Bob: But then all of our estimates could be off... Laura: Well, at least we agree on the “Create a Flight Review” story. That’s something. Bob: Yeah, but I even had assumptions I made there, and that still doesn’t take into account some of that overhead you were talking about. Laura: So all we have are a bunch of estimates we don’t feel that confident about. How are we going to come up with a number for the project that we believe when we don’t even know what everyone’s assumptions are? you are here 4 Download at WoweBook.Com 47 فتراضات التي تعرض تقديراتك3 تحتاج إلى التخلص من كل تلك ا، للتوصل إلى تقديرات دقيقة highlighting assumptions and obtaining confident estimates with فيplanning الجميع ويثقونpoker أنت تريد مجموعة من التقديرات التي يؤمن بها.لخطر الوقوع في الخطأ فتراضات3قل تريد مجموعة من التقديرات التي تتيح لك معرفة اx أو على ا، قدرتها على تقديمها ستحواذ على كل منR حان الوقت ل.نقطPالتي يتخذها الجميع قبل التوقيع على الخط ا ستعداد للعب3 والجلوس حول طاولة وا، ستخدم الخاصة بكPسيشارك في تقدير قصص ا .""التخطيط للبوكر لعب البوكر التخطيط Playing planning poker To come up with accurate estimates, you need to get rid of all those assumptions that put your estimates at risk of being wrong. You want a set of estimates that everyone believes in and are confident that they can deliver, or at the very least you want a set of estimates that let you know what assumptions everyone is making before you sign on the dotted line. It’s time to grab everyone that’s going to be involved in estimating your user stories, sit them around a table, and get ready to play “planning poker.” ستخدم في منتصف الجدولPضع قصة ا Place a user story in the middle of the table This focuses everyone on a specific user story so they can get their heads around what their estimates and assumptions might be. يركز هذا الجميع على قصة مستخدم معينة حتى يتمكنوا من فهم 1 .ما قد تكون عليه تقديراتهم وافتراضاتهم Pay with Visa/MC/PayPal Users will be able to Description: pay for their booki ngs by credit card or PayPa l. Title: We want a solid esti how long it will takematote for this story. Don’t forg develop development should inclet that designing, coding, testinude delivering the user stor g, and y. كل بطاقة لها تقدير مكتوب على. بطاقة13 يحصل كل شخص على مجموعة من .جانب واحد Everyone is given a deck of 13 cards. Each card has an estimate written on one side. :نح الناس عدة خياراتP يكفي فقط، تحتاج فقط إلى سطح صغير You only need a small deck, just enough to give people several options: 2 This card means “It’s already done.” 0 days 8 days 13 days Everyone has each of these cards. 48 1/2 day 1 day 20 days 2 days 3 5 days days 40 100 days days Hmmm...any thoughts on what it means if someone plays one of these cards for their estimate? Chapter 2 Download at WoweBook.Com All of these estimates are or developer-days (finstance, two mann days split betwee ill two workers is st two days). ? If any player uses Don’t have enough this card, you need info to estimate? You to take might consider using estimatinag break from for a bit. this card. gathering requirements ستخدم ويضع ملفPتقديرا لقصة ا يختار الجميع ً .سفل على الطاولةx قابلةPوجه البطاقة ا 3 Everyone picks an estimate for the user story and places the corresponding card face down on the table. You pick the card that you think is a reasonable estimate for the user story. Don’t discuss that estimate with anyone else, though. .ستخدم بالكامل هذا التقدير مع أي شخص آخرP يناقش ا3 .ستخدمPأنت تختار البطاقة التي تعتقد أنها تقدير معقول لقصة ا Make sure your estimate is for the whole user story, not just a part of it. The user story is still in the middle... still the focus. Place your choice face-down so you e keep your estimat from everyone else .يقوم الجميع بعد ذلك بتسليم بطاقاتهم في نفس الوقت بالضبط 4 Everyone then turns over their cards at exactly the same time. Each player at the table shows their hand, which gives their honest estimate for the user story. .ستخدمP مما يعطي تقديره الصادق لقصة ا، عب على الطاولة يده3 يظهر كل These almostatch never all m okay. up... that’s .مة أسفل السبريد عبر كل من التقديرات4يضع التاجر ع 5 The dealer marks down the spread across each of the estimates. Whoever is running the game notes the spread across each of the estimates that are on the cards. Then you do a little analysis: Ask ثم تقوم.وجودة على البطاقاتPنتشار عبر كل من التقديرات ا3حظ اRكل من يدير اللعبة ي :ببعض التحليل an accurate re It’s probably safe to fiinguthis range. e er wh estimate is some 8 13 20 100 the d card whatetveloper who played th about; don’t hey were thinking is pull out the ignore them, try to assumptions they made. The larger the difference between the estimates, the less confident you are in the estimate, and the more assumptions you need to root out. فتراضات التي تحتاج إلى3 وزادت ا، قلت ثقتك في التقدير، التقديراتdف بRخت3كلما زاد ا .استئصالها Download at WoweBook.Com you are here 4 49 assumptions are killed or become risks How does this help with assumptions? And what about that guy who chose 100? We can’t just ignore him, can we? سعار الكبيرة يمكن أن تكون سوء فهمxفروق ا Large spreads can be a misunderstanding When you see large gaps between the estimates on a particular user story’s spread, something is probably missing. It could be that some of your team misunderstood the user story, in which case it’s time to revisit that story. Or it could be that some members of your team are just unsure of something that another part of your team is completely happy with. In either case, it’s time to look at the assumptions that your team is making and decide if you need to go back and speak to the customer to get some more feedback and clarification on your user stories—and the assumptions you’re making about them. In fact, even if everyone’s estimate is within the same narrow range, it’s worth asking for everyone’s assumptions to make sure that EVERYONE is not making the same wrong assumption. It’s unlikely that they are, but just in case, always discuss and document your assumptions after every round of planning poker. التقديرات حول انتشار قصةdعندما ترى فجوات كبيرة ب قد.حتمل أن يكون هناك شيء مفقودP فمن ا، dمستخدم مع يكون السبب هو أن بعض أعضاء فريقك أساءوا فهم قصة وفي هذه الحالة حان الوقت ‚عادة النظر في تلك، ستخدمPا أو قد يكون بعض أعضاء فريقك غير متأكدين من.القصة ، d في كلتا الحالت.شيء يسعد به جزء آخر من فريقك تما ًما فتراضات التي يضعها فريقك وتحديد3حان الوقت للنظر في ا ما إذا كنت بحاجة إلى العودة والتحدث إلى العميل للحصول ستخدمPعلى مزيد من التعليقات والتوضيحات حول قصص ا ، في الواقع. فتراضات التي تضعها عنها3 وا- الخاصة بك فمن، حتى لو كان تقدير الجميع ضمن نفس النطاق الضيق 3 الجدير طلب افتراضات الجميع للتأكد من أن الجميع حتمل أن يكونواP من غير ا.فتراضات الخاطئة3يتخذون نفس ا دائما ناقش، ولكن فقط في حالة حدوث ذلك، كذلك ً .افتراضاتك ووثقها بعد كل جولة تخطيط بوكر 50 Try writing your assumptions on the back of your user story cards. Chapter 2 Download at WoweBook.Com gathering requirements حاكمة على حياتهمPفتراضات قيد ا3ضع ا Put assumptions on trial for their lives When it comes to requirements, no assumption is a good assumption. So whenever planing poker turns up your team’s assumptions, don’t let that assumption into your project without first doing everything you can to beat it out of your project... يوجد3 ، تطلباتPمر باxعندما يتعلق ا عندما تؤدي لعبة، لذلك.افتراض جيد 3 ، البوكر إلى عرض افتراضات فريقك فتراض يدخل في مشروعك3تدع هذا ا ً كل ما في وسعك3دون أن تفعل أو ... للتغلب عليه خارج مشروعك Put every assumption on trial You’re aiming for as few assumptions as possible when making your estimates. When an assumption rears its head in planning poker, even if your entire team shares the assumption, expect that assumption to be wrong until it is clarified by the customer. As opposed to not knowing what you don’t know... At least you know what you don’t know No matter how hard you try, some assumptions really will survive clarification with the customer. That’s OK. Sometimes the customer doesn’t have a great answer to a particular assumption at the beginning of a project, and in those cases you need to live with the assumption. The important thing is that you know that there is an assumption being made, and you can write it down as a risk for that user story (like on the back of your user story card). This helps you keep an eye on and track your risks, knocking them out at a later stage in your project. تعرفه بغض النظر عن مدى صعوبة3 قل أنت تعرف ماxعلى ا فتراضات حقا ً موضع توضيح مع3 ستظل بعض ا، حاولةPا يكون لدى العميل3 حيانx في بعض ا. هذا حسن.العميل وفي هذه، شروعP في بداية اdفتراض مع3 إجابة جيدة هم هوP الشيء ا.فتراض3ت تحتاج إلى التعايش مع ا3الحا ً ويمكنك كتابته على، افتراضا يتم إجراؤه أنك تعرف أن هناك ستخدمPستخدم )مثل ظهر بطاقة قصة اPأنه خطر على قصة ا يساعدك هذا في مراقبتها وتتبع إخراجها في.(الخاصة بك حقة من مشروعك3 مرحلة ، فتراضات3دائما التخلص من جميع ا يمكنك3 بينما ً فإن الهدف أثناء التقدير هو التخلص من أكبر عدد ل توضيح تلكRفتراضات من خ3ممكن من ا ثم تصبح أي افتراضات باقية.فتراضات مع العميل3ا .مخاطر Depending on customer priority, you might even decide to delay the development of a user er of story that has a numb til surviving assumptions un they can be clarified. While you can’t always get rid of all assumptions, the goal during estimation is to eliminate as many assumptions as possible by clarifying those assumptions with the customer. Any surviving assumptions then become risks. you are here 4 Download at WoweBook.Com 51 use your customer effectively With all this talk of customer clarification, it seems to me that you could be bothering the customer too much. You might want to think about how you use the customer’s time effectively... يمكن أن يصبح وضع جميع افتراضاتك قيد التجربة.قدر وقت عميلك ًRطوال حياتهم وطلب التوضيح من العميل عم يمكنك بسهولة.كثيرا ً قد يكون هذا جي ًدا. من وقتك مع عميلك، إن لم يكن كله، قضاء الكثير 3 ج ًدا بحيثdشغولPء اR ولكن ماذا عن العم، ءRمع بعض العم تحتاج إلى، ت3 دقيقة؟ في هذه الحا15 يمكنهم التحدث معك كل على الرغم من أنك تحاول التأكد من صحة.ل وقت عميلك بعنايةRاستغ تريد أن تصادف أنك لست على3 أنك3 إ، مور في مشروعهمxا تأكد من أن، لذلك عندما تقضي وقت ًا مع عميلك.مستوى الوظيفة حاول جمع مجموعة من.الوقت منظم وفعال ومستهلك جي ًدا ً من3 بد.فتراضات م ًعا ثم توضيحها م ًعا مرة واحدة مع العميل3ا حدد، ت التخطيط للعبة البوكر3إزعاج العميل في نهاية كل جولة من جو فتراضات التي تم3فتراضات حيث تأخذ ا3موع ًدا لجلسة لكسر ا .جمعها وحاول تفجير أكبر عدد ممكن منها بعي ًدا Value your customer’s time. Putting all your asssumptions on trial for their life and seeking clarification from the customer can become a lot of work. You can easily spend a lot, if not all, of your time with your customer. That might be OK with some customers, but what about the ones that are too busy to talk with you every 15 minutes? In those cases you need to use your customer’s time carefully. Even though you’re trying to make sure you’ve gotten things right on their project, you don’t want to come across as being not up to the job. So when you do spend time with your customer, make sure that time is organized, efficient, and well-spent. Try gathering a collection of assumptions together and then clarifying those all at once with the customer. Rather than bothering the customer at the end of every round of planing poker, schedule an assumption-busting session where you take in the collected assumptions and try to blast as many of them away as possible. Once you have your answers, head back for a final round of planning poker. Once you’ve gotten a significant number of your assumptions beaten out in your assumption-busting session with the customer, it’s time to head back and play a final round of planning poker so that you and your team can come up with estimates that factor in the new clarifications. خيرة منx عد للجولة ا، بمجرد حصولك على إجاباتك بمجرد حصولك على عدد كبير من.التخطيط للبوكر افتراضاتك التي تم التغلب عليها في جلسة تحطيم فقد حان الوقت للعودة ولعب، فتراضات مع العميل3ا خيرة من التخطيط للبوكر حتى تتمكن أنت وفريقكxالجولة ا التوضيحات.من التوصل إلى تقديرات لهذا العامل .الجديدة 52 Chapter 2 Download at WoweBook.Com gathering requirements Q: Why is there a gap between 40 and 100 days on the planning poker cards? A: Well, the fact is that 40 is a pretty large estimate, so whether you feel that the estimate should be 41 or even 30 days is not really important at this point. 40 just says that you think there’s a lot to do in this user story, and you’re just on the boundary of not being able to estimate this user story at all... get caught up in the game. However, every estimate, particularly ones that are out of whack with the rest of the player’s estimates, should come under scrutiny after every round to highlight the assumptions that are driving those estimates. Q: After a few rounds where you start to realize that those wacky estimates are not really backed up by good assumptions, you can either think about removing those people from the table, or just having a quiet word with them about why they always insist on being off in left field. A: Should we be thinking about who implements a user story when coming up with our estimates? 100 days seems really long; that’s around half a year in work time! Why have 100 days on the cards at all? Absolutely, 100 days is a very long time. If someone turns up a 100-days card then there’s something seriously misunderstood or wrong with the user story. If you find that it’s the user story that’s simply too long, then it’s time to break that user story up into smaller, more easily estimatable stories. Q: What about the question-mark card? What does that mean? A: That you simply don’t feel that you have enough information to estimate this user story. Either you’ve misunderstood something, or your assumptions are so big that you don’t have any confidence that any estimate you place down on the table could be right. Q: Some people are just bound to pick nutty numbers. What do I do about them? A: Good question. First, look at the trends in that individual’s estimates to see if they really are being “nutty,” or whether they in fact tend to be right! However, some people really are inclined to just pick extremely high or very low numbers most of the time and Q: A: No, every player estimates how long they think it will take for them to develop and deliver the software that implements the user story. At estimation time you can’t be sure who is going to actually implement a particular user story, so you’re trying to get a feel for the capability of anyone on your team to deliver that user story. Of course, if one particular user story is perfect for one particular person’s skills, then they are likely to estimate it quite low. But this low estimate is balanced by the rest of your team, who should each assume that they are individually going to implement that user story. In the end, the goal is to come up with an estimate that states “We as a team are all confident that this is how long it will take any one of us to develop this user story.” Q: Each estimate is considering more than just implementation time though, right? A: Yes. Each player should factor in how much time it will take them to develop and deliver the software including any other deliverables that they think might be needed. This could include documentation, testing, packaging, deployment—basically everything that needs to be done to develop and deliver the software that meets the user story. If you’re not sure what other deliverables might be needed, then that’s an assumption, and might be a question for the customer. Q: What if my team all agree on exactly the same estimate when the cards are turned over. Do I need to worry about assumptions? A: Yes, for sure. Even if everyone agrees, it’s possible that everyone is making the same wrong assumptions. A large spread of different estimates indicates that there is more work to be done and that your team is making different and possibly large assumptions in their estimates. A tiny spread says that your team might be making the same assumptions in error, so examining assumptions is critical regardless of the output from planning poker. It’s important to get any and all assumptions out in the open regardless of what the spread says, so that you can clarify those assumptions right up front and keep your confidence in your estimates as high as possible. تصنع3 Don’t make assumptions about your assumptions... talk about EVERYTHING. افتراضات حول تحدث... افتراضاتك .عن كل شيء you are here 4 Download at WoweBook.Com 53 keep estimates small ستخدم هو تقدير سيءPالتقدير الكبير لقصة ا ستخدمPلقصة ا A BIG user story estimate is a BAD user story estimate We all agree, we don’t need any more information. This user story will take 40 days to develop... Remember this from Chapter 1? If you have to have long estimates like this, then you need to be talking as a team as often as possible. We’ll get to that in a few pages. ، يو ًما هي فترة طويلة40 .ستخدم الخاصة بك كبيرة ج ًداPقصة ا . يو ًما هي شهرين من وقت العمل40 تذكر أن.ويمكن أن يتغير الكثير خذ. يجب أن تكون مدة التكرار بالكامل حوالي شهر تقويمي واحد7 إذا كان. يوم عمل20 وهذا حوالي، تRسبوع والعطxت نهاية اRعط فلن تتناسب حتى مع، يو ًما لقصة مستخدم واحدة فقط40 تقديرك ن على ذلك! كقاعدةRتكرار واحد للتطوير ما لم يكن لديك شخصان يعم يو ًما15 رجح أن تكون التقديرات التي تزيد مدتها عنP من غير ا، عامة يو ًما15 دقيقة من التقديرات التي تقل عن Your user story is too big. 40 days is a long time, and lots can change. Remember, 40 days is 2 months of work time. An entire iteration should ideally be around 1 calendar month in duration. Take out weekends and holidays, and that’s about 20 working days. If your estimate is 40 days for just one user story, then it won’t even fit in one iteration of development unless you have two people working on it! As a rule of thumb, estimates that are longer than 15 days are much less likely to be accurate than estimates below 15 days. In fact, : يمكنك إما، يو ًما15 ستخدم قاعدة الـFعندما يخالف تقدير قصة ا some people believe that estimates longer than seven days should be double-checked. When a user story’s estimate breaks the 1 15-day rule you can either: تقديرا قسم قصصك إلى قصص أصغر وأسهل ّ ً 1 Break your stories into smaller, more easily estimated stories Apply the AND rule. Any user story that has an “and” in its title or description can probably be split into two or more smaller user stories. يمكن تقسيم أي قصة مستخدم تحتوي على "و" في عنوانها أو.AND طبق قاعدة .ستخدم\ ا[صغرFوصفها إلى قصت\ أو أكثر من قصص ا 2 Starting to sense a pattern? Talk to your customer...again. Maybe there are some assumptions that are pushing your estimate out. If the customer could clarify things, those assumptions might go away, and cut down your 2 estimates significantly. . مرة أخرى... تحدث إلى عميلك إذا تمكن العميل من.فتراضات التي تدفع بتقديراتك للخارجgربما هناك بعض ا .فتراضات وتقليل تقديراتك بشكل كبيرg فقد تختفي هذه ا، توضيح ا[مور 54 Chapter 2 Download at WoweBook.Com يو ًما15 تتيح التقديرات التي تزيد عن لكل قصة مستخدم مساحة كبيرة ج ًدا .للخطأ Estimates greater than 15 days per user story allow too much room for error. When an estimate is too long, apply the AND rule to break the user story into smaller pieces. قم، ً ج ًداRعندما يكون التقدير طوي لتقسيم قصةAND بتطبيق قاعدة .ستخدم إلى أجزاء أصغرPا gathering requirements The two user stories below resulted in estimates that broke the 15-day rule. Take the two user stories and apply the AND rule to them to break them into smaller, more accurately estimatable stories. Choos e seati ng Description: A user will choos e aisle or window seati ng, be able to select the seat they want, and change that seat up to 24 hours before the flight. Title: Title: Description: Orde r in-f light mea ls Description: A user will choo se which mea l opti on they wan t, from a choice of thre e, and be able to indic ate if they are vege tari an or vega n. Title: Title: Description: Title: Title: Description: Description: Title: Title: Description: Description: you are here 4 Download at WoweBook.Com 55 aim for estimates you and your team believe in Your job was to take the longer user stories at the top of each column and turn them into smaller, easily estimatable user stories. Choos e seati ng Description: A user will choos e aisle or window seati ng, be able to select the seat they want, and change that seat up to 24 hours before the flight. Title: Choose aisle/w indow seat Description: A user can choose either aisle or window seating . Title: Choose specific seat Description: A user can choose the actual seat that they want for a shuttle flight. Title: Change seating Description: A user can change their seat up to 24 hours before launch, provided other seat options are available. Title: 56 Orde r in-f light mea ls Description: A user will choo se which mea l opti on they wan t, from a choice of thre e, and be able to indic ate if they are vege tari an or vega n. Title: Select from meal options Description: A user can choose the meal they want from a set of three meal options. Title: Specify vegetarian meal Description: A user will be able to indicate that they are vegetarian when selecting their meal options. Title: Specify vegan meal Description: A user will be able to indicate that they are vegan when selecting their meal options. Title: Chapter 2 Download at WoweBook.Com gathering requirements The goal is convergence After a solid round of planning poker, you should not only have estimates for each user story but be confident in those estimates. The goal now is to get rid of as many assumptions as possible, and to converge all of the points on each user story’s spread of estimates. الهدف هو التقارب يكون3 يجب أ، بعد جولة قوية من التخطيط للعبة البوكر بل يجب أن، لديك تقديرات لكل قصة مستخدم فحسب الهدف ا—ن هو التخلص.تكون واث ًقا من هذه التقديرات وتقريب جميع، فتراضات3من أكبر عدد ممكن من ا .النقاط حول انتشار تقديرات قصة كل مستخدم ty These estimates are pret close to one another. 8 10 The estimate you and your team reach consensus on. 13 15 You’ve gotten rid of . any outlying estimates :قم بتشغيل هذه الدائرة من الخطوات حتى تصل إلى توافق في ا—راء Run through this cycle of steps till you reach a consensus: 1 1 علومات وقم بإزالة أكبر عددF احصل على أكبر قدر من ا، ً وقبل كل شيءgتحدث إلى العميل أو .ل التحدث إلى عميلك4فتراضات وسوء الفهم من خgممكن من ا Talk to the customer First and foremost, get as much information and remove as many assumptions and misunderstandings as possible by talking to your customer. ستتعلم بسرعة.ع أي افتراضات خفية4قتg ستخدم الخاصة بكF العب بوكر التخطيط العب بوكر التخطيط مع كل قصة من قصص ا2 وضح افتراضاتك.مدى ثقتك في قدرتك على تقدير العمل الذي يجب القيام به 2 Play planning poker Play planning poker with each of your user stories to uproot any hidden assumptions. You’ll quickly learn how confident you are that you can estimate the work that needs to be done. وأين يلزم توضيح إضافي، ستخدمF ستتمكن من معرفة أين أساء فريقك فهم قصص ا، باستخدام نتائج التخطيط للعبة البوكر3 3 Clarify your assumptions Using the results of planning poker, you’ll be able to see where your team may have misunderstood the user stories, and where additional clarification is needed. ستخدمF اتفق على رقم لتقدير قصة ا، تعال إلى توافق في ا•راء بمجرد اقتراب تقديرات الجميع4 . 4 Come to a consensus Once everyone’s estimates are close, agree on a figure for the user story’s estimate. How close is “close enough”? if you Head back to Step 1at only find assumptions thanswer. the customer can to It can also be usefulerged, note the low, conv to and high estimates the give you an idea ofse best and worst ca scenarios. Deciding when your estimates are close enough for consensus is really up to you. When you feel confident in an estimate, and you’re comfortable with the assumptions that have been made, then it’s time to write that estimate down on your user story card and move on. ما مدى قرب "قريبة بما فيه الكفاية"؟ إن تحديد متى تكون تقديراتك قريبة بما يكفي لتحقيق توافق في فقد، فتراضات التي تم إجراؤها4 وأنت مرتاح ل، عندما تشعر بالثقة في التقدير. ا•راء متروك لك ح ًقاyou are here 4 .ضي قد ًماFستخدم واFحان الوقت لكتابة هذا التقدير على بطاقة قصة ا Download at WoweBook.Com 57 your estimates are your promise Q: How can I tell when my estimates are close enough, and have really converged? A: Q: I’m finding it hard to come up with an estimate for my user story, is there a way I can better understand a user story to come up with better initial estimates? Estimates are all about confidence. You have a good estimate if you and your team are truly confident that you can deliver the user story’s functionality within the estimate. A: I have a number of assumptions, but I still feel confident in my estimate. Is that okay? Sometimes a user story is just a bit blurry and complicated. When that happens, try breaking the user story into tasks in your head—or even on a bit of paper—you’ve got next to you at your planning poker sessions. Q: A: Really, you should have no assumptions in your user stories or in you and your team’s understanding of the customer’s requirements. Every assumption is an opportunity to hit unexpected problems as you develop your software. Worse than that, every assumption increases the chances that your software development work will be delayed and might not even deliver what was required. Even if you’re feeling relatively confident, knock out as many of those assumptions as you possibly can by speaking to your team and, most importantly, speaking to your customer. With a zero-tolerance attitude to assumptions, you’ll be on a much more secure path to delivering your customer the software that’s needed, on time and on budget. However, you will probably always have some assumptions that survive the estimation process. This is OK, as assumptions are then turned into risks that are noted and tracked, and at least you are aware of those risks. Your estimates are your PROMISE to your customer about how long it will take you and your team to DELIVER. First, if your user story is complicated, then it may be too big to estimate confidently. Break up complex stories into simpler ones using the AND rule or common sense. Think about the jobs that will be needed to be done to build that piece of software. Imagine you are doing those jobs, figure out how long you would take to do each one, and then add them all up to give you an estimate for that user story. Q: How much of this process should my customer actually see? A: Your customer should only see and hear your questions, and then of course your user stories as they develop. In particular, your customer is not involved in the planning poker game. Customers will want lower-than-reasonable estimates, and can pressure you and your team to get overly aggressive. When there is a question about what a piece of the software is supposed to do in a given situation, or when an assumption is found, then involving the customer is absolutely critical. When you find a technical assumption being made by your team that you can clarify without the customer, then you don’t have to go back and bother them with details they probably won’t understand anyway. But when you’re playing planning poker, you are coming up with estimates of how long you believe that your team will take to develop and deliver the software. So it’s your neck on the line, and your promise. So the customer shouldn’t be coming up with those for you. دة التيFتقديراتك هي وعدك لعميلك حول ا .ستستغرقها أنت وفريقك للتسليم 58 Chapter 2 Download at WoweBook.Com بالزي، تطلباتFمجموعة من التقنيات للعمل مع ا "من أنا؟" سوف، تلعب لعبة جماعية، الكامل يعطونك فكرة ثم تحاول تخم\ من هم بنا ًء على ما دائما يقولون الحقيقة عن افترض أنهم.يقولون ً وجودة بجوار كل عبارةF الفراغات اŠ ام.أنفسهم صحيحا باسم )أو أسماء( كل حاضر يكون البيان ً يمكن استخدام الحضور في أكثر من.بالنسبة له :إجابة واحدة للحاضرين الليلة A bunch of techniques for working with requirements, in full costume, are playing a party game, “Who am I?” They’ll give you a clue and then you try to guess who they are based on what they say. Assume they always tell the truth about themselves. Fill in the blanks next to each statement with the name (or names) of each attendee that the statement is true for. Attendees may be used in more than one answer Tonight’s attendees: gathering requirements W ho a m I? حظة4F ا- لعب ا[دوار- البلوز تخطيط لعبة البوكر- تقدير- ستخدمFقصة ا Blueskying – Role playing – Observation User story – Estimate – Planning poker You can dress me up as a use case for a formal occasion. The more of me there are, the clearer things become. I help you capture EVERYTHING. I help you get more from the customer. In court, I’d be admissible as firsthand evidence. Some people say I’m arrogant, but really I’m just about confidence. Everyone’s involved when it comes to me. Answers on page 62. you are here 4 Download at WoweBook.Com 59 شرط تقدير دورة التكرار دعونا نلقي نظرة.تطلباتFلقد أضفنا ا•ن بعض الخطوات الجديدة في نهجنا التكراري لتطوير ا ... على كيفية تناسب التقدير مع عمليتنا develop your estimates cyclically The requirement to estimate iteration cycle We’ve now added some new steps in our iterative approach to requirements development. Let’s look at how estimation fits into our process... 2 1 Capturing basic ideas Customer ideas... 3 ? ? Constructing User Stories Bluesky Brainstorming Title: Bo ok a sh ut tle utab A usBoerokwia llshbe tlele to Bo bo ok a sh ut tle sp okr wi a sh Aec ut use tle ll th be ab ify leteto ing e da ok a sh an d bo A ut use time of th etle spe wi llg be cifr yin leta th eabda to ok a sh utfligh t. anbo d tim DescTit riple: tion: DeTit scrle: iption: Description: e of thtle e flispe ghcif ying th e data an d time of th e fli t. gh t. 8 10 15 13 converged, and you Your spreads are now ea user story. have an estimate for ch We’re now ready to estimate how long the project as a whole is going to take. E st i m ate ! Select from meal options Choose can choose seatingthe A user 3 to of ttle Booawill from kset user a shu meal they want A be able Boo a shu choose aisle A use r kwil meal options. Titleor: window seating. l bettle able boo kDes k will a shubettle to a crip A Boo shution user ttle: spe cify ing theable Des datto a tion: A user ke crip aofshu and boo tim spe cifywill thettle ing be flig theable ht. datto a boo and tim k a shu Title: 8 Title: Description: Title Descriptio:n: Title: Descrip tion: Estimate how long all of the customer’s requirements will take ttleflig e of the speht. cify ing the dat a and time of the flig ht. 7 60 Get any missing information from the customer, and break up large user stories Chapter 2 Download at WoweBook.Com gathering requirements 4 ?? Finding holes in clarity Refining your user stories Always keeping the customer in the loop 5 Working with your team Clear, Customer-Focused User Stories Choos e seating Bo okwill A user a sh beutable tle to Boerok aillshbe choos e aisle or windo utab A tle us wwseatin g. le to Tit le: tion: A Bo bo okDeascshriput ok a sh ut usify tle er wi tle ll sp be ec in g th De eabdaletato sc bo rip ok tio an d time aofshth Aspus utn: tle er ec ll be ifywi ing e fli leta th gh to eabda t. ok ae sh ut anbo d tim Title: Title: Description: DescTit riple: tion: of thtle ec ify ing th e data e flispgh an d time of th e fli t. gh t. 6 Play planning poker you are here 4 Download at WoweBook.Com 61 sum your estimates to find out your total project duration W ho a m I? Solutio ns A bunch of techniques for working with requirements, in full costume, are playing a party game, “Who am I?” They’ll give you a clue and then you try to guess who they are based on what they say. Assume they always tell the truth about themselves. Fill in the blanks next to each statement with the name (or names) of each attendee that the statement is true for. Attendees may be used in more than one answer Tonight’s attendees: Blueskying – Role playing – Observation User story – Estimate – Planning poker You can dress me up as a use case for a formal occasion. The more of me there are, the clearer things become. I help you capture EVERYTHING. I help you get more from the customer. User Story User Story Blueskying, Observation Role playing, Observation Observation In court, I’d be admissible as firsthand evidence. Estimate Some people say I’m arrogant, but really I’m just about confidence. Blueskying Everyone’s involved when it comes to me. Did you say planning poker? Customers aren’t involved in that activity. 62 Chapter 2 Download at WoweBook.Com gathering requirements Finally, you’re ready to estimate the whole project... ... شروع بأكملهF أنت جاهز لتقدير ا، أخيرا ً You’ve got short, focused user stories, and you’ve played planning . ولعبت لعبة البوكر التخطيطية في كل قصة، لديك قصص مستخدم\ قصيرة ومركزة poker on each story. You’ve dealt with all the assumptions that you and وا•ن، فتراضات التي كنت تقوم بها أنت وفريقك في تقديراتكgلقد تعاملت مع جميع ا your team were making in your estimates, and now you have a set of لقد حان الوقت للعودة إلى العميل.لديك مجموعة من التقديرات التي تؤمنون بها جمي ًعا estimates that you all believe in. It’s time to get back to the customer ... شروعFبإجمالي تقدير ا with your total project estimate... timate You’ve got an yesnow. for each stor .تقديرا لكل قصة مستخدم للمدة التي تعتقد أنها ستستغرق لتطوير هذه الوظيفة أضف ً Add an estimate to each user story for how long you think it will take to develop that functionality. اجمع جميع التقديرات للحصول على تقدير إجمالي للمدة التي سيستغرقها مشروعك لتقديم up all the estimates to get a total estimate for how .طلوبةFالبرامج ا Add long your project will take to deliver the required software. Now you can get a total estimate. And the total project estimate is... Add up the each of the converged estimates for your user stories, and you will find the total duration for your project, if you were to develop everything the customer wants. 15 16 20 19 12 15 2 7 أضف كل التقديرات... والتقدير ا‘جمالي للمشروع هو دةF وستجد ا، ستخدم الخاصة بكFتقاربة لقصص اFا إذا كنت ستقوم بتطوير كل ما يريده، شروعكF ا‘جمالية .العميل Sum of user story estimates = 489 days! you are here 4 Download at WoweBook.Com 63 when your project is too long 489 days for the project? That’s almost two years!!! No kidding! That’s way too long, By the time you’ve developed the software, my competition will have beaten us into the ground! What do you do when your estimates are WAY too long? You’ve finally got an estimate you believe in, and that takes into account all the requirements that the customer wants. But you’ve ended up with a monster project that is just going to take too long. Is it time to go back to the drawing board? Do you admit defeat and hand the work over to someone else? Or do you just ask the customer how long he thinks would work, forgetting about all your hard work to come up with you estimates in the first place? You’ll have to solve a crossword puzzle and work your way to Chapter 3 to find out how to get Orion’s Orbits back on track. 64 أخيرا على ماذا تفعل عندما تكون تقديراتك طويلة ج ًدا؟ لقد حصلت ً .تطلبات التي يريدها العميلFعتبار جميع اg ويأخذ في ا، تقدير تؤمن به .ً4لكن انتهى بك ا[مر بمشروع وحش سيستغرق وقت ًا طوي هل حان الوقت للعودة إلى لوحة الرسم؟ هل تعترف بالهزيمة وتسليم دة التي يعتقد أنهاFالعمل لشخص آخر؟ أو هل تسأل العميل فقط عن ا قامF متناسيا ً كل عملك الشاق للتوصل إلى تقديراتك في ا، ستنجح ا[ول؟ تقاطعة والعمل في طريقك إلى الفصلFسيتع\ عليك حل لغز الكلمات ا .سار الصحيحF إلى اOrion كتشاف كيفية إعادة مداراتg 3 Chapter 2 Download at WoweBook.Com gathering requirements Requirements and Estimation Cross Untitled Puzzle Header Let’s put what you’ve learned to use and stretch out your left brain a bit. Info 1 Header Info 2 All of the words below are somewhere in this chapter: Good luck! etc... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Across Down 2. When you and the customer are really letting your ideas run wild you are ..... ..... 3. When coming up with estimates, you are trying to get rid of as many ......... as possible. 4. None of this language is allowed in a user story. 7. If a requirement is the what, an estimate is the .... .... 9. Requirements are oriented towards the ......... 12. The best way to get honest estimates and highlight assumptions. 14. A User Story is made up of a ......... and a description. 15. ......... is a great way of getting first hand evidence of exactly how your customer works at the moment. 18. The goal of estimation is ......... 1. When you just have no idea how to estimate a user story, use a card with this on it. 5. User stories are written from the perspective of the ......... 6. When you and the customer act out a particular user story, you are .... .... 8. When everyone agrees on an estimate, it is called a ......... 10. An estimate is good when eveyone on your team is feeling ......... 11. The maximum number of days that a good estimate should be for one user story. 13. A great user story is about ......... lines long. 16. After a round of planning poker, you plot all of the estimates on a ......... 17. You can use the ......... rule for breaking up large user stories. you are here 4 Download at WoweBook.Com 65 your software development toolbox Tools for your Software Development Toolbox CHAPTER 2 Software Development is all about developing and delivering the software that the customer actually wants. In this chapter, you learned about several techniques to help you get inside the customer’s head and capture the requirements that represent what they really want... For a complete list of tools in the book, see Appendix ii. ربع أدوات تطوير البرمجيات الخاص بكF أدوات تطوير البرمجيات هو كل شيء عن تطوير وتقديم البرامج التي يستخدمها العميل في الواقع تعرفت على العديد من، في هذا الفصل.يريد ساعدتك في الوصول إلى رأس العميلF ا[ساليب ... تطلبات التي تمثل ما يريده ح ًقاFوالتعرف على ا ، للحصول على قائمة كاملة با[دوات في الكتاب .لحق الثانيFراجع ا تقنيات التنمية Bluesky ، راقبةFستخدم الخاصة باFوقصص ا ولعب ا[دوار Development Techniques Bluesky, Observation and Roleplay • . عميلك يفكر بشكل كبير عند تلبية متطلباتهBlueskying يجعل ً • . واح ًدا مع البرنامج من منظور العميل4تفاع ستخدمFتلتقط قصة ا • .ث جمل تقريبًا4 بطول ث، ستخدم قصيرةFيجب أن تكون قصص ا • .ستخدم القصيرة هي قصة مستخدم يمكن تقديرهاFقصة ا • . يو ًما15 مطورا واح ًدا أكثر من ستخدمF يستغرق تسليم قصة اgيجب أ ً • قم بتطوير متطلباتك بشكل متكرر مع عميلك ‘بقائها في الحلقة في كل خطوة من العملية User Stories Blueskying gets your customer to think big when coming up with their requirements. Planning poker for estimation Development Principles The customer knows w but sometimes you needhat they want, to help them nail it down Keep requirements cust omer-oriented Develop and refine your iteratively with the cu requirements stomer مبادئ التنمية شكلةF ولكن في بعض ا[حيان تحتاج إلى مساعدته في حل ا، يعرف العميل ما يريده ء4تطلبات موجهة للعمFاجعل ا قم بتطوير وتحس\ متطلباتك بشكل متكرر مع العميل 66 Chapter 2 Download at WoweBook.Com A user story captures one interaction with the software from the customer’s perspective. User stories should be short, around three sentences in length. A short user story is an estimatable user story. A user story should not take one developer more than 15 days to deliver. Iteratively develop your requirements with your customer to keep them in the loop at every step of the process. 3 project planning Planning for success Really darling, my software development is so well planned I’ll be home on time every day for us to watch NASCAR together! يبدأ كل برنامج رائع بخطة رائعة. ستتعلم.ستتعلم في هذا الفصل كيفية إنشاء تلك الخطة .كيفية العمل مع العمالء لتحديد أولويات متطلباتهم ستحدد التكرارات التي يمكنك أنت وفريقك العمل ستنشئ خطة تطوير قابلة، أخيرا .عليها بعد ذلك ً .للتحقيق يمكنك أنت وفريقك تنفيذها ومراقبتها بثقة ستعرف بالضبط، بحلول الوقت الذي تنتهي فيه كيفية االنتقال من المتطلبات إلى أول منتج لك. Every great piece of software starts with a great plan. In this chapter you’re going to learn how to create that plan. You’re going to learn how to work with the customer to prioritize their requirements. You’ll define iterations that you and your team can then work toward. Finally you’ll create an achievable development plan that you and your team can confidently execute and monitor. By the time you’re done, you’ll know exactly how to get from requirements to your first deliverable. this is a new chapter 69 deliver what you can, when it’s needed Customers want their software NOW! Customers want their software when they need it, and not a moment later. You’ve come to grips with the customer’s ideas using brainstorming, you’ve got a set of user stories that describe everything the customer might need the software to do, and you’ve even added an estimate to each user story that helped you figure out how long it will take to deliver everything the customer wants. The problem is, developing everything the customer said they needed will take too long... !العمالء يريدون برامجهم اآلن لقد توصلت إلى فهم أفكار العميل باستخدام. وليس بعد لحظة، يريد العمالء برامجهم عندما يحتاجون إليها ولديك مجموعة من قصص المستخدمين التي تصف كل شيء قد يحتاج العميل إلى البرنامج، العصف الذهني تقديرا لكل قصة مستخدم ساعدتك في تحديد حدد الوقت الذي سيستغرقه تقديم كل ما يريده وقد أضفت، للقيام به ً ً تكمن المشكلة في أن تطوير كل شيء قال العميل إنه بحاجة إليه سيستغرق وقتًا طويال. العميل... Our Estimate What the customer wants 489 days 90 days! The total after summing up all the estimates for your user stories اإلجمالي بعد تلخيص جميع التقديرات لقصص المستخدم الخاصة بك Well you obviously can’t do everything that the customer wants in 90 days. Why not just cut back and prioritize? من الواضح أنه ال يمكنك فعل، حسنًا . يو ًما90 كل ما يريده العميل خالل لماذا ال تقلل فقط وترتيب األولويات؟ 70 Chapter 3 project planning Orion’s Orbits still wants to modernize their booking system; they just can’t wait almost two years for the software to get finished. Take the following snippets from the Orion’s Orbits user stories, along with their estimates, and circle the ones you think you should develop to come up with a chunk of work that will take no longer than 90 days. ال تزال مدارات ريون ترغب في تحديث نظام الحجز الخاص بها ؛ ال يمكنهم خذ المقتطفات التالية.االنتظار لمدة عامين تقريبًا حتى يتم االنتهاء من البرنامج من قصص مستخدميOrion's Orbits وضع، جنبًا إلى جنب مع تقديراتهم، دائرة حول تلك التي تعتقد أنه يجب عليك تطويرها للتوصل إلى جزء كبير من يو ًما90 العمل لن يستغرق أكثر من. Total Estimate: Problems? Assumptions? you are here 71 priorities come from your customer ال تزال مدارات ريون ترغب في تحديث نظام الحجز الخاص بها ؛ ال يمكنهم االنتظار لمدة عام ونصف واالحتفاظ بالمقتطفات التي تعتقد أنه71 كانت مهمتك هي أخذ المقتطفات في الصفحة.حتى يظهر البرنامج هذه هي القصص التي احتفظنا بها.يجب عليك تطويرها: Orion’s Orbits still wants to modernize their booking system; they just can’t wait for a year and a half for the software to turn up. Your job was to take the snippets on page 71 and keep the ones you think you should develop. Here are the stories we kept: These are the user stories we picked. Title: ial offers Our Total Estimate: 84 But that’s not what I wanted at all! يحدد العميل األولويات يبدو أن الرئيس التنفيذي لشركةOrbit's Orbits وهل، ليس سعيد ًا يمكنك إلقاء اللوم عليه؟ بعد كل هذا العمل الشاق لدينا، لمعرفة ما يحتاجه تجاهله تما ًما عند تحديد قصص المستخدمين التي تحظى باألولوية في المشروع. ، عندما يتم إعطاء األولوية لقصص المستخدم ً فقط العميل.مركزا على العميل يجب أن تظل لذلك عندما يتعلق.يعرف ما هو مطلوب حقًا قد، األمر بتحديد ما هو داخل وما هو خارج قادرا على تقديم بعض المساعدة من ً تكون اختيارا هذا يكون النهاية في ولكن ، الخبراء ً يتعين على العميل اتخاذه. 72 Chapter 3 The customer sets the priorities Seems like the CEO of Orion’s Orbits is not happy, and can you blame him? After all that hard work to figure out what he needs, we’ve ignored him completely when deciding which user stories take priority for the project. When user stories are being prioritized, you need to stay customer-focused. Only the customer knows what is really needed. So when it comes to deciding what’s in and what’s out, you might be able to provide some expert help, but ultimately it’s a choice that the customer has to make. project planning Prioritize with the customer It’s your customer’s call as to what user stories take priority. To help the customer make that decision, shuffle and lay out all your user story cards on the table. Ask your customer to order the user stories by priority (the story most important to them first) and then to select the set of features that need to be delivered in Milestone 1.0 of their software. Order Flight DVD A Description: of a DVD order been on. Review Flight A user will be able to leave a review for a shuttle flight they have been on. Title: Title: Est: إعطاء األولوية مع العميل .إنها دعوة عميلك فيما يتعلق باألولوية لقصص المستخدمين قم بتبديل ورسم جميع، لمساعدة العميل في اتخاذ هذا القرار اطلب من.بطاقات قصة المستخدم الخاصة بك على الطاولة عميلك ترتيب قصص المستخدمين حسب األولوية (القصة األكثر أهمية بالنسبة لهم أوالً) ثم تحديد مجموعة الميزات التي يجب تسليمها فيMilestone 1.0 من برامجهم. Title: Description: 12 days Est: Choose seating will be able to dow seating. 13 days Pay Us pay for their b card or PayPal. uttle will be able ecifying the e flight. Title: Description: "Milestone 1.0" Yما هو 15 days 13 days Est: على عكس. هو أول إصدار رئيسي من البرنامج للعميلMilestone من1.0 يعد اإلصدار ستكون هذه هي، التكرارات األصغر حيث ستعرض للعميل برنامجك للحصول على تعليقات .)المرة األولى التي تقدم فيها برنامجك بالفعل (وتتوقع الحصول على أموال مقابل التوصيل Milestone 1.0:بعض اإلجراءات والنواهي عند التخطيط لتطبيق Est: Est: 15 days What is “Milestone 1.0”Y Milestone 1.0 is your first major release of the software to the customer. Unlike smaller iterations where you’ll show the customer your software for feedback, this will be the first time you actually deliver your software (and expect to get paid for the delivery). Some Do’s and Don’ts when planning Milestone 1.0: Do... balance functionality with customer impatience Don’t... بموازنة الوظائف مع نفاد صبر العميل... قم ساعد العميل على فهم ما يمكن عمله في ذلك الوقت ال يتم تجاهل أي قصص مستخدمين ال تصل.متوفر بل يتم تأجيلها حتى، Milestone 1.0إلى ...3 أو، Milestone 2 Help the customer to understand what can be done in the time ننشغل بتخطيط األشياء اللطيفة... ال available. Any user stories that don’t make it into Milestone 1.0 are not Milestone من1.0 يتمحور اإلصدار ignored, just postponed until Milestone 2, or 3... وهذا يعني، حول تقديم ما هو مطلوب مجموعة get caught planning nice-to-haves من الوظائف التي تلبي أهم احتياجات Milestone 1.0 is about delivering what’s needed, and that means a set .العميل of functionality that meets the most important needs of the customer. Don’t... worry about length (yet) )ال تقلق بشأن الطول (حتى اآلن أنت تسأل عميلك فقط، في هذه المرحلة ال تنشغل.عن أهم قصص المستخدمين بالوقت الذي سيستغرقه تطوير قصص أنت تحاول فقط فهم.المستخدمين هذه .أولويات العميل At this point you’re just asking your customer which are the most important user stories. Don’t get caught up on how long those user stories will take to develop. You’re just trying to understand the customer’s priorities. you are here 73 building Milestone 1.0 We know what’s in Milestone 1.0 (well, maybe) From all of the user stories developed from the customer’s ideas, organized into prority order, the customer then selects the user stories that they would like to be a part of Milestone 1.0 of the software... Book a shuttle Title: Est: Description: 15 days Est: Description: 13 days Est: Description: 14 days Est: Take pet reservation Title: Description: Description: 12 days Est: 15 days 14 days Pay with Space Miles Title: Est: 13 days Description: Est: Order in-flight meals Est: View Space Miles Account Description: Est: Take pet reservation Description: Est: 12 days Review flight Title: Description: Order flight DVD Description: Choose seating Order in-flight 15 daysmeal Title:Description: Est: Title: Title: Book a shuttle 15 days Description: Est: days Pay with15Visa/MC/PayPal Description: Est: Desc riptio n: Est: Est: Est: 74 15 days 15 days 15 days Chapter 3 Add together aLL of the user story estimates for MiLestone 1.0 Est: Take pet reservation 12 days Now that you know what features the customer wants in Milestone 1.0, it’s time to find out if you now have a reasonable length of project if you develop and deliver all of those most important features... Title: 15 days Apply for “frequent astronaut” card Title: Description: 12 days Book Segway in space-port transport Description: Sanity-check your Milestone 1.0 estimate Title: Est: Choose seating Title: 13 days Title: 12 days Title: Est: Description: Est: Or der Flight DV D Description: 14 days Title: Est: Description: 13 days Review flight Title: Description: 15 days Title: Description: Title: Pay with Visa/MC/PayPal Title: 15 days Title: Est: Apply for “frequent astronaut” card Title: Est: Est: Book Segway in space-port transport Description: 12 days Est: 13 days Title: Book a shuttle Title: Description: Description: 12 days Est: Take pet reservation Title: Choose seating Title: Description: Est: Description: 12 days Est: View Space Miles Account Title: Or der Flight DV D Title: Description: Review flight Title: Description: 15 days Est: Order in-flight meals Title: Pay with Visa/MC/PayPal Title: Description: ، (حسنًاMilestone 1.0 نحن نعلم ما يوجد في )ربما من بين جميع قصص المستخدمين التي تم والمرتبة حسب، تطويرها من أفكار العمالء يختار العميل بعد ذلك قصص، ترتيب التناسبية المستخدمين التي يرغبون في أن تكون جز ًءا من ... من البرنامجMilestone 1.0 14 days Manage special offers Title: Description: Est: 13 days Milestone 1.0 الخاص بكMilestone 1.0 تحقق من تقديرSanity اآلن بعد أن عرفت الميزات التي يريدها العميل في فقد حان الوقت لمعرفة ما إذا كان لديك، Milestone 1.0 اآلن مدة معقولة للمشروع إذا قمت بتطوير وتقديم كل هذه ... الميزات األكثر أهمية = 273 days اجمع كل من تقديرات قصة المستخدم لـ MiLestone 1.0 فقم بإعادة ترتيب األولويات، إذا كانت الميزات غير مناسبة التسليم فيOrion’s Orbits وتريد، Milestone 1.0 يوم عمل لـ273 لديك عادة ً ما يريد العمالء أكثر مما يمكنك. هذا شائع جدًا، ال تقلق. يو ًما90 غضون ومن وظيفتك أن تعود إليهم وتعيد ترتيب األولويات حتى تتوصل إلى، تقديمه إلعادة ترتيب أولويات قصص المستخدم الخاصة بك.مجموعة ميزات قابلة للتطبيق ... مع العميلMilestone 1.0 لـ You’ve got 273 days of work for Milestone 1.0, and Orion’s Orbits want delivery in 90 days. Don’t worry, this is pretty common. Customers usually want more than you can deliver, and it’s your job to go back to them and reprioritize until you come up with a workable feature set. قطع المزيد من الوظائف الوقت لتقصير به أول شيء يمكنك القيام To reprioritize your user stories for Milestone 1.0 with the customer... هو قطع بعضMilestone 1.0 الالزم لتقديم الوظائف عن طريق إزالة قصص 1 Cut out more FUNCTIONALITY المستخدمين التي ليست بالغة األهمية لعمل The very first thing you can look at doing to shorten the time to delivering Milestone 1.0 is to cut out .البرنامج some functionality by removing user stories that are not absolutely crucial to the software working. If the features don’t fit, reprioritize 2 Ship a milestone build as early as possible Aim to deliver a significant milestone build of your software as early as possible. This keeps your development momentum up by allowing you and your team to focus on a deadline that’s not too far off. شحن بناء معلم في أقرب وقت ممكن يحافظ هذا على زخم التطوير لديك من خالل السماح.تهدف إلى تقديم بناء هام من برنامجك في أقرب وقت ممكن .لك ولفريقك بالتركيز على موعد نهائي ليس بعيد المنال 3 Focus on the BASELINE functionality Milestone 1.0 is all about delivering just the functionality that is needed for a working version of the software. Any features beyond that can be scheduled for later milestones. Q: A: What’s the difference between a milestone and a version? Not much. In fact you could call your first milestone “Version 1” if you like. The big difference between a milestone and a version is that a milestone marks a point at which you deliver signficant software and get paid by your customer, whereas a version is more of a simple descriptive term that is used to identify a particular release of your software. The difference is really quite subtle, but the simple way to understand it is that “Version” is a label and doesn’t mean anything more, whereas “Milestone” means you deliver signficant functionality and you get paid. It could be that Version 1.0 coincides with Milestone 1.0, but equally Milestone 1.0 could be Version 0.1, 0.2 or any other label you pick. BASELINE ركز على وظيفة حول تقديم الوظائفMilestone من1.0 يتمحور اإلصدار Q: A: So what exactly is my software’sbaseline functionality? يمكن جدولة أي ميزات.المطلوبة فقط إلصدار العمل من البرنامج .تتجاوز ذلك للمعالم الالحقة The baseline functionality of your software is the smallest set of features that it needs to have in order for it to be at all useful to your customer and their users. Think about a word processing application. Its core functionality is to let you load, edit, and save text to a file. Anything else is beyond core functionality, no matter how useful those features are. Without the ability to load, edit, and save a document with text in it, a word processor simply is not useful. That’s the rule of thumb: If you can get by without a feature, then it isn’t really baseline functionality, and it’s probably a good candidate for pushing out to a later milestone than Milestone 1.0 if you don’t have time to get everything done. Q: e done the math and no matter how I cut the user stories up, I just can’t deliver what my customer wants when they want me to. What can I do? A: It’s time to confess, unfortunately. If you really can’t build the software that is required in the time that it’s needed by, and your customer simply won’t budge when it comes to removing some user stories from the mix, then you might need to walk away from the project and know that at least you were honest with the customer. Another option is to try to beef up your team with new people to try and get more work done quicker. However, adding new peopleto the team will up the costs considerably, and won’t necessarily get you all the advantages that you’d think it might. I ’ v factoring in team performance Hello?! Can’t we just add some more people to cut down our estimates? Add two developers, and we’ll get done in 1/3 the time, right? األمر يتعلق بأكثر من مجرد وقت للتطوير بينما يمكن أن تبدو إضافة المزيد من األشخاص إال أنها في الحقيقة ليست، جذابة حقًا في البداية خفض، بهذه البساطة مثل "مضاعفة األشخاص ."التقدير إلى النصف يحتاج كل عضو جديد في الفريق إلى التعجيل بالمشروع ؛ إنهم بحاجة إلى فهم البرامج ، والقرارات الفنية وكيف يتالءم كل شيء معًا وأثناء قيامهم بذلك ال يمكن أن يكونوا منتجين .٪100 بنسبة ثم تحتاج إلى إعداد هذا الشخص الجديد باألدوات قد يعني هذا.والمعدات المناسبة للعمل مع الفريق ، شراء تراخيص جديدة وشراء معدات جديدة ولكن حتى لو كان ذلك يعني فقط تنزيل بعض فإن األمر، البرامج المجانية أو مفتوحة المصدر كله يستغرق وقتًا ويجب أخذ هذا الوقت في .االعتبار عند إعادة تقييم تقديراتك كل شخص تضيفه إلى فريقك يجعل مهمة، أخيرا ً الحفاظ على تركيز الجميع ومعرفة ما يفعلونه يمكن أن يصبح إبقاء الجميع.أكثر صعوبة يتحركون في نفس االتجاه وفي نفس الصفحة ستجد أن، ومع نمو فريقك، وظيفة بدوام كامل هذا االتصال المعقد يمكن أن يبدأ في التأثير على قدرة فريقك اإلجمالية على أن يكون منت ًجا ويطور .برامج رائعة هناك حد أقصى لعدد األشخاص الذين، في الواقع لكن، يمكن لفريقك احتوائهم وال يزالون منتجين ذلك سيعتمد إلى حد كبير على مشروعك وفريقك أفضل طريقة هي.واألشخاص الذين تضيفهم وإذا بدأت في رؤية أن إنتاجية، مراقبة فريقك على الرغم من وجود عدد أكبر من، فريقك أقل فقد حان الوقت، األشخاص إعادة تقييم مقدار العمل الذي يتعين عليك القيام به .أو مقدار الوقت الذي يتعين عليك القيام به 76 Chapter 3 If it takes you 273 days, with 2 more people like you, that would reduce the overall development time by a factor of 3, right? It’s about more than just development time While adding more people can look really attractive at first, it’s really not as simple as “double the people, halve the estimate.” Every new team member needs to get up to speed on the project; they need to understand the software, the technical decisions, and how everything fits together, and while they’re doing that they can’t be 100% productive. Then you need to get that new person set up with the right tools and equipment to work with the team. This could mean buying new licenses and purchasing new equipment, but even if it just means downloading some free or open source software, it all takes time and that time needs to be factored in as you reassess your estimates. Finally, every person you add to your team makes the job of keeping everyone focused and knowing what they are doing harder. Keeping everyone moving in the same direction and on the same page can become a full-time job, and as your team gets larger you will find that this complex communication can start to hit your team’s overall ability to be productive and develop great software. In fact, there is a maximum number of people that your team can contain and still be productive, but it will depend very much on your project, your team, and who you’re adding. The best approach is to monitor your team, and if you start to see your team actually get less productive, even though you have more people, then it’s time to re-evaluate the amount of work you have to do or the amount of time in which you have to do it. يعني المزيد من الناس في بعض األحيان تناقص العوائد يو ًما إلكمال273 إذا استغرق شخص واحد.ال تعمل إضافة المزيد من األشخاص إلى فريقك دائ ًما كما كنت تتوقع ال... في الواقع قد يستغرقون وقتًا أطول بكثير! ألق نظرة.91 أشخاص بالضرورة3 فلن يستغرق، Milestone 1.0 :يزداد األداء دائ ًما مع زيادة حجم فريقك project planning More people sometimes means diminishing returns Adding more people to your team doesn’t always work as you’d expect. If 1 person takes 273 days to complete Milestone 1.0, then 3 people won’t necessarily take 91. In fact they could actually take much longer! Take a look...performance doesn’t always increase with the size of your team: 0 1 2 5 9 15 20+ Q: Is there a maximum team size that I should never go over? A: Not really. Depending on your experience you may find that you can happily handle a 20-person team, but that things become impossible when you hit 21. Alternatively you might find that any more than three developers, and you start to see a dip in productivity. The best approach is to monitor performance closely and make amendments based on your observations. Do you think the size of your project affects this graph? What about if you broke your project up into smaller sub-projects? you are here 77 1.0 اعمل في طريقك نحو إنجاز معقول عن طريق إضافة مطورين- يمكن أن يكون لالنتقال من شخص إلى ثالثة، Orbit’s Orbits باستخدام : لذلك دعونا نرى كيف يتم ذلك. تأثير إيجابي- آخرين building achievable milestones Work your way to a reasonable Milestone 1.0 ... أوال تضيف شخصين جديدين إلى فريقك With Orion’s Orbits, going from one person to three—by adding two لكنه، )تساعد إضافة مطورين اثنين إلى فريقك (ثالثة بما فيهم أنت more developers—can have a positive impact. So let’s see how that يمكن لمطورين اثنين إضافة الكثير من وقت العمل.ليس حال ً سحريًا works out: ولكن ال يزال هناك عمل متبقي، إلى مشروعك First you add two new people to your team... Adding two developers to your team (that’s three including you) helps, but it’s not a magical solution. Two developers can add a lot of work time to your project, but there’s still work left: Review flight Title: Title: Title: Description: Order flight DVD Description: Choose seating Order in-flight 15 daysmeal Title:Description: Est: Book a shuttle 15 days Pay with Visa/MC/PayPal Description: Title: Title: Description: Est: 15 days 15 days Est: Description:Est: 15 days 15 days Est: Est: - = 190 days 273 days of work to do = 83 days of work left to do! 3 developers ثم تعيد ترتيب أولوياتك مع العميل يوم190 لدينا.اآلن لديك طريقة جيدة لمعرفة ما يجب إزالته لذلك نحتاج إلى التحدث إلى العميل. يوم عمل273 عمل و يو ًما من العمل عن طريق نقل بعض83 وإزالة حوالي ...then you reprioritize with the customer .Milestone 1.0 قصص المستخدمين من Now you’ve got a nice way to figure out what has to be removed. We’ve got 190 days of work time, and 273 days of work. So we need to talk to the customer and remove around 83 days of work by shifting out some user stories from Milestone 1.0. Review flight Title: Title: Title: Description: Order flight DVD Description: Choose seating Order in-flight 15 daysmeal Title:Description: Est: Title: Title: Book a shuttle 15 days Description: Est: Description: Est: 15 days Pay 15 with Visa/MC/PayPal days Description:Est: Est: 15 days Est: 15 days 273 days of work to do - Order flight DVD Description: 15 days 15 days Est: Est: Customer removed features Q: But 184 days of work is less than the 190 days that our three-developer team can produce, shouldn’t we add some more features with the customer? A: The overall estimate doesn’t actually have to be exactly 190 days. Given that we’re dealing with estimates anyway, which are rarely 100% accurate, and that we tend to be slightly optimistic in our estimates, 184 days is close enough to the 190-day mark to be reasonably confident of delivering in that time. 78 Chapter 3 = 184 days Review flight Title: Description: Title: Q: How did you come up with 190 days when you added two new developers? A: At this point this number is a guesstimate. We’ve guessed that adding two people to build a team of three will mean we can do around 190 days of work in 90 calendar days. There are ways to back up this guess with some evidence using something called “team velocity,” but we’ll get back to that later on in this chapter. project planning BE the Customer كن الزبون تحتاج إلى.إنها فرصتك اآلن لتكون العميل إنشاء خطة للوقت الذي ستقوم فيه بتطوير كل وللقيام، Milestone 1.0 قصة مستخدم لـ عليك أن تسأل العميل عن الميزات، بذلك .ًاألكثر أهمية حتى تتمكن من تطويرها أوال مهمتك هي لعب دور العميل من خالل تعيين .Milestone 1.0 أولوية لقصص مستخدم قم بتعيين ترتيب لها في، لكل قصة مستخدم اعتمادًا على مدى أهمية، المربع المقدم .استخدام هذه الميزة للمفتاح في أسفل الصفحة Now it’s your chance to be the customer. You need to build a plan for when you are going to develop each of the user stories for Milestone 1.0, and to do that you need to ask the customer what features are most important so that you can develop those first. Your job is to play the customer by assigning a priority to the Milestone 1.0 user stories. For each user story, assign it a ranking in the square provided, depending on how important you think that feature is using the key at the bottom of the page. Login to “Frequent Astronaut” account Title: Order In-flight meals Title: Est: 13 days Est: 15 days Priority: Priority: Title: Review flight Manage special offers Title: Est: 13 days Priority: Title: Est: View “Space Miles” account 14 days View flight reviews Title: Est: 12 days Priority: Priority: Priorities Key 10 20 30 40 50 - Most Important View shuttle deals Title: Est: - Least Important 12 days Priority: you are here 79 your customer decides priority BE the Customer Solution Your job was to play the customer and prioritize the Milestone 1.0 user stories. Here are the priorities that we assigned to each of the user stories. We also laid out the user stories in order of priority... View shuttle deals Title: 12 days Est: 10 Priority: Book a shutt View flight reviews Title: 30 Priority: Pay with Visa/ Title: Manage special offers Title: Est: 10 Priority: Choose seating Title: Login to “Frequent Astronaut” account Title: Est: 13 days Apply for “frequent Title: 15 days View “Space Miles” account Title: Est: 14 days Priority: Order In-flight meals Title: Est: 13 days Priority: 80 20 Chapter 3 Why are the priorities 10, 20, 30, 40, and 50? A: Powers of ten get the brain thinking about groupings of features, instead of ordering each and every feature separately with numbers like 8 or 26 or 42. You’re trying to get the customer to decide what is most important, but not get too hung up on the exact numbers themselves. Also, powers of ten allow you to occasionally specify, say, a 25 for a particular feature when you add something in later, and need to squeeze it between existing features. Q: If it’s a 50, then maybe we can leave it out, right? No, 50 doesn’t mean that a user story is a candidate for leaving out. At this point, we’re working on the user stories for Milestone 1.0, and so these user stories have already been filtered down to the customer’s most important features. The goal here is to prioritize, not figure out if any of these features aren’t important. So a 50 just says it can come later, not that it’s not important to the customer Q: What if I have some non– Milestone 1.0 user story cards? 50 Priority: Q: A: 12 days Est: كن حل العميل كانت مهمتك هي لعب العميل وإعطاء األولوية ها هي.Milestone 1.0 لقصص مستخدم األولويات التي خصصناها لكل قصة من قصص لقد وضعنا أيضًا قصص المستخدم.المستخدمين ... بترتيب األولوية 50 Pay using “S A: Assign a priority of 60 to those cards for now, so they don’t get mixed in with your Milestone 1.0 features. Q: And the customer does all this work? A: You can help out and advise, maybe mentioning dependencies between some of the user stories. But the final decision on priorities is always the customer’s to make. project planning Now that you have your user stories for Milestone 1.0 in priority order, it’s time to build some iterations. Lay out the user stories so they make iterations that make sense to you. Be sure and write down the total days of work, and how long that will take for your team of three developers. فقد، بترتيب األولويةMilestone 1.0 اآلن بعد أن أصبح لديك قصص المستخدمين الخاصة بك لـ رتب قصص المستخدم حتى يصنعوا تكرارات منطقية بالنسبة.حان الوقت إلنشاء بعض التكرارات . تأكد من كتابة أيام العمل اإلجمالية والمدة التي سيستغرقها فريقك المكون من ثالثة مطورين.لك Iteration 1 View shuttle deals Title: Est: 12 days Priority: 10 Total Days: Divide by 3 developers: Iteration 2 Total Days: Divide by 3 developers: Total Days: What do you think you should do at the end of an iteration? ما الذي تعتقد أنه يجب عليك فعله في ?نهاية التكرار81 Divide by 3 developers: Answers on page 84. Iteration 3 milestone = paid, iteration = on track Tonight’s talk: A sit-down discussion between an iteration and a milestone. مناقشة جلوس بين تكرار وحدث:حديث الليلة هام. Milestone: معلما Hello there, iteration, seems like it’s only been a month since I saw you last. يبدو أنه قد مر شهر واحد فقط منذ أن، التكرار، مرحبًا .رأيتك آخر مرة So how are things going on the project? It seems like you’re always showing up, and I just arrive for the big finish. Actually, what’s your purpose? ، إذن كيف تسير األمور في المشروع؟ يبدو أنك تحضر دائ ًما ما هو، في الواقع.وقد وصلت للتو من أجل النهاية الكبيرة هدفك؟ Naive? Look, just because I’ve had a few customer run-ins before doesn’t mean I’m not important. I mean, without me, you wouldn’t have software at all ,let alone get paid! Besides, just because I’ve shown up and surprised the occasional customer from time to time... ال يعني مجرد إجراء بعض جوالت العمالء اإلضافية من قبل، ساذج؟ انظر لن يكون لديك برنامج على اإلطالق، بدوني، أعني.أنني لست مه ًما لمجرد أنني حضرت، ناهيك عن يتقاضون رواتبهم! عالوة على ذلك، ... وفاجأت العمالء العرضيين من وقت آلخر I used to try that, too. I’d try and soften the blow by explaining to the customer that all of their problems would be fixed in the next version of the software, but that wasn’t what they wanted to hear. Lots of yelling, and I’d slink off, ready to go back to work for a year or so, and see if the customer liked me better next time. Iteration: تكرار: Almost exactly a month. And you’ll see me again next month, I can guarantee it. About three times, and we’re ready for you, Milestone 1.0. يمكنني، وستراني مرة أخرى الشهر المقبل.تقريبا شهر بالضبط ، ونحن جاهزون من أجلك، حوالي ثالث مرات.أن أضمن ذلك .1.0 مايلستون To make sure things go great, of course. That’s my job really, to make sure that every step of the way from day 1 to day 90, the project stays on track. What, you thought you could just show up three months into the project and everything would be just like the customer wants it? A bit naive, aren’t you? للتأكد من أن، هذا هو عملي حقًا. بالطبع، للتأكد من أن األمور تسير على ما يرام يظل المشروع على المسار، 90 كل خطوة على الطريق من اليوم األول إلى اليوم ماذا تعتقد أنه يمكنك الظهور لمدة ثالثة أشهر فقط في المشروع وكل.الصحيح أليس كذلك؟، شيء سيكون تما ًما كما يريده العميل؟ قليال ساذج Oh, I really sympathize with you there. I hate it when the customer isn’t happy with me. But then again, there’s a lot more time to fix things. I mean, we get together, you know, me and the customer, at least once a month. And, if things are bad, I just let the customer know it’ll be better next time. . أكره عندما ال يكون العميل سعيدًا معي. أنا حقا أتعاطف معك هناك، أوه نحن، أعني. هناك الكثير من الوقت إلصالح األمور، ولكن مرة أخرى وإذا. مرة واحدة في الشهر على األقل، أنا والعميل، كما تعلم، نجتمع فأنا فقط أخبر العميل أنه سيكون أفضل في المرة، كانت األمور سيئة .القادمة But you’re shorter than a year now, right? Chapter 3 82 اعتدت أن أجرب ذلك أيضًا .سأحاول تخفيف الضربة من خالل التوضيح للعميل أنه سيتم إصالح جميع مشاكلهم في اإلصدار التالي من البرنامج ،ولكن هذا لم يكن ما يريدون سماعه .الكثير من الصراخ ،وكنت أنسل بعيدًا ،مستعد ًا للعودة إلى العمل لمدة عام أو نحو ذلك ،ومعرفة ما إذا كان العميل يحبني بشكل أفضل في المرة القادمة. لكنك أقصر من عام اآلن ،أليس كذلك؟ :تكرار Iteration: نعم ،ال أحد ينسى عني .في كل شهر تقريبًا ،أحضر ،وأقوم بأداء أغنية وأرقص ،إلرضاء العميل .حقًا ،ال أستطيع أن أتخيل كيف مررت بدوني. Yeah, nobody forgets about me. Around every month, there I am, showing up, putting on a song and dance, pleasing the customer. Really, I can’t imagine how you ever got by without me. أوه ،إنه أكثر من ذلك بقليل ،أال تعتقد ذلك؟ أين ستكون بدون أن أمهد الطريق ، والتأكد من أننا نسير على الطريق الصحيح ،ونتعامل مع التغييرات والميزات الجديدة ،وحتى إزالة الميزات الحالية التي لم تعد بحاجة إليها بعد اآلن. ?Oh, it’s a little more than that, don’t you think Where would you be without me paving the way, making sure we’re on track, handling changes and new features, and even removing existing features that aren’t needed any more. نأمل العمل؟ ?...hopefully working حسنًا ،لقد حصلت على الجزء الصغير بشكل صحيح .لماذا ال تتوقف عن العمل لمدة 30يو ًما أخرى أو نحو ذلك ،سنتصل بك عندما ينتهي العمل .ثم سنرى من هم بيرة الجمعة ،حسنًا؟ Well, you got the little part right. Why don’t you just shuffle off for another 30 days or so, we’ll call you when all the work’s done. Then we’ll see who Friday ?beers are on, OK بالتأكيد ،وبما أنني أقوم بعملي ،فأنا متأكد من أنك ستعمل بشكل جيد .أنا خارج هنا ، الكثير من العمل المتبقي إلنجازه ... Sure thing, and since I do my job, I’m sure you’ll work just fine. I’m outta here, plenty of work left tobe done.. :معلما Milestone: Well, I try to be, but sometimes that’s just how long it takes, although I just love seeing the customer more often. At least once a quarter seems to line up with their billing cycles. And not so long that I get forgotten about; there’s nothing worse than that. حسنًا ،أحاول أن أكون كذلك ،لكن في بعض األحيان يكون هذا هو الوقت الذي يستغرقه األمر ،على الرغم من أنني أحب رؤية العميل كثيرا .يبدو أن ربعًا على األقل يتوافق مع دورات الفواتير الخاصة بهم. ً ولم يمض وقت طويل حتى أنساه ؛ ال يوجد شيء أسوأ من ذلك. Are you kidding? You’re not even an alpha or a beta. .. just some code glued together, probably an excuse for everyone to wear jeans to work and drink beer on Friday afternoon. إصدارا تجريبيًا أو ألفا .فقط أنت تمزح؟ أنت لست حتى ً بعض التعليمات البرمجية التي تم لصقها معًا ،ربما يكون ملف عذرا للجميع الرتداء الجينز للعمل وشرب الجعة بعد ظهر يوم الجمعة. Ha! Where would I be? Same place I am right now, getting ready to show the customer some real... ها! حيث أن أكون؟ في نفس المكان الذي أتواجد فيه اآلن ،أستعد ألظهر للعميل بعضًا حقيقيًا ...software. Hey, wait. Hopefully? I’ve got a few... hopes for you, you little... البرمجيات .مهال انتظر .أمالً؟ لدي بعض اآلمال بالنسبة لك ،يا صغيرتي ... قليال فاسق جاحد !Ungrateful little punk. release this !الجميل .االفراج عن هذا كانت مهمتك هي وضع حتى قصص المستخدمين continuously buildable and runnable .يصنعوا تكرارات منطقية الحظ... إليك ما توصلنا إليه Your job was to lay out the user stories so they make iterations that make أن جميع التكرارات الخاصة sense. Here’s what we came up with... note that all our iterations are within one بنا تتم في غضون شهر calendar month, about 20 working days (or less). 20 حوالي، تقويمي واحد .)يوم عمل (أو أقل Manage special offers Title: Est: 13 days Priority: Est: 10 Total Days: Order In-flight meals Title: 13 days Est: Priority: Title: Est: 55 Total Days: Est: 15 days 50 Iteration 3 12 days Priority: 50 Est: 19 View flight reviews Title: Title: 10 Divide by 3 developers: 20 Login to “Frequent Astronaut” account Priority: 30 Divide by 3 developers: 17 View “Space Miles ” account days Total14Days: 50 Priority: ماذا تعتقد أنك يجب أن تفعل في نهاية التكرار؟ What do you think you should do at the end of an iteration? Show the customer and احتفظ ببرنامجك بشكل مستمر وتشغيل برامجك دائ ًما حتى Q:تتمكن.التكرار دائ ًما من الحصول على تعليقات من العميل في نهاية What if I get to the end of an iteration, and I don’t have anything to show my customer? A: 12 days Priority: Iteration 1 Iteration 2 View Shuttle deals Title: Actually, the answer here is 18.333, but the general rule is to round up your estimates to make sure you haven’t chopped off time that you are going to need. The only way you should end up at the end of an iteration and not have something to show the customer is if no user stories were completed during the iteration. If you’ve managed to do this, then your project is out of control and you need to get things back on track as quickly as possible. Divide by 3 developers: 20 58 أظهر للعميل واحصل على مالحظاتهم get their feedback Keep your software continuousLy buiLding and your software aLways runnabLe so you can aLways get feedback from the customer at the end of an iteration. project planning Iterations should be short and sweet So far Orion’s Orbits has focussed on 30-day iterations, with 3 iterations in a 90-day project. You can use different size iterations, but make sure you keep these basic principles in mind: يجب أن تكون التكرارات قصيرة وحلوة 30 حتى اآلن على عمليات التكرار لمدةOrbit's Orbits ركزت يمكنك استخدام. يو ًما90 تكرارات في مشروع مدته3 مع، يو ًما ولكن تأكد من مراعاة هذه المبادئ، تكرارات مختلفة الحجم :األساسية اجعل التكرارات قصيرة Keep iterations short The shorter your iterations are, the more chances you get to find and deal with change and unexpected details as they arise. A short iteration will get you feedback earlier and bring changes and extra details to the surface sooner, so you can adjust your plans, and even change what you’re doing in the next iteration, before you release a faulty Milestone 1.0. زادت فرصك في العثور على، كلما كانت التكرارات أقصر .التغييرات والتفاصيل غير المتوقعة والتعامل معها عند ظهورها مبكرا وإدخال سيؤدي التكرار القصير إلى الحصول على تعليقاتك ً حتى، التغييرات والتفاصيل اإلضافية إلى السطح في وقت أقرب وحتى تغيير ما تفعله في التكرار التالي، تتمكن من تعديل خططك . الخاطئMilestone 1.0 قبل إصدار، Keep iterations baLanced Each iteration should be a balance between dealing with change, adding new features, beating out bugs, and accounting for real people working. If you have iterations every month, that’s not really 30 days of work time. People take weekends off (at least once in a while), and you have to account for vacation, bugs, and things that come up along the way. A 20-work-day iteration is a safe bet of work time you can handle in an actual 30-day, calendar-month iteration. حافظ على التكرارات متوازنة ، يجب أن يكون كل تكرار متوازنًا بين التعامل مع التغيير ومحاسبة، والتغلب على األخطاء، وإضافة ميزات جديدة إذا كان لديك تكرارات كل.األشخاص الحقيقيين الذين يعملون يأخذ الناس. يو ًما من وقت العمل30 فهذا ليس في الواقع، شهر وعليك، )عطلة نهاية األسبوع (مرة واحدة على األقل كل فترة ، والبق، حساب اإلجازة 20 يعد التكرار لمدة.واألشياء التي تظهر على طول الطريق يوم عمل رهانًا آمنًا لوقت العمل الذي يمكنك التعامل معه في . يو ًما في التقويم30 تكرار فعلي لمدة تساعد التكرارات القصيرة على إقصاء التغيير وتبقيك أنت وفريقك متحفزين .ومركزين SHORT iterations heLp you deaL with change and keep you and your team motivated and focused. bringing reality to your plan Below is a particular aspect of a user story, iteration, milestone...or perhaps two, or even all three! Your job is to check off the boxes for the different things that each aspect applies to. User story Iteration fiilestone I result in a buildable and runnable bit of software. I’m the smallest buildable piece of software. In a full year, you should deliver me a maximum of four times. I contain an estimate set by your team. I contain a priority set by the customer. When I’m done, you deliver software to the customer and get paid. I should be done and dusted in 30 days. Answers on page 88. 86 Chapter 3 project planning Comparing your plan to reality مقارنة خطتك بالواقع It looks like we’ll be doing fine on the plan as long as we can all fit in a full five-day week. Bob: Oh, just so you know, Nick is coming in at 11 today, he’s got a doctor’s appointment... Laura: What? Bob: And while we’re talking, the IT guys are installing Oracle 9 on my machine this afternoon, so you might want to keep that in mind, too. Laura: Oh great, any other nasty surprises in there that I should be aware of ? Bob: Well, I have got a week of vacation this month, and then there’s Labor Day to take into account... Laura: Perfect, how can we come up with a plan that factors all these overheads in so that when we go get signoff from the CEO of Orion’s Orbits we know we have a plan we can deliver? See if you can help Bob out. Check all the things that you need to account for when planning your iterations. Paperwork Equipment failure Holidays Sickness Software upgrades Frank winning the lottery you are here 87 velocity applies your real performance Below is a particular aspect of a user story, iteration, milestone...or perhaps two, or even all three! Your job is to check off the boxes for the different things that each aspect applies to. User Story Iteration fiilestone I result in a buildable and runnable bit of software. I’m the smallest buildable piece of software. In a full year, you should deliver me a maximum of four times. I contain an estimate set by your team. I contain a priority set by the customer. When I’m done, you deliver software to the customer and get paid. I should be done and dusted in 30 days. See if you can help Bob out. Check all the things that you need to account for when planning your iterations. 88 Chapter 3 Paperwork Equipment failure Holidays Sickness Software upgrades Frank winning the lottery project planning Velocity accounts for overhead in your estimates It’s time to add a little reality to your plan. You need to factor in all those annoying bits of overhead by looking at how fast you and your team actually develop software. And that’s where velocity comes in. Velocity is a percentage: given X number of days, how much of that time is productive work? .0.7 ابدأ بسرعة من العدل أن، في التكرار األول مع فريق جديد ٪70 نفترض أن وقت عمل فريقك سيكون حوالي هذا يعني أن سرعة فريقك تساوي.وقتهم المتاح أيام من وقت10 مقابل كل، بمعنى آخر.0.7 أيام تقريبًا في أيام العطالت3 سيتم قضاء، العمل والمكالمات، واألعمال الورقية، وتثبيت البرامج، . ومهام أخرى غير متعلقة بالتطوير، الهاتفية ، وقد تجد أنه بمرور الوقت، هذا تقدير متحفظ إذا كان هذا هو.تكون السرعة الفعلية لفريقك أعلى ستقوم بضبط، ففي نهاية التكرار الحالي، الحال سرعتك واستخدام هذا الرقم الجديد لتحديد عدد أيام .العمل التي يمكن أن تنتقل إلى التكرار التالي أفضل ما في األمر هو أنه يمكنك تطبيق السرعة والحصول على تقدير واقعي، على مقدار عملك .للمدة التي سيستغرقها هذا العمل بالفعل السرعة تحسب النفقات العامة في تقديراتك .حان الوقت إلضافة القليل من الواقع إلى خطتك تحتاج إلى التعامل مع كل تلك األجزاء المزعجة من النفقات العامة من خالل النظر في مدى سرعة وهنا.قيامك أنت وفريقك بالفعل بتطوير البرامج : السرعة هي نسبة مئوية.يأتي دور السرعة ما مقدار الوقت الذي، عدد األيامX بالنظر إلى يكون فيه العمل المنتج؟ But how can I know how fast my team performs? We’ve only just gotten started! Start with a velocity of 0.7. On the first iteration with a new team it’s fair to assume that your team’s working time will be about 70% of their available time. This means your team has a velocity value of 0.7. In other words, for every 10 days of work time, about 3 of those days will be taken up by holidays, software installation, paperwork, phone calls, and other nondevelopment tasks. That’s a conservative estimate, and you may find that over time, your team’s actual velocity is higher. If that’s the case, then, at the end of your current iteration, you’ll adjust your velocity and use that new figure to determine how many days of work can go into the next iteration. Best of all, though, you can apply velocity to your amount of work, and get a realistic estimate of how long that work will actually take. أيام سرعة العمل days of work = days required to get work done velocity = األيام المطلوبة إلنجاز العمل you are here 89 from ideal to real estimates Programmers think in UTOPIAN days... Ask a programmer how long it takes to get something done, like writing a PHP interface to a MySQL database, or maybe screen-scraping World Series scores from espn.com. They’re going to give you a better-than-best-case estimate. Here’s what a programmer SAYS... هذا ما يقوله المبرمج ... UTOPIAN يفكر المبرمجون في أيام اسأل أحد المبرمجين عن المدة التي يستغرقها إلنجاز في قاعدة بياناتPHP مثل كتابة واجهة، شيء ما World Series أو ربما حذف نتائج، MySQL تقديرا أفضل من سوف يعطونك.espn.com من ً .أفضل الحاالت ... Sure, no problem, I can crank through that in two days. ...but here’s what he’s really THINKING ولكن هذا ما يفكر فيه حقًا I’ll grab a Monster on the way home, program till 3 A.M., take a Halo break, then work through the morning. Sleep a few hours, get the guys over to hack with me, and finish at midnight. As long as nothing goes wrong... and Mom doesn’t need me to pick up dinner. 90 Chapter 3 project planning ... يعتقد الفيلوبرز في أيام العالم الحقيقي عليك أن تتعامل مع، لكي تكون مطور برامج ، ربما يكون لديك فريق من المبرمجين.الواقع عالوة على.ولديك عميل لن يدفع لك إذا تأخرت قد يكون لديك أشخاص آخرون يعتمدون، ذلك ً لذا فإن تقديراتك أكثر تحف- عليك وتأخذ في، ظا :االعتبار الحياة الواقعية Developers think in REAL-WORLD days... To be a software developer, though, you have to deal with reality. You’ve probably got a team of programmers, and you’ve got a customer who won’t pay you if you’re late. On top of that, you may even have other people depending on you—so your estimates are more conservative, and take into account real life: 1 calendar month You start with a month, but takeaway weekends and holidays. 20 workable days velocity 14 days of REAL work Order in-flight meal Title: Title: Title: Description: Book a shuttle Description: Pay with Visa/MC/PayPal Desc ription: Est: 15 days 15 days 15 days Est: Est: Take your original estimates for each iteration from the solution on page 84 and apply a 70% velocity so that you can come up with a more confident estimate for all the work in Milestone 1.0. Iteration 1 55 days of work / 0.7 = Review flight Title: Description: Title: Order flight DVD Title: Description: Choose seating Order in-flight 15 daysmeal Title:Description: Est: Review flight Title: Title: Description: Order flight DVD Description: Title: Choose seating 15 days 15 days Est: 15 days Des cription: Est: Est: Review flight Title: Title: Description: Order flight DVD Description: Title: Choose seating 15 days 15 days Est: 15 days Des cription: Est: Est: Iteration 2 50 days of work / 0.7 = Iteration 3 58 days of work / 0.7 = Book a shuttle 15 days Description: Title: Est: Title: days Pay with15 Visa/MC/PayPal Description: Est: Desc ription: Est: 15 days 15 days 15 days Est: Est: Milestone 1.0 = you are here 91 Y متى يكون التكرار طويالً جدًا confidence comes at a price When is your iteration too longY هذا يعني أنه.0.7 افترض أن لديك ثالثة مطورين في فريقك يعملون بسرعة تحتاج إلى تطبيق سرعتك على، لحساب المدة التي سيستغرقها التكرار حقًا لفريقك :تقدير التكرار Suppose you have three developers on your team who are working at a velocity of 0.7. This means that to calculate how long an iteration will really take your team, you need to apply your velocity to the iteration’s estimate: Order in-flight meal Title: Title: Title: Book a shuttle Description: Pay with Visa/MC/PayPal Desc ription: Est: 15 days 15 days days 15 Est: Est: Review flight Title: Title: Description: Order flight DVD Description: Title: Choose seating 15 days 15 days Est: 15 days Description: Est: Est: Review flight Title: Title: Titl e: Description: Order flight DVD Description: C hoose seating 15 days 15 days 15 days Description: Est: Est: Est: Iteration 1 Description: 55 days / 0.7 = Iteration 2 50 days / 0.7 = 79 days 72 days Iteration 3 58 days / 0.7 = 83 days = 234 days of work So if you have 3 developers, each of them has to work 78 days in 3 months... but there are only 60 working days. 3 يو ًما في78 يجب على كل منهم العمل، مطورين3 لذلك إذا كان لديك . يوم عمل فقط60 ولكن هناك... أشهر How would you bring your estimates back to 20 work-day cycles so you can deliver Milestone 1.0 on time, without working weekends? 99 Deal with velocity BEFORE you break into iterations تعامل مع السرعة قبل اقتحام التكرارات كان من الممكن بالفعل تجنب الكثير من هذا األلم إذا كنت قد طبقت السرعة في بداية ، من خالل تطبيق السرعة مقد ًما.مشروعك يمكنك حساب عدد أيام العمل التي يمكنك أنت بعد ذلك.وفريقك إنتاجها في كل تكرار ستعرف بالضبط ما يمكنك تحقيقه حقًا في First, apply your team velocity to each iteration .Milestone 1.0 By taking the number of people in your team, multiplied by the number of actual working days in your iteration, multiplied finally by your team’s velocity, you can calculate how قم بتطبيق سرعة فريقك على كل تكرار، ًأوال many days of actual work your team can produce in one iteration: مضروبًا في، بأخذ عدد األشخاص في فريقك A lot of this pain could actually have been avoided if you’d applied velocity at the beginning of your project. By applying velocity up front, you can calculate how many days of work you and your team can produce in each iteration. Then you’ll know exactly what you can really deliver in Milestone 1.0. 3 x 20 x 0.7 = 42 مضروبًا، عدد أيام العمل الفعلية في التكرار يمكنك حساب عدد أيام، أخيرا في سرعة فريقك ً العمل الفعلي التي يمكن لفريقك إنتاجها في تكرار :واحد 20 working days in your iteration Add your iterations up to get a total milestone estimate Now you should estimate the number of iterations you need for your milestone. Just multiply your days of work per iteration by the numbe r of iterations, and you’ ve got the number of working days you can devote to user stories for your milestone: 42 x 3 = Q: That sucks! So I only have 14 days of actual productive work per iteration if my velocity is 0.7? A: 0.7 is a conservative estimate for when you have new members of your team coming up to speed and other overheads. As you and your team complete your iterations, you’ll keep coming back to that velocity value and updating it to reflect how productive you really are. 126 Q: أضف التكرارات للحصول على تقدير إجمالي للحدث اآلن يجب عليك تقدير عدد التكرارات ما عليك.التي تحتاجها لمعلمك الرئيسي سوى مضاعفة أيام عملك لكل تكرار في عدد أيام العمل التي يمكنك تخصيصها لقصص المستخدمين من أجل إنجازك :الرئيسي With velocity, my Milestone 1.0 is now going to take 79 working days, which means 114 calendar days. That’s much more than the 90-day/3-month deadline that Orion’s Orbits set, isn’t that too long? A: Yes! Orion’s Orbits need Milestone 1.0 in 90 calendar days, so by applying velocity, you’ve now got too much work to do to meet that deadline. You need to reassess your plan to see what you really can do with the time and team that you have. you are here 93 iterations with velocity When your iterations contain too much work for your team, there’s nothing else to do but reshuffle work until your iterations are manageable. Take the Orion’s Orbits Milestone 1.0 user stories and organize them into iterations that each contain no more than 42 days of work. View shuttle deals Title: Est: 12 days Priority: Est: 10 Est: Order In-flight meals 10 Est: Est: 20 Login to “Frequent Astronaut” account Title: 15 days Priority: 12 days Priority: View “Space Miles ” account Title: Est: 50 View flight reviews Title: 13 days Priority: Chapter 3 13 days Priority: Title: 94 Manage special offers Title: 14 days Priority: 50 30 project planning Iteration 1 Total Days of work: Iteration 2 Total Days of work: Iteration 3 Total Days of work: User stories that won’t fit you are here 95 reality means being honest Your job was to to take the Orion’s Orbits user stories and aim for iterations that contain no more than 42 days of work each. View shuttle deals Title: 12 days Est: 10 Priority: Iteration 1 Manage special offers Title: Est: Est: 10 Iteration 3 15 days Priority: 50 Total Days of work: 39 View “Space Miles” account Title: Est: 38 30 Priority: Est: Total Days of work: 12 days Est: Login to “Frequent Astronaut” account 14 days Priority: 50 User stories that won’t fit 96 Chapter 3 20 View flight reviews Title: Title: 13 days Priority: Iteration 2 42 Order In-flight meals Title: 13 days Priority: Total Days of work: حان الوقت إلجراء تقييم Time to make an evaluation إذن ماذا بقي؟ من المحتمل أن يكون لديك الكثير من قصص ... Milestone 1.0 المستخدمين التي ال تزال تتناسب مع هذا ألننا لم نحسب سرعتنا قبل التخطيط.وربما القليل منها ال .للتكرار project planning So what’s left? You’ve probably got a lot of user stories that still fit into Milestone 1.0...and maybe a few that don’t. That’s because we didn’t figure out our velocity before our iteration planning. Title: Title: Est: View Shuttle Take shutSpecif MC/PayPa tle l y window o r deals Title: Est: booki aisle seat pecial ng s 15 Manage days 14 days Title: View flight reviews Est: 15 Est: days offers 15 offersand days Priority: Title: Est: Est: 20 Priority: 15Est: days 13 days Priority: 12 days Est: 14 days Priority: Login to “Frequent View “Space Miles” Title: Title: 10 10 15 days Choos e seatingInAppl 1220 Space days 10 y for Miles Loyalty Priority: 10 Priority: Priority: Est: Priority: Title:Priority: Title: Est: Priority: 40 Milestone .Next Milestone 1.0 Deliver the bad news to the customer It’s the time that every software developer dreads. You’ve planned out your iterations, factored in the velocity of your team, but you still can’t get everything your customer wants done in time for their deadline. There’s nothing else to do but come clean... توصيل األخبار السيئة للعميل لقد.إنه الوقت الذي يخاف فيه كل مطور برامج ولكن، مع مراعاة سرعة فريقك، خططت لتكراراتك ال يزال يتعذر عليك الحصول على كل ما يريده ال يوجد.عميلك في الوقت المناسب للموعد النهائي ... شيء آخر لتفعله سوى النظرة That sucks! So you can do everything except the online “Space Miles” features. Hmm...Let me think about it... you are here Download at WoweBook.Com 97 breaking realistic but bad news إدارة العمالء الغاضبين Managing pissed off customers Customers usually aren’t happy when you tell them you can’t get everything done in the time they want. Be honest, though; you want to come up with a plan for Milestone 1.0 that you can achieve, not a plan that just says what the customer wants it to say. ال يشعر العمالء بالرضا عادة عندما تخبرهم أنه ال كن.يمكنك إنجاز كل شيء في الوقت الذي يريدونه Milestone مع ذلك ؛ تريد وضع خطة لـ، صري ًحا وليست خطة تقول فقط ما يريده، يمكنك تحقيقها1.0 .العميل أن يقوله So what do you do when this happens? It’s almost inevitable that you’re not going to be able to do everything, so it helps to be prepared with some options when you have to tell the customer the bad news... 1 تكرارا إلى ) أضف1 ً Milestone 1.0 اشرح أنه يمكن القيام بالعمل اإلضافي إذا تمت إضافة تكرار إضافي إلى هذا يعني جدول.الخطة لكن، تطوير أطول العميل سيحصل على ما Milestone يريد في .1.0 2 إذن ماذا تفعل عندما يحدث هذا؟ قادرا على فعل تكون يكاد يكون من الحتمي أنك لن ً لذلك من المفيد أن تكون مستعدًا ببعض، كل شيء الخيارات عندما يتعين عليك إخبار العميل باألخبار Add an iteration to Milestone 1.0 ... السيئة Explain that the extra work can be done if an additional iteration is added to the plan. That means a longer development schedule, but the custo y want in Milestone 1.0. me r will get what the 42 x 3 )تحلى بالشفافية فيما يتعلق بالطريقة التي3 توصلت بها إلى األرقام الخاصة بك قد يبدو األمر ولكن عميلك لديه كلمتك فقط بأنه ال يمكنك، غريبًا تقديم كل ما يريده خالل الموعد النهائي الذي حدده لذلك من المفيد أحيانًا توضيح المكان الذي، لك أظهر لهم الحسابات التي، إذا استطعت.أتيت منه .تدعم سرعتك وكيف يتناسب ذلك مع احتياجاتهم ، وأخبر عميلك أنك تريد تقديم برامج ناجحة له ولهذا السبب كان عليك التضحية ببعض الميزات .لمنح نفسك خطة تثق في قدرتك على تنفيذها Title: Est: Title: 126 View Shuttle MC/PayPa Take shuttle l window or Specify deals Title: Est: booking s15pecial Manage days aisle seat 14 days View flight reviews Est: Title: 15Est:days15 days andPriority: offers Title: 15 days 10 10 10 Priority: Est: Priority: e seatingInChoos Title: Priority: Apply Title: Est: for Space Priority: Est: 10 1220 days Miles Loyalty Priority: 12 days Est: 14 days Priority: 3 = )اشرح أن العمل2 بل تم، الفائض لم يضيع تأجيله أحيانًا يكون من المفيد اإلشارة إلى أن قصص المستخدم التي ال يمكنها الوصول إلى الMilestone 1.0 تضيع ؛ يتم وضعهم فقط Explain that the overflow work is not lost, just postponed على الموقد الخلفي حتى Sometimes it helps to point out that the user stories that can’t make it into Milestone 1.0 are not .المرحلة التالية lost; they are just put on the back burner until the next milestone. 20 Priority: Login to “Frequent Miles” Title: View “Space Title: Est: 15Est: days 13 days Priority: Priority: 40 Milestone 1.0 Milestone .Next Be transparent about how you came up with your figures It sounds strange, but your customer only has your word that you can’t deliver everything they want within the deadline they’ve given you, so it sometimes helps to explain where you’re coming from. If you can, show them the calculations that back up your velocity and how this equates to their needs. And tell your customer you want to deliver them successful software, and that’s why you’ve had to sacrifice some features to give yourself a plan that you are confident that you can deliver on. Q: Q: If I’m close on my estimates, can I fudge a little and squeeze something in? 0.7 seems to add up to a LOT of lost time. What sorts of activities could take up that sort of time? A: A: We REALLY wouldn’t recommend this. Remember, your estimates are only educated guesses at this point, and they are actually more likely to take slightly longer than originally thought than shorter. It’s a much better idea to leave some breathing room around your estimates to really be confident that you’ve planned a successful set of iterations. Q: I have a few days left over in my Milestone 1.0. Can’t I add in a user story that breaks my day limit just a little bit? A: 0.7 is a safe first guess at a team’s velocity. One example is where you are installing a new piece of software, like an IDE or a database (naming no specific manufacturers here, of course). In cases like these two hours of interrupted work can actually mean FOUR hours of lost time when you factor in how long it can take a developer to get back in “the zone” and developing productively. It’s also worth bearing in mind that velocity is recalculated at the end of every iteration. So even if 0.7 seems low for your team right now, you’ll be able to correct as soon as you have some hard data. In Chapter 9 we’ll be refining your velocity based on your team’s performance during Iteration 1. Again, probably not a good idea. If your stories add up to leave you one or two days at the end of the iteration, that’s OK. (In Chapter 9 we’ll talk about what you can do to round those out.) Q: OK, without squeezing my last user story in I end up coming under my work-day limit by a LONG way. I have 15 days free at the end of Milestone 1.0! Is there anything I can do about that? A: To fit a story into that space, try and come up with two simpler stories and fit one of those into Milestone 1.0 instead. يجب.كن واثقًا من قدرتك على إنجاز العمل الذي اشتركت فيه .عليك أن تعد وتكفِر بدالً من المبالغة في الوعود واإلحباط Alright, it’s worth it to me to lose space miles in Milestone 1.0 to keep things moving. Let’s do it. Stay confident that you can achieve the work you sign up for. You shouLd promise and deLiver rather than overpromise and faiL. you are here 99 introducing the big board The Big Board on your wall اللوحة الكبيرة على الحائط الخاص بك فقد حان الوقت إلعداد لوحة تحكم تطوير البرامج، بمجرد أن تعرف بالضبط ما تقوم ببنائه لوحة القيادة هي في الواقع مجرد لوحة كبيرة على جدار مكتبك يمكنك. من التطوير1 للتكرار .استخدامها لمراقبة العمل قيد التنفيذ وما يجري وما تم إنجازه Once you know exactly what you’re building, it’s time to set up your software development dashboard for Iteration 1 of development. Your dashboard is actually just a big board on the wall of your office that you can use to keep tabs on what work is in the pipeline, what’s in progress, and what’s done. User stories View shuttle deals Title: Est: 12 days Priority: 100 Chapter 3 10 project planning Burn Down 44 Work left 0 20 15 10 Days left 5 0 Next Completed you are here 101 happiness is a project that can be achieved You may have noticed a graph at the top right of your development dashboard, but what is it for? Take a few minutes to glance over the burn-down graph below and write on it what you think the different parts of the graph are for and how it is one of the key tools for monitoring your software development progress and ensuring that you deliver on time. ربما الحظت رس ًما بيانيًا في الجزء العلوي األيمن من لوحة ولكن ما الغرض منه؟ خذ بضع دقائق، معلومات التطوير إللقاء نظرة على الرسم البياني المحترق أدناه واكتب عليه ما تعتقد أنه من أجله األجزاء المختلفة من الرسم البياني وكيف أنه أحد األدوات الرئيسية لمراقبة تقدم تطوير البرامج لديك والتأكد . من أنك تقدمه في الوقت المحدد Burn Down 44 Work left 0 15 20 10 5 0 Days left Answers on page 104. What do you think would be measured on this graph, and how? ، ما الذي تعتقد أنه سيقاس في هذا الرسم البياني وكيف؟ 102 Chapter 3 كيف تدمر حياة فريقك "يمكن لفريقي، والبدء في التفكير، وتقليل دورات التكرار، والتقديرات المتزايدة، من السهل إلقاء نظرة على تلك الجداول الطويلة . فأنت على األرجح تجهز نفسك لبعض المشاكل في المستقبل، العمل ألسابيع أطول!" إذا كنت قد جعلت فريقك يوافق على ذلك project planning How to ruin your team’s lives It’s easy to look at those long schedules, growing estimates, and diminishing iteration cycles, and start to think, “My team can work longer weeks!” If you got your team to agree to that, then you’re probably setting yourself up for some trouble down the line. كن واثقًا في خططك من خالل تطبيق السرعة وعدم إرهاقك وفريقك PersonaL Lives matter Long hours are eventually going to affect your personal life and the personal lives of the developers on your team. That might seem trite, but a happier team is a more productive team. حياة األشخاص مهمة ستؤثر ساعات العمل الطويلة في النهاية على حياتك الشخصية والحياة الشخصية للمطورين . لكن الفريق األكثر سعادة هو فريق أكثر إنتاجية، ً قد يبدو هذا مبتذال.في فريقك Fatigue affects productivity Tired developers aren’t productive. Lots of studies suggest that developers are really only incredibly productive for about three hours a day. The rest of the day isn’t a loss, but the more tired your developers are, the less likely they’ll even get to that three hours of really productive time. Be confident in your pLans by appLying veLocity and not overworking yourseLf and your team. يؤثر التعب على اإلنتاجية تشير الكثير من الدراسات إلى أن المطورين ال ينتجون إال بشكل ال.المطورون المتعبون ليسوا منتجين قل، ولكن كلما زاد إرهاق مطوريك، ما تبقى من اليوم ليس خسارة.يصدق لمدة ثالث ساعات في اليوم .احتمال وصولهم إلى تلك الساعات الثالث من الوقت المنتج حقًا ■ The first step to planning what you are going to develop is to ask the customer to prioritize their requirements. ■ Milestone 1.0 should be delivered as early as you can. ■ During Milestone 1.0 try to iterate around once a month to keep your development work on track. ■ When you don’t have enough time to build everything, ask the customer to reprioritize. ■ ■ ■ Plan your iterations by factoring in your team’s velocity from the start. If you really can’t do what’s needed in the time allowed, be honest and explain why to the customer. Once you have an agreed-upon and achievable set of user stories for Milestone 1.0, it’s time to set up your development dashboard and get developing! you are here 103 performance and burn down You were asked to take a few minutes to glance over the burn-down graph below and describe what you think the different parts of the graph are for and how it is one of the key tools for monitoring your software development progress and ensuring that you deliver on time. Burn Down 44 Work left 0 15 ، ما الذي تعتقد أنه سيقاس في هذا الرسم البياني 20 وكيف؟ What do you think would be measured on this graph, and how? This graph monitors how quickly you and your team are completing your work, measured in days on the vertical axiick off your work remaining against the number of days left in your iteration. 104 Chapter 10 5 0 Days left يرصد هذا الرسم البياني مدى سرعة إكمالك أنت وفريقك لعملك ثم يوضح هذا الرسم. ويتم قياسه باأليام على المحور الرأسي، البياني مدى سرعة وضع عالمة على عملك المتبقي مقابل عدد .األيام المتبقية في التكرار We’ll talk a lot more about burndown in the next few chapters. Don’t worry if you’re still a little fuzzy on how burn-down rates work, and how to track it. You’ll start creating a chart of your own in the next chapter, tracking your project’s progress. your software development toolbox CHAPTER 3 Tools for your Software Development Toolbox Software Development is all about developing and delivering great software. In this chapter, you added several new techniques to your toolbox... For a complete list of tools in the book, see Appendix ii. أدوات لمربع أدوات تطوير البرمجيات الخاص بك تطوير البرمجيات هو كل شيء عن تطوير وتقديم برامج ، في هذا الفصل.رائعة لقد أضفت العديد من التقنيات الجديدة إلى صندوق األدوات للحصول على قائمة كاملة باألدوات في... الخاص بك . راجع الملحق الثاني، الكتاب Milestone ■ يعطي عميلك األولوية لما هو موجود وما هو خارج لـ .1.0 يو ًما20 و، ■ قم بإنشاء تكرارات قصيرة لمدة شهر تقويمي واحد تقريبًا .من العمل ً . يجب أن يكون برنامجك قابال للبناء والتشغيل، ■ طوال فترة التكرار ■ تطبيق سرعة فريقك على تقديراتك لمعرفة مقدار العمل الذي يمكنك .إدارته بشكل واقعي في التكرار األول الذيMilestone 1.0 ■ حافظ على سعادة عمالئك من خالل الخروج بـ .يمكنك تحقيقه حتى تكون واثقًا من إمكانية التسليم والحصول على األموال سيكونون أكثر سعادة، ثم إذا كنت تقديم المزيد ■ Your customer prioritizes what is in and what is out for Milestone 1.0. ■ Build short iterations of about 1 calendar month, 20 calendar days of work. ■ Throughout an iteration your software should be buildable and runnable. ■ Apply your team’s velocity to your estimates to figure out exactly how much work you can realistically manage in your first iteration. ■ Keep your customers happy by coming up with a Milestone 1.0 that you can achieve so that you can be confident of delivering and getting paid. Then if you deliver more, they’ll be even happier. تقنيات التنمية * يجب أال يزيد التكرار بشكل مثالي عن شهر .هذا يعني أن لديك 20يوم عمل لكل تكرار. * يتيح لك تطبيق السرعة على خطتك الشعور بمزيد من الثقة في قدرتك على الوفاء بوعود التطوير الخاصة بك لعمالئك. * استخدام (حرفيا) لوحة كبيرة على الحائط الخاص بك لتخطيط ومراقبة التكرار الحالي الخاص بك هو العمل. * احصل على موافقة العميل عند اختيار قصص المستخدم التي يمكن إكمالها لـ ، Milestone 1.0وعند اختيار التكرار ،سيتم تضمين قصة المستخدم. مبادئ التنمية * اجعل التكرارات قصيرة ويمكن التحكم فيها. * في النهاية ،يقرر العميل ما هو موجود وما هو خارج .Milestone 1.0 * الوعد والوفاء. * كن دائما صادقا مع العميل 4 user stories and tasks Getting to the real work I’m sure that eighth layer of wax is important, but couldn’t we get going? We should already be there... تسجّل قصص المستخدمين ما تحتاج.حان وقت الذهاب إلى العمل ولكن حان الوقت اآلن للتركيز على العمل الذي يجب، إلى تطويره القيام به واستنباطه حتى تتمكن من ستتعلم في.يمكن أن تجعل قصص المستخدمين هذه تنبض بالحياة وكيف، هذا الفصل كيفية تقسيم قصص المستخدمين إلى مهام .تساعدك تقديرات المهام في تتبع مشروعك من البداية إلى النهاية ونقل المهام من قيد التقدم إلى اكتمالها، ستتعلم كيفية تحديث منتداك ، على طول الطريق. إلى إكمال قصة مستخدم كاملة في النهاية، ستتعامل مع العمل غير المتوقع الذي ال مفر منه والذي سيضيفه .عميلك إلى قائمة أولوياتك It’s time to go to work. User stories capture what you need to develop, but now it’s time to knuckle down and dish out the work that needs to be done so that you can bring those user stories to life. In this chapter you’ll learn how to break your user stories into tasks, and how task estimates help you track your project from inception to completion. You’ll learn how to update your board, moving tasks from in progress to complete, to finally completing an entire user story. Along the way, you’ll handle and prioritize the inevitable unexpected work your customer will add to your plate. this is a new chapter Download at WoweBook.Com 109 introducing iSwoon Introducing iSwoon iSwoon تقديم الذي سيصبح قريبًا أفضل مخطط مواعيد، iSwoon مرحبًا بك في المحملة بالفعل، على سطح المكتب في العالم! ها هي اللوحة الكبيرة : يوم عمل20 بقصص المستخدمين مقسمة إلى تكرار لمدة Welcome to iSwoon, soon to be the world’s finest desktop date planner! Here’s the big board, already loaded with user stories broken down into 20-work-day iterations: Order flowers k restaurant r cab 110 Chapter 4 Download at WoweBook.Com خذ كل.حان الوقت لجعلك أنت وفريقك من المطورين يعملون وقم بتعيين كل منها لمطور1 للتكرارiSwoon قصص مستخدم ... عن طريق رسم خط من قصة المستخدم إلى المطور الذي تختاره user stories and tasks It’s time to get you and your team of developers working. Take each of the iSwoon user stories for Iteration 1 and assign each to a developer by drawing a line from the user story to the developer of your choice... you are here Download at WoweBook.Com 111 break up user stories into tasks عملك أكثر دقة من قصص المستخدم .الخاصة بك كانت قصص المستخدم الخاصة بك للمستخدم الخاص بك ؛ لقد ساعدوا في وصف ما تحتاجه ولكن.البرامج بالضبط من وجهة نظر العميل فربما تحتاج، اآلن حان الوقت لبدء الترميز كل.إلى النظر إلى هذه القصص بشكل مختلف ، قصة عبارة عن مجموعة من المهام المحددة أجزاء صغيرة من الوظائف التي يمكن أن تتحد .لتشكل قصة مستخدم واحد تحدد المهمة جز ًءا من عمل التطوير الذي يجب أن يقوم به مطور واحد من أجل تكوين جزء كل مهمة لها عنوان لذلك.من قصة المستخدم ووصف تقريبي، يمكنك الرجوع إليها بسهولة يحتوي على تفاصيل حول كيفية تطوير هذه كل مهمة لها تقديرها الخاص. وتقدير، المهمة أفضل طريقة للتوصل إلى هذه- خمن ما-و التقديرات هي عن طريق التخطيط للعب البوكر .مرة أخرى مع فريقك Wait a second, we can’t just assign user stories to developers; things aren’t that simple! Some of those user stories have to happen before others, and what if I want more than one developer on a single story? Your work is more granular than your user stories. Your user stories were for your user; they helped describe exactly what you software needed to do, from the customer’s perspective. But now that it’s time to start coding, you’ll probably need to look at these stories differently. Each story is really a collection of specific tasks, small bits of functionality that can combine to make up one single user story. A task specifies a piece of development work that needs to be carried out by one developer in order to construct part of a user story. Each task has a title so you can easily refer to it, a rough description that contains details about how the development of that task should be done, and an estimate. Each task has its own estimate and—guess what—the best way to come up with those estimates is by playing planning poker again with your team. Now it’s your turn. Take the user story of creating a date and break it into tasks you think you and your team need to execute. Write one task down on each of the sticky notes, and don’t forget to add an estimate to each task. 112 Answers on page 114. Chapter 4 Download at WoweBook.Com هل تضيف مهامك؟ لكننا اآلن نضيف تقديرات جديدة إلى، هل الحظت مشكلة محتملة في تقديراتك؟ لدينا قصة مستخدم بتقدير ماذا يحدث عندما ال تتفق مجموعتا التقديرات؟.مهامنا user stories and tasks Do your tasks add upY Did you notice a possible problem with your estimates? We’ve got a user story with an estimate, but now we’re adding new estimates to our tasks. What happens when the two sets of estimates don’t agree? Task 5 Task SQL scripts Create adding,SQLfinding forCreate scripts and finding adding, date forupdating records and updating date 3 records 4 تضيف تقديرات المهام الثقة إلى تقديرات قصة المستخدم لقد أبقتك تقديرات قصة المستخدم الخاصة بك في الملعب الصحيح ولكن المهام تضيف حقًا مستوى آخر من، عندما كنت تخطط للتكرار .التفاصيل الخاصة بالترميز الفعلي الذي ستفعله لقصة المستخدم غالبًا ما يكون من األفضل فصل المهام من قصص، في الواقع بهذه. إذا كان لديك الوقت، المستخدمين مباشرة ً في بداية عملية التقدير من.الطريقة ستضيف المزيد من الثقة إلى الخطة التي تمنحها لعميلك تصف المهام العمل.األفضل دائ ًما االعتماد على تقديرات المهام الفعلي لتطوير البرامج الذي يتعين القيام به وهي أقل بكثير من .التخمينات من تقدير قصة المستخدم الرديئة Task estimates add confidence to user story estimates Your user story estimates kept you in the right ballpark when you were planning your iterations, but tasks really add another level of detail specific to the actual coding you’ll do for a user story. ? قسّم قصص المستخدم إلى مهام إلضافة الثقة لتقديراتك ولوحة .التحكم الخاصة بك In fact, it’s often best to break out tasks from your user stories right at the beginning of the estimation process, if you have time. This way you’ll add even more confidence to the plan that you give your customer. It’s always best to rely on the task estimates. Tasks describe the actual software development work that needs to be done and are far less of a guesstimate than a coarse-grained user story estimate. Break user stories into tasks to add CONFIDENCE to your estimates and your pLan. you are here Download at WoweBook.Com 113 tasks have estimates You were asked to take the user story of creating a date and break out the tasks that you think you and your team will need to execute to develop this user story, not forgetting to add task estimates... Q: My tasks add up to a new estimate for my user story, so were my original user story estimates wrong? A: Well, yes and no. Your user story estimate was accurate enough in the beginning to let you organize your iterations. Now, with task estimates, you have a set of more accurate data that either backs up your user story estimates or conflicts with them. You always want to rely on data that you trust, the estimates that you feel are most accurate. In this case, those are your task estimates. Q: A: How big should a task estimate be? Your task estimates should ideally be between 1/2 and 5 days in length. A shorter task, measured in hours, is too small a task. A task that is longer than five days spreads across more than one working week, and that gives the developer working on the task too much time to lose focus. 114 Q: A: What happens when I discover a big missing task? Sometimes—hopefully not too often—you’ll come across a task that just breaks your user story estimate completely. You might have forgotten something important when first coming up with the user story estimates, and suddenly the devil in the details rears its ugly head, and you have a more accurate, task-based estimate that completely blows your user story estimate out of the water. When this happens you can really only do one thing, and that’s adjust your iteration. To keep your iteration within 20 working days, you can postpone that large task (and user story) until the next iteration, reshuffling the rest of your iterations accordingly. To avoid these problem, you could break your user stories into tasks earlier. For instance, you might break up your user stories into tasks when you initially plan your iterations, always relying on your task estimates over your original user story estimates as you balance out your iterations to 20 working days each. Chapter 4 Download at WoweBook.Com