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

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

6
แบบแผนการตั้งชื่อที่ใช้สำหรับตัวแปรและฟังก์ชั่นใน C [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ในขณะที่การเข้ารหัสโครงการขนาดใหญ่ใน CI เกิดปัญหาขึ้น ถ้าฉันเขียนรหัสเพิ่มขึ้นเรื่อย ๆ มันจะมีเวลาที่ฉันจะจัดระเบียบรหัสได้ยาก ฉันหมายถึงว่าการตั้งชื่อสำหรับฟังก์ชั่นและตัวแปรสำหรับส่วนต่าง ๆ ของโปรแกรมอาจดูสับสน ดังนั้นฉันจึงคิดว่ามีแบบแผนการตั้งชื่อที่มีประโยชน์ที่ฉันสามารถใช้กับตัวแปร C และฟังก์ชั่นได้หรือไม่? ภาษาส่วนใหญ่แนะนำให้ใช้หลักการตั้งชื่อ แต่สำหรับ C สิ่งเดียวที่ฉันได้อ่านจนถึงตอนนี้คือชื่อควรเป็นคำอธิบายสำหรับการอ่านโค้ด แก้ไข: ตัวอย่างของตัวอย่างของแบบแผนการตั้งชื่อที่แนะนำ: Python PEP 8 สอน Java ฉันอ่านอนุสัญญาการตั้งชื่อเพิ่มเติมสำหรับ Java บางแห่ง แต่จำไม่ได้ว่าอยู่ที่ไหน
13 c  naming 

3
เว็บเซสชัน“ ออกแบบไม่ดี” หรือไม่? ทำไม?
เมื่อวันก่อนฉันกำลังคุยกับเพื่อนร่วมงานและเขาออกมาบอกว่าการใช้เซสชันของผู้ใช้ในเว็บแอปพลิเคชันนั้นผิด ฉันตอบว่ามันอาจจะผิดขึ้นอยู่กับข้อมูลที่คุณเก็บไว้มิฉะนั้นทำไมบริการเซสชั่นเว็บถึงต้องถูกจัดเตรียมโดย Microsoft (เรากำลังพูดถึง ASP.NET) เขาตอบฉันอีกครั้งว่าแม้ใน MS พวกเขาสามารถตอบฉันได้อย่างง่ายดายว่ามันเป็นการออกแบบที่ไม่ดี และเขาสามารถแสดงเอกสารสีขาวให้ฉันดูได้ น่าเสียดายที่ฉันไม่มีโอกาสติดต่อกับผู้ชายคนนี้อีกต่อไป แต่ฉันอยากจะเข้าใจมากขึ้นเกี่ยวกับมุมมองของเขา ใครบ้างมีข้อมูล / มุมมองเกี่ยวกับที่นี่?

4
โครงการ C หลีกเลี่ยงความขัดแย้งในการตั้งชื่อ
ฉันกำลังดิ้นรนเพื่อหาคำแนะนำในโลกแห่งความเป็นจริงในทางปฏิบัติเกี่ยวกับการตั้งชื่อฟังก์ชั่นสำหรับโครงการห้องสมุดซีขนาดกลาง โครงการห้องสมุดของฉันถูกแยกออกเป็นสองสามโมดูลและ submodules ด้วยส่วนหัวของพวกเขาเองและตามสไตล์ OO (ฟังก์ชั่นทั้งหมดใช้โครงสร้างที่แน่นอนว่าเป็นอาร์กิวเมนต์แรกไม่มี globals ฯลฯ ) มันเป็นสิ่งที่เราชอบ: MyLib - Foo - foo.h - foo_internal.h - some_foo_action.c - another_foo_action.c - Baz - baz.h - some_baz_action.c - Bar - bar.h - bar_internal.h - some_bar_action.c โดยทั่วไปฟังก์ชั่นนั้นใหญ่เกินกว่าจะยกตัวอย่างเช่นsome_foo_actionและanother_foo_actionในfoo.cไฟล์การนำไปใช้งานทำให้ฟังก์ชั่นส่วนใหญ่คงที่และเรียกมันว่าวัน ฉันสามารถจัดการกับการลอกสัญลักษณ์ภายใน ("โมดูลส่วนตัว") เมื่อสร้างห้องสมุดเพื่อหลีกเลี่ยงความขัดแย้งสำหรับผู้ใช้ของฉันด้วยโปรแกรมไคลเอนต์ของพวกเขา แต่คำถามคือวิธีตั้งชื่อสัญลักษณ์ในห้องสมุดของฉัน? จนถึงตอนนี้ฉันได้ทำ: struct MyLibFoo; void MyLibFooSomeAction(MyLibFoo *foo, ...); struct MyLibBar; void …

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

5
ผู้ควบคุมควรรู้เกี่ยวกับมุมมองและรุ่นหรือไม่ หรือในทางกลับกัน?
ฉันกำลังพยายามทำความเข้าใจว่าฉันควรทำสิ่งนี้หรือไม่ item = Model() screen = View() brain = Controller(item, screen) หรือนี่ .. brain = Controller() item = Model(brain) screen = View(brain) หรือนี่ .. class Controller(): def __init__(self): item = Model(self) screen = View(self) หรืออย่างอื่นอย่างสิ้นเชิง?
13 mvc 

2
ฉันควรพิจารณาอัลกอริธึมทางลัดที่สั้นที่สุดของ k ใด
ฉันกำลังแก้ไขปัญหาการเพิ่มประสิทธิภาพการค้นหากราฟ ฉันต้องการค้นหาเส้นทางลัดที่สั้นที่สุดที่ k ที่สุดผ่านกราฟถ่วงน้ำหนักกำกับ ฉันรู้ว่ามีจำนวนอัลกอริธึมที่แน่นอนและใกล้เคียงที่สุดสำหรับ k แต่งานวิจัยเมื่อไม่นานมานี้ส่วนใหญ่ดูเหมือนจะมุ่งเน้นไปที่กราฟขนาดใหญ่มากที่เชื่อมโยงกันอย่างกระจัดกระจาย (เช่นการกำหนดเส้นทางและทิศทาง) และกราฟของฉัน ลักษณะที่แตกต่างของปัญหาของฉัน: กราฟประกอบด้วยจุดยอดประมาณ 160 จุด กราฟเชื่อมต่อเกือบเต็มแล้ว (แบบสองทิศทางดังนั้น ~ 160 ^ 2 ~ = 25k ขอบ) k จะค่อนข้างเล็ก (อาจน้อยกว่า 10) ความยาวเส้นทางสูงสุดอาจถูกล้อมรอบและมีขนาดเล็กมากเช่น 3-5 ขอบ ฉันพูดว่า 'acyclic' ด้านบน แต่เพียงเพื่อย้ำ - การแก้ปัญหาต้องไม่รวมรอบ นี่ไม่ใช่ปัญหาสำหรับเส้นทางที่สั้นที่สุดที่ดีที่สุด แต่จะกลายเป็นปัญหาสำหรับ k-best ตัวอย่างเช่นพิจารณาการกำหนดเส้นทางถนนเส้นทางที่สั้นที่สุดอันดับที่ 2 จาก A ถึง B อาจเหมือนกับเส้นทางที่ดีที่สุด การเดินทางรอบ ๆ บล็อกอย่างรวดเร็ว นั่นอาจจะเป็นทางคณิตศาสตร์ที่ดีที่สุด …
13 java  algorithms 

1
ถึงเวลาที่จะเลิกซิงโครไนซ์รอและแจ้งเตือนหรือไม่
มีสถานการณ์หนึ่ง (นอกเหนือจากความเข้ากันได้กับ JVM โบราณ) ที่ใช้synchronizedเป็นที่ต้องการใช้Lockหรือไม่ ใครสามารถแสดงให้เห็นถึงการใช้waitหรือnotifyมากกว่าระบบที่ใหม่กว่า? มีอัลกอริทึมที่ต้องใช้หนึ่งในนั้นในการนำไปใช้หรือไม่ ฉันเห็นคำถามก่อนหน้านี้ที่แตะต้องเรื่องนี้ แต่ฉันอยากจะใช้เวลาเพิ่มอีกนิดและจริง ๆ แล้วdeprecateพวกเขา มีกับดักและหลุมพรางและข้อผิดพลาดอยู่มากเกินไปกับสิ่งที่ถูกรีดออกด้วยสิ่งอำนวยความสะดวกใหม่ ฉันแค่รู้สึกว่าอาจถึงเวลาที่จะทำเครื่องหมายพวกเขาล้าสมัย

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

4
จะทำอย่างไรเมื่อการทดสอบ TDD เปิดเผยการทำงานใหม่ที่จำเป็นต้องมีการทดสอบด้วย?
คุณจะทำอย่างไรเมื่อคุณเขียนข้อสอบและถึงจุดที่คุณต้องทำแบบทดสอบและคุณรู้ว่าคุณต้องการฟังก์ชั่นเพิ่มเติมที่ควรแยกออกมาเป็นหน้าที่ของตัวเอง? ฟังก์ชั่นใหม่นั้นจำเป็นต้องได้รับการทดสอบเช่นกัน แต่วัฏจักร TDD บอกว่าการทดสอบล้มเหลว หากฉันอยู่ในขั้นตอนที่ฉันพยายามทำให้ผ่านการทดสอบฉันไม่ควรออกไปและเริ่มการทดสอบที่ล้มเหลวอีกครั้งเพื่อทดสอบการทำงานใหม่ที่ฉันต้องนำไปใช้ ตัวอย่างเช่นฉันกำลังเขียนคลาสพอยต์ที่มีฟังก์ชั่นWillCollideWith ( LineSegment ) : public class Point { // Point data and constructor ... public bool CollidesWithLine(LineSegment lineSegment) { Vector PointEndOfMovement = new Vector(Position.X + Velocity.X, Position.Y + Velocity.Y); LineSegment pointPath = new LineSegment(Position, PointEndOfMovement); if (lineSegment.Intersects(pointPath)) return true; return false; } } …
13 unit-testing  tdd 

7
สัญกรณ์บิ๊กโอ้ไม่ได้พูดถึงค่าคงที่
ฉันเป็นโปรแกรมเมอร์และเพิ่งเริ่มอ่านอัลกอริทึม ฉันไม่มั่นใจอย่างสมบูรณ์กับสัญลักษณ์คือ Bog Oh, Big Omega และ Big Theta เหตุผลก็คือโดยนิยามของบิ๊กโอ้มันระบุว่าควรมีฟังก์ชั่น g (x) เพื่อให้มันมากกว่าหรือเท่ากับ f (x) เสมอ หรือ f (x) <= cn สำหรับค่าทั้งหมดของ n> n0 ทำไมเราไม่พูดถึงค่าคงที่ในคำนิยาม? ตัวอย่างเช่นสมมุติว่าฟังก์ชัน 6n + 4 เราแสดงว่าเป็น O (n) แต่มันไม่เป็นความจริงที่คำจำกัดความนั้นดีสำหรับค่าคงที่ทั้งหมด สิ่งนี้จะถือว่าดีเมื่อ c> = 10 และ n> = 1 สำหรับค่าที่น้อยกว่าของ c มากกว่า 6 ค่าของ n0 จะเพิ่มขึ้น ดังนั้นทำไมเราไม่พูดถึงค่าคงที่เป็นส่วนหนึ่งของคำนิยาม?

6
กฎและคำแนะนำสำหรับการเข้าสู่ระบบ?
ในองค์กรของฉันเราได้รวบรวมกฎ / guildelines เกี่ยวกับการบันทึกที่ฉันต้องการทราบว่าคุณสามารถเพิ่มหรือแสดงความคิดเห็นได้หรือไม่ เราใช้ Java แต่คุณสามารถแสดงความคิดเห็นโดยทั่วไปเกี่ยวกับ loggin - กฎและคำแนะนำ ใช้ระดับการบันทึกที่ถูกต้อง ข้อผิดพลาด: มีบางอย่างผิดปกติและต้องแก้ไขโดยทันที คำเตือน: กระบวนการสามารถดำเนินการต่อโดยไม่ต้องแก้ไข แอปพลิเคชันควรยอมรับระดับนี้ แต่คำเตือนควรได้รับการตรวจสอบเสมอ ข้อมูล: ข้อมูลว่ากระบวนการสำคัญเสร็จสิ้นแล้ว DEBUG ใช้ระหว่างการพัฒนาเท่านั้น ตรวจสอบให้แน่ใจว่าคุณรู้ว่าคุณกำลังบันทึกอะไรอยู่ หลีกเลี่ยงการบันทึกมีผลต่อพฤติกรรมของแอปพลิเคชัน ฟังก์ชั่นของการบันทึกควรจะเขียนข้อความในบันทึก ข้อความบันทึกควรเป็นข้อความอธิบายสั้นกระชับและรัดกุม ไม่มีการใช้ข้อความไร้สาระมากเมื่อทำการแก้ไขปัญหา ใส่คุณสมบัติที่เหมาะสมใน log4j ใส่ในที่ถูกวิธีและชั้นเรียนจะถูกเขียนโดยอัตโนมัติ ตัวอย่าง: Datedfile -web log4j.rootLogger=ERROR, DATEDFILE log4j.logger.org.springframework=INFO log4j.logger.waffle=ERROR log4j.logger.se.prv=INFO log4j.logger.se.prv.common.mvc=INFO log4j.logger.se.prv.omklassning=DEBUG log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n log4j.appender.DATEDFILE.Prefix=omklassning. log4j.appender.DATEDFILE.Suffix=.log log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/ ค่าบันทึก …
13 java  logging 

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

5
เป็นความคิดที่ดีหรือไม่ที่จะติดตั้ง Mercurial บนเซิร์ฟเวอร์ของคุณและดึงข้อมูล hg ไปใช้งาน?
ฉันเพิ่งเริ่มงานใหม่เมื่อเดือนที่แล้วและดูเหมือนว่าพวกเขาไม่มีการควบคุมซอร์สโค้ดของพวกเขา พวกเขาพึ่งพาการสำรองข้อมูลผู้ให้บริการโฮสต์ของพวกเขาใช้เวลาสำหรับพวกเขา หลังจากพูดคุยกันเล็กน้อยฉันมั่นใจว่าเจ้านายของฉันว่าเราควรใช้การควบคุมแหล่งที่มาอย่างแน่นอนและหลังจากที่ฉันได้สัมมนาสั้น ๆ เกี่ยวกับเรื่องนี้ทีมทั้งหมดก็อยู่บนเรือ พวกเขารัก Mercurial ดังนั้นตอนนี้นี่คือวิธีที่เราทำงาน: º----------BitBucket º---------/ º--------/ ตัวฉันและนักพัฒนาอื่น ๆhg pullจาก BitBucket ทำการเปลี่ยนแปลงของเราจากนั้นhg pushเป็น BitBucket ตอนนี้สำหรับการปรับใช้บางคนจะต้อง FTP ไฟล์ล่าสุดไปยังเซิร์ฟเวอร์ที่ใช้งานจริง ฉันคิดว่าจะติดตั้ง Mercurial บนเซิร์ฟเวอร์ของเราและใช้hg clone(ต่อมาhg pull) เพื่อปรับปรุงเวอร์ชันให้ทันสมัยอยู่เสมอ º---push->-----BitBucket----<-pull-----º (production server) º---push->----/ º---push->---/ นี่เป็นความคิดที่ดีหรือไม่? ข้อผิดพลาดที่อาจเกิดขึ้นที่ฉันอาจไม่เห็น? มีใครที่นี่ทำอะไรที่คล้ายกันบ้างไหม? คุณจะปรับใช้แอพพลิเคชันกรอบงาน PHP ขนาดใหญ่ได้อย่างไร (เรากำลังใช้ Moodle)

1
เมื่อใดที่ฉันควรใช้ AtomPub
ฉันทำการค้นคว้าเกี่ยวกับการออกแบบบริการเว็บสงบและฉันได้มาถึงสิ่งที่ฉันคิดว่าเป็นจุดตัดสินใจที่สำคัญดังนั้นฉันคิดว่าฉันจะเสนอมันต่อชุมชนเพื่อรับคำแนะนำ เพื่อให้สอดคล้องกับหลักการของสถาปัตยกรรม RESTful ฉันต้องการนำเสนอ API ที่สามารถค้นพบได้ดังนั้นฉันจะสนับสนุนคำกริยา HTTP ต่างๆอย่างเต็มที่เท่าที่จะทำได้ ความยากของฉันมาพร้อมกับตัวเลือกในการแสดงทรัพยากรเหล่านั้น คุณเห็นไหมว่ามันจะเป็นเรื่องง่ายสำหรับผมที่จะสร้าง API ของตัวเองซึ่งจะครอบคลุมถึงการนำเสนอผลการค้นหาและการเชื่อมโยงไปยังแหล่งข้อมูลอื่น ๆ ฉันได้อ่านเกี่ยวกับ Atom Publishing Protocol ( RFC 5023 ) และวิธีการที่ODataส่งเสริมการใช้งาน แต่ดูเหมือนว่าจะเพิ่มระดับการเพิ่มความเป็นนามธรรมให้กับ API ที่ค่อนข้างง่าย (ปัจจุบัน) ดังนั้นคำถามของฉันคือนักพัฒนาควรเลือก AtomPub เป็นตัวเลือกในการแสดงของพวกเขาเมื่อใด? และถ้าไม่ใช่แนวทางที่แนะนำในปัจจุบันคืออะไร?

7
ออกแบบ: โทรกลับไปที่ชั้นผู้ปกครอง
เมื่อสร้างแบบจำลองวัตถุกับเด็ก ๆ เป็นเรื่องปกติที่จะรวมเด็ก ๆ ผ่านการจัดองค์ประกอบในฐานะสมาชิกของชั้นผู้ปกครอง บางครั้งเด็ก ๆ ต้องบอกบางสิ่งกับผู้ปกครองพวกเขาจำเป็นต้องเรียกใช้ฟังก์ชันของผู้ปกครอง วิธีนี้สามารถทำได้โดยใช้ C ++ ตัวเลือกบางอย่างคือ: ทำให้คลาส parent ระดับโลกดังนั้นวัตถุลูกจะสามารถเรียกฟังก์ชันสมาชิกของวัตถุแม่ได้ ฉีดวัตถุแม่เป็นตัวชี้หรือการอ้างอิงลงในวัตถุลูกทุก จากนั้นเมื่อเด็กต้องการบอกวัตถุแม่บางอย่างก็สามารถทำได้เพราะมันมีตัวแปรสมาชิกที่สามารถใช้ วิธีอื่นในการทำเช่นนี้คืออะไร? มีลวดลายหรือชื่อการออกแบบทั่วไปสำหรับสิ่งนี้หรือไม่? โปรดทราบว่าฉันสนใจในแนวคิดและวิธีแก้ปัญหาใน C ++ เนื่องจากรายละเอียดจะแตกต่างกันในภาษาเชิงวัตถุอื่น ๆ ตัวอย่างเช่นจุดที่ 2 ด้านบนกล่าวถึง 'ตัวชี้หรือการอ้างอิง' และทั้งสองจะเป็นไปได้ใน C ++ เท่านั้น C ++ มีฟีเจอร์ภาษาที่ไม่ปรากฏในภาษาอื่นดังนั้นการใช้งานโซลูชันเพื่อแก้ไขปัญหาอาจรวมฟีเจอร์ภาษาเหล่านี้ซึ่งทำให้โซลูชันแตกต่างจากสิ่งที่อาจมีในภาษาอื่น

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