2012-09-12 24 views
17

Tôi đang cố gắng thiết lập các báo cáo bảo hiểm mã đơn giản cho một nhóm mã hóa trong hỗn hợp Scala/Java ở khoảng. tỷ lệ 90/10 và chạy vào một số rào cản nghiêm trọng. Trước đây tôi đã thiết lập & Sonar được quản lý thành công lớn với một nhóm chỉ có Java, nhưng nó dường như không phải là một lựa chọn.Có một mức độ mã Sonar-level tương đương với Scala không?

Sonar w/plugin Scala có lỗi và xuất hiện để hỗ trợ các dự án chỉ có Scala chứ không hỗ trợ các dự án hỗn hợp.

SCCT tích hợp với công cụ xây dựng maven của chúng tôi, nhưng không thành công với thất bại kiểm tra sai âm tính nhiều lần.

Undercover là may mắn nhất của tôi cho đến nay; Nó được tích hợp với maven build của chúng tôi & tạo ra các báo cáo, nhưng chúng không được lưu trữ hoặc lưu trữ ở bất cứ nơi nào như chúng sẽ có với Sonar. Dường như không có chỉ mục trung tâm để đơn giản hóa việc điều hướng các báo cáo được tạo ra.

Tôi đã đọc câu trả lời ở đây trên StackOverflow, nhưng chúng phần lớn có từ năm 2010 và cho thấy không có giải pháp phù hợp nào. Điều này có thay đổi không?

Có điều gì hiển nhiên tôi bị thiếu không?

+1

Cobertura sẽ hoạt động như thế nào? Thời gian qua tôi đã kiểm tra nó là khá có thể sử dụng, mặc dù không được tích hợp với Sonar. – ron

+0

@ron: Cái đó tiếp theo trong danh sách của tôi. Tôi quản lý để có được Undercover để viết các báo cáo vào định dạng XML của Cobertura, nhưng kể từ khi plugin Cobertura thực sự không chạy, Jenkins từ chối thừa nhận rằng các báo cáo bảo hiểm mã tồn tại. Tôi nhớ đã nghe điều gì đó về Cobertura không đối phó tốt với tất cả các lớp Java mà Scala có thể tạo ra, nhưng tôi đoán tôi sẽ tìm ra. Hãy theo dõi! – warandpeace

+1

@ron: Cobertura + Jenkins Cobertura Plugin đang hoạt động khá tốt. Chính xác và dễ đọc, cho thấy xu hướng và cho phép tôi xem chi tiết. Nó không hoàn toàn là Sonar, nhưng nó hoạt động! – warandpeace

Trả lời

7

Về Sonar phụ:

  • có, sự phát triển Scala Sonar Plugin hiện đang bị đình trệ. Nó được khởi xướng bởi cộng đồng, nhưng không ai đề nghị tiếp quản nó. Nếu có một số tình nguyện viên, chúng tôi sẽ sẵn lòng hướng dẫn và giúp đỡ họ.

  • liên quan đến việc hỗ trợ một số ngôn ngữ bên trong một dự án duy nhất, hỗ trợ sẽ đến ở Sonar. Tôi không thể cung cấp cho bạn một lộ trình cho nó, nhưng chúng tôi hiện đang suy nghĩ về cách thêm hỗ trợ này vào Sonar trong các bản phát hành tiếp theo, vì vậy đây là một vấn đề ngắn hạn.

+0

4 năm và vẫn không có lời nào về sự hỗ trợ của Scala cho Sonar. Từ cuối cùng từ Freddy Mallet chỉ đơn giản là để xác nhận rõ ràng: https://groups.google.com/forum/#!topic/sonarqube/MkcW9tFG8UY – RCross

6

Bạn có thể sử dụng SCCT hoặc JaCoCo.

  • SCCT: Nó hỗ trợ Scala lên phiên bản 2.10, nhưng phát triển dường như bị trì hoãn trong khoảng 9 tháng. Nó hỗ trợ Scala nguyên bản và làm việc với cả hai, Maven và SBT.
  • JaCoCo đang phát triển đáng sợ. Nó hỗ trợ bất kỳ phiên bản nào của Scala, nhưng không phải nguyên bản, nhưng trên cấp độ bytecode. Vì vậy, bạn có thể nhận được một số hiện vật, ví dụ: một số mã chỉ được bao phủ một phần, bởi vì bytecode được tạo ra có một số đường dẫn mã lý thuyết mà JaCoCo thấy (nhưng không bao giờ có thể được thực thi từ mã Scala).

JaCoCo có thể hơi phức tạp khi thiết lập với Maven và Scala. Dưới đây là một vài thủ thuật:

  1. Sử dụng biến thể với trình khởi chạy tác nhân. Không sử dụng biến thể với bytecode tiền xử lý.
  2. Khi sử dụng JaCoCo với Maven: Có nhiệm vụ Maven (jacoco:prepare-agent) sẽ tạo biểu thức chính xác cho trình khởi chạy tác nhân và lưu trữ nó vào thuộc tính. Sau đó, bạn có thể sử dụng thuộc tính này làm tham số dòng lệnh khi chạy máy ảo Java.
  3. Parametrize trình khởi chạy tác nhân để nhiều lần khởi chạy (ví dụ: để chạy các thử nghiệm khác nhau) ghi vào cùng một tệp nhật ký. Một số plugin IDE sẽ gặp sự cố khi phân tích cú pháp một tệp như vậy, nhưng plugin JaCoCo Hudson chẳng hạn hoạt động tốt.
+1

cảm ơn bạn đã trả lời của bạn, tôi chỉ quản lý để có được SCCT tạo báo cáo cobertura và chúng tôi Jenkins cobertura plugin để đọc nó. Tuy nhiên SCCT bao gồm tất cả mọi thứ trong phạm vi mã của nó. Tôi muốn có thể loại trừ một số thư mục giống như trong JaCoCo. jacoco.excludes trong jacoco.Config: = Seq ("views *", "* Routes *", "controllers * routes *", "controller * Reverse *", "bộ điều khiển * javascript *", "controller * ref *") , – Roch

+0

Bạn có biết tôi có thể làm điều đó không? – Roch

+0

Đặt cược tốt nhất của bạn có thể là đăng quá trình tệp cobertura.xml. Bạn có thể làm điều này dễ dàng với tích hợp Groovy maven (http://books.sonatype.com/mcookbook/reference/ch02s02.html). Ngoài ra, bạn có thể thay đổi tệp CoberturaReporter.scala (https://github.com/mtkopone/scct/blob/master/src/main/scala/reaktor/scct/report/CoberturaReporter.scala) –