พื้นฐานการออกแบบซอฟต์แวร์

การออกแบบซอฟต์แวร์เป็นกระบวนการในการเปลี่ยนความต้องการของผู้ใช้ให้อยู่ในรูปแบบที่เหมาะสมซึ่งช่วยโปรแกรมเมอร์ในการเข้ารหัสและการนำไปใช้งานซอฟต์แวร์

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

การออกแบบซอฟต์แวร์เป็นขั้นตอนแรกใน SDLC (Software Design Life Cycle) ซึ่งย้ายความเข้มข้นจากโดเมนปัญหาไปยังโดเมนโซลูชัน พยายามระบุวิธีปฏิบัติตามข้อกำหนดที่กล่าวถึงใน SRS

ระดับการออกแบบซอฟต์แวร์

การออกแบบซอฟต์แวร์ให้ผลลัพธ์สามระดับ:

  • Architectural Design - การออกแบบสถาปัตยกรรมเป็นระบบนามธรรมรุ่นสูงสุด ระบุซอฟต์แวร์เป็นระบบที่มีส่วนประกอบจำนวนมากโต้ตอบซึ่งกันและกัน ในระดับนี้นักออกแบบจะได้รับแนวคิดเกี่ยวกับโดเมนโซลูชันที่เสนอ
  • High-level Design- การออกแบบระดับสูงแบ่งแนวคิด 'องค์ประกอบเดียว - หลายองค์ประกอบ' ของการออกแบบสถาปัตยกรรมออกเป็นมุมมองที่เป็นนามธรรมน้อยลงของระบบย่อยและโมดูลและแสดงให้เห็นถึงปฏิสัมพันธ์ระหว่างกัน การออกแบบระดับสูงมุ่งเน้นไปที่วิธีการใช้งานระบบพร้อมกับส่วนประกอบทั้งหมดในรูปแบบของโมดูล มันรับรู้โครงสร้างโมดูลาร์ของแต่ละระบบย่อยและความสัมพันธ์และปฏิสัมพันธ์ระหว่างกัน
  • Detailed Design- การออกแบบโดยละเอียดเกี่ยวข้องกับส่วนการนำไปใช้งานของสิ่งที่เห็นว่าเป็นระบบและระบบย่อยในสองการออกแบบก่อนหน้านี้ มีรายละเอียดเพิ่มเติมเกี่ยวกับโมดูลและการนำไปใช้งาน เป็นการกำหนดโครงสร้างเชิงตรรกะของแต่ละโมดูลและอินเทอร์เฟซเพื่อสื่อสารกับโมดูลอื่น ๆ

Modularization

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

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

ข้อดีของการแยกส่วน:

  • ส่วนประกอบที่เล็กกว่าจะดูแลรักษาง่ายกว่า
  • โปรแกรมสามารถแบ่งตามลักษณะการทำงาน
  • สามารถนำระดับความเป็นนามธรรมที่ต้องการมาไว้ในโปรแกรมได้
  • ส่วนประกอบที่มีการเกาะติดกันสูงสามารถนำกลับมาใช้ใหม่ได้อีกครั้ง
  • การดำเนินการพร้อมกันสามารถทำได้
  • ต้องการจากด้านความปลอดภัย

ภาวะพร้อมกัน

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

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

จำเป็นสำหรับโปรแกรมเมอร์และนักออกแบบที่จะต้องจดจำโมดูลเหล่านั้นซึ่งสามารถดำเนินการแบบขนานได้

ตัวอย่าง

คุณลักษณะการตรวจสอบการสะกดในโปรแกรมประมวลผลคำเป็นโมดูลของซอฟต์แวร์ซึ่งทำงานควบคู่ไปกับโปรแกรมประมวลผลคำ

การเชื่อมต่อและการทำงานร่วมกัน

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

การติดต่อกัน

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

การทำงานร่วมกันมี 7 ประเภท ได้แก่ -

  • Co-incidental cohesion -มันเป็นการทำงานร่วมกันโดยไม่ได้วางแผนและสุ่มซึ่งอาจเป็นผลมาจากการแตกโปรแกรมออกเป็นโมดูลขนาดเล็กเพื่อประโยชน์ในการแยกส่วน เนื่องจากไม่ได้วางแผนไว้จึงอาจสร้างความสับสนให้กับโปรแกรมเมอร์และโดยทั่วไปไม่ได้รับการยอมรับ
  • Logical cohesion - เมื่อองค์ประกอบที่จัดหมวดหมู่อย่างมีเหตุผลถูกรวมเข้าด้วยกันในโมดูลจะเรียกว่าการทำงานร่วมกันทางตรรกะ
  • Temporal Cohesion - เมื่อองค์ประกอบของโมดูลได้รับการจัดระเบียบเพื่อให้ถูกประมวลผลในช่วงเวลาใกล้เคียงกันจะเรียกว่าการเชื่อมต่อกันชั่วคราว
  • Procedural cohesion - เมื่อองค์ประกอบของโมดูลถูกจัดกลุ่มเข้าด้วยกันซึ่งจะดำเนินการตามลำดับเพื่อดำเนินงานเรียกว่าการทำงานร่วมกันตามขั้นตอน
  • Communicational cohesion - เมื่อองค์ประกอบของโมดูลถูกจัดกลุ่มเข้าด้วยกันซึ่งดำเนินการตามลำดับและทำงานกับข้อมูลเดียวกัน (ข้อมูล) จะเรียกว่าการทำงานร่วมกันของการสื่อสาร
  • Sequential cohesion - เมื่อองค์ประกอบของโมดูลถูกจัดกลุ่มเนื่องจากเอาต์พุตขององค์ประกอบหนึ่งทำหน้าที่เป็นอินพุตไปยังอีกองค์ประกอบหนึ่งจึงเรียกว่าการเชื่อมต่อกันตามลำดับ
  • Functional cohesion - ถือเป็นการร่วมแรงร่วมใจกันในระดับสูงสุดและเป็นที่คาดหวังอย่างมาก องค์ประกอบของโมดูลในการทำงานร่วมกันของฟังก์ชันถูกจัดกลุ่มเนื่องจากทั้งหมดมีส่วนทำให้เกิดฟังก์ชันที่กำหนดไว้อย่างดีเพียงฟังก์ชันเดียว นอกจากนี้ยังสามารถใช้ซ้ำได้

ข้อต่อ

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

การมีเพศสัมพันธ์มีห้าระดับ ได้แก่ -

  • Content coupling - เมื่อโมดูลสามารถเข้าถึงหรือแก้ไขหรืออ้างถึงเนื้อหาของโมดูลอื่นได้โดยตรงจะเรียกว่าการเชื่อมต่อระดับเนื้อหา
  • Common coupling- เมื่อโมดูลหลายโมดูลมีสิทธิ์อ่านและเขียนข้อมูลส่วนกลางบางส่วนจะเรียกว่าการมีเพศสัมพันธ์ร่วมหรือส่วนกลาง
  • Control coupling- โมดูลสองโมดูลเรียกว่าการควบคุมควบคู่กันหากหนึ่งในนั้นตัดสินใจการทำงานของโมดูลอื่นหรือเปลี่ยนขั้นตอนการดำเนินการ
  • Stamp coupling- เมื่อหลายโมดูลใช้โครงสร้างข้อมูลร่วมกันและทำงานในส่วนต่างๆกันเรียกว่าการเชื่อมต่อแบบประทับ
  • Data coupling- การเชื่อมต่อข้อมูลคือเมื่อสองโมดูลโต้ตอบกันโดยการส่งผ่านข้อมูล (เป็นพารามิเตอร์) หากโมดูลส่งผ่านโครงสร้างข้อมูลเป็นพารามิเตอร์โมดูลรับควรใช้ส่วนประกอบทั้งหมด

ตามหลักการแล้วการไม่มีการมีเพศสัมพันธ์ถือว่าดีที่สุด

การตรวจสอบการออกแบบ

ผลลัพธ์ของกระบวนการออกแบบซอฟต์แวร์คือเอกสารการออกแบบรหัสหลอกแผนภาพตรรกะโดยละเอียดแผนภาพกระบวนการและคำอธิบายโดยละเอียดของข้อกำหนดด้านฟังก์ชันหรือไม่ใช้งานได้ทั้งหมด

ระยะต่อไปซึ่งเป็นการนำซอฟต์แวร์ขึ้นอยู่กับเอาต์พุตทั้งหมดที่กล่าวมาข้างต้น

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

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