แสดงให้เห็นถึงรหัสที่ไม่ดีให้กับลูกค้า?


129

ลูกค้าขอให้ฉันออกแบบเว็บไซต์ของพวกเขาใหม่ซึ่งเป็นแอพพลิเคชั่น ASP.NET Webforms ที่พัฒนาโดยที่ปรึกษาอื่น ดูเหมือนว่างานจะค่อนข้างตรงไปตรงมา แต่หลังจากดูรหัสแล้วมันชัดเจนว่าไม่ใช่กรณี

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

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

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

ปรับปรุง

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


97
แสดงให้เห็นถึงการโจมตีฉีด SQL?
Austin Henley

30
This application was not written well. At all.พวกเขาแทบไม่เคยเป็น :)
haylem

15
นอกเหนือจากการแสดงให้เห็นปัญหาเช่นออสตินพูดว่า อย่าประมาทพลังของไวท์บอร์ดและปากกาทำเครื่องหมาย คนส่วนใหญ่ตอบสนองดีต่อการออกแบบที่ไม่ดีอธิบายเมื่อมันอยู่ในรูปแบบของภาพ
Sirex

3
ถ้ามันไม่ใหญ่ - เขียนใหม่ถ้ามันใหญ่ - อย่าเอามันไป
เรเน

4
ลูกค้าบอกว่าออกแบบใหม่และพวกเขาคิดว่า HTML / CSS ฉันจะใช้คำว่า "ขาดโมดูล" และเน้นที่ "การออกแบบเชิงตรรกะ" เทียบกับ "การนำเสนอ" อุปมาอุปมัยของการก่อสร้างอาคารมีประโยชน์ To make a change in the look of the living room, I had to go into the air-conditioning system.ในการออกแบบแบบแยกส่วนที่ดีสิ่งต่าง ๆ จะไม่เกิดขึ้น
Fuhrmanator

คำตอบ:


144

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

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


10
ด้วยเนื้อหาของรายงานบั๊กมากมาย "มันทำให้ __ สถานที่มากขึ้น" ดูเหมือนจะเป็นวิธีที่ดีที่สุดในการอธิบายเอฟเฟกต์โดมิโน ...
Izkata

4
ใช่ฉันจะเชื่อมต่อมากขึ้นระหว่างเวลาและค่าใช้จ่าย แสดงให้พวกเขาเห็นว่าคุณคาดว่าจะมีการเปลี่ยนแปลงด้านราคากับจำนวนการเปลี่ยนแปลงที่คิดต้นทุน จากประสบการณ์ของฉันลูกค้าไม่ค่อยให้ความสนใจเว้นแต่คุณจะสามารถทำให้กรณีที่พวกเขาใช้จ่ายสองเท่าสามเท่าหรือมากกว่านั้นพวกเขาจะจ่ายเป็นอย่างอื่น
Tim O'Brien

87

โครงสร้างรหัสสไตล์หนี้สินทางเทคนิคเป็นสิ่งหนึ่งที่อย่างน้อยในตอนแรกจนกระทั่งลูกค้าไว้วางใจคุณ - คุณจะต้องใช้ชีวิตด้วย

ช่องโหว่ด้านความปลอดภัยเป็นอีกเรื่องหนึ่ง

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

ฉันมีความสุขอย่างยิ่งที่ได้ทำสิ่งนี้กับลูกค้าคนก่อนหน้านี้ด้วยระบบบัตรของขวัญความภักดีเมื่อฉันใส่£ 5,000 ลงในการ์ด "ของฉัน" และให้เขาตรวจสอบการ์ดของเขาจนถึงเวลา


38
+1 สาธิตการโจมตีการฉีด SQL ที่เลวร้ายเพียงใด ทำมันต่อหน้าพวกเขา ถ้าเป็นไปได้บันทึกวิดีโอปฏิกิริยาของพวกเขา
ฟิลิป

40
@Philip: ... การสาธิตควรอยู่ในสภาพแวดล้อมการพัฒนาแบบแยกสำหรับแอปพลิเคชัน การล้างฐานข้อมูลการผลิตของพวกเขาจะพิสูจน์จุด แต่อาจสูญเสียสัญญาของคุณ (และได้รับคดี)
FrustratedWithFormsDesigner

19
@FrustratedWithFormsDesigner ถ้าพวกเขายังมีสภาพแวดล้อมที่พร้อมใช้งาน ...
ratchet freak

3
@FrustratedWithFormsDesigner: แน่นอนว่าการล้างฐานข้อมูลนั้นไม่แนะนำไม่ว่าจะง่ายและน่าเบื่อ แต่อาจเป็นเรื่องที่น่าประหลาดใจที่พวกเขาดึงข้อมูลส่วนตัวออกมา (อย่างระมัดระวัง) เปลี่ยนจำนวนเงิน (เช่นยอดคงเหลือในบัตรของขวัญที่ทำโดย @Michael) สำหรับคะแนนพิเศษทำให้ชัดเจนว่าคุณไม่จำเป็นต้องเห็นรหัส เริ่มต้นด้วยการทุ่มตลาดรายการตารางเลือกชื่อที่น่าสนใจไม่กี่เนื้อหาการถ่ายโอนข้อมูล ไม่ควรใช้เวลามากเกินไปในการเจาะลึกถึงจุดอ่อน
Javier

76

คำแนะนำที่ดีเกี่ยวกับวิธีถ่ายทอดและสื่อสารสิ่งนี้กับลูกค้า หวังว่าพวกเขาจะจ่ายให้คุณ

ธงแดงที่สำคัญที่นี่!

หากลูกค้าขอให้คุณไม่ทำการเปลี่ยนแปลงใด ๆ นอกจากสิ่งที่คุณได้ตกลง (HTML และ CSS) ฉันจะส่งต่อโครงการนี้และถอนการเสนอราคาของฉัน

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

คุณอาจสูญเสียมากกว่าที่คุณจะได้รับ


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

2
+1 นี่คือผู้ให้คำปรึกษาบทเรียนใช้เวลาเรียนรู้นานเกินไป (และยอมรับว่าเป็นแนวคิดที่ยากที่จะทำตามในระหว่างเศรษฐกิจที่ยากลำบาก) คุณค่าของความเชี่ยวชาญของคุณนั้นเป็นหน้าที่ของงานที่คุณทำเท่าที่เป็นหน้าที่ของงานที่คุณปฏิเสธ
Tim O'Brien

2
+1 นี่คือบทเรียนที่ฉันเรียนรู้วิธีการที่ยากและธุรกิจแรกของฉันเกือบจะตกอยู่ภายใต้การควบคุมของมัน บ่อยครั้งในกรณีเหล่านี้ค่าใช้จ่ายในการแสดงรายการ 'ข้อบกพร่อง' ทั้งหมดและการอ้างถึงการแก้ไขจะใช้ความพยายามมากกว่าที่ลูกค้ายินดีจ่าย
Catharz

30

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

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

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

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

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

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

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


8
+1 สำหรับการไม่ย่อท้อ เพียงแค่ให้ข้อเท็จจริงพูดสำหรับตัวเอง ...
sleske

4
+1 สำหรับ "เป็นกุศลด้วยความเคารพต่อบรรพบุรุษของคุณ"
msanford

19

ฉันเริ่มต้นนี้เป็นความคิดเห็นเพราะในตอนแรกฉันคิดว่ามันเป็นกัน แต่มันอาจจะไม่ใช่

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

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

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

เอกสารนี้อาจเป็นจุดเริ่มต้นของการสนทนาเพิ่มเติมและอาจใช้โดยลูกค้าของคุณเพื่อรับ "คนที่เหมาะสม" เพื่อให้สิทธิ์ในการเปลี่ยนแปลงบางอย่างหรือทั้งหมด

ที่ถูกกล่าวว่าเมื่อลูกค้า undestands ความเสี่ยงยิ้มและแบกถ้าพวกเขาบอกว่าจะทำงานอยู่ดีหรือเดินออกไป


หวังว่าพวกเขาจะใช้การควบคุมแหล่งที่มา
เบอร์นาร์ด

6
คำตอบที่ดี แต่ในฐานะคนที่เคยขึ้นศาลในสถานการณ์ที่คล้ายกันซึ่งรวมถึงเอกสารเต็มรูปแบบและการเซ็นชื่อลูกค้ามันก็ยังทำให้ฉันต้องเสียเงินและปวดหัว
Steve

5
ความคิดที่ดีในหลักการ - แต่ทราบว่านี้อาจจะเป็นจำนวนมากของการทำงาน นี้น่าจะเป็นเพียงการปฏิบัติสำหรับงานใหญ่มิฉะนั้นคุณจะใช้จ่าย 50 ชั่วโมงการจัดเก็บเอกสารปัญหาสำหรับงานที่คุณสามารถเรียกเก็บเงินเพียง 20.
sleske

@sleske: เห็นด้วยว่ามันจะเป็นงานจำนวนมาก แต่หวังว่าจะช่วยให้คุณถ้ากรณีที่เลวร้ายที่สุดที่เป็นไปได้เกิดขึ้นและมีการละเมิดความปลอดภัย อย่างน้อยที่สุดคุณต้องมีสิ่งที่บอกว่าคุณเห็นความเสี่ยงด้านความปลอดภัยและคุณไม่ต้องการรับผิดชอบต่อความเสี่ยงที่มีอยู่ก่อนหน้านี้
Wonko the Sane

2
@WonkotheSane: ทรู แต่ถ้าคุณใช้เวลาโครงการ หากปัญหามีขนาดใหญ่มากและงานที่คุณวางแผนไว้มีขนาดเล็กมากมันอาจจะดีกว่าถ้าคุณปฏิเสธโครงการ แน่นอนคุณยังควรจัดทำเอกสารข้อกังวลของคุณ (ความปลอดภัยและอื่น ๆ ) แต่ถ้าคุณไม่เคยทำงานในโครงการไม่ควรมีความเสี่ยงต่อความรับผิด ท้ายที่สุดคุณจะต้องประเมินว่าลูกค้าของคุณยินดีจ่ายค่าทำความสะอาดหรือไม่
sleske

14

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

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

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


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

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

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

1
หากฉันสามารถเพิ่มคะแนนพิเศษให้ฉันฉันจะ 'จำไว้ว่าลูกค้าจะไปหาคุณเพื่อขอความช่วยเหลือในการบำรุงรักษาใบสมัครของพวกเขา'
Daniel Hollinrake

7

ฉันชอบใช้การเปรียบเทียบที่ลูกค้าสามารถเกี่ยวข้องได้ จำนวนงานที่ฉันวางไว้ล่วงหน้าในการชนะงานนั้นขึ้นอยู่กับจำนวนเงินที่ลูกค้าตั้งใจจะใช้ ($ 100 นั้นแตกต่างจาก $ 20,000) สังเกตุฉันพูดว่า "ตั้งใจ" การประเมินมูลค่าส่วนบุคคลของคุณไม่ได้มีความหมายอะไรมากหากคุณไม่ได้รับสิ่งที่คุณขอ

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

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

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

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


6

ฉันจะอธิบายให้ลูกค้าฟังว่ารหัสนี้แย่แค่ไหน?

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

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

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

นี่เป็นปัญหาที่พบบ่อยและยากมาก ขอให้โชคดีกับมัน


6

ซื่อสัตย์และตรงไปตรงมา

แต่ที่สำคัญที่สุดอย่าทำงานที่จะไม่เป็นไปตามความคาดหวังของคุณ คนส่วนใหญ่ไม่ทราบว่าผู้รับเหมาสามารถไล่ลูกค้าได้และหากงานมีปัญหามากกว่าที่ควรค่า


3

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

พวกเขาอาจคิดว่าเครื่องมีส่วนประกอบที่ทำ X และอันอื่นที่ทำ Y. ในความเป็นจริงมันเป็นเครื่องที่คล้ายกันเกือบ 20 เครื่อง บางส่วนของพวกเขาไม่ทำอะไรอีกต่อไปพวกเขาทุกคนพยายามที่จะ preform ฟังก์ชั่นที่คนอื่นทำแล้วและไม่มีใครนอกจากที่ปรึกษาก่อนหน้านี้เคยเห็นอะไรเหมือนพวกเขามาก่อน

"ดู gizmo นี่ตรงนี้เพื่อแยกวิเคราะห์ตัวแปรโพสต์แล้วส่งองค์ประกอบนี้ลงไปในช่องกระต่ายของ if-elses มีอะไรไม่ได้อยู่แค่อันเดียวมีหนึ่งในนั้นในทุกหน้า (หรืออะไรก็ตาม) บางส่วนของพวกเขา ฆ่าเชื้ออินพุตและบางคนทำไม่ได้ (หรือทั้งหมดทำไม่ได้) และหากไม่ได้อ่านสิ่งทั้งหมดฉันก็ไม่รู้ว่าควรทำอะไร


"ลองนึกภาพเว็บไซต์ของพวกเขาว่าเป็นเครื่องจักรที่มีอยู่จริงเหมือนกดพิมพ์ทางกล" - และมันคือเงินที่พิมพ์! แต่เนื่องจากมันเสียจึงไม่พิมพ์เงินมากที่สุดเท่าที่จะทำได้ ... ที่ควรขอให้พวกเขา -)
Mawg

2

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

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

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

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


0

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

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

ฉันแค่พูดใน


0

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

ที่กล่าวว่าฉันจะพยายามที่จะแก้ไขปัญหาให้คุณทีละจุด:

  • ฉีด SQL ตกลงดังนั้นฉันเดาว่าโปรแกรมเมอร์กำลังใช้การต่อสายอักขระแทนการสืบค้นแบบกำหนดพารามิเตอร์และ / หรือกระบวนงานที่เก็บไว้ นี่เป็นเรื่องง่ายมากที่จะแก้ไขโดยเฉพาะอย่างยิ่งใน ADO.NET ... โดยส่วนตัวแล้วฉันจะพูดถึงมันกับลูกค้า แต่ไม่ได้ทำเรื่องใหญ่มากเกินไป
  • HTML จะถูกสร้างขึ้นในตรรกะทางธุรกิจและจะเป็นฝันร้ายในการจัดเรียงออก ตกลงเพื่อนนี่เป็นหนึ่งในที่ที่คุณให้รายละเอียดเพิ่มเติมกับฉัน เว้นแต่ว่าคุณกำลังใช้ MVC นี่เป็นแนวโน้มที่จะเกิดขึ้น ... แต่ก็ไม่จำเป็นว่าจะเป็นสิ่งเลวร้าย ... มันเป็นหนึ่งในสิ่งที่โปรแกรมเมอร์ส่วนใหญ่พูดว่า " gotoแย่มากอย่าใช้เลย" แต่คุณรู้อะไรไหม ผมเคยใช้ข้ามไปที่มันทำให้ความรู้สึก! ดังนั้นคุณแน่ใจหรือไม่ว่าพวกเขาไม่ได้ใช้คลาสผู้ช่วยเหลือที่เกิดขึ้นร่วมกับเนมสเปซเดียวกันกับ DLL รหัสธุรกิจ อีกครั้งมันไม่ใช่เรื่องยากที่จะแยก
  • ตรรกะทางธุรกิจแพร่กระจายไปทั่วทั้งแอปพลิเคชันมีการทำซ้ำจำนวนมากและรหัสสิ้นสุดที่ไม่ทำอะไรเลย . และ? ลูกค้ากำลังขอให้คุณเปลี่ยน HTML / CSS ทำไมคุณถึงสนใจเกี่ยวกับปัญหาเหล
  • จะช่วยให้การขว้างปาข้อยกเว้นที่มีการหายใจเพื่อให้เว็บไซต์ปรากฏขึ้นเพื่อให้ทำงานได้อย่างราบรื่น อีกครั้งที่คลุมเครือมาก ข้อยกเว้นเป็นเรื่องปกติในแอปพลิเคชันใด ๆ นั่นเป็นสาเหตุที่เราลอง / จับข้อในรหัสของเรา ถ้าพวกเขาไม่ได้เพิ่มมากขึ้นใน UI และทำลายประสบการณ์ของผู้ใช้ (เช่นการแสดง HTTP 500 โดยไม่จำเป็น) ฉันไม่คิดว่านี่เป็นสิ่งที่คุณควรใส่ใจเช่นกัน ..

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

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

แก้ไข: ฉันเห็นแล้วว่าคำตอบของฉันไม่ใช่คำตอบที่ได้รับความนิยมสูงสุด (ฉันคาดหวังไว้แล้ว) แต่ฉันก็ตอบสนองได้ ฉันแก้ไขสิ่งนี้เพื่อลดความวุ่นวาย ;-)


-1

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


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