ทำไมเราต้องการวิศวกรรมซอฟต์แวร์

เพื่อให้เข้าใจถึงความจำเป็นสำหรับวิศวกรรมซอฟต์แวร์เราจะต้องหยุดชั่วคราวเพื่อดูประวัติการคำนวณล่าสุด ประวัติศาสตร์นี้จะช่วยให้เราเข้าใจปัญหาที่เริ่มเห็นได้ชัดในช่วงปลายอายุหกสิบเศษและอายุเจ็ดสิบต้นและโซลูชั่นที่นำไปสู่การสร้างสาขาวิศวกรรมซอฟต์แวร์ ปัญหาเหล่านี้ถูกอ้างถึงโดยบางคนว่า "The Crisis software" ดังนั้นจึงมีชื่อสำหรับอาการของปัญหา สถานการณ์อาจถูกเรียกว่า "The Complexity Barrier" ซึ่งตั้งชื่อตามสาเหตุหลักของปัญหา บางคนอ้างถึงวิกฤตการณ์ซอฟต์แวร์ในอดีตที่ผ่านมา วิกฤตยังไม่จบ แต่ด้วยการพัฒนาเทคนิคใหม่ ๆ หลายอย่างที่รวมอยู่ในชื่อของวิศวกรรมซอฟต์แวร์ที่เราทำและยังคงก้าวหน้าต่อไป

ในช่วงแรกของการคำนวณความกังวลหลักคือการสร้างหรือซื้อฮาร์ดแวร์ ซอฟต์แวร์ที่คาดว่าจะดูแลตัวเองเกือบ ฉันทามติเห็นว่า "ฮาร์ดแวร์" เป็น "ยาก" ที่จะเปลี่ยนแปลงในขณะที่ "ซอฟต์แวร์" เป็น "อ่อน" หรือง่ายต่อการเปลี่ยนแปลง ตามที่คนส่วนใหญ่ในอุตสาหกรรมการวางแผนการพัฒนาฮาร์ดแวร์อย่างระมัดระวัง แต่มีความสุขุมรอบคอบน้อยกว่าซอฟต์แวร์ หากซอฟต์แวร์ไม่ทำงานพวกเขาเชื่อว่ามันจะง่ายพอที่จะเปลี่ยนจนกว่าจะใช้งานได้ ในกรณีนั้นเหตุใดจึงต้องพยายามวางแผน

ค่าใช้จ่ายของซอฟต์แวร์นั้นติดตั้งอยู่กับส่วนเล็ก ๆ ของค่าใช้จ่ายของฮาร์ดแวร์ซึ่งไม่มีใครคิดว่าสำคัญมากในการจัดการการพัฒนา อย่างไรก็ตามทุกคนเห็นความสำคัญของการผลิตโปรแกรมที่มีประสิทธิภาพและทำงานได้อย่างรวดเร็วเพราะสิ่งนี้ช่วยประหยัดเวลาในฮาร์ดแวร์ราคาแพง คาดว่าเวลาของผู้คนจะประหยัดเวลาของเครื่อง การทำให้คนทำงานอย่างมีประสิทธิภาพได้รับความสำคัญน้อยมาก

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

ความพยายามแบบรายบุคคลทางไปสู่ความพยายามของทีม การสื่อสารและการประสานงานซึ่งครั้งหนึ่งเคยเกิดขึ้นในหัวของคนคนหนึ่งต้องเกิดขึ้นระหว่างหัวหน้าของคนหลายคนทำให้กระบวนการทั้งหมดมีความซับซ้อนมากยิ่งขึ้น ดังนั้นการสื่อสารการจัดการการวางแผนและเอกสารจึงเป็นสิ่งสำคัญ

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

เมื่อโปรแกรมมีความซับซ้อนมากขึ้นวิธีการเริ่มต้นที่ใช้ในการสร้างพิมพ์เขียว (ผังงาน) ไม่เป็นที่น่าพอใจอีกต่อไปเพื่อแสดงความซับซ้อนที่ยิ่งใหญ่กว่านี้ และมันก็กลายเป็นเรื่องยากสำหรับคนคนหนึ่งที่ต้องการโปรแกรมที่เขียนขึ้นเพื่อสื่อถึงคนอื่นโปรแกรมเมอร์คนหนึ่งสิ่งที่ต้องการหรือสำหรับโปรแกรมเมอร์ที่จะถ่ายทอดให้กันและกันในสิ่งที่พวกเขากำลังทำอยู่ ในความเป็นจริงหากไม่มีวิธีการที่ดีกว่าในการเป็นตัวแทนมันก็เป็นเรื่องยากสำหรับแม้แต่หนึ่งโปรแกรมเมอร์ที่จะติดตามสิ่งที่เขาหรือเธอกำลังทำอยู่

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

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

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

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

เนื่องจากค่าใช้จ่ายของฮาร์ดแวร์ลดลงซอฟต์แวร์ยังคงถูกเขียนโดยมนุษย์ซึ่งมีค่าแรงเพิ่มขึ้น การประหยัดจากการปรับปรุงประสิทธิภาพการผลิตในการพัฒนาซอฟต์แวร์จากการใช้แอสเซมเบลอร์คอมไพเลอร์และระบบการจัดการฐานข้อมูลไม่ได้ดำเนินการอย่างรวดเร็วเท่ากับการประหยัดต้นทุนฮาร์ดแวร์ อันที่จริงแล้วค่าใช้จ่ายซอฟต์แวร์ในปัจจุบันไม่เพียง แต่ไม่สามารถถูกเพิกเฉยได้อีกต่อไป แต่ยังมีขนาดใหญ่กว่าต้นทุนฮาร์ดแวร์ การพัฒนาในปัจจุบันบางอย่างเช่นภาษาที่ไม่ใช่กระบวนการ (รุ่นที่สี่) และการใช้ปัญญาประดิษฐ์ (รุ่นที่ห้า) แสดงให้เห็นถึงสัญญาว่าจะเพิ่มประสิทธิภาพการพัฒนาซอฟต์แวร์ แต่เราเพิ่งเริ่มเห็นศักยภาพของพวกเขา

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

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

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

ยิ่งไปกว่านั้นมันเป็นสิ่งสำคัญที่ภาษานี้จะง่ายเพื่อให้สามารถเรียนรู้ได้อย่างรวดเร็ว

SOURCE SBOBET

Leave a Reply

Your email address will not be published. Required fields are marked *