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

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

16
วันที่เป็นหมายเลขเวอร์ชันของซอฟต์แวร์
นักพัฒนาซอฟต์แวร์โดยทั่วไปจะไม่ใช้วันที่เป็นหมายเลขเวอร์ชันแม้ว่ารูปแบบ YYYYMMDD (หรือความแปรปรวน) จะดูแข็งแกร่งพอที่จะใช้ มีอะไรผิดปกติกับโครงการนี้หรือไม่? หรือใช้กับซอฟต์แวร์ประเภท 'จำกัด ' เท่านั้น (เช่นการผลิตภายใน)
43 versioning 

11
อะไรคือวิธีปฏิบัติที่ดีที่สุดเกี่ยวกับ ints ที่ไม่ได้ลงชื่อ?
ฉันใช้ ints ที่ไม่ได้ลงชื่อทุกที่และฉันไม่แน่ใจว่าควรจะ ซึ่งอาจมาจากคอลัมน์รหัสคีย์หลักของฐานข้อมูลไปจนถึงตัวนับ ฯลฯ หากตัวเลขไม่ควรเป็นค่าลบฉันจะใช้ int ที่ไม่ได้ลงนามเสมอ อย่างไรก็ตามฉันสังเกตจากรหัสของผู้อื่นว่าไม่มีใครทำเช่นนี้ มีบางอย่างที่สำคัญที่ฉันมองข้ามหรือไม่? แก้ไข: เนื่องจากคำถามนี้ฉันยังสังเกตเห็นว่าใน C การคืนค่าลบสำหรับข้อผิดพลาดเป็นเรื่องธรรมดาแทนที่จะทิ้งข้อยกเว้นเช่นเดียวกับใน C ++

6
วิธีการจัดรูปแบบที่อ่านง่ายที่สุดหากมีเงื่อนไข [ปิด]
ifสภาพที่คดเคี้ยวยาวควรหลีกเลี่ยงหากเป็นไปได้ แต่บางครั้งเราทุกคนก็เขียนลงไป แม้ว่ามันจะเป็นเงื่อนไขที่ง่ายมากบางครั้งข้อความที่เกี่ยวข้องก็เป็นคำที่ใช้ง่ายมากดังนั้นเงื่อนไขทั้งหมดจึงมีความยาวมาก วิธีการจัดรูปแบบที่อ่านง่ายที่สุดคืออะไร if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } หรือ if ( FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy ) { thud(); } หรือ if (FoobarBaz::quxQuux(corge, grault) || !garply(waldo) || fred(plugh) !== xyzzy) { thud(); } หรือ thudable = FoobarBaz::quxQuux(corge, grault); thudable …

2
การจัดเก็บข้อมูลท้องถิ่นอยู่ภายใต้กฎหมายคุกกี้หรือไม่ [ปิด]
ฉันต้องการหลีกเลี่ยงการมีแบนเนอร์คุกกี้ในเว็บไซต์ของฉันหากเป็นไปได้ ฉันสามารถจัดเก็บ session id ไว้ใน localStorage เพื่อข้ามการติดตั้งแบนเนอร์ได้หรือไม่?
43 javascript  html 

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

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

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

7
คุณจัดการกับการรวมรหัสจากหลาย ๆ สาขา / นักพัฒนาแต่ละ sprint ได้อย่างไร
เพิ่งได้รับการโทรย้อนยุคที่นักพัฒนาแสดงความกังวลเกี่ยวกับการบูรณาการเรื่องราวของพวกเขาในสาขาหลักแต่ละการวิ่ง นักพัฒนารหัสทั้งหมดภายในสาขาของตัวเองและในตอนท้ายของการวิ่งพวกเขาทั้งหมดรวมเป็นหนึ่งสาขาหลัก จากนั้นผู้พัฒนารายหนึ่ง (โดยปกติจะเป็นคนเดียวกัน) จะเหลือหน้าที่ในการทำให้แน่ใจว่าทุกอย่างได้รวมเข้ากับโค้ดของ dev อื่น ๆ (การเปลี่ยนแปลงส่วนใหญ่อยู่ในหน้าเดียวกันตัวอย่างเช่นเรื่องการแสดงข้อมูลเรื่องราวการกรองข้อมูลและ ตัวบ่งชี้ SLA) เราจะลดภาระนี้และทำให้รหัสของเรารวมเข้าด้วยกันได้ง่ายขึ้นได้อย่างไร จากมุมมองของฉันการมี PO หรือ SM จัดลำดับความสำคัญของเรื่องราวด้วยวิธีที่มีประสิทธิภาพมากขึ้นดังนั้นเราจึงไม่มีการพึ่งพาเหล่านี้ในการวิ่งเดียวกันอาจช่วยแก้ปัญหาบางอย่างได้ คนอื่นจะรับมือกับเรื่องนี้อย่างไร หรือนี่เป็นเพียงส่วนหนึ่งของกระบวนการ?

1
การเปลี่ยนชื่อผู้แต่งในใบอนุญาต MIT [ปิด]
หลายปีก่อนฉันเขียนและเผยแพร่ซอฟต์แวร์ภายใต้ลิขสิทธิ์ MIT เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่าหนึ่ง (หรือบางส่วน) ของส้อมมีการเปลี่ยนแปลงประกาศลิขสิทธิ์ชั้นนำที่ด้านบนของใบอนุญาตคือ Copyright (c) 2014 <my name> MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software... ไปยัง Copyright (c) 2019 <new author> MIT License Permission is hereby granted, free of charge, to any person obtaining a …

9
“ การหลีกเลี่ยงปัญหาโยโย่” เป็นเหตุผลที่ถูกต้องหรือไม่ที่จะยอมให้
ตามที่ครอบงำจิตใจดั้งเดิมคือเมื่อไม่ได้กลิ่นรหัส? ฉันควรสร้างวัตถุ ZipCode เพื่อแสดงรหัสไปรษณีย์แทนวัตถุ String อย่างไรก็ตามจากประสบการณ์ของฉันฉันชอบดู public class Address{ public String zipCode; } แทน public class Address{ public ZipCode zipCode; } เพราะฉันคิดว่าอันหลังต้องการให้ฉันย้ายไปที่คลาส ZipCode เพื่อทำความเข้าใจกับโปรแกรม และฉันเชื่อว่าฉันต้องย้ายระหว่างหลาย ๆ คลาสเพื่อดูคำจำกัดความถ้าทุกเขตข้อมูลดั้งเดิมถูกแทนที่ด้วยคลาสซึ่งรู้สึกราวกับว่าทุกข์ทรมานจากปัญหาโยโย่ (รูปแบบการต่อต้าน) ดังนั้นฉันต้องการย้ายวิธีการ ZipCode เป็นคลาสใหม่ตัวอย่างเช่น: เก่า: public class ZipCode{ public boolean validate(String zipCode){ } } ใหม่: public class ZipCodeHelper{ public static boolean validate(String zipCode){ …

8
คลาสที่ไม่ได้เป็นตัวแทนอะไร - ถูกต้องหรือไม่?
ฉันเพิ่งออกแบบแอปพลิเคชันของฉันและฉันไม่แน่ใจว่าฉันเข้าใจ SOLID และ OOP ถูกต้องหรือไม่ คลาสควรทำ 1 สิ่งและทำได้ดี แต่ในทางกลับกันพวกเขาควรเป็นตัวแทนวัตถุจริงที่เราทำงานด้วย ในกรณีของฉันฉันทำการแยกฟีเจอร์บนชุดข้อมูลจากนั้นฉันทำการวิเคราะห์การเรียนรู้ของเครื่อง ฉันคิดว่าฉันสามารถสร้างสามคลาส FeatureExtractor ชุดข้อมูล วิเคราะห์ แต่คลาส FeatureExtractor ไม่ได้แสดงอะไรเลยมันทำสิ่งที่ทำให้มันเป็นกิจวัตรมากกว่าคลาส มันจะมีเพียงหนึ่งฟังก์ชั่นที่จะใช้: extract_features () ถูกต้องหรือไม่ที่จะสร้างคลาสที่ไม่ได้เป็นตัวแทนของสิ่งหนึ่ง แต่ทำสิ่งใดสิ่งหนึ่ง แก้ไข: ไม่แน่ใจว่ามันสำคัญ แต่ฉันใช้ Python และถ้า extract_features () จะมีลักษณะเช่นนั้น: มันคุ้มค่าไหมที่จะสร้างคลาสพิเศษเพื่อเก็บเมธอดนั้น def extract_features(df): extr = PhrasesExtractor() extr.build_vocabulary(df["Text"].tolist()) sent = SentimentAnalyser() sent.load() df = add_features(df, extr.features) df = mark_features(df, extr.extract_features) df …

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

5
วิธีหลีกเลี่ยง“ ความผิดพลาดทางภาษาแบบไดนามิก” โดยทั่วไปได้อย่างไร?
เมื่อเร็ว ๆ นี้ฉันได้เทจ JavaScript ลงไปสองสามชั่วโมงเพราะฉันต้องการได้รับประโยชน์จากฐานผู้ใช้ขนาดใหญ่ การทำเช่นนั้นฉันได้สังเกตเห็นรูปแบบที่คนส่วนใหญ่ใช้กับภาษาแบบไดนามิก คุณจะได้รับสิ่งที่ทำงานได้อย่างรวดเร็วจริงๆ แต่เมื่อรหัสของคุณถึงขนาดที่กำหนดคุณเสียเวลามากกับการพิมพ์การสะกดและการเปลี่ยนข้อผิดพลาดโดยทั่วไป ข้อผิดพลาดที่คอมไพเลอร์ปกติจะช่วยฉันจาก และไม่ให้ฉันค้นหาข้อผิดพลาดในตรรกะเมื่อฉันทำผิดในโมดูลอื่น การพิจารณาจาวาสคริปต์ต่อไปนี้และภาษาที่พิมพ์แบบไดนามิกอื่น ๆ ทำให้ฉันเชื่อว่ามีบางอย่างผิดปกติกับแนวทางของฉัน หรือนี่เป็นเพียงราคาที่คุณต้องจ่าย? วิธีทำให้รัดกุมยิ่งขึ้น: คุณเข้าใกล้โครงการ JavaScript (หรือภาษาไดนามิกอื่น ๆ สำหรับเรื่องนั้น) ด้วย ~ 2000 LOC อย่างไร มีเครื่องมือในการป้องกันไม่ให้ฉันทำผิดพลาดเหล่านั้นหรือไม่? ฉันลองใช้การไหลผ่าน Facebook และ JSHint ซึ่งค่อนข้างจะช่วยได้ แต่ไม่จับความผิดพลาด

8
ฉันควรโยนข้อยกเว้นในกรณีที่มีค่าที่มีความหมายนอกช่วงหรือจัดการกับตัวเองหรือไม่?
ฉันได้เขียน struct ที่แสดงถึงพิกัดละติจูด / ลองจิจูด ค่าของพวกเขามีตั้งแต่ -180 ถึง 180 สำหรับ longtitudes และ 90 ถึง -90 สำหรับ lattitudes หากผู้ใช้งานของ struct นั้นให้คุณค่าแก่ฉันนอกช่วงนั้นฉันมี 2 ตัวเลือก: โยนข้อยกเว้น (อยู่นอกช่วง) แปลงค่าเป็นข้อ จำกัด เนื่องจากพิกัด -185 มีความหมาย (สามารถแปลงได้อย่างง่ายดายมากถึง +175 เหมือนกับพิกัดเชิงขั้ว) ฉันจึงยอมรับและแปลงได้ จะเป็นการดีกว่าหรือที่จะโยนข้อยกเว้นเพื่อบอกผู้ใช้ว่ารหัสของเขาให้คุณค่าที่ควรแก่ฉัน แก้ไข: ฉันรู้ถึงความแตกต่างระหว่าง lat / lng และพิกัด แต่ฉันต้องการทำให้มันง่ายขึ้นสำหรับการสนทนาที่ง่ายขึ้น - มันไม่ใช่ความคิดที่เจิดจ้าที่สุด

5
สถาปัตยกรรมที่สะอาด: ใช้กรณีที่มีผู้นำเสนอหรือส่งคืนข้อมูลหรือไม่
สถาปัตยกรรมสะอาดแนะนำให้ให้โต้ตอบด้วยกรณีใช้เรียกใช้งานจริงของพรีเซนเตอร์ (ซึ่งถูกฉีดต่อไปนี้กรมทรัพย์สินทางปัญญา) เพื่อจัดการการตอบสนอง / จอแสดงผล อย่างไรก็ตามฉันเห็นคนที่ใช้สถาปัตยกรรมนี้ส่งคืนข้อมูลเอาต์พุตจากผู้โต้ตอบจากนั้นปล่อยให้คอนโทรลเลอร์ (ในชั้นอะแดปเตอร์) ตัดสินใจเลือกวิธีจัดการกับมัน โซลูชันที่สองรั่วไหลความรับผิดชอบของแอปพลิเคชันออกจากเลเยอร์แอปพลิเคชันนอกเหนือจากการกำหนดอินพุตและเอาต์พุตพอร์ตให้กับผู้โต้ตอบไม่ชัดเจนหรือไม่ พอร์ตอินพุตและเอาต์พุต เมื่อพิจารณาคำจำกัดความของ Clean Architectureและโดยเฉพาะอย่างยิ่งแผนภาพการไหลขนาดเล็กที่อธิบายความสัมพันธ์ระหว่างตัวควบคุมผู้ใช้เคสผู้โต้ตอบและผู้นำเสนอฉันไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่ว่าควรใช้ "พอร์ตเคสเอาต์พุต" อย่างไร สถาปัตยกรรมแบบคลีนเช่นสถาปัตยกรรมหกเหลี่ยมแยกความแตกต่างระหว่างพอร์ตหลัก (เมธอด) และพอร์ตรอง (อินเทอร์เฟซที่จะใช้งานโดยอะแดปเตอร์) ตามกระแสการสื่อสารฉันคาดหวังว่า "ใช้ Case Input Port" เป็นพอร์ตหลัก (ดังนั้นเป็นเพียงวิธีการ) และ "Use Case Output Port" เป็นอินเตอร์เฟสที่จะใช้งานอาจเป็นอาร์กิวเมนต์ตัวสร้างที่ใช้อะแดปเตอร์จริง เพื่อให้ผู้โต้ตอบสามารถใช้งานได้ ตัวอย่างรหัส ในการสร้างตัวอย่างโค้ดนี่อาจเป็นรหัสคอนโทรลเลอร์: Presenter presenter = new Presenter(); Repository repository = new Repository(); UseCase useCase = new UseCase(presenter, …

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