เขียนใหม่แอสเซมบลี IBM + COBOL ใน C ++


13

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

ตัวแทนการเช่าต้องจำไว้ว่าการพิมพ์บนหน้าจอหนึ่งใช้ "MXC" ในฟิลด์ ACT (ทุกอย่างอิงตามรหัสย่อ) ซึ่งย่อมาจาก "MaXimum display on a contract" ในขณะที่อีกหน้านั้นต้องใช้ PR (for PRint) ใน ฟิลด์ ACTION แต่หน้าจอหลายจอใช้ Y ในฟิลด์ PT (สำหรับ PrinT) แต่หน้าจออื่นใช้ Y ในฟิลด์ PRT (สำหรับ PRinT) แต่หน้าจออื่นต้องการให้ผู้ใช้กด Enter (แต่ไม่ใช่การป้อนถัดจาก ตัวอักษรเนื่องจากเป็นอักขระบรรทัดใหม่นั้นจะต้องป้อนบนแป้นตัวเลข) และจากนั้น F8 หน้าจออื่นที่เกี่ยวข้อง แต่ต้องใช้เพียง F8 หน้าจอบางหน้ามีเขตข้อมูล PRT ซึ่งควรเป็น PRINT แต่ฟิลด์จริง ๆ ไม่ทำอะไรเลยและการพิมพ์จะดำเนินการโดยอัตโนมัติหลังจากผ่านการแจ้งเตือนหลายครั้งและยังมีหน้าจอเพิ่มเติมอีกจำนวนหนึ่งที่มีฟิลด์ชื่อ PRINT Y / Nซึ่งเริ่มต้นที่ Y อย่างบ้าคลั่งสำหรับการดำเนินงานที่มีสถานที่อื่นอยู่แล้วส่งมอบเอกสารและไปที่ N สำหรับการดำเนินงานที่ตัวแทนจำหน่ายอื่นจะต้องมีเอกสาร

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

นี่ทำให้ฉันมีคำถาม

ที่แรกก็คือเทคนิค ด้วยแนวคิดของการปรับปรุงการบำรุงรักษาในอนาคตความคิดของฉันคือการเขียนใหม่ในภาษาระดับสูงกว่าภาษาแอสเซมบลี ประสบการณ์ของฉันอยู่ใน C ++ ดังนั้นนั่นเป็นตัวเลือกที่ชัดเจนสำหรับฉัน บริษัท ต้องการวิธีที่ง่ายกว่าในการอัปเดตโปรแกรมเนื่องจากฉันเพิ่งอ่านบทความที่คนที่ฉันพูดด้วยอ้างว่าทีมทำงานหนักและพวกเขาภูมิใจที่จะประกาศว่าตอนนี้โปรแกรมสนับสนุน 5 - กำหนดรหัสสถานที่ (แทน 4) และหมายเลขรถยนต์ 8 หลัก (แทน 7) ปรัชญาของฉันเกี่ยวกับการปรับปรุงแม้ในสถานการณ์ที่เลวร้ายนี้สอดคล้องกับ Joel's: http://www.joelonsoftware.com/articles/fog0000000069.html โดยย่อการเขียนซ้ำควรเพิ่มขึ้นแทนที่จะละทิ้งทุกอย่างที่เคยมีมาก่อน และเริ่มต้นใหม่

มีวิธีที่ง่ายในการรวม IBM assembly เข้ากับ C ++ และถ้าเป็นเช่นนั้นฉันควรทำอย่างไร? ฉันตระหนักถึงคีย์เวิร์ด asm อย่างคลุมเครือ แต่ฉันไม่รู้ว่าควรใช้หรือทำอย่างอื่นดีที่สุด แผนดังกล่าวไม่ถูกต้องหรือไม่? ฉันทำงานส่วนใหญ่ของฉันบน Linux โดยใช้ g ++ และ GNU ทำดังนั้นคำตอบเฉพาะที่ยินดี แต่ไม่ต้องการแน่นอน (เนื่องจากฉันไม่รู้ว่าระบบการสร้างแบบไหนที่พวกเขาไม่มี แต่ฉันสงสัยว่าแทบจะไม่มีเลย)

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

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

ก่อนอื่นมีทางออกนอกชั้นวาง

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

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

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

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


3
มองเข้าไปในอีมูเลเตอร์ Hercules - มีเวทมนตร์มากมายในระบบปฏิบัติการหลักของเมนเฟรมของ IBM ที่ต้องทำการจำลอง
Yann Ramin

ฉันดูที่ "ทำซ้ำตั้งแต่เริ่มต้น" (ตลก C64 ที่ไม่ดี) โดยสุจริต อย่างจริงจังแม้ว่าตรวจสอบรายละเอียดและดูว่ามันอาจใช้เวลาในการเขียน GUI ใหม่ด้วยตัวคุณเอง ตราบใดที่ติดต่อฐานข้อมูลเหมือนกันและจะใช้เวลามากของเวลาและการวิจัยเพื่อกำหนดแล้วคุณจะสีทอง - และในสายที่จะทำให้ $ # && ภาระของเงิน :)

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

มันเป็นความกลัวของฉันที่เลียนแบบระบบจะยากมากที่ทำให้ฉันค้นหาวิธีที่จะทำให้การเปลี่ยนแปลงแบบแยกส่วนเล็ก ๆ แทนที่จะพยายามเริ่มจากศูนย์
David Stone

@ David Stone ฉันเคยอยู่ในโครงการที่เราทำสิ่งที่ "เลือกใหม่หรืออินเตอร์เฟซเก่า" มันเข้าสู่ขั้นตอนการพัฒนาอย่างรวดเร็ว - รหัสถูกผนวกเข้ากับส่วนติดต่ออย่างแน่นหนาและif (m_newInterface)รหัสสปาเก็ตตี้อย่างรวดเร็วเริ่มปรากฏขึ้นทั่วฐานรหัส การแยกและการปรับโครงสร้างใช้เวลานานพอที่เมื่อเสร็จแล้วผู้ใช้ส่วนใหญ่ได้ย้ายไปยังอินเทอร์เฟซใหม่แล้ว (คิดว่าหลายปี)
Vitor Py

คำตอบ:


4

จำกัด ตัวเองให้อยู่ในแนวหน้าทางเทคนิค ...

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

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

สิ่งอื่นที่ต้องพิจารณาตามอายุของแอปพลิเคชันคือแอสเซมเบลอร์ที่คุณต้องการรวม C ++ นำหน้าการมีอยู่ของสภาพแวดล้อมภาษา (LE) เช่นนี้เว้นแต่ว่า Assembler ได้รับการปรับปรุงให้เป็นไปตาม LE คุณจะมีปัญหาบางอย่างเนื่องจาก C และ C ++ สอดคล้องกับ LE และต้องการผู้โทรและ Callees ของพวกเขาด้วย

อีกจุดหนึ่งที่ควรพิจารณาหากแอปพลิเคชันนี้ทำงานบนเฟรมเมนต์ moribund คุณอาจกำลังพยายามผสานรวมกับแอปพลิเคชันที่ทำงานบนฮาร์ดแวร์และซอฟต์แวร์ที่ไม่รองรับ นี่จะไม่ต่างกับการพยายามรวมเข้ากับแอปพลิเคชันที่เขียนในปี 1989 ซึ่งทำงานบน DOS 4.01 บนฮาร์ดแวร์ดั้งเดิม


แอปพลิเคชันอาจใช้TPFซึ่งจะทำให้การแปลงเป็นเรื่องยากมาก
Gilbert Le Blanc

13

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

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

เหตุใดคุณจึงไม่เสนอให้ทำการวิเคราะห์นี้


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

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

7

ฉันประหลาดใจที่คุณได้รับการตอบกลับอย่างสุภาพ!

ให้ดูที่นี้จากมุมมองของพวกเขา

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

พวกเขาอาจ / หวังว่าผู้เชี่ยวชาญในสาขาของพวกเขาและเป็นเช่นนั้นจะถือว่า C ++ เป็นขั้นตอนลงจาก IBM "ภาษาระดับสูงประกอบภาษา" เพื่อให้มันเป็นชื่อเต็ม ภาษาแอสเซมเบลอร์ของ IBM นั้นทรงพลังอย่างยิ่งและภาษา "MACRO" เป็นการนำภาษา pre-processing / template มาใช้อย่างดีที่สุด

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

C ++ ไม่ช่วยอะไรง่ายๆ ไม่มีไลบรารีกราฟิกในสภาพแวดล้อมที่แอปพลิเคชันทำงาน (มีไลบรารีกราฟิก 3270 แต่ไม่รองรับใน C ++ เนื่องจากไม่มีใครใช้และมีไลบรารีไคลเอ็นต์ X "เต็มรูปแบบ แต่คุณจำเป็นต้องอยู่ในสภาพแวดล้อมที่แตกต่างกันเพื่อใช้งาน)

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

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


4

ฉันมีปัญหาคล้ายกันเมื่อหลายปีก่อนที่ BellSouth ฉันเพียงแค่เขียนโค้ดภาษาโคบอลเพื่อสแกนโปรแกรมภาษาแอสเซมเบลอร์ไบต์โดยแยก opcodes และตัวถูกดำเนินการแปลงคำสั่งสาขาเพื่อไปที่ TOS และแปลงคำแนะนำเปรียบเทียบกับ IF โปรแกรมนี้แปลงคำแนะนำ DC เป็นรหัส COBOL Data Division ที่เทียบเท่าและการย้ายการแปลง zaps ฯลฯ ตามความเหมาะสม

เมื่อทำเสร็จแล้วฉันได้เขียนโปรแกรมที่สองเพื่อแปลง IF และ GOTO เป็น IF-THEN จากนั้นด้วยการเคลื่อนไหวและในแนวระหว่างกลุ่มเหล่านี้ (นี่ไม่ใช่เรื่องยากที่จะทำจริงๆ - ความลับคือการแทรก IF และ อื่น ๆ ในขณะที่คุณอ่านโคบอลอล "พิดจิ้น" ระยะที่ 1 จากด้านหลังถึงด้านหน้า)

IF-THEN-ELSER ค้นหาสถานการณ์ที่พบการอ้างอิง GOTO ในบริเวณใกล้เคียงกับฉลากซึ่งสามารถลบได้อย่างปลอดภัย (ลดจำนวนการอ้างอิง 1) คุณเรียกใช้โปรแกรม IF-THEN-ELSER นี้ซ้ำ ๆ (นั่นคือคุณเรียกใช้อีกครั้งและอีกครั้งหยุดเฉพาะเมื่อบัตรผ่านครั้งสุดท้ายของคุณไม่สามารถหาวิธีแก้ไขได้อีก) งานที่สำคัญส่วนใหญ่ทำโดย if-then-elser ซึ่งผลิตภัณฑ์ COBOL จะต้องได้รับการตรวจสอบอย่างละเอียดและตรวจสอบโดยโปรแกรมเมอร์ภาษาแอสเซมเบลอร์ที่มีความสามารถและเชี่ยวชาญ (เช่นฉัน) จากประสบการณ์ของฉัน "if-then-elser" ของฉันสามารถกำจัด GO TO มากกว่า 90 เปอร์เซ็นต์ที่เกิดจากคำสั่งสาขาเดิม

ฉันคิดว่าเป็นไปได้ที่จะก้าวไปข้างหน้าจากจุดนี้ด้วยการแปลงที่ตรงไปตรงมาเป็น C (หรือ C ++) - ภาษาที่ฉันคุ้นเคยด้วย อย่างไรก็ตามที่ BellSouth ภาษาเป้าหมายที่เราเลือกคือ COBOL / II มีความซับซ้อนเล็กน้อยซึ่งเกิดขึ้นจากสถานการณ์ที่ฉลากที่เหลือมีการอ้างอิง GO TO หลายครั้ง (หลายครั้งสถานการณ์เหล่านี้ได้รับการจัดการโดย COBOL PERFORMs แต่บางครั้งก็สามารถแสดงแทนโดย OR และ AND)

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

ฉันไม่รู้ว่าสิ่งนี้ช่วยได้หรือไม่

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

ในฐานะที่เป็นหมายเหตุสุดท้าย: เราเขียนในแอสเซมเบลอร์เท่านั้นเพราะคอมไพเลอร์สำหรับภาษาระดับสูงสร้างโค้ดออบเจ็กต์ที่ยุ่งยากและไม่มีประสิทธิภาพ คอมไพเลอร์ COBOL "การเพิ่มประสิทธิภาพ" ในวันนี้ไม่มีนิสัยที่ไม่ดีเหมือนกัน ----------


2

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

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

สำหรับโปรแกรมเมอร์ภาษาโคบอลที่มีอยู่ - บางทีพวกเขาสามารถช่วยในการจัดทำเอกสารระบบที่มีอยู่และด้วยกระบวนการโยกย้าย


2
+1: นี่ไม่ใช่งานสำหรับ C ++
6502

2
@ 6502: ทำไมล่ะ ความเชี่ยวชาญของ OP อยู่ใน C ++ การหาวิธีจัดการกับระบบเก่านั้นไม่ดีพอ การเรียนรู้ภาษาอื่นจะไม่ช่วย โปรแกรมเมอร์ที่มีความสามารถใช้เครื่องมือที่โปรแกรมเมอร์มีความสามารถที่จะทำให้มันทำงานได้ดีกว่าระบบเก่าไม่ว่าจะเป็นภาษาใดก็ตาม
ใน silico

1
@In silico: ในความคิดของฉันสำหรับโครงการขนาดใหญ่พอสมควรในขนาดนี้คุณจะประหยัดเวลาโดยการเรียนรู้ภาษาที่เหมาะสมกว่าเช่น Python มากกว่าการใช้ C ++ สมมติว่า Python ไม่ได้อยู่ที่นั่นสำหรับโครงการที่มีขนาดใหญ่พอที่ IMO จะให้ผลตอบแทนการเขียน Python ของคุณเองใน C ++ และการเขียนโค้ดโดยใช้สิ่งนั้นแทนที่จะทำทุกอย่างใน C ++ C ++ เป็นภาษาที่ดีมากและจุดแข็งของมันคือโดยการออกแบบไม่ต้องการเว้นช่องว่างด้านล่าง C ++ และแอสเซมเบลอร์ด้านบน ไม่มีจุดหมายทั้งหมดที่นี่ คุณจะแนะนำให้เขียนทุกอย่างโดยใช้ FPGA หรือไม่ถ้านั่นคือความเชี่ยวชาญของผู้โพสต์?
6502

3
@ 6502: ฉันไม่เห็นด้วย ด้วยเทคนิคที่เหมาะสมทันสมัยห้องสมุดที่ได้รับการออกแบบมาอย่างดีและความสามารถในการใช้ภาษาปัญหาเหล่านี้ไม่เกี่ยวข้อง (จริงสำหรับภาษาใด ๆ ) และผู้คนได้พัฒนาระบบและซอฟต์แวร์ขนาดใหญ่ใน C ++ ที่ใช้งานได้ดีและดูเหมือนจะไม่มีปัญหากับการใช้ C ++ เพียงเพราะคุณจะไม่ใช้ C ++ สำหรับงานนี้ไม่ได้หมายความว่าคนอื่นจะไม่สามารถใช้และใช้งานได้ดี นั่นคือสำหรับ OP ที่จะตัดสินใจ ฉันแน่ใจว่าคุณค่อนข้างมีประสิทธิภาพในภาษาอื่น ๆ และโดยทั้งหมดให้ทัน
ใน silico

1
ใน silico: สิ่งใดในทางทฤษฎีที่ชัดเจนสามารถนำไปใช้กับสิ่งใดก็ได้ (รวมถึง brainf k) นี่ไม่ได้หมายความว่าเครื่องมือทั้งหมดนั้นเทียบเท่ากัน ฉันคิดว่าสำหรับแอปพลิเคชัน businness ที่มีรหัสที่ง่ายต่อการเขียนและอ่าน (แม้ไม่ใช่คนที่มีความรู้ด้านเทคนิค) มีความสำคัญมากกว่าความเร็วในการคำนวณแบบเปลือย พฤติกรรมที่ไม่ได้กำหนดเป็นวิธีราคาที่สูงเกินไปที่จะจ่ายให้กับโลหะที่ไม่จำเป็น ถ้าสำหรับคุณ C ++ เป็นตัวเลือกที่ดีสำหรับตรรกะทางธุรกิจแอปพลิเคชันการป้อนข้อมูลฉันสงสัยว่าสำหรับคุณที่นั่นอะไรก็ตามที่ C ++ เป็นตัวเลือกที่ไม่ดี ...
6502

2

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

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

ในทางกลับกันแอสเซมบลี 360/370 เป็นระดับสูงสวยเมื่อเทียบกับไมโครโปรเซสเซอร์ในปัจจุบันและง่ายกว่ามากและบางครั้ง C ก็ถือเป็น "แอสเซมเบลอร์ระดับสูง" ฉันทำงานให้กับ บริษัท DBMS ที่มีผลิตภัณฑ์ทั้งหมด 370 แอสเซมเบลอร์และสถาปนิกหลักของเราเชื่อว่าอาจเป็นไปได้ที่จะแปลโค้ดแอสเซมเบลอร์เป็น C (สำหรับการพกพาในอนาคต) ฉันสงสัย แต่ประเด็นก็คือระยะทางไม่ใหญ่เท่าที่คุณคิด

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


1

ฉันไม่สามารถบอกได้ว่านี่เป็นเรื่องตลกหรือไม่ - บริษัท ของคุณกำลังใช้รหัสอย่างจริงจังที่เขียนเมื่อ 39 ปีก่อน? หากมันทำงานบนระบบ / 360 คุณจะต้องรวบรวม g ++ จากแหล่งที่มา ...

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

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

อีกความคิดเห็นหนึ่ง - ฉันจินตนาการว่า บริษัท รถเช่าอื่น ๆ ได้เข้าร่วมกับพวกเราที่เหลือในศตวรรษที่ 21; ฉันจะรีคอนสักเล็กน้อยเพื่อดูว่าพวกเขาทำมันอย่างไร (บนเว็บฉันนึกภาพ) และอาจเป็นแบบจำลองหลังจากระบบใดระบบหนึ่งเหล่านั้น (เช่นไม่ต้องคิดค้นวงล้อใหม่)

โชคดี!


5
ไม่ผิดปกติสำหรับระบบเมนเฟรมที่จะใช้ฐานรหัสที่เริ่มต้นในยุค 60 หรือ 70 IBM เก็บเมนเฟรมหลักของ zSeries และระบบปฏิบัติการย้อนหลังเข้ากันได้กับ 360 เพียงเพราะสิ่งนี้ ไม่มีอะไรมากในรูปแบบธุรกิจของ บริษัท รถเช่า (หรือธนาคารหรือ บริษัท ประกันภัย) ที่มีการเปลี่ยนแปลงตั้งแต่ คุณสามารถเพิ่มเว็บอินเตอร์เฟสได้ แต่สิ่งที่เปลี่ยนไปในการจัดเก็บรถยนต์ในฐานข้อมูลคืออะไร
Bo Persson

zOS มีคอมไพเลอร์ดั้งเดิมของ C ++ พร้อมด้วยตัวประมวลผลล่วงหน้าสำหรับ CICS และ DB2 ดังนั้นไม่จำเป็นต้องมี g ++
James Anderson

5
ประการที่สองมันค่อนข้างบ่อยสำหรับ บริษัท ขนาดใหญ่ที่จะใช้รหัสเมนเฟรมอายุ 30 ปี โดยทั่วไปน่าเชื่อถือนักแสดงและทำงาน นอกจากนี้ยังมีแนวโน้มที่จะมีเอกสารกำกับที่ไม่ดีมาก
James Anderson

3
@ Chris ทำไมรหัสอายุ 39 ปีถึงไม่สามารถใช้งานได้ มันจะเติบโตค้างที่ 30? 20? รหัสผลิตที่ผ่านการทดสอบแล้วสามารถเก่าได้ แต่ก็ยังทำงานได้อย่างสมบูรณ์ การเขียนซ้ำใด ๆ จะต้องไปถึงระดับเดียวกับโปรแกรมเก่าก่อนที่จะได้รับประโยชน์ใด ๆจากการชำระค่าธรรมเนียมของคุณ

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

0

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

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

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


0
  1. การเปลี่ยนแปลงที่เพิ่มขึ้นนั้นเกิดจากคำถาม

  2. มีแนวโน้มว่าจะมีวิธีแก้ปัญหาแบบนอกชั้นวางจำหน่าย มีธุรกิจรถเช่ามากมาย

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

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

คุณอาจไม่ต้องการเก็บรูปแบบไฟล์ข้อมูลเดียวกันดังนั้นจะไม่มีการย้อนกลับเมื่อมีการสลับ


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