วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

3
มาตรฐานการตั้งชื่อสภาพแวดล้อมในการพัฒนาซอฟต์แวร์?
ปัจจุบันโครงการของฉันประสบปัญหาการตั้งชื่อสภาพแวดล้อม คนต่างมีสมมติฐานแตกต่างกันไปตามสภาพแวดล้อมที่ควรตั้งชื่อหรือชื่อที่กำหนดและทำให้เกิดความสับสนเมื่อพูดคุยกัน ฉันทำการวิจัยเล็กน้อยแล้วและไม่พบมาตรฐานใด ๆ คำนี้รวมถึง "Local", "Sand", "Dev", "Test", "ผู้ใช้", "QA", "Staging" และ "Prod" (บวกอีกสองสามอย่างที่คนอื่นถาม) ฉันไม่ได้มองหาความคิดเห็นเพียงอย่างเดียวแม้ว่าจะมีใครบางคนที่นั่น "ทุกคน" มีฉันจะเอามัน - ฉันพยายามที่จะหาคำจำกัดความขั้นสูงโดยผู้มีอำนาจบางอย่างแม้ว่ามันจะไม่เป็นทางการ นี่คือสภาพแวดล้อมที่เราใช้ในปัจจุบัน: สภาพแวดล้อมบนพีซีของผู้พัฒนา สภาพแวดล้อมที่ใช้ร่วมกันซึ่งนักพัฒนาซอฟต์แวร์อัปโหลดรหัสไปยังการทดสอบตัวเองโดยตรง สภาพแวดล้อมที่ใช้ร่วมกันที่มีการทดสอบมาตรฐานและฟังก์ชั่นการใช้งานโดยพนักงาน QA สภาพแวดล้อมที่ใช้ร่วมกันซึ่งเสร็จสมบูรณ์และรหัสตรวจสอบ QA ได้รับการอนุมัติจากผู้ขอโครงการ สภาพแวดล้อมที่สะท้อนสภาพแวดล้อมสุดท้ายเป็นการตรวจสอบขั้นสุดท้ายและเตรียมการปรับใช้ สภาพแวดล้อมสุดท้ายที่มีการใช้รหัส ฉันรู้ว่าสิ่งที่ฉันเรียกพวกเขา แต่มีมาตรฐานบางอย่างเกี่ยวกับเรื่องนี้? ขอบคุณล่วงหน้า.

7
สถานะการออกที่ไม่เป็นศูนย์สำหรับการออกที่สะอาด
เป็นที่ยอมรับหรือไม่ที่จะส่งคืนรหัสออกที่ไม่ใช่ศูนย์หากโปรแกรมที่เป็นปัญหารันได้อย่างถูกต้องหรือไม่? ตัวอย่างเช่นสมมติว่าฉันมีโปรแกรมอย่างง่าย ๆ ที่ (เท่านั้น) ทำสิ่งต่อไปนี้: โปรแกรมรับอาร์กิวเมนต์ N มันจะส่งคืนรหัสทางออกของนาที (N, 255) โปรดทราบว่า N ใด ๆ ที่ถูกต้องสำหรับโปรแกรม โปรแกรมที่สมจริงยิ่งขึ้นอาจส่งคืนรหัสที่แตกต่างกันสำหรับการรันโปรแกรมที่ประสบความสำเร็จซึ่งมีความหมายต่างกัน โปรแกรมเหล่านี้ควรเขียนข้อมูลนี้ไปยังสตรีมแทนเช่น stdout หรือไม่

3
วิธีการออกแบบเว็บเซอร์วิสที่ปรับขนาดได้สูงใน Java?
ฉันกำลังสร้างบริการบนเว็บบางอย่างที่จะมีผู้ใช้ 2,000 คนพร้อมกัน บริการดังกล่าวให้บริการฟรีและคาดว่าจะได้รับฐานผู้ใช้จำนวนมาก ในอนาคตอาจต้องมีผู้ใช้มากถึง 50,000 คน มีคำถามอีกสองสามข้อที่แก้ไขปัญหาเช่น - /programming/2567254/building-highly-scalable-web-services อย่างไรก็ตามความต้องการของฉันแตกต่างจากคำถามข้างต้น ตัวอย่างเช่น - แอปพลิเคชันของฉันไม่มีส่วนต่อประสานผู้ใช้ดังนั้นรูปภาพ, CSS, javascript จึงไม่เป็นปัญหา มันมีอยู่ใน Java ดังนั้นคำแนะนำเช่นการใช้ HipHop ในการแปล PHP เป็นโค้ดเนทีฟนั้นไร้ประโยชน์ ดังนั้นฉันจึงตัดสินใจถามคำถามแยกต่างหาก นี่คือการตั้งค่าโครงการของฉัน - วางตัวบริการบนเว็บโดยใช้ Apache CXF Hibernate 3.0 (ด้วยการปรับแต่งที่เกี่ยวข้องเช่นการโหลดแบบขี้เกียจและ HQL แบบกำหนดเองสำหรับปรับแต่ง) Tomcat 6.0 MySql 5.5 อะไรคือวิธีปฏิบัติที่ดีที่สุดในการปฏิบัติตามเพื่อให้แอปพลิเคชันที่ใช้ Java สามารถปรับขนาดได้

4
Groovy เรียกแอปพลิเคชั่นบางส่วนว่า 'currying' หรือไม่?
Groovy มีแนวคิดที่เรียกว่า 'currying' นี่คือตัวอย่างจากวิกิ: def divide = { a, b -> a / b } def halver = divide.rcurry(2) assert halver(8) == 4 ความเข้าใจของฉันเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่ก็คือการโต้แย้งทางด้านขวาของdivideถูกผูกไว้กับค่า 2 ดูเหมือนว่ารูปแบบของการใช้งานบางส่วน คำว่า currying มักจะใช้เพื่อหมายถึงการเปลี่ยนฟังก์ชั่นที่นำชุดของข้อโต้แย้งเป็นฟังก์ชั่นที่ใช้เพียงหนึ่งอาร์กิวเมนต์และส่งกลับฟังก์ชั่นอื่น ตัวอย่างเช่นนี่คือประเภทของcurryฟังก์ชั่นใน Haskell: curry :: ((a, b) -> c) -> (a -> (b -> c)) สำหรับคนที่ไม่ได้ใช้ Haskell a, bและcพารามิเตอร์ทั่วไปทั้งหมด curryใช้เวลาฟังก์ชั่นที่มีสองข้อโต้แย้งและผลตอบแทนฟังก์ชั่นที่ใช้aและผลตอบแทนการทำงานจากการb cฉันได้เพิ่มวงเล็บพิเศษลงในประเภทเพื่อทำให้ชัดเจนยิ่งขึ้น ฉันเข้าใจผิดหรือเปล่าว่าเกิดอะไรขึ้นในตัวอย่างของความแรงหรือเป็นเพียงบางส่วนที่ใช้ผิด? …

6
คุณจัดการโครงการที่พนักงานคนอื่นเหลืออยู่ได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา มันเกิดขึ้นที่บางคนเพิ่งออกจาก บริษัท ในทันที ตอนนี้งานของเขาจะต้องเสร็จสิ้นและคุณได้รับมอบหมาย โดยไม่รู้ว่าเขาทำอะไรอยู่ (ทำ 90% หรือ 9%) คุณจะจัดการกับสิ่งที่เหลืออยู่ได้อย่างไร ฉันจะเริ่มจากศูนย์หรือไม่ เกิดอะไรขึ้นถ้ามันทำ 90%? ฉันจะลองและเข้าใจสิ่งที่เขาทำหรือไม่ ถ้ามันเป็นแค่เรื่องไร้สาระ?

7
ฟังก์ชันของไลบรารี C ควรคาดหวังความยาวของสตริงหรือไม่?
ขณะนี้ฉันกำลังทำงานกับไลบรารีที่เขียนเป็น C ฟังก์ชันจำนวนมากของไลบรารีนี้คาดว่าจะมีสตริงเป็นchar*หรือconst char*ในอาร์กิวเมนต์ ฉันเริ่มต้นด้วยฟังก์ชั่นเหล่านั้นมักจะคาดหวังความยาวของสตริงsize_tเพื่อไม่ให้มีการยกเลิกค่า null อย่างไรก็ตามเมื่อเขียนการทดสอบสิ่งนี้ส่งผลให้มีการใช้งานบ่อยstrlen()เช่น: const char* string = "Ugh, strlen is tedious"; libFunction(string, strlen(string)); การวางใจให้ผู้ใช้ส่งผ่านสายอักขระที่ถูกยกเลิกอย่างถูกต้องจะนำไปสู่ความปลอดภัยที่น้อยลง แต่มีความรัดกุมมากกว่าและ (ในความคิดของฉัน) รหัสที่อ่านได้: libFunction("I hope there's a null-terminator there!"); ดังนั้นการปฏิบัติที่เหมาะสมที่นี่คืออะไร? ทำให้ API มีความซับซ้อนมากขึ้นในการใช้งาน แต่บังคับให้ผู้ใช้นึกถึงการป้อนข้อมูลหรือบันทึกข้อกำหนดสำหรับสตริงที่สิ้นสุดด้วยค่า null และเชื่อใจผู้โทร
15 c  api  strings 

6
C # อ่านยากขึ้นไหม
เมื่อ C # ได้รับการพัฒนาคุณสมบัติด้านภาษาจำนวนมากได้ถูกเพิ่ม มันมาถึงจุดที่มันกลายเป็นอ่านไม่ได้สำหรับฉัน ยกตัวอย่างเช่นพิจารณารหัสต่อไปนี้จากรหัส Caliburn.Micro ที่นี่ : container = CompositionHost.Initialize( new AggregateCatalog( AssemblySource.Instance. Select(x => new AssemblyCatalog(x)) .OfType<ComposablePartCatalog>() ) ); ตอนนี้เป็นเพียงตัวอย่างเล็ก ๆ ฉันมีคำถามจำนวนหนึ่ง: นี่เป็นปัญหาทั่วไปหรือเป็นที่รู้จักหรือไม่? ชุมชน C # ค้นหาเหมือนกันหรือไม่ นี่เป็นปัญหาเกี่ยวกับภาษาหรือเป็นสไตล์ที่นักพัฒนาใช้หรือไม่ มีวิธีง่ายๆในการเข้าใจโค้ดอื่น ๆ และหลีกเลี่ยงการเขียนโค้ดด้วยวิธีนี้หรือไม่?
15 c#  readability 

4
นักพัฒนา Android ต้องจ่ายภาษีการขายหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ตามโพสต์บล็อกของนักพัฒนาซอฟต์แวร์RetroDreamer Android ต้องจ่ายภาษีการขายสำหรับการขายแอพของพวกเขาในประเทศที่มีภาษีการขาย นี่เป็นคำอธิบายที่ถูกต้องหรือไม่? ผู้คนต่าง ๆ ที่เผยแพร่แอพ Android จะจัดการกับมันอย่างไร?

4
เข้าใกล้ Java / JVM internals [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันตั้งโปรแกรมใน Java เป็นเวลาประมาณ 8 ปีและฉันรู้ภาษาค่อนข้างดีในฐานะนักพัฒนา แต่เป้าหมายของฉันคือการเพิ่มความรู้เกี่ยวกับ internals ให้ลึกซึ้งยิ่งขึ้น ฉันเรียนหลักสูตรระดับปริญญาตรีในสาขาการออกแบบ PL แต่พวกเขาเป็นภาพรวมทางวิชาการที่กว้างมาก (ใน Scheme, IIRC) มีคนแนะนำเส้นทางให้เริ่มเจาะลึกรายละเอียดได้ไหม โดยเฉพาะมีหัวข้อพิเศษ (เช่นการเก็บขยะ) ที่อาจเข้าถึงได้ง่ายกว่าหรือเป็นจุดเริ่มต้นที่ดี มีหนังสือระดับสูงที่ดีเกี่ยวกับ internals ของ JVM และการออกแบบภาษาการเขียนโปรแกรม Java หรือไม่? แนวทางปัจจุบันของฉันจะเริ่มต้นด้วยข้อมูลจำเพาะ JVMและการวิจัยตามต้องการ
15 java  books  jvm 

2
จะเกิดอะไรขึ้นถ้าเราทำให้ซีเรียลไลซ์และดีซีเรียลไลซ์สองวัตถุที่อ้างอิงถึงกันและกัน?
เพื่อให้ชัดเจนยิ่งขึ้นนี่เป็นตัวอย่างด่วน: class A implements Serializable { public B b; } class B implements Serializable { public A a; } A a = new A(); B b = new B(); a.b = b; b.a = a; แล้วจะเกิดอะไรขึ้นถ้าเราทำให้วัตถุ a และ b เป็นอนุกรมเป็นไฟล์และทำการดีซีเรียลไลซ์ออกจากไฟล์นั้น? ฉันคิดว่าเราได้วัตถุ 4 ชิ้นชิ้นละ 2 ชิ้น วัตถุที่เหมือนกัน แต่มีอินสแตนซ์ต่างกัน แต่ฉันไม่แน่ใจว่ามีอะไรอีกหรือมันถูกหรือผิด หากเทคโนโลยีใดจำเป็นต้องตอบโปรดคิดตาม Java …

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

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

4
ใน MVC หลายมุมมองสามารถมีคอนโทรลเลอร์เดียวกันหรือหนึ่งมุมมองต้องมีคอนโทรลเลอร์ที่ไม่ซ้ำใคร
ฉันมีคำถามในขณะที่ออกแบบสถาปัตยกรรมสำหรับโครงการรอบ MVC (เป็นโครงการ SDK C ++ / Marmalade ฉันไม่ได้ใช้กรอบ MVC ใด ๆ โดยเฉพาะฉันกำลังทำอยู่) ในหลาย ๆ บทความ (เช่นเดียวกับบทความเดิมของ Steve Burbek ) ฉันอ่านแนวคิด "MVC triad" ที่ทำให้ฉันรู้สึกแย่ตั้งแต่ที่ฉันใช้แนวคิดนี้ไป เมื่อฉันอ่านครั้งแรกดูเหมือนว่าแอปพลิเคชันจะถูกสร้างขึ้นรอบ ๆ "MVC triad" - หนึ่งชิ้นสำหรับแต่ละส่วน UI ที่ฉันควรจะ - แต่ฉันพบว่ามันค่อนข้างไม่ยืดหยุ่นและฉันคิดว่านั่นไม่ใช่วิธีที่ MVC ตั้งใจใช้ จากนั้นทำการค้นคว้าเพิ่มเติมเกี่ยวกับปัญหาฉันพบตัวอย่างของการมีเพศสัมพันธ์อย่างแน่นหนาของคอนโทรลเลอร์และมุมมองคือความสัมพันธ์แบบ 1 ต่อ 1 - TextEditView มี TextEditController แต่เมื่อฉันกลับไปที่โครงการของฉันฉันพบว่าอาจเป็นประโยชน์ที่จะมีตัวควบคุมหนึ่ง (โดย 'หน่วยทางลอจิคัล' เช่น AddElementController) และหลายมุมมองสำหรับตัวควบคุมนั้น …

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

3
เมื่อใดควรรูทรวมโดยรวมมี AR อื่น (และเมื่อใดควรจะรวม)
ให้ฉันเริ่มต้นด้วยการขอโทษเป็นครั้งแรกสำหรับความยาวของโพสต์ แต่ฉันต้องการที่จะถ่ายทอดรายละเอียดมากขึ้นล่วงหน้าดังนั้นฉันไม่ได้ใช้เวลาของคุณในการแสดงความคิดเห็น ฉันกำลังออกแบบแอพพลิเคชั่นตามแนวทาง DDD และสงสัยว่าฉันสามารถทำตามแนวทางใดได้บ้างเพื่อพิจารณาว่ารูทการรวมควรมี AR อื่นหรือไม่ถ้าพวกมันควรจะแยกจากกัน นำกรณีของแอพพลิเคชั่นนาฬิกาเวลาแบบเรียบง่ายที่ช่วยให้พนักงานสามารถบันทึกนาฬิกาเข้าหรือออกได้ทั้งวัน UI อนุญาตให้พวกเขาป้อน ID พนักงานและ PIN ซึ่งได้รับการตรวจสอบแล้วและสถานะปัจจุบันของพนักงานที่ดึงมา หากพนักงานมีการโอเวอร์คล็อกในขณะนี้ UI จะแสดงปุ่ม "Clock Out" และในทางกลับกันหากไม่มีการโอเวอร์คล็อกปุ่มจะอ่าน "Clock In" การกระทำที่ทำโดยปุ่มจะสอดคล้องกับสถานะของพนักงานเช่นกัน แอปพลิเคชันเป็นเว็บไคลเอ็นต์ที่เรียกใช้เซิร์ฟเวอร์แบ็คเอนด์ที่เปิดเผยผ่านส่วนต่อประสานบริการ RESTful การผ่านครั้งแรกของฉันในการสร้าง URL ที่ใช้งานง่ายและอ่านได้ทำให้เกิดจุดปลายสองจุดต่อไปนี้: http://myhost/employees/{id}/clockin http://myhost/employees/{id}/clockout หมายเหตุ: สิ่งเหล่านี้จะใช้หลังจากรหัสพนักงานและ PIN ได้รับการตรวจสอบแล้วและมีการส่ง "โทเค็น" ที่แสดงถึง "ผู้ใช้" ในส่วนหัว นี่เป็นเพราะมี "โหมดผู้จัดการ" ที่ช่วยให้ผู้จัดการหรือหัวหน้างานสามารถเข้า - ออกหรือพนักงานคนอื่น แต่เพื่อประโยชน์ของการสนทนานี้ฉันพยายามทำให้มันง่าย บนเซิร์ฟเวอร์ฉันมี ApplicationService ที่ให้บริการ API แนวคิดแรกของฉันสำหรับวิธี ClockIn …

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