Chapter 4: Key Construction Decisions

Quá trình xây dựng một phần mềm chất lượng đòi hỏi phải có những bước chuẩn bị cẩn thận (xem Phần 1 ). Nếu trong quá trình chuẩn bị, phần lớn các yếu tố chúng ta không kiểm soát được (phụ thuộc vào yêu cầu khách hàng, nguồn vốn, tính khí thất thường của các sếp, v.v.) thì giai đoạn kế tiếp sẽ là những quyết định mang tính “độc quyền” chuyên môn của cá nhân (hay nhóm) xây dựng phần mềm.

Những vấn đề chính cần cân nhắc khi đưa ra những quyết định “chuyên môn”:

  • Ngôn ngữ lập trình: Lựa chọn ngôn ngữ có nhiều kinh nghiệm nhất là ưu tiên số một của cá nhân hay nhóm xây dựng phần mềm. Tuy nhiên, tùy theo loại dự án mà chúng ta sẽ chọn ngôn ngữ hiệu quả nhất. Python hay R sẽ là lựa chọn số 1 cho những dự án Machine Learning; JavaScript đang độc tôn trong thế giới Web; Java hay Kotlin dành cho những gã nghiện Android; v.v.
  • Các quy ước hay phong cách lập trình: Khi chúng ta đọc một bài báo hay một bài văn xuôi dù hay dở thế nào không quan trọng, quan trọng là chúng ta nhận ra tác giả nó là ai. Cách sử dụng câu từ, dấu câu, các ẩn dụ, v.v. thể hiện một phong cách rất riêng của mỗi tác giả. Trong thế giới lập trình tương tự. Mỗi lập trình viên sẽ có những phong cách khác nhau, những quy ước khác nhau trong cách viết mã chương trình. Tất nhiên, những quy ước thuộc về “chuẩn công nghiệp” thì bắt buộc mọi lập trình viên phải tuân theo để có thể làm việc trong môi trường nhóm cộng tác hiện nay.
  • Các dạng lập trình viên: Có hai dạng lập trình viên. Dạng thứ nhất là những người bị hạn chế và phụ thuộc vào ngôn ngữ lập trình mình đang dùng. Những người này gọi là programming in a language. Dạng thứ hai là hững người có thể biến những hạn chế của ngôn ngữ mình đang dùng theo những mục tiêu của dự án. Những người này gọi là programming into a language. Điểm khác biệt là ininto. Tuy nhiên, cũng cần những thay đổi phù hợp. Có thể dùng C# để viết những dự án Machine Learning nhưng trong thực tế thì dùng Python hay R. Có thể dùng C để viết những chương trình quản lý sinh viên, chương trình kế toán, v.v. nhưng thực tế lại dùng Visual Basic. Một người lập trình xuất sắc cũng cần biết cách thoát khỏi những chi tiết kỹ thuật để nhìn xa hơn, rộng hơn trong khu rừng dự án.
  • Cách thực hành hiệu quả nhất: Tùy theo kiểu dự án mà chúng ta lựa chọn những cách tiếp cận khác nhau về ngôn ngữ (hay các công cụ), về nhóm, về tiêu chuẩn chất lượng. Sau đây là checklist giúp chúng ta trong quá trình đưa ra quyết định:

Checklist: Major Construction Practices

Coding

  • Have you defined how much design will be done up front and how much will be done at the keyboard, while the code is being written?
  • Have you defined coding conventions for names, comments, and layout?
  • Have you defined specific coding practices that are implied by the architecture, such as how error conditions will be handled, how security will be addressed, what conventions will be used for class interfaces, what standards will apply to reused code, how much to consider performance while coding, and so on?
  • Have you identified your location on the technology wave and adjusted your approach to match? If necessary, have you identified how you will program into the language rather than being limited by programming in it?

Teamwork

  • Have you defined an integration procedure—that is, have you defined the specific steps a programmer must go through before checking code into the master sources?
  • Will programmers program in pairs, or individually, or some combination of the two?

Quality Assurance

  • Will programmers write test cases for their code before writing the code itself?
  • Will programmers write unit tests for their code regardless of whether they write them first or last?
  • Will programmers step through their code in the debugger before they check it in?
  • Will programmers integration-test their code before they check it in?
  • Will programmers review or inspect each other’s code?

Tools

  • Have you selected a revision control tool?
  • Have you selected a language and language version or compiler version?
  • Have you selected a framework such as J2EE or Microsoft .NET or explicitly decided not to use a framework?
  • Have you decided whether to allow use of nonstandard language features?
  • Have you identified and acquired other tools you’ll be using—editor, refactoring tool, debugger, test framework, syntax checker, and so on?