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

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

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

2
ฉันจะทดสอบอัลกอริทึมการเข้ารหัสของตัวเองได้อย่างไร
ฉันเพิ่งพัฒนาอัลกอริทึมการเข้ารหัสแบบบล็อคตัวเลขและฉันใช้มันในผลิตภัณฑ์ของฉัน ฉันต้องการนำไปทดสอบจริง เราจะเข้าไปเกี่ยวกับอัลกอริธึมการเข้ารหัสในการประกวด encrytption ระดับสากลได้อย่างไร?
13 encryption 

1
การห่อรหัสบุคคลที่สามเป็นทางออกเดียวในการทดสอบผู้บริโภคหรือไม่
ฉันทำการทดสอบหน่วยและในชั้นเรียนของฉันฉันต้องส่งจดหมายจากวิธีใดวิธีหนึ่งดังนั้นการใช้การฉีดคอนสตรัคเตอร์ฉันฉีดอินสแตนซ์ของZend_Mailคลาสที่อยู่ในกรอบ Zend ตอนนี้บางคนยืนยันว่าถ้าห้องสมุดมีความมั่นคงเพียงพอและจะไม่เปลี่ยนแปลงบ่อยครั้งก็ไม่จำเป็นต้องห่อมัน ดังนั้นสมมติว่าZend_Mailมันเสถียรและจะไม่เปลี่ยนแปลงและมันก็เหมาะกับความต้องการของฉันทั้งหมดแล้วฉันจะไม่ต้องการเสื้อคลุม ตอนนี้มาดูคลาสของฉันLoggerที่ขึ้นอยู่กับZend_Mail: class Logger{ private $mailer; function __construct(Zend_Mail $mail){ $this->mail=$mail; } function toBeTestedFunction(){ //Some code $this->mail->setTo('some value'); $this->mail->setSubject('some value'); $this->mail->setBody('some value'); $this->mail->send(); //Some } } อย่างไรก็ตามการทดสอบหน่วยต้องการให้ฉันทดสอบองค์ประกอบหนึ่งครั้งดังนั้นฉันต้องจำลองZend_Mailชั้นเรียน นอกจากนี้ฉันกำลังละเมิดหลักการการพึ่งพาการพึ่งพาเนื่องจากLoggerชั้นเรียนของฉันตอนนี้ขึ้นอยู่กับการตัดสินใจที่ไม่เป็นนามธรรม ตอนนี้ฉันจะทดสอบLoggerการแยกโดยไม่ต้องห่อได้Zend_Mailอย่างไร! รหัสอยู่ใน PHP แต่คำตอบไม่จำเป็นต้องเป็น นี่เป็นปัญหาการออกแบบมากกว่าฟีเจอร์เฉพาะภาษา

2
วิธีที่ดีที่สุดสำหรับความคิดเห็นโค้ดอินไลน์คืออะไร
เรากำลังทำการปรับเปลี่ยนบางอย่างให้เป็น codebase เก่าแก่อายุ 20 ปีและฉันกำลังพูดคุยกับเพื่อนร่วมงานของฉันเกี่ยวกับรูปแบบความคิดเห็นในรหัส (plsql, java) ไม่มีรูปแบบเริ่มต้นสำหรับความคิดเห็น แต่ในกรณีส่วนใหญ่คนทำสิ่งนี้ในความคิดเห็น: // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment รูปแบบที่เสนอสำหรับความคิดเห็นในอนาคตและในอดีตที่ฉันต้องการคือ: // {yyyy-mm-dd}, unique_author_company_id, comment เพื่อนร่วมงานของฉันบอกว่าเราต้องการเพียงความคิดเห็นเท่านั้นและต้องจัดรูปแบบความคิดเห็นทั้งในอดีตและอนาคตในรูปแบบนี้: // comment ข้อโต้แย้งของฉัน: ฉันพูดด้วยเหตุผลด้านการบำรุงรักษาสิ่งสำคัญคือต้องรู้ว่าเมื่อใดและใครทำการเปลี่ยนแปลง (แม้ข้อมูลนี้จะอยู่ใน SCM) รหัสกำลังมีชีวิตอยู่และด้วยเหตุนี้จึงมีประวัติ เนื่องจากไม่มีการเปลี่ยนแปลงวันที่มันเป็นไปไม่ได้ที่จะรู้ว่าเมื่อใดที่มีการเปลี่ยนแปลงเกิดขึ้นโดยไม่เปิดเครื่องมือ SCM และค้นหาในประวัติวัตถุที่ยาวนาน เนื่องจากผู้เขียนมีความสำคัญมากการเปลี่ยนแปลงของผู้เขียนมีความน่าเชื่อถือมากกว่าการเปลี่ยนแปลงของ authory เหตุผลความว่องไวไม่จำเป็นต้องเปิดและนำทางผ่านเครื่องมือ SCM ผู้คนจะกลัวที่จะเปลี่ยนบางสิ่งที่บางคนทำเมื่อ 15 ปีที่แล้วมากกว่าสิ่งที่เพิ่งถูกสร้างหรือเปลี่ยนแปลง เป็นต้น ข้อโต้แย้งของเพื่อนร่วมงานของฉัน: ประวัติอยู่ใน SCM …

5
ฉันจะจัดการเผยแพร่ซอร์สโค้ดโอเพนซอร์สได้ดีที่สุดจากรหัสการวิจัยที่เป็นความลับของ บริษัท ของฉันอย่างไร
บริษัท ของฉัน (เรียกพวกเขาว่า Acme Technology) มีห้องสมุดประมาณหนึ่งพันไฟล์ต้นฉบับซึ่งเดิมมาจากกลุ่มการวิจัยของ Acme Labs ซึ่งได้รับการบ่มเพาะในกลุ่มพัฒนาสองสามปีที่ผ่านมาและได้มอบให้กับลูกค้าภายใต้ ไม่เปิดเผย. แอคพร้อมที่จะเปิดตัวโค้ด 75% ให้กับชุมชนโอเพนซอร์ส อีก 25% จะเปิดตัวในภายหลัง แต่สำหรับตอนนี้ยังไม่พร้อมสำหรับการใช้งานของลูกค้าหรือมีรหัสที่เกี่ยวข้องกับนวัตกรรมในอนาคตที่พวกเขาต้องการให้พ้นจากคู่แข่ง ปัจจุบันรหัสนี้ได้รับการจัดรูปแบบด้วย #ifdefs ที่อนุญาตให้ใช้รหัสฐานเดียวกันเพื่อทำงานกับแพลตฟอร์มการผลิตล่วงหน้าที่จะมีให้สำหรับนักวิจัยมหาวิทยาลัยและลูกค้าเชิงพาณิชย์ในวงกว้างมากขึ้นเมื่อมันเปิดแหล่งที่มาขณะที่ในเวลาเดียวกัน พร้อมสำหรับการทดลองและการสร้างต้นแบบและการทดสอบความเข้ากันได้กับแพลตฟอร์มในอนาคต การรักษาฐานรหัสเดียวถือเป็นสิ่งจำเป็นสำหรับเศรษฐศาสตร์ (และความมีสติ) ของกลุ่มของฉันซึ่งจะมีช่วงเวลาที่ยากลำบากในการรักษาสำเนาสองชุดในแบบคู่ขนาน ไฟล์ในฐานปัจจุบันของเรามีลักษณะดังนี้: > // Copyright 2012 (C) Acme Technology, All Rights Reserved. > // Very large, often varied and restrictive copyright license in English and French, > …

1
C ++ 11 รองรับฟังก์ชั่นรายการลำดับสูงกว่า
ส่วนใหญ่ทำงานเขียนโปรแกรมภาษา (เช่น Common เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure, Haskell, สกาล่า Ocaml, SML) สนับสนุนบางส่วนทำงานร่วมกันขั้นสูงในรายการเช่นmap, filter, takeWhile, dropWhile, foldl, foldr(ดูเช่นCommon เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure เอกสารอ้างอิงแบบเคียงข้างกัน , เอกสารHaskell , Scala , OCamlและSML ) C ++ 11 มีวิธีการหรือฟังก์ชั่นมาตรฐานที่เทียบเท่าในรายการหรือไม่? ตัวอย่างเช่นลองพิจารณาตัวอย่าง Haskell ต่อไปนี้: let xs = [1, 2, 3, 4, 5] let ys = map (\x -> …

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

5
คำที่เหมาะสมสำหรับฟังก์ชันผกผันกับตัวสร้างคือการแกะค่าออกจากชนิดข้อมูล
แก้ไข:ฉันกำลังใช้คำถามใหม่อีกครั้ง เห็นได้ชัดว่าฉันทำให้เกิดความสับสนเพราะฉันไม่ได้ตระหนักว่าคำว่าdestructorถูกใช้ใน OOP สำหรับสิ่งที่แตกต่างกันมาก - เป็นฟังก์ชันที่เรียกใช้เมื่อวัตถุถูกทำลาย ในการเขียนโปรแกรมการทำงานเรา (พยายาม) หลีกเลี่ยงสถานะที่เปลี่ยนแปลงไม่ได้ดังนั้นจึงไม่เทียบเท่ากับมัน (ฉันเพิ่มแท็กที่เหมาะสมให้กับคำถาม) แต่ผมเคยเห็นว่าการบันทึกข้อมูลสำหรับ unwrapping ค่า (โดยเฉพาะอย่างยิ่งสำหรับชนิดข้อมูล valued เดียวเช่นnewtypes) บางครั้งเรียกว่าdestructorหรือบางทีอาจจะDeconstructor ตัวอย่างเช่นมี (ใน Haskell): newtype Wrap = Wrap { unwrap :: Int } นี่Wrapคือตัวสร้างและunwrapอะไร คำถามคือ: เราจะเรียกunwrapโปรแกรมการทำงานได้อย่างไร Deconstructor? Destructor? หรือคำอื่น ๆ ? และเพื่อชี้แจงว่าคำศัพท์นี้ / อื่น ๆ สามารถใช้งานได้กับภาษาอื่น ๆหรือใช้ใน Haskell หรือไม่? บางทีอาจมีคำศัพท์สำหรับเรื่องนี้โดยทั่วไปในภาษาที่ไม่สามารถใช้งานได้หรือไม่? ฉันเห็นทั้งสองคำแล้วเช่น: ... บ่อยครั้งที่หนึ่งมีตัวสร้างสมาร์ทและdestructors ที่ฉลาดเหล่านี้เพื่อความสะดวกในการทำงานกับพวกเขา …

3
มันสร้างความแตกต่างถ้าฉันประกาศตัวแปรภายในหรือภายนอกวงใน Java? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ซ้ำได้: คุณประกาศตัวแปรที่ไหน ด้านบนของวิธีการหรือเมื่อคุณต้องการ? มันสร้างความแตกต่างถ้าฉันประกาศตัวแปรภายในหรือภายนอกวงใน Java? นี่คือ for(int i = 0; i < 1000; i++) { int temp = doSomething(); someMethod(temp); } เท่ากับนี้ (เกี่ยวกับการใช้หน่วยความจำ) int temp = 0; for(int i = 0; i < 1000; i++) { temp = doSomething(); …
13 java  variables  loops 

8
คุณควรสัญญาว่าจะส่งมอบฟีเจอร์ที่คุณไม่แน่ใจว่าจะใช้งานได้หรือไม่?
ในบทความจาก HNฉันพบคำแนะนำต่อไปนี้: บอกลูกค้า / ผู้ใช้เสมอว่า "ใช่" แม้ว่าคุณจะไม่แน่ใจ 90% ของเวลาคุณจะพบวิธีที่จะทำ 10% ของเวลาคุณจะกลับไปและขอโทษ ราคาเล็ก ๆ สำหรับการเติบโตส่วนบุคคลที่สำคัญ แต่ฉันคิดเสมอว่าเราควรทำการวิเคราะห์ความเป็นไปได้ก่อนทำสัญญาใด ๆ กับลูกค้า / ผู้ใช้เพื่อที่พวกเขาจะไม่ถูกเข้าใจผิดในทุกจุด ในกรณีใดคำแนะนำข้างต้นควรมีผลบังคับใช้ในกรณีใดบ้าง

4
สองอินเตอร์เฟสที่มีลายเซ็นเหมือนกัน
ฉันพยายามจำลองเกมการ์ดโดยที่การ์ดมีคุณสมบัติที่สำคัญสองชุด: ที่แรกก็คือผลกระทบ นี่คือการเปลี่ยนแปลงสถานะเกมที่เกิดขึ้นเมื่อคุณเล่นไพ่ อินเตอร์เฟสสำหรับเอฟเฟกต์มีดังนี้: boolean isPlayable(Player p, GameState gs); void play(Player p, GameState gs); และคุณสามารถพิจารณาว่าการ์ดนั้นสามารถเล่นได้ถ้าหากคุณมีราคาที่เหมาะสมและเอฟเฟกต์ทั้งหมดสามารถเล่นได้ ชอบมาก // in Card class boolean isPlayable(Player p, GameState gs) { if(p.resource < this.cost) return false; for(Effect e : this.effects) { if(!e.isPlayable(p,gs)) return false; } return true; } โอเคจนถึงตอนนี้ค่อนข้างง่าย ฟีเจอร์ชุดอื่น ๆ ในการ์ดคือความสามารถ ความสามารถเหล่านี้เป็นการเปลี่ยนแปลงสถานะของเกมที่คุณสามารถเปิดใช้งานได้ตามต้องการ เมื่อมากับอินเทอร์เฟซสำหรับสิ่งเหล่านี้ฉันรู้ว่าพวกเขาต้องการวิธีในการพิจารณาว่าสามารถเปิดใช้งานหรือไม่และวิธีการเปิดใช้งาน มันจบลงด้วยการเป็น …
13 interfaces 

2
มีเวิร์กโฟลว์เฉพาะหรือรูปแบบการออกแบบที่ใช้กันทั่วไปเพื่อสร้างแอปพลิเคชั่นการเขียนโปรแกรมฟังก์ชั่นขนาดใหญ่หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันได้ทำการสำรวจ Clojure มาระยะหนึ่งแล้วถึงแม้ว่าฉันจะไม่ได้ใช้มันในโครงการที่ไม่สำคัญ โดยพื้นฐานแล้วฉันเพิ่งคุ้นเคยกับไวยากรณ์และสำนวนบางอย่าง มาจากพื้นหลังของ OOP โดย Clojure เป็นภาษาแรกที่ฉันใช้มองอย่างมากฉันไม่ชอบวิธีการทำสิ่งต่าง ๆ ที่กล่าวว่ามีเวิร์กโฟลว์เฉพาะหรือรูปแบบการออกแบบที่เหมือนกันกับการสร้างแอปพลิเคชันที่ใช้งานได้ขนาดใหญ่หรือไม่? ฉันอยากเริ่มใช้การเขียนโปรแกรมฟังก์ชั่น "ของจริง" แต่ฉันกลัวว่าหากขาดความเชี่ยวชาญในปัจจุบันของฉันมันจะทำให้มหากาพย์ล้มเหลว "Gang of Four" นั้นเป็นมาตรฐานสำหรับโปรแกรมเมอร์ OO แต่มีอะไรที่คล้ายกันมากกว่านี้ที่ให้ความสำคัญกับกระบวนทัศน์การทำงานหรือไม่? ทรัพยากรส่วนใหญ่ที่ฉันพบมีนักเก็ตโปรแกรมที่ยอดเยี่ยม แต่พวกเขาไม่ถอยกลับเพื่อให้ดูกว้างขึ้นและมีสถาปัตยกรรมมากขึ้น

4
เหตุผลในการเขียนโปรแกรมคู่
ฉันทำงานในร้านค้าไม่กี่แห่งที่ฝ่ายบริหารได้ส่งผ่านแนวคิดของการเขียนโปรแกรมจับคู่ให้ฉันหรือผู้จัดการ / นักพัฒนาคนอื่นและฉันก็ไม่สามารถทำมันได้เลย จากจุดยืนของนักพัฒนาฉันไม่สามารถหาเหตุผลว่าทำไมการเปลี่ยนมาใช้รูปแบบการเขียนโค้ดนี้จะเป็นประโยชน์และในฐานะผู้จัดการทีมเล็ก ๆ ไม่ได้เห็นประโยชน์อะไรเลย ฉันเข้าใจว่ามันช่วยในเรื่องข้อผิดพลาดทางไวยากรณ์พื้นฐานและอาจมีประโยชน์หากคุณต้องการแฮ็กข้อมูล แต่ผู้จัดการที่อยู่นอกวงจรการเขียนโปรแกรมดูเหมือนจะมองว่ามันเป็นวิธีในการป้องกันไม่ให้นักออกแบบของพวกเขาไปที่ Facebook หรือ Reddit มากกว่า เครื่องมือออกแบบ ในฐานะที่เป็นคนใกล้กับชั้นพัฒนาที่เห็นได้ชัดว่าไม่สามารถเข้าใจได้มากนักจากหนังสือที่โยนทางของฉันหรือหน้า wiki ในเรื่อง ... จากตำแหน่งการจัดการระดับสูงประโยชน์ของการเขียนโปรแกรมแบบคู่เมื่อจัดการกับ Scrum หรือ Agile คืออะไร สภาพแวดล้อม?

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

8
มาตรฐานการเข้ารหัสจำเป็นต้องมีอีกหรือไม่
ฉันรู้ว่ามันได้รับการพิสูจน์แล้วว่ามาตรฐานการเข้ารหัสช่วยอย่างมหาศาล อย่างไรก็ตามมีเครื่องมือและ IDE ที่แตกต่างกันมากมายซึ่งจะจัดรูปแบบตามมาตรฐานที่โปรแกรมเมอร์ต้องการ ตราบใดที่รหัสของเรียบร้อย / แสดงความคิดเห็น (และไม่ยุ่งระเบียบปาเก็ตตี้) ฉันไม่เห็นความต้องการมาตรฐานการเข้ารหัส มีข้อโต้แย้งใด ๆ สำหรับการพัฒนามาตรฐานการเข้ารหัส (เราไม่มี แต่มีการสร้าง)

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