Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 89 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
89
Dung lượng
1,11 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI NGUYỄN THỊ THANH NGA PHÂN TÍCH SOURCE CODE VÀ CÁC GIẢI PHÁP NÂNG CAO KỸ THUẬT VIẾT MÃ LOẠI BỎ LỖI LẬP TRÌNH VÀ TĂNG HIỆU QUẢ CỦA CHƯƠNG TRÌNH Chun ngành: CƠNG NGHỆ THƠNG TIN LUẬN VĂN THẠC SĨ KHOA HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS HUỲNH QUYẾT THẮNG HÀ NỘI - NĂM 2009 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Cán hướng dẫn khoa học : PGS.TS.Huỳnh Quyết Thắng Cán chấm nhận xét : Cán chấm nhận xét : Luận văn thạc sĩ bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI, ngày tháng năm 2009 Phân tích source code LỜI CẢM ƠN Tôi xin gởi lời cảm ơn chân thành đến PGS TS Huỳnh Quyết Thắng, người tận tình hướng dẫn, giúp đỡ tơi suốt trình thực luận văn tạo điều kiện để tơi hồn thành luận văn Xin gởi lời cản ơn đến Thầy Cô dạy thời gian qua Tôi xin cảm ơn bạn đồng môn đồng nghiệp quan tâm, chia suốt trình học làm luận văn Xin cảm ơn gia đình dành cho tơi tình thương yêu hỗ trợ tốt Nguyễn Thị Thanh Nga Phân tích source code MỤC LỤC Chương TỔNG QUAN 1.1 Giới thiệu 1.2 Sơ lược phân tích mã nguồn 1.3 Mục đích nghiên cứu đề tài 11 Chương CƠ SỞ LÝ THUYẾT 12 2.1 Abstract Syntax Tree (AST) 12 2.2 Phân tích mã nguồn 18 2.3 Vấn đề tìm lỗi 18 2.3.1 Các loại phân tích mã nguồn 20 2.3.2 Các bước thực phân tích mã nguồn 21 2.3.3 Xử lý phân tích: 23 Chương ĐO LƯỜNG CHẤT LƯỢNG THIẾT KẾ 26 3.1 Làm để đo lường chất lượng thiết kế 26 3.2 Các thông số đánh giá chất lượng thiết kế: 26 3.3 Hiện thực 31 Chương PHÁT HIỆN VÀ KHẮC PHỤC LỖI TRONG PHÁT TRIỂN CHƯƠNG TRÌNH 35 4.1 Làm để phát lỗi khắc phục 35 4.2 Thực 37 4.3 Phương pháp nhận dạng lỗi bảo mật chương trình 40 4.4 SQL Injection 41 4.5 Cross-site scripting 42 4.6 Các khắc phục lỗi bảo mật 43 4.6.1 SQL Injection 43 4.6.2 Cross-site scripting 45 Chương ĐO LƯỜNG HIỆU QUẢ PHẦN MỀM 47 5.1 Phân tích dựa thành phần (Component Base Software Engineering) 47 5.2 Thuật ngữ khái niệm 47 5.3 Motivation 49 5.4 Mơ hình Component 50 5.5 Dự đoán hiệu CBSE 51 5.5.1 Nhân tố ảnh hưởng hiệu 52 Nguyễn Thị Thanh Nga Phân tích source code 5.5.2 Phương pháp dự đoán hiệu 53 5.6 Mơ hình thành phần song song 57 5.6.1 Xử lý phát triển 57 5.6.2 Các thành phần PCM 59 5.7 Phân tích mã nguồn phục vụ việc đo lường tốc độ thực thi 62 5.7.1 Các thuộc tính mong muốn RDSEFFs 63 5.7.2 Sử dụng tài nguyên 64 5.7.3 Các thành phần đáp ứng cần thiết 67 5.7.4 Nhiệm vụ chuyển đổi code sang RDSEFFs 68 5.8 Xây dụng RDSEFFs từ code Java 73 Chương TRIỂN KHAI THỬ NGHIỆM VÀ ĐÁNH GIÁ TRÊN ỨNG DỤNG THỰC TẾ 79 6.1 Đo lường chất lượng thiết kế (Design) 79 6.2 Đo lường chất lượng bảo mật cho sản phẩm (Quality & Security) 81 Chương KẾT LUẬN VÀ KIẾN NGHỊ 85 DANH MỤC TÀI LIỆU THAM KHẢO 86 Nguyễn Thị Thanh Nga Phân tích source code DANH MỤC HÌNH Hình 3.1-1: Ví dụ kết phân tích 12 Hình 3.3-1: Vai trị phân tích tĩnh xử lý phát triển phần mềm 19 Hình 3.3-2: Tìm lỗi dự án phát triển phần mềm sử dụng cơng cụ phân tích tĩnh 22 Hình 4.2-1: Các class bên phụ thuộc vào class bên package 27 Hình 4.2-2: Class bên package phụ thuộc vào class bên 27 Hình 4.2-3: Độ ổn định package 29 Hình 4.2-4: Độ ổn định abstract class 30 Hình 4.2-5: Một ví dụ cho tham số package 33 Hình 4.2-6: Phân tích dựa vào tham số package 33 Hình 5.2-1: Cây AST cho đoạn code ví dụ 38 Hình 5.2-2: Cây AST cho phân tích đoạn code ví dụ 40 Hình 5.6-1: Cây AST cho phân tích đoạn code ví dụ 45 Hình 6.1-2 : Kết phân tích mã nguồn 80 Hình 6.1-2 : Tổng hợp kết phân tích 81 Hình 6.2.1: Bảng tổng kết lỗi tìm thấy 82 Hình 6.2.2 : Bảng chi tiết lỗi phân loại 82 Nguyễn Thị Thanh Nga Phân tích source code Trang MỞ ĐẦU Sự gia tăng đáng kể số lượng phần mềm sử dụng hàng năm đòi hỏi nhu cầu phát triển người lập trình sản phẩm lập trình Nhưng việc thuê người lập trình tốn không hiệu hệ thống xem xét lớn chia thành nhiều phần nhỏ Sự phức tạp phần mềm đại đòi hỏi có giải pháp để đứng vững sử dụng công cụ hỗ trợ Chuộng công cụ dựa vào việc phân tích mã nguồn, cơng cụ cung cấp thơng tin cho người lập trình để tăng hiệu cơng việc cải tiến tồn diện sản phẩm người lập trình Với thực tế vậy, nên việc tìm hiểu Phân tích Mã nguồn giải pháp nâng cao kỹ thuật viết mã (Code Optimization Secure Coding) loại bỏ lỗi lập trình tăng hiệu chương trình chủ đề khơng thể thiếu cho lập trình viên, cho kỹ sư phần mềm cho muốn nâng cao khả viết code Cơng nghệ cho việc đánh giá thực Ngôn ngữ Java Hệ điều hành Windows Kết cấu luận văn Luận văn bao gồm chương Chương Tổng quan Chương trình bày bối cảnh, mục tiêu kết thu luận văn Chương Cơ sở lý thuyết Nguyễn Thị Thanh Nga Phân tích source code Trang Chương trình bày khái niệm bản, sở lý thuyết cho việc phân tích mã nguồn Chương Đo lường chất lượng thiết kế Chương trình bày phương pháp phân tích đo lường chất lượng thiết kế Chương Phát khắc phục lỗi Chương trình bày phương pháp phân tích phát khắc phục lỗi Chương Đo lường hiệu phần mềm Chương trình bày phương pháp phân tích đo lường hiệu phần mềm Chương Triển khai thử nghiệm đánh giá ứng dụng thực tế Trên sở lý thuyết trình bày chương triển khai ứng dụng thực tế đo lường chất lượng thiết kế, tìm sửa lỗi, bảo mật chương trình Chương Kết luận kiến nghị Chương trình bày kết đạt toán, đề cập lại việc thực đề tài Nêu lên hướng mở rộng phát triển cho đề tài Nguyễn Thị Thanh Nga Phân tích source code Chương Trang TỔNG QUAN 1.1 Giới thiệu Phân tích mã nguồn (mã nguồn) tự động bán tự động chủ đề nghiên cứu lớn nhiều năm qua Trong suốt giai đoạn này, kỹ thuật giải thuật phân tích mã nguồn thay đổi lớn, thay đổi đột ngột Khả công cụ thực phân tích mã nguồn mở rộng để đáp ứng với thách thức thay đổi Trong đề tài ta bàn phân tích mã nguồn Đề tài cung cấp định hướng cho công việc tương lai giai đoạn năm năm tới nghiên cứu phát triển ứng dụng, kỹ thuật, thách thức phân tích mã nguồn 10, 20 50 năm tới Với nhìn vậy, phân tích mã nguồn có mục đích đạt đến kết Việc xác định kết mong muốn quan trọng Kết mong muốn phải định nghĩa Sau lựa chọn kỹ thuật phân tích mã nguồn áp dụng để đạt đến kết 1.2 Sơ lược phân tích mã nguồn Phân tích mã nguồn việc kiểm tra code tự động với mục đích tìm lỗi chương trình ứng dụng trước đưa cho người sử dụng Mã nguồn bao gồm câu lệnh tạo chương trình soạn thảo cơng cụ lập trình sau lưu file [tài liệu trích dẫn] Phân tích mã nguồn tĩnh động [tài liệu trích dẫn] a Phân tích tĩnh Là việc tìm lỗi cách kiểm tra code mà khơng cần thực thi chương trình Nên phát lỗi giai đoạn đầu phát triển chương trình, thường loại trừ nhiều lỗi cần thiết cho nhiều phiên sau Nguyễn Thị Thanh Nga Phân tích source code Trang 10 Trong hầu hết trường hợp phân tích thực số phiên mã nguồn số trường hợp khác object code Thuật ngữ thường cung cấp để thực phân tích cơng cụ tự động, với việc phân tích người gọi chương trình hiểu chương trình Sự tinh tế việc phân tích thực cơng cụ khác từ việc xem xét hành xử câu lệnh khai báo độc lập, điều bao gồm hồn thành mã nguồn chương trình họ phân tích Phân tích tĩnh khơng có miêu tả cho chương trình đầu vào kết phải cung cấp đến tất chương trình thực thi Sự đánh giá xấp xỉ bắt buộc phải làm Trái lại, phân tích động bắt chương trình đầu vào phải có miêu tả ( tiêu biểu đầu vào đơn) Điều cho phép xác hơn, nhiên, kết bảo đảm cho đầu vào cụ thể b Phân tích động Sau phân tích tĩnh, phân tích động thực để phát nhiều lỗi khó thấy lỗi bảo mật Phân tích kiểm tra chương trình thời gian thực Phân tích động thường sử dụng file lưu vết Đơn giản ghi lại tồn đường để đưa đến khơng gian xem xét Ball Larus mơ tả giải thuật để dẫn chương trình giới thiệu đầu nhỏ Mục tiêu họ chụp lại lịch sử thực thi luồng điều khiển động chương trình nén vết Hệ thống khác chụp trạng thái việc tính tốn chi tiết mẫu trễ sử dụng kỹ thuật phân tích thống kê Ưu điểm phương pháp : Khơng u cầu người lập trình có khả dự đốn tình để xảy lỗi Nguyễn Thị Thanh Nga Phân tích source code Trang 75 tả dạng biểu thức Stochastic CollectionIteratorActions có tương tác đến tham số Có đối tượng biểu diễn dịch vụ tham số dạng ký hiệu, sử dụng lại cho tập hợp mảng qua vịng lặp InternalActon có liên quan đến ParameterResourceDemand giữ biểu thức Stochastic chứa tham số đưa ExternalCallAction biểu diễn việc gọi dịch vụ bên ngồi khơng u cầu tài ngun chúng, tham khảo VảiableUsages Tham số bao gồm dịch vụ gọi liên quan với ExternalCallAction Biểu thức stochastic chứa ký tự VariableUsage giá trị chúng, phụ thuộc vào luồng liệu dịch vụ gọi Sự chuyển đổi biểu thức sang biểu thức Stochastic PCM sử dụng biểu thức Stochastic cho việc đặc tả biểu thức vòng lặp, điều kiện cho chuyển đổi nhánh tham số yêu cầu tài nguyên Vì Java2PCM phân tích phải chuyển đổi biểu thức tìm thấy Java tương ứng với biểu thức stochastic, chuyển đổi cài đặt công việc trước Giá trị biến chứa số nguyên tham khảo qua biến Giá trị biểu thức stochastic Phân tích trước tiên kiểm tra biến đưa biểu thức cho kiểu số nguyên Nếu trường hợp, biểu thức VALUE thêm vào tên biến biểu thức Trong Java kiểu biểu diễn số nguyên sau: Byte, int, long, short AtomicInteger, AtomicLong, BigInteger, Byte Integer, Long, Short Cú pháp khác Java PCM biểu diễn luận lý and, or not cho điều kiện Trong Java, &&, ||, ! tương đương PCM and, or, not Java2PCM chuyển đổi thay toán tử Java PCM Nguyễn Thị Thanh Nga Phân tích source code Trang 76 PCM cung cấp cấu trúc cú pháp thiết kế cho biểu diễn số phần tử mảng, danh sách, giống tập hợp Cho biến var giữ tập hợp, biểu thức var.NUMBET_OF_ELEMENTS Trong Java có hai lại thông thường biểu thức giống array.length cho array collection.size() cho kiểu cài đặt interface collection Hai biểu thức thay var.NUMBER_OF_ELEMENTS Map code Java sang mơ hình PCM a Component Component đơn vị PCM Trong ngơn ngữ Java khơng có khái niệm component, thêm vào qua mơ hình component xây dựng Java Component Java Ngơn ngữ Java khơng có component Đơn vị tổ chức class, package nhóm class vào đơn vị lớn Class Java biểu diễn component Hai chi tiết khác component khác với khái niệm class Java sử dụng blackbox đặc tả interface yêu cầu Người lập trình nên sử dụng component mà không cần biết bên component Class Java khơng có tính chất Một nguyên nhân thiếu interface yêu cầu thảo luận tỏng đoạn kế Ngun nhân khác khơng kế thừa thay đổihanhf vi phương thức Khi phương thức gọi phương thức khác class chúng gọi phương thức overwritten subclass, hành vi người gọi thay đổi Người lập trình khơng thể biết điều từ tài liệu class Vì vậy, không thừa kế, cách chuẩn class adopt đến môi trường yêu cầu xử lý white-box Nguyễn Thị Thanh Nga Phân tích source code Trang 77 Để làm rõ cho người lập trình cài đặt component hệ thống lớn hơn, phụ thuộc phải trạng thái tường minh Class Java cung cấp khơng có ý nghĩa để làm điều Thật vậy, đáp ứng người lập trình để cung cấp package chứa class gọi lớp cho Việc sử dụng rộng rãi hệ thống component EJB, trình bày chủ yếu phần 2.1.3, sử dụng class component, nhiên cơng việc trình bày khơng vào đặc tả chi tiết cho EJB Component PCM Component class PCM Chúng liên quan với interface cung cấp yêu cầu Trong PCM, component cấu trúc xa vào kiểu khác để Phản ánh giai đoạn phát triển khác Phân biệt component tích hợp Trong giai đoạn phát triển, component cài đặt giai đoạn phân tích code Component tích hợp hoạt động phân tích mã nguồn xem mức thấp thiết kế cài đặt phần mềm Vì vậy, nhiệm vụ vấn đề phân tích trình bày để xác định component mã nguồn ví dụ Ánh xạ sang PCM Java khơng có khái niệm component, câu hỏi đặt để ánh xạ Java sang PCM Ở ta ánh xạ: Class sang component Package sang component Ở ánh xạ class Java sang component chọn Kết chương Nguyễn Thị Thanh Nga Phân tích source code Trang 78 Chương trình bày sở lý thuyết cho việc phân tích đo lường hiệu phần mềm Nguyễn Thị Thanh Nga Phân tích source code Chương Trang 79 TRIỂN KHAI THỬ NGHIỆM VÀ ĐÁNH GIÁ TRÊN ỨNG DỤNG THỰC TẾ 6.1 Đo lường chất lượng thiết kế (Design) Thử phân tích đánh giá chất lượng thiết kế thư viện sau Hình 6.1: Cấu trúc thư viện epayment Ta có kết phân tích sau: Nguyễn Thị Thanh Nga Phân tích source code Trang 80 Hình 6.1-2 : Kết phân tích mã nguồn Bảng tổng kết liệu thu từ kết phân tích mã nguồn sau : Nguyễn Thị Thanh Nga Phân tích source code Trang 81 Hình 6.1-2 : Tổng hợp kết phân tích Đánh giá: Chúng ta thấy thư viện gồm gói (package), thơng tin chi tiết hình vẽ Kết ta thấy thư viện có khả mở rộng dựa gói epayment.framework (số lượng Abstractness lớn), độ ổn định gói tuyệt đối Đánh giá: gói framework cung cấp interface để giao tiếp tích hợp với hệ thống bên ngoài, cung cấp lớp sở (base class) để mở rộng ứng dụng Hai package request and response có hai class thực (implement) hai interface Trong class package request không dùng trực tiếp từ package khác (Ca=0), class response dùng từ class khác (Ca=1) có D=0.5 cho thấy có khả mở rộng độ ổn định cao Các package khác dùng để thực chức hệ thống Kết luận chung, thư viện thiết kế tốt, có khả mở rộng tích hợp với hệ thống bên 6.2 Đo lường chất lượng bảo mật cho sản phẩm (Quality & Security) Việc thực đánh giá chất lượng sản phẩm dựa thư viện mã nguồn mở findbugs Thử phân tích thư viện antlr.jar, kết sau : Nguyễn Thị Thanh Nga Phân tích source code Trang 82 Hình 6.2.1: Bảng tổng kết lỗi tìm thấy Hình bảng tổng kết lỗi tìm thấy theo package phân loại theo loại lỗi Bugs P1: loại lỗi nghiêm trọng cần sớm xem xét chỉnh sửa Bugs P2: cảnh báo, tốt nên chỉnh sửa Bugs P3: Khơng phải lỗi, tìm tàng gây lỗi Bugs Exp (experience): Những đề nghị để đoạn mã tốt (good practice) Hình 6.2.2 : Bảng chi tiết lỗi phân loại Hình cung cấp chi tiết thông tin lỗi phân loại Vi dụ: Nguyễn Thị Thanh Nga Phân tích source code Trang 83 Bad practice : cách thực chưa tốt, đề nghị cách tốt Performance : Nên chỉnh sữa để chương trình chạy nhanh Multithreaded correctness : chỉnh sửa để chương trình chạy mơi trường đa phân luồng Malicious code Vulnerability : lỗi liên quan đến bảo mật Dodgy : Những lỗi tìm tàng Hình 6.2.3 : Bảng chi tiết lỗi cách khắc phục Ví dụ liên quan đến vấn đề tốc độ thực thi chương trình Hiện lớp dùng new Interger(int) để tạo đối tượng interger Nên dùng Integer.valueOf(int) để chương trình thực thi nhanh Nguyễn Thị Thanh Nga Phân tích source code Trang 84 Hình 6.2.4 : Bảng chi tiết lỗi cách khắc phục Hình cung cấp chi tiết thơng tin lỗi tìm thấy cách khắc phục Quy trình sữa lỗi lặp lặp lại lỗi sửa nhiều Ví dụ : lớp AnnotationCollector, dòng 163 dùng câu lệnh try catch exception không tồn Do tốt nên xóa try catch lớp Kết chương Chương trình bày kết việc thực phân tích đo lường chất lượng thiết kế bảo mật ứng dụng thực tế Nguyễn Thị Thanh Nga Phân tích source code Trang 85 Chương KẾT LUẬN VÀ KIẾN NGHỊ Sau thực đề tài, em thu số kết sau: Tìm hiểu sở lý thuyết phương pháp phân tích mã nguồn Ứng dụng phân tích mã nguồn việc phân tích chất lượng thiết kế, tìm sửa lỗi chương trình, bảo mật sản phẩm hiệu chương trình Hạn chế Em chưa thực phần phân tích hiệu chương trình Hướng phát triển Hiện thực phần phân tích hiệu chương trình Nguyễn Thị Thanh Nga Phân tích source code Trang 86 DANH MỤC TÀI LIỆU THAM KHẢO Tiếng Anh Addison-Wesley (1999), Data Structures and Algorithm Analysis in Java Daniel Jackson & Martin Rinard , Software Analysis: A Roadmap David Binkley (2007), Source code Analysis: A Road Map Thomas Kappler (2008), Code-Analysis Using Eclipse to Support Performance Prediction for Java Components Jacob West (2006), Secure Programming with Static Analysis by Brian Chess Jason Gorman (2000), OO Design Principles & Metrics Robert C Martin, Design Principles and Design Patterns Mary Brandel, How to Evaluate (and Use) Web Application Security Scanners Mary Brandel, Source code analysis breaks new ground 10 The Microsoft Source code Analyzer for SQL Injection tool is available to find SQL injection vulnerabilities in ASP code http://support.microsoft.com/kb/954476 11 PMD: Automated Source code analysis and bug detection - http://www.infoq.com/news/2007/07/pmd 12 Source code Analysis Using Java APIs http://today.java.net/pub/a/today/2008/04/10/source-code-analysisusing-java-6-compiler-apis.html Nguyễn Thị Thanh Nga - Phân tích source code 13 Trang 87 When, Why, and How: Code Analysis - An Interview with Adam Kolawa, Ph.D - http://www.codeproject.com/KB/tips/Code_Review.aspx 14 White Paper: Automated Source code Analysis: When, why, and how to leverage Source code analysis tools - Gwyn Fisher http://www.mil-embedded.com/articles/id/?2923 15 Software package metrics - http://en.wikipedia.org/wiki/Software_package_metrics Thư viện Open Source 16 Jdepend, JDepend traverses Java class file directories and generates design quality metrics for each Java package JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to effectively manage and control package dependencies 17 Dependency Finder, Extracts dependencies and OO metrics from Java class files produced by most Java compilers 18 FindBugs, looks for bugs in Java programs It can detect a variety of common coding mistakes, including thread synchronization problems, misuse of API methods, etc 19 PMD, Checkstyle, PMD scans Java source code and looks for potential Nguyễn Thị Thanh Nga problems Phân tích source code TĨM TẮT LUẬN VĂN Loại bỏ lỗi lập trình nâng cao hiệu chương trình vấn đề quan trọng trình xây dựng phần mềm Quá trình thường thực giai đoạn thiết kế phần mềm, phát triển kiểm tra lỗi phần mềm Công việc loại bỏ lỗi lập trình nâng cao hiệu chương trình triển khai nhằm giúp giảm chi phí nâng cao chất lượng phần mềm triển khai cho khách hàng Ngoài ra, vấn đề quan trọng định thành bại phần mềm làm đau đầu nhà quản lý dự án Đó làm để phần mềm dễ nâng cấp, khách hàng yêu cầu Đã có số phương pháp giải toán thực theo dựa vào việc phân tích mã nguồn (phân tích source code) Đề tài trình bày phân tích source code giải pháp nâng cao kỹ thuật viết mã loại bỏ lỗi lập trình tăng hiệu chương trình Dựa vào phân tích source code (mã nguồn) để đo lường chất lượng thiết kế phần mềm, phát khắc phục lỗi trình phát triển phần mềm, đo lường hiệu phần mềm Từ khóa: mã nguồn, phân tích, tìm lỗi, chất lượng, bảo mật Nguyễn Thị Thanh Nga Phân tích source code ABSTRACT Decrease bugs in programming and improve performance of the product are very important in software development process The things are made at design, develop and testing of the product The second thing, these things will decrease cost and improve quality when deploy to their clients The other important thing that determines the success of the product beside of quality is how the product can enhance? How can they upgrade some new functionality? We have some ways to identify quickly that the product can be enhanced or improved base on source code analysis This thesis describes the technical to analysis source code and the solution that can help: - Improve program skill - Increase quality of product - Improve performance of product - Discover security vulnerability and how to fix it - Evaluate the quality of design, extensibility Nguyễn Thị Thanh Nga ... nguồn giải pháp nâng cao kỹ thuật viết mã (Code Optimization Secure Coding) loại bỏ lỗi lập trình tăng hiệu chương trình chủ đề khơng thể thiếu cho lập trình viên, cho kỹ sư phần mềm cho muốn nâng. .. Thị Thanh Nga Phân tích source code Trang 18 } } } return closed; } } 2.2 Phân tích mã nguồn Phân tích mã nguồn có phần: Phân tích cú pháp (Parser): Phần phân tích cú pháp mã nguồn vào nhiều biểu... nguồn Kết chương Chương trình bày phương pháp phát lỗi cú pháp chương trình lỗi bảo mật trình bày bước thực việc phân Nguyễn Thị Thanh Nga tích để phát lỗi Phân tích source code Trang 47 Chương