หากคุณเรียนรู้วิธีการอย่างเป็นทางการสำหรับซอฟต์แวร์คุณพบว่ามีประโยชน์อย่างไร


17

หากคุณได้รับการฝึกอบรมการใช้วิธีการอย่างเป็นทางการ (FM) สำหรับการเขียนโปรแกรม:

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

ฉันอยากรู้ว่าจะได้ยินประสบการณ์ / ความคิดเห็นเกี่ยวกับ FM มากเท่าที่จะพบได้ในชุมชนนี้ ฉันเริ่มอ่านมันและต้องการทราบข้อมูลเพิ่มเติม

พื้นหลัง

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

การใช้วิธีการอย่างเป็นทางการ (FM) ได้รับการเสนอโดยบุคคลสำคัญในซอฟต์แวร์ / CS (เช่นE Dijkstraตอนปลาย) ไปยังที่อยู่ (หนึ่งใน) สาเหตุของข้อผิดพลาด: การขาดความเข้มงวดทางคณิตศาสตร์ในการเขียนโปรแกรม Dijkstra เช่นสนับสนุนให้นักเรียนพัฒนาโปรแกรมและร่วมกันพิสูจน์

FM ดูเหมือนจะแพร่หลายมากขึ้นในหลักสูตร CS ในยุโรปเมื่อเทียบกับสหรัฐอเมริกา แต่ในช่วงไม่กี่ปีที่ผ่านมาวิธีการ FM แบบใหม่ "เบา" และเครื่องมือเช่นอัลลอยได้ดึงดูดความสนใจ ถึงกระนั้น FM ก็ยังห่างไกลจากการใช้งานทั่วไปในอุตสาหกรรมและฉันหวังว่าจะได้รับคำติชมเกี่ยวกับสาเหตุที่นี่

ปรับปรุง

ณ ตอนนี้ (10/14/2010) จาก 6 คำตอบด้านล่างไม่มีใครโต้แย้งการใช้งาน FM ใน "โลกแห่งความจริง" อย่างชัดเจน ฉันอยากรู้จริงๆถ้ามีคนสามารถและจะ; หรือบางทีเอฟเอ็มอาจแสดงให้เห็นถึงการแบ่งแยกระหว่างสถาบันการศึกษา (FM คืออนาคต!) และอุตสาหกรรม (FM ไร้ประโยชน์ส่วนใหญ่)


เกี่ยวกับการอัปเดตของคุณอาจไม่มีใครโต้แย้งการใช้ FM ในงาน "โลกแห่งความจริง" เพราะมีกรณีการใช้งานน้อยมากสำหรับพวกเขาในการทำงานจริง
Richard

คำตอบ:


8

ไร้ประโยชน์อย่างแน่นอนสำหรับสิ่งที่ไม่สำคัญ

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

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


ขอบคุณสำหรับการแบ่งปัน; คุณจะบอกว่าการฝึกอบรมใน FM อย่างน้อยมีประโยชน์ต่อการทำงานในภายหลังของคุณเช่นช่วยให้คุณคิดได้ชัดเจนยิ่งขึ้น? หรือไม่?
limist

@limist: ฉันไม่คิดอย่างนั้น ฉันหมายถึงฉันชอบอัลลอยด์ แต่ฉันไม่คิดว่ามันจะมีประโยชน์แม้เพียงแค่ขยายความคิดของฉัน
Fishtoaster

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

1
มันน่าผิดหวัง ฉันคิดว่ามันอาจมีประโยชน์สำหรับการทดสอบว่าคุณมีโมเดลที่สมบูรณ์แบบพอสมควร ในขณะที่ข้อผิดพลาดที่เกิดขึ้นจริงส่วนใหญ่มักจะอยู่ด้านล่างของแบบจำลอง (การทำให้เสีย mutexes หรืออะไรก็ตาม) ฉันคิดว่ามันจะมีประโยชน์ที่จะใช้ Alloy เพื่อค้นหาข้อบกพร่องในตัวแบบ (โดยสัญชาตญาณดูเหมือนว่ามีประโยชน์น้อยกว่าที่จะลองใช้ผู้ช่วยพิสูจน์ฉันคาดหวังว่าตัวอย่างที่เป็นประโยชน์จะมีประโยชน์มากกว่าและดูเหมือนจะอยู่ในขอบเขตของสิ่งต่าง ๆ เช่นอัลลอยด์ เพื่อเข้าหาทั้งในระบบเดียวกัน))
Bruce Stephens

7

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


ขอบคุณสำหรับการแบ่งปันฉันจะขอให้ติดตามซ้ำ ๆ บ่อยๆในคำถามนี้: คุณจะบอกว่าการฝึกอบรมใน FM อย่างน้อยมีประโยชน์ต่อการทำงานในภายหลังของคุณหรือไม่เช่นช่วยให้คุณคิดได้ชัดเจนยิ่งขึ้น? หรือไม่?
limist

ขอแสดงความยินดีกับเจ้านายของคุณ!
Chris

@ ผู้นับถือ: ฉันจะบอกว่ามันเป็นประสบการณ์ทางทฤษฎีที่ดีมาก แต่ฉันพบการใช้งานจริงในอุตสาหกรรมน้อยมาก
ysolik

4

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


4

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

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

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

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


4

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


ฉันเคยเห็นการแทงที่อธิบาย I / O สไตล์เทป ผู้เขียนไม่มีวิธีแก้ปัญหาสำหรับการอธิบายไฟล์การเข้าถึงแบบสุ่มอย่างเป็นทางการ
David Thornley

1
@ David: ไฟล์ที่เข้าถึงแบบสุ่ม ข่าวร้าย. คุณไม่ต้องการใช้พวกเขา =)
พอลนาธาน

3

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

ภาษาสเปคนั้นมีความหมายมากกว่าภาษาโปรแกรม ตัวอย่างเช่นนี่คือข้อมูลจำเพาะ PlusCal อย่างง่าย (มาก) สำหรับที่เก็บข้อมูลแบบกระจาย:

process node \in 1..5 \* Nodes
variables online = TRUE,
          stored \in SUBSET data; \* Some set
begin 
  Transfer:
    either
      with node \in Nodes, datum \in stored do
        node.stored := node.stored \union {datum};
      end
    or \* crash
      online := FALSE;
    end either;
end process;

ตัวอย่างนี้ระบุห้าโหนดที่ทำงานพร้อมกันโดยเรียกใช้การถ่ายโอนตามลำดับโดยที่การถ่ายโอนทุกครั้งเป็นข้อมูลส่วนหนึ่งไปยังโหนดใดก็ได้ นอกจากนี้เราได้ระบุว่าการถ่ายโอนใด ๆ ที่กำหนดอาจล้มเหลวและทำให้โหนดหยุดทำงาน และเราสามารถจำลองพฤติกรรมเหล่านี้ทั้งหมดในตัวตรวจสอบรุ่น TLA + ได้! ด้วยวิธีนี้เราสามารถทดสอบสิ่งนั้นโดยไม่คำนึงถึงคำสั่งอัตราความล้มเหลว ฯลฯ ความต้องการของเรายังคงอยู่ ถ้าพูดถึงเรื่องนี้เราจะเพิ่มข้อกำหนดสองสามข้อ ครั้งแรกที่เราไม่เคยถ่ายโอนข้อมูลไปยังโหนดออฟไลน์:

[][\A node \in Nodes: ~online => UNCHANGED node.stored]_vars

ในเวอร์ชันที่ง่ายของเราตัวตรวจสอบแบบจำลองจะค้นหาสถานะความล้มเหลว นอกจากนี้เรายังสามารถระบุ "ส่วนข้อมูลใด ๆ ที่ระบุอยู่ในโหนดออนไลน์อย่างน้อยหนึ่งโหนด":

\A d \in data: \E n \in Nodes: n.online /\ d \in n.stored

ซึ่งก็จะล้มเหลว โชคดีที่ตรวจสอบสิ่งเหล่านี้ด้วยการทดสอบหน่วย!

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


1

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

มันเป็นสิ่งที่น่าอัศจรรย์ แต่เมื่อ@FishToaster ได้รับความนิยมชี้ให้เห็นว่ามันไร้ประโยชน์อะไรที่ไม่สำคัญ


0
  1. " คุณพบว่ามีประโยชน์อย่างไร? "

แอปพลิเคชันของ Petri Nets กับการเขียนโปรแกรมคอมพิวเตอร์มีประโยชน์มาก ฉันสร้าง“ องค์ประกอบสุทธิและคำอธิบายประกอบ” ซึ่งเป็นวิธีการที่ใช้ Petri Nets (Chionglo, 2014) ฉันใช้วิธีนี้มาตั้งแต่ปี 2014 เพื่อเขียนโปรแกรม JavaScript ที่ใช้ Acrobat / JavaScript API สำหรับแอปพลิเคชันแบบฟอร์ม PDF

  1. การฝึกอบรม FM ของคุณเกี่ยวข้องกับอะไร (เช่นหลักสูตรหนังสือ)

ฉัน“ ฝึกฝน” เรื่อง Petri Nets ผ่านการศึกษาด้วยตนเอง ฉันอ่านบทใน Petri Nets จากหนังสือ“ Petri Nets และ Grafcet: เครื่องมือสำหรับการสร้างแบบจำลองระบบเหตุการณ์ไม่ต่อเนื่อง” (David and Alla, 1992) ฉันได้อ่านงานวิจัยเกี่ยวกับ Petri Nets ด้วยเช่นกัน หลังจากสร้างและจัดทำเอกสาร“ องค์ประกอบสุทธิและคำอธิบายประกอบ” ฉันฝึกฝนในการใช้วิธีนี้เป็นเวลาหลายสัปดาห์

  1. คุณใช้เครื่องมือ FM ชนิดใด

ฉันวาดไดอะแกรม Petri Net โดยใช้ PowerPoint ฉันสร้างมุมมองฟอร์มของคำอธิบายประกอบโดยใช้ Word ฉันสร้างเกมโทเค็นเป็นแอปพลิเคชันรูปแบบ PDF โดยใช้ Acrobat และ Notepad ด้วย หลังจากเพิ่มรายการลงในแบบฟอร์มการแปลของรายการเหล่านี้เป็นรหัส JavaScript เป็นระบบ ดังนั้นจึงเป็นไปได้ที่จะทำการแปลอัตโนมัติ หากมีการเพิ่ม "รายการ" ลงในวัตถุกราฟิกใน PowerPoint ก็ควรที่จะสามารถแปลเป็นรหัส JavaScript และทำการแปลนี้โดยอัตโนมัติเช่นกัน ฉันยังใช้ชุดเครื่องมือในการทำงานที่ดำเนินการแปลเหล่านี้และสำหรับการสร้างทรัพยากรเพิ่มเติมสำหรับการสร้างแอปพลิเคชันแบบฟอร์ม PDF (Chionglo, 2018; 2017)

  1. ข้อดีของความเร็ว / คุณภาพคืออะไรเมื่อเทียบกับการไม่ใช้ FM?

ฉันสามารถเขียนโปรแกรม JavaScript โดยใช้“ องค์ประกอบสุทธิและคำอธิบายประกอบ” ได้เร็วกว่าที่ฉันสามารถเขียนโปรแกรม JavaScript ได้โดยไม่ต้องใช้“ องค์ประกอบและคำอธิบายประกอบสุทธิ” และสำหรับโปรแกรมขนาดใหญ่ฉันสามารถหยุดการเข้ารหัสและกลับไปที่การเข้ารหัสในภายหลัง (หรือภายหลังมาก) โดยไม่ต้องสงสัยว่าจะดำเนินการต่อที่ใด (Chionglo, 2019) ในบางกรณีฉันสามารถเขียนโปรแกรม JavaScript โดยใช้“ องค์ประกอบสุทธิและคำอธิบายประกอบ” แต่ไม่สามารถเขียนโปรแกรม JavaScript ได้โดยไม่ต้องใช้“ องค์ประกอบสุทธิและคำอธิบายประกอบ” ตัวอย่างเช่นฉันไม่สามารถสร้างการใช้งานแบบเรียกซ้ำของฟังก์ชันแบบเรียกซ้ำโดยไม่ใช้“ องค์ประกอบสุทธิและหมายเหตุประกอบ” (Chionglo, 2019b; 2018b; 2016) สิ่งเหล่านี้เป็นจริงทั้งที่มีหรือไม่มีเครื่องมือที่กำลังดำเนินการอยู่

  1. " ซอฟต์แวร์ประเภทใดที่คุณสร้างขึ้นด้วย FM "

ฉันใช้“ องค์ประกอบสุทธิและหมายเหตุประกอบ” เพื่อสร้างโปรแกรม JavaScript ที่ใช้ Acrobat / JavaScript API สำหรับแอปพลิเคชันแบบฟอร์ม PDF ฉันยังสามารถใช้วิธีสร้างโปรแกรม JavaScript สำหรับเอกสาร HTML และสร้าง Arduino Sketches (Chionglo, 2019c; 2019d)

  1. " และถ้าคุณไม่ใช้ FM โดยตรงในตอนนี้มันก็คุ้มค่าที่จะเรียนรู้หรือไม่ " ไม่เกี่ยวข้อง

อ้างอิง

Chionglo, JF (2019b) การคำนวณเงื่อนไข N-th ของความสัมพันธ์แบบเรียกซ้ำ: การใช้ฟังก์ชั่นที่ไม่เกิดซ้ำ - การตอบคำถามที่คณิตศาสตร์สแต็คแลกเปลี่ยน < https://www.academia.edu/38496025/Computing_the_N-th_Term_of_a_Recursive_Relation_Using_a_Non-Recursive_Function_A_Reply_to_AmQuestion_atack_Exchange >

Chionglo, JF (2019c) ตรรกะการควบคุมเอฟเฟกต์เปลวไฟการจำลองและภาพร่าง: การตอบคำขอในฟอรัมชุมชน Arduino https://www.academia.edu/40342956/Flame_Effect_Control_Logic_Simulation_and_Sketch_A_Reply_to_a_Request_at_the_Arduino_Community_Forum

Chionglo, JF (2019) ฉันจะเข้ารหัสแอปพลิเคชันต่อไปหลังจากหยุดพักยาว ตอบกลับไปที่“ คุณจะรู้ได้อย่างไรว่าคุณหยุดที่รหัสของคุณหลังจากหยุดพัก 2 สัปดาห์ได้อย่างไร” - Software Engineering Stack Exchange https://www.academia.edu/39705042/How_I_Continue_Coding_an_Application_after_a_Long_Break_Reply_to_How_do_you_know_where_you_stopped_in_your_codes_after_a_2-week_break_Software_Engineering_Stack_Exchange

Chionglo, JF (2019d) ลอจิกควบคุมแสดงและซ่อน: ได้รับแรงบันดาลใจจากคำถามที่ Stack Overflow < https://www.academia.edu/40283015/Show-and-Hide_Control_Logic_Inspired_by_a_Question_at_Stack_Overflow >

Chionglo, JF (2018b) แบบจำลอง Petri Net สำหรับแฟกทอเรียลของจำนวน: และฟังก์ชัน JavaScript ที่ไม่เรียกซ้ำเพื่อคำนวณ <>

Chionglo, JF (2018) สร้างไฮเปอร์ฟอร์ม™ - เวิร์กโฟลว์ที่กำลังดำเนินการ: อัปเดตเกี่ยวกับการวิจัยการเขียนโปรแกรมเน็ต https://www.academia.edu/37697498/Create_Hyper_Form_-A_Workflow_in_Progress_Update_on_the_Net_Programming_Research

Chionglo, JF (2017) Net Programming: ข้อเสนอการวิจัย: สำหรับการพัฒนาแอปพลิเคชันแบบฟอร์ม PDF ด้วย PowerPoint และ Acrobat https://www.academia.edu/33374809/Net_Programming_A_Research_Proposal_For_Developing_PDF_Form_Applications_with_PowerPoint_and_Acrobat .

Chionglo, JF (2016) Petri Net Model สำหรับคำนวณจำนวนฟีโบนักชี https://www.academia.edu/31748108/A_Petri_Net_Model_for_Computing_the_Fibonacci_Number

Chionglo, JF (2014) องค์ประกอบสุทธิและคำอธิบายประกอบสำหรับการเขียนโปรแกรมคอมพิวเตอร์: การคำนวณและการโต้ตอบใน PDF https://www.academia.edu/26906314/Net_Elements_and_Annotations_for_Computer_Programming_Computations_and_Interactions_in_PDF

David, R. และ H. Alla (1992) Petri Nets และ Grafcet: เครื่องมือสำหรับการสร้างแบบจำลองระบบเหตุการณ์ไม่ต่อเนื่อง อัปเปอร์แซดเดิล, นิวเจอร์ซีย์: Prentice Hall

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.