ทำความรู้จัก Arm Big little และ Dynamic IQ

เป็นการคำนวณโดยใช้ core architecture ที่แตกต่างกัน เพื่อปรับปรุงประสิทธิภาพของการใช้พลังงาน โดยแบ่งออกเป็นสองชนิด  ชนิดที่หนึ่ง ที่ใช้พลังงานสูงและประสิทธิภาพสูงจะเป็น  core BIG  ส่วนชนิดที่สองใช้  core little จะมีประสิทธิภาพต่ำกว่าช้ากว่าและใช้พลังงานต่ำกว่า ทุก core เข้าถึง cache memory เดียวกันเมื่อต้องการคำนวณ ในรูปแบบ multi-thread  ในรูปแบบการคำนวณจะยังสามารถปรับความถี่ของ CPU แบบไม่คงที่อีกได้ด้วย เพื่อปรับพลังงานให้เหมาะสมกับwork load ของงาน

ตุลาคม 2011 รูปแบบของสถาปัตยกรรม Big และ little เริ่มต้นใช้ใน Cortex A7  ถูกออกแบบเหมือนกันกับ Cortex A15 ในตุลาคมปีถัดมา เริ่มใช้ CortexA53 กับ Cortex A57 (ARMv8-A)  ในปีกุมภาพันธ์ 2014 ใช้ CortexA12 กับ  CortexA12 และ Cortex A17 คู่กับ CortexA7

การแก้ไขปัญหาของ Big และ little

CMOS พลังงานที่ใช้งานจะเพิ่มขึ้นตาม logic switch ตามวินาที กระแสรั่วไหลจะแปรผันตรงกับจำนวนของ transistor ดังนั้น การออกแบบ CPU ต้องทำงานเร็ว และต้องมีความแตกต่าง เพื่อลดการใช้พลังงาน  Core ควรรันเร็วมากๆ  และ Core ที่ไม่ได้ใช้งานควรมีการรั่วไหลของกระแสที่น้อยกว่า (ควรมี transistor ที่น้อยกว่า) และยังสามารถทำงานแบบเดียวกันได้  ยกตัวการแก้ไขมีหลายอย่าง การใช้ CPU ที่มี transistor ที่น้อยกว่า memory cache หรือ  microarchitecture แบบง่าย เช่น pipeline  big ผสมกับ little เป็นทางเลือกใช้ได้ในสองกรณี ทั้งพลังงาน ความเร็วในระบบเดียวกัน

ในทางปฎิบัติ  big และ little เป็นสิ่งที่แปลกประหลาดและไม่ยืดหยุ่น ชนิดและจำนวนของแหล่งจ่ายพลังงาน clock ให้ IC  ไม่ตรงกับรูปแบบมาตราฐานจัดการพลังงานที่ระบบปฎิบัติการมีมาให้  CPU แต่ละตัวกัน มีความสามารถไม่เทียบเท่ากัน การหา software task ที่ถูกต้องกับการเลือก CPU ที่เหมาะสมเป็นเรื่องที่ยากมากขึ้น แต่ปัญหาทั้งหมดนี้สามารถแก้ไขได้ด้วย electronic และ software

มีสามรูปแบบของการจัดการ CPU big little ขึ้นอยู่กับการจัดตารางเวลาการทำงาน เรียกใช้ใน kernel

Clustered switching

เป็นวิธีแรกที่ง่ายที่สุด  เมื่อรันครั้งแรก ระบบปฎิบัติการจะเห็น work load ทั้งหมดของกลุ่มCPU  จะนั้นจะเปลี่ยนสสับงานคำนวณที่หนัก ไปในกลุ่มของ big และการคำนวณที่เบากว่า ไปที่กลุ่มของ little  โดยใช้ข้อมูลการคำนวณโดยผ่าน L2 cache ปิดเปิด core CPU เพื่อเรียกงาน มีการแชร์ข้อมูลใน cache โดยใช้ Cache Coherent Interconnect (CCI) เริ่มใช้ Samsung Exynos 5 Octa

 

In -kernel switcher

CPU จัดการโดย in-kernel switcher (IKS) จับคู่ 1 virtual core มี big กับ little อยู่คู่กัน เมื่อมีภาระโหลดหนักจะเรียกใช้ Big เมื่อภาระการใช้น้อยจะเรียกใช้ little เมื่อเปิดใช้งาน virtual core power อันใหม่ข้อมูลจะถูกถ่ายโอนไป virtual core ถัดไป เปลี่ยนแปลง frequency ตามกลุ่มของ virtual core IKS ถูกเพิ่มใน kernel 3.11

 

Heterogeneous multi-processing

การคำนวณแบบ multi thread ที่มีประสิทธิภาพมากที่สุด คือ เปิด ทุก core  big core ใช้กับ thread ที่มีความสำคัญสูงสด และ little core กับ thread ที่มีความสำคัญต่ำสุด

 

 

 

พื้นฐานการวิเคราะห์ digital image

การจัดการรูปภาพโดย คอมพิวเตอร์ เราใช้ algorithm ในการปรับแต่งภาพและเลือกเอาข้อมูลที่ต้องการบางข้อมูลที่เป็นประโยชน์ออกมาใช้

 

วิธีการมีสามแบบ

  1. นำเข้ารูปภาพ
  2. วิเคราะห์จัดการรูปภาพ
  3. แสดงผลของรูปภาพที่เปลี่ยนแปลงและรายงานผลการวิเคราะห์

 

อะไรคือภาพ

ภาพกำหนดด้วยสองมิติรูปแบบ function F(x,y) ที่ x และ y พิกัดพืื้นที่ และ F คืิอความหนาแน่นของจุดในภาพ เมือ x,y มีค่าเป็นแอมพลิจูดของ F มีค่าจำกัด เราเรียกว่า digital image

บ้างก็ว่า รูปภาพสามารถกำหนด array สองมิติ จัดเรียงอยู่ในรูปแบบแถวและคอลัม ประกอบด้วยตัวเลขที่จำกัดแต่ละสมาชิกมีค่าที่เกี่ยวข้องกันอ้างอิงเป็น pixel

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

เปรียบเทียบกับภาพจริงที่ขยายเห็น Pixel

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ชนิิดของภาพมีดังนี้

  1. Binary Image pixel มีค่าแค่สองค่า 0 และ 1 0 คือดำ 1 คือขาว เรียกว่า MonoChrome
  2. Black and white image ประกอบด้วยสีดำและขาวเท่านั้น เรียก white and black image
  3. 8 bit color image ประกอบด้วยสีที่แตกต่างกัน 0-255 แบบ 0 คือสีดำ 255 คือสีขาว 127 คือสีเทา ที่รู้จักกันในแบบ grayscale image
  4. 16 bit color image ประกอบด้วยสีที่แตกต่างกัน 65536 แบบ high color format รูปการกระจายสีไม่เหมือน grayscale 16 bit ใช้จริงจะแบ่งอีกสามรูปแบบ คือ แดง เขียว ฟ้า RGA format

                                       

                                   

โดยทั่วไปนำเสนอและคำนวณโมเดลคณิตศาสตร์ในรูป matrix

 

                                                                              

บทนำ

     พูดอย่างกว้างๆ คุณสามารถแบ่งภาษาได้สี่กลุ่ม ต่ำสุดคือ machine code จำนวนตัวเลขดิบๆ ที่สามารถถอดรหัส ชุดคำสั่งได้และทำงาน หนึ่งก้าว คือ assembly มีความจำเป็นต่อ machine code แต่ละคำสั่งของ assembly พิจารณาเป็นหนึ่งชุด machine code ทั้งหมดที่กล่าวเหมือนโปรแกรมที่ compile แล้วของภาษา C  C ใช้โครงสร้างภาษาที่มนุษย์ สามารถอ่านได้เหมือนภาษาอังกฤษ แต่ต้อง compile เป็น machine code เพื่อรัน สุดท้ายมีภาษา script อย่างเช่น PHP เหมือน VB JAVA  มี interpreter ปรับแต่งละรัน machine code ที่ถูกต้อง

    ทุกๆความก้าวหน้าเป็นผลดีต่อความเข้าใจและเป็นภาษามนุษย์ที่อ่านได้และยึดหยุ่น การใช้เวลารันและขนาดโปรแกรมในสมัยเก่าโปรแกรมเมอร์คือผู้ควบคุมโปรแกรมจริงๆทำและให้ machine code ทำงานได้ตามข้อจำกัดของ clock speed และ memory สำหรับ PC ถูกจัดการและทำงานได้โดยองค์ประกอบของภาษาระดับสูง เป็นสิ่งที่ดีเพราะเขียนได้รวดเร็วและจัดการง่าย

อย่างไรก็ตาม ภาษาระดับสูง ข้อจำกัดบางอย่างที่ยังไม่สามารถทำได้เพียงพอ Gameboy ด้วย CPU 16.7MHz RAM น้อยกว่า 1MB ทำงานได้ภาษาสูงอาจจะไม่มีประสิทธิภาพเพียงพอ ไม่สามารถรันได้ทั้งหมด ทำไม Gameboy ทำได้งานใน C/C++ บางครั้งด้วยความเสน่หาเรียกภาษานี้ว่า portable assembly เพราะมันสามารถเข้าถึง memory ได้โดยตรง แต่ยังมีบางอย่างที่ไม่เพียงพอ จริงๆถ้าคุณต้องการจะทำทุกๆอย่างตามการนับ cycle ของ CPU อาจจะตัองการใช้ assembly ในการเขียน

   ตอนนี้ในบางกลุ่มเรียก assembly คือภาษาโปรแกรมที่เล็กที่สุด เพราะใกล้ชิดและผูกกับ CPU คุณสามารถทำได้ทุกอย่าง และต้องจัดการทุกอย่างทั้งหมด คุณอยู่ใกล้ hardware คุณสามารถลัดขั้นตอนคุณสมบัติที่ป้องกันความปลอดภัยของภาษาระดับสูงได้ อาจจะทำงานง่ายต่อการทำลายและอันตรายมากขึ้น เหมือนอยู่ในโลกของการผจญภัย

    โปรแกรม assembly คุณต้องรู้และเข้าใจว่า CPU ทำงานอย่างไรถึงจะเขียนโปรแกรมได้ มากกว่าการแปลผลจาก complier และ interpreter ไม่มีโครงสร้าง while loop หรือ กิ่ง if/else มีแค่ goto ไม่มีโครงสร้างคลาสและการสืบทอด ไม่มีแปลชนิดข้อมูล สิ่งเหล่านี้ทำให้ code สามารถรันได้เร็วทีสุดเท่าที่เป็นไปได้

   ความเร็วและขนาดโปรแกรมเป็นประเด็นหนึ่ง ไม่มีเหตุผลอื่นที่ว่าทำไมไม่เรียนรู้ assembly เพราะสามารถทำได้ดี สามารถอธิบายให้คุณทราบการทำงานของ CPU function และคุณสามารถใช้ความรู้ในภาษาซีได้เหมือนกัน ตัวอย่างที่ดีทีสุดของชนิดของข้อมูลคือ int เพราะ ARM processor คือ32 bit ถูกให้ใช้มากกว่าทุกๆสิ่ง เพราะชนิดข้อมูลอื่นจะช้าลง และบ้างครั้งช้ามาก เป็นพื้นฐานของ CPU และความรู้ทางภาษา assembly จะแสดงให้ว่าทำไมช้าลง

   ทุกอย่างๆ ที่เกี่ยวกับบทนี้ เอกสารแนะนำที่เกี่ยวกับ assembly ที่สมบูรณ์ คงหนีไม่พ้น คู่มือ CPU ฉบับเต็ม สิ่งสำคัญอยากให้เน้นไปที่ชุดคำสั่ง ARM และ Thumb รวมไปถึงอยากให้ดูการใช้งาน GCC assembler เครื่องที่สามารถสร้าง C และ assembly ไปพร้อมๆกัน เอกสารที่เตรียมศึกษามีดังต่อไปนี้

ทำความรู้จัก CPU ทางกายภาพ 

สรุปชุดคำสั่งของ Thumb และ ARMแบบคร่าวๆ

ชุดคำสั่งหลัก GAS /ARM/ Thumb2

คู่มือการใช้ GNU assembler

  หลายคนอาจจะงงว่า ทำไม ARM มี ชุดคำสั่ง Thumb ด้วย จุดมุ่งหมายของชุดคำสั่ง Thumb เป็นรูปพิเศษบีบอัดชุดคำสั่งให้น้อยลง เพื่อให้ opcode ที่ใช้ใน memory น้อยลง ลดการเปรียบเทียบลงในแต่ละคำสั่งของการทำงาน มีหลายแบบแตกต่างกันไปตามสถาปัตยกรรม series ของ ARM อาทิ เช่น Thumb Thumb2  ThumbEE ส่วนชุดคำสั่ง ARM นั้นเป็นคำสั่งทั่วไปของ ARM

  ปกติแล้วใน CPU จะมีส่วนสำคัญคือ register หน่วยความจำที่ไว้พักข้อมูลอ่านเขียนเร็วที่สุด เพื่อใช้คำนวณ ส่วน ALU คือหน่วยประมวลทางคณิตศาสตร์  หลักการรันชุดคำสั่งสรุปได้ดังแผนภาพ

ความสำคัญของปัญหา

ด้วยsoftwareที่มีการเปลี่ยนแปลงรวดเร็ว ทำให้ระบบจัดการโปรเจคแบบปกติ ไม่สามารถทำต่อไปได้อีก นั่นก็หมายความว่า มือโปทางด้าน ไอที ต้องหาหนทางใหม่เพื่อจัดการกับงานพัฒนาที่มีการเปลี่ยนแปลงบ่อยๆ

 

การนำเสนอที่เน้นไปในทางการเพิ่มการพัฒนาทางด้านเทคนิค 17 ผู้เชี่ยวชาญทางด้าน software แนะนำให้ใช้ agile development ในปี 2001 ทฤษฎีที่ยึดหยุ่นรวดเร็วการรวมศูนย์กลางความร่วมมือการพัฒนา software กลายข้อสรุปสั้นๆที่เรียกว่า agile manifesto

 

software engineering ken back แนะนำ Xp-programmingในปี 1990 จุดมุ่งหมายเพื่อเพิ่มคุณภาพของการพัฒนา software ได้อย่างรวดเร็ว รองรับการเปลี่ยนแปลงของลูกค้าในปี 1999 ได้มีการกำหนด xp ในหนังสือ extreme programming explained embrace change

 

คุณค่าและทฤษฤีของ Extreme Programming มีกฎพื้นฐานที่ง่ายห้าอย่างดังนี้

 

การติดต่อสื่อสาร(communication) ทุกคนของทีมทำงานร่วมกันต้องมีการติดต่อสื่อสารกันทุกขั้นตอนของโปรเจค

ความเรียบง่าย (simplicity) นักพัฒนามุ่งมั่นที่จะเขียน code ง่ายๆแต่สามารถให้คุณค่าแก่ผลิตภัณฑ์ และประสิทธิภาพของเวลาที่ใช้น้อยลง

ข้อเสนอแนะ (feedback) นักพัฒนาต้องปล่อย software บ่อยๆ เพื่อดูการตอบรับและเพื่อปรับปรุงผลิตภัณฑ์ตามความต้องการใหม่

ความเคารพ (respect) ทุกคนกำหนดให้เป็นผู้แนะนำเกี่่ยวกับโปรเจค เพื่อจุดมุ่งหมายความสำเร็จเดียวกัน

ความกล้าหาญ (courage) Programmer มีจุดประสงค์เพื่อประเมินผลในตัวเองโดยปราศจากข้อแก้ตัวและพร้อมจะเปลี่ยนแปลง

 

ค่านิยมดังกล่าวนี้จะช่วยให้ทีมมีแรงจูงใจไปถึงเป้าหมายได้และสะท้อนให้เห็นอย่างเป็นรูปธรรมมากขึ้น

 

นักพัฒนาวิจัยเห็นคุณค่าของ 5 ค่าของ XP ดังนี้

rapid feedback (การตอบสนองรวดเร็ว )สมาชิกของทีมต้องเข้าใจว่าให้ทำอะไร และต้องตอบสนองให้ถูกต้อง

Assumed simplicity (กำหนดให้ง่าย) นักพัฒนาต้องมุ่งเน้นงานที่สำคัญในขณะนั้น ตามรูปแบบ YAGNI (You aren’t Gonna Need It) จะไม่เพิ่ม function ใน source code เมื่อมันไม่มีความจำเป็นต้องทำ don't repeat yourself (DRY) จะไม่ประมวลข้อมูลที่เหมือนกันและการทำกระทำแบบเดียวกันช้ำๆหลายครั้ง ควรใช้ข้อมูลชุดเดียวหรือ functionชุดเดียวในการประมวลผลของโปรแกรมในจุดมุ่งหมายเดียวกัน

Incremental changes (การเพิ่มการเปลี่ยนแปลง) ค่อยเปลี่ยนแปลงที่ละเล็กๆน้อยๆ เพือให้ผลิตภัณฑ์ดีขึ้น ดีกว่าทำทีเดียวให้ดีทั้งหมด

Embracing change (เกาะติดการเปลี่ยนแปลง) ถ้าลูกค้าต้องการจะเปลี่ยนรูปแบบผลิตภัณฑ์ programmer ควรให้การสนับสนุนการติดสินใจนี้ว่าควรวางแผนและนำไปใช้อย่างไร

Quality work (คุณภาพของงาน) ทีมควรทำงานร่วมกันได้ดี สร้างคุณค่าผลิตภัณฑ์และมีความรู้สึกภาคภูมิใจในผลงาน

 

Extreme Programming ในทางปฎิบัติ

XP นำเสนอแนวทางปฎิบัติ 12 แบบ นักพัฒนาปฎิบัติตามทฎษฎีและค่่านิยม มีแนวทางปฎิบัติจริงจะแบ่งออกได้เป็นสี่กลุ่ม

 

feedback (การตอบกลับ)

Test driven development :เป็นได้ไหมว่าที่จะเขียน code ให้ดูรวดเร็วเข้าใจง่าย ตอบได้เลยว่าได้ ตามหลักของ XP software ต้องมีคุณภาพและควรพัฒนาเป็นช่วงสั้นๆ และปล่อย software บ่อยๆ เพื่อดูการตอบรับ การมีการตอบรับเข้ามาเป็นสิ่งดีที่สำหรับการทดสอบ ทีม XP ควรฝึกการเขียน TDD (test driven development) เป็นการเขียน unit-test แบบอัตโนมัติก่อนเขียน code จริง เพื่อแน่ใจว่าทุกส่วนของ code ผ่านการทดสอบก่อน ปล่อย software ออกมา ดังนั้น นักพัฒนาควรรออกแบบ function ที่ต้องการให้สามารถทดสอบได้ TDD จึงเป็นหนทางที่สามารถทดสอบการตอบกลับของ function software ได้ทันทีและสร้างผลิตภัณท์softwareที่เชื่อถือได้

 

The Planing game (เกมวางแผน): นี่เป็นการประชุมเกี่ยวการเริ่มการพัฒนาของทีม และลูกค้าเข้ามาช่วยอภิปรายและปรับปรุงคุณสมบัติของผลิตภัณฑ์ ในตอนท้ายของเกมวางแผนทีมต้องกำหนดงานแผนการพัฒนาในคุณสมบัติต่างและช่วงเวลาการปล่อย software กำหนดงานที่จะทำในแต่ละอย่าง

 

onsite-customer(อยู่กับลูกค้า) ตามหลัก XP ลูกค้าควรมีปฏิสัมพันธ์เต็มรูปแบบตลอดการพัฒนา และให้คำตอบของสถานะปัจจุบันตลอดเวลา ระบุความสำคัญ แก้ไขข้อขัดแย้งตามความจำเป็น

 

pair programming (จับคู่่เขียนโปรแกรม)ในทางปฎิบัติ เป็นการทำงานร่วมเขียน code เดียวกัน คนแรกเน้นการขียน code คนที่สองเน้นให้แนะนำ และปรับปรุงและแก้ไข ข้อผิดพลาดระหว่างทาง ผลของทีมคือได้งานที่มีคุณภาพ มีการแชร์ความรู้ที่รวดเร็ว ใช้เวลา 15 ถึง 60 % หรือมากกว่า ตามการพิจารณาระยะยาว วิธีการนี้น่าจะเหมาะโปรเจคที่มีเวลาพัฒนายาวนาน

 

continual process (การดำเนินการที่ต่อเนื่อง)

code refactoring การส่งคุณค่าทางธุรกิจ การออกแบบที่ดีในทุกๆขั้นตอน ทีม XP ยังสามารถใช้ refactoring จุดมุ่งหมายของเทคนิคเพื่อปรับปรุงcode Refactoring จะลบการทำซ้ำๆ ลบ function ที่ไม่จำเป็น เพิ่มความสอดคล้องของ code ในเวลาเดียวกันสามารถแยกองค์ประกอบ รักษา code ให้สะอาด และดูง่าย ดังนั้น codeจะง่ายต่อความเข้าใจและแก้ไขมันได้เมื่อสมาชิกทุกคนในทีม XP แนะนำให้แก้ไข

 

continuous Integration (การดำเนินการต่อเนื่องและรวมกันทั้งหมด) นักพัฒนาต้องรักษาระบบรวมแบบเต็ม XP ทีมอาจจะมีการวนการพัฒนาไปในหลายระดับการ commit code หลายครั้งต่อวัน จะต้องปล่อย software ได้อย่างต่อเนื่อง ผู้ปฎิบัติXP ต้องเข้าใจความสำคัญของการสื่อสาร โปรแกรมเมอร์อภิปรายส่วน code ที่สามารถนำกลับมาใช้ใหม่และแชร์ แนวทางนี้ต้องรู้ว่า function อะไรเป็นฟังก์ชันที่ต้องการจริงๆในการพัฒนา นโยบายการแชร์ code จะช่วยลดปัญหาที่เกิดซ้ำ อีกทางเพิ่มการทดสอบอัตโนมัติใน code จะช่วยให้นักพัฒนาสามารถค้นหาและแก้ไขข้อผิดพลาดได้ทัน ก่อนที่จะนำไปใช้งาน

 

small releases (ปล่อยทีละน้อยๆ) ในทางปฎิบัติแนะนำว่าควรปล่อย version แรกให้เร็วที่สุด และเพิ่มเติมการพัฒนาของผลิตภัณฑ์ทีละน้อยๆ และปล่อย software ออกมาบ่อย จะได้มีการตอบรับจากในกลุ่มนักพัฒนาบ่อยๆ สามารถตรวจสอบบัคได้ในตอนแรกๆ และสามารถดูการทำงานได้ของผลิตภัณฑ์ หนึ่งในวิธีการทำคือ วิธีการก่อนหน้านี้ที่กล่าวมา CI (continuous integration practice)

 

 

code understanding (ความเข้าใจ code)

Simple Design (ออกแบบง่ายๆ) การออกแบบที่ดีที่สุดของ software คือง่ายที่สุดและทำงานได้ ถ้ามีความซับซ้อน มันควรจะลบออกไป การออกแบบที่ถูกต้องควรผ่านการทดสอบทั้งหมด ไม่มีการทำ code ซ้ำ มีส่วน class และ method น้อย และแสดงเจตนาการทำงานของโปรแกรมชัดเจน

 

ผู้ร่วมงาน xp เน้นการออกแบบง่ายๆ หลังจากที่ได้ผลิตผลิตภัณฑ์มาระยะหนึ่งแล้ว Don well แนะนำการเขียน code ตามคุณสมบัติที่ได้วางแผนไว้มากกว่าสร้างคุณสมบัติต่างๆไว้รอในอนาคต วิธีการที่ดีที่สุดคือสร้าง code เฉพาะที่คุณใช้เท่านั้น ขณะนั้นคุณต้องค้นหาความรู้เพียงพอที่จะออกแบบให้ง่ายที่สุด จากนั้นค่อย refactor เรื่อยๆ จนนำไปใช้ทำเป็นความเข้าใจใหม่และออกแบบ

 

Coding standards ทีมต้องมีจิตสำนักทั่วไปในการตั้งค่า code ที่นำไปใช้ ใช้รูปแบบเดียวกับของการเขียน application เป็นมาตราฐานให้ทีมสามารถอ่าน แชร์และ refactor code ได้อย่างง่ายดาย เพื่อให้คนที่ติดตาม code ปัจจุบัน สามารถเรียนรู้ได้รวดเร็วที่สุด สำหรับ โปรแกรมมือคนใหม่ code ที่เขียนของมีกฎการเขียนถือครองเหมือนกัน

 

Collective Code Ownership (การถือครอง code ร่วมกัน)

แนวทางปฎิบัตินี้ประกาศว่าทีมต้องมีความรับผิดชอบในการออกแบบระบบ โปรแกรมเมอร์แต่ละคนต้องสามารถทบทวน และปรับปรุง code นักพัฒนาต้องสามารถเข้าถึง code โดยปราศจากความไม่รู้ว่าสิ่งไหนคือคุณสมบัติใหม่ที่เพิ่มเข้าไป การกระทำนี้ช่วยหลีกเลี่ยงการทำ codeที่ซ้ำกัน การนำ code ถือครองทั้งหมดไปใช้ จะกระตุ้นให้ทีมมีความร่วมมือกันมากขึ้นและรู้สึกอิสระนำมาซึ่งความคิดใหม่ๆ

 

System metaphor(อุปลักษณ์ของระบบ)

อุปลักษณ์ของระบบยืนอยู่บนความง่ายของการออกมีปริมาณคุณลักษณะที่แน่นอน ประการแรก ออกแบบ โครงสร้างต้องสามารถเข้าใจได้กับบุคคลใหม่ๆ คนเหล่านั้นไม่ควรจะใช้เวลามากไปสำหรับการเริ่มงานและตรวจสอบสเปค ประการที่สอง ชื่อของ class และ method ควรจะเชื่อมโยงกัน นักพัฒนาควรตั้งชื่อ object ถ้ามันมีอยู่แล้วควรทำออกแบบระบบทั้งหมดให้เข้าใจได้

 

Programmer’s work conditions

40 ชั่วโมงต่อสัปดาห์ xp โปรเจค ต้องการนักพัฒนาที่ทำงานเร็วและมีประสิทธิภาพ รักษาคุณภาพของผลิตภัณฑ์ เพื่อให้ได้ผลตามกำหนด นักพัฒนาได้พักผ่อนและรู้สึกดี รักษาความสมดุลระหว่างความเป็นมือถืออาชีพกับการทำงานไม่หนักเกินไป ใน xp จำนวนที่ดีทีสุดของชั่วโมงการทำงานไม่ควร 45 ชั่วโมงต่อสัปดาห์ ทำงานล่วงเวลาในหนึ่งสัปดาห์เท่านั้นไม่ควรจะมีในสัปดาห์ต่อมา

 

เมื่อไหร่ควรใช้ XP

สิ่งที่สำคัญคือต้องแน่ใจเกี่ยวกับขนาดของบริษัท เจ้าที่เชี่ยวชาญที่จะนำ XP ไปใช้ควรคำนึงถึงปัจจัยสำคัญต่างๆดังต่อไปนี้

มีการเปลี่ยนการพัฒนาค่อยข้างสูง Xp จะให้ทีมสามารถจัดการเปลี่ยนที่รวดเร็วของความต้องการลูกค้าได้

Risky projects โปรเจคที่มีความเสี่ยง ทีมสามารถนำไปใช้หลีกเลี่ยงปัญหาที่เกิดขึ้นจากเชื่อมต่อระบบงานใหม่ๆโดยเฉพาะผลิตภัณท์ที่มีการกำหนดวันส่งงานอย่างเข้มงวด

ทีมเล็กๆ เพื่อความมีประสิทธิภาพทีมไม่ควรเกิน 12 คน

มีการทดสอบแบบอัตโนมัติ ปัจจัยอื่นที่ทำให้ นักพัฒนาสามารถสร้างและรัน unitest ได้

ลูกค้าสามารถมีปฎิสัมพันธ์ได้ ต้องแน่ใจว่าลูกค้ามีเวลาเขามาจัดการและสังเกตการณ์ จนจบโปรเจคได้