Sider Blog

コードレビュー自動化サービス「Sider」を運営するSider株式会社のコーポレートブログです。

SiderでMISRA C規格準拠チェックが可能に。組み込みソフトウェアの開発にSiderによるMISRA C/C++チェックを

こんにちは。いつもSiderをご利用頂きありがとうございます。
SiderがMISRA C コーディングガイドラインの解析に対応いたしましたので、ご紹介します。
これにより、プルリクエスト単位で、そのプルリクエスト内で修正されたソースコードがMISRA C:2012に違反していないかを常時チェックすることが出来ます。

SiderではCppcheckという解析エンジンを用いております。そのエンジンのアドオンmisraを有効にする記載を、Siderの設定ファイルに記載していただくことでご利用いただけます。

sider.yml

linter:
  cppcheck:
    addon:
      - misra

MISRA C とは?

MISRA C とは Motor Industry Software Reliability Association (MISRA) が策定しているC言語のコーディングガイドラインです。
組み込み制御システムや車載ソフトウェアといった高い水準の安全性を求められるソフトウェアの開発者向けに、ガイドラインのベストプラクティスを提供しています。

MISRA C はもともと自動車分野向けに策定されました。しかし、今日では鉄道/航空宇宙/医療機器などの幅広い組み込みソフトウェア分野でも採用されています。
このような高い水準の安全を求められる開発現場で、安全性/可搬性/信頼性を確保するために MISRA C ガイドラインを利用する場面が増えております。

Siderの Cppcheck MISRA C アドオン対応

Siderは既にC/C++言語向けにCppcheckのサポートしておりましたが、今回、 MISRA C アドオンに対応いたしました。

Cppcheckの MISRA C アドオンでルールのメッセージを表示するためには、使用者ごとにMISRAからガイドラインのドキュメントを購入する必要があります。
しかし、このたび、SiderはMISRAと契約を締結しましたので、ルールのメッセージを当プロダクトに組み込んで提供を開始いたしました。
なお、そのルールのメッセージは無制限には公開できないため、解析対象がprivateなレポジトリの場合のみ表示されます。

f:id:sideci:20201109130902p:plain
Siderでの解析の実行例

もし、複数の解析器を有効にして実行していたり、報告されたissueの数が多い場合には、「高度な検索」をクリックしてフィルタしてください。ツールとして Cppcheck、そして所望のルールIDを適用することで、 MISRA C の結果のみを表示することができます。

f:id:sideci:20201109130948p:plain
高度な検索機能によるフィルタ

MISRA C:2012 のSiderのカバー範囲

SiderではCppcheckの MISRA C アドオンを利用して、MISRA C:2012 の143件のルールのうち99件をサポートしています。カバーしていない44件ほどはSiderではチェックすることは出来ません。
それらの項目の多くはコンパイルが必要なためであり、迅速に解析を行うSiderのサービス性質上提供が難しいため、現時点ではそれらを提供する予定はありませんが、欠落しているそれらのルールについての一部はgccなどを使っていただくことで補っていただく事ができます。

Sider(内のCppcheck MISRAアドオン)でPull Request・Merge Request単位を高速に解析し、必要に応じて、CI/CDなどでコンパイラをあわせてご利用いただき、カバー範囲を増やしていただくのが良いかと思います。

他社のMISRA Cチェック機能を持つ製品との比較・使い分けについて

MISRA C設計標準規格をチェックする製品は非常に多く存在しています。よく知られているものだと、Synopsis社のCoverity静的解析ソリューションや、PARASOFT社のC++test、Micro Focus社のFortifyなどがあります。それらとSiderの違いについて2軸で説明させていただきます。

アジャイル開発、GitHub/GitLabを用いた開発に最適化されたSider

Siderは比較的新しい製品です。現時点では、ローカルでのコマンドライン実行やIDEとの連携、Jenkins(CI/CDサーバー)上での実行などには対応していません。一方で、GitHubやGitLabのPull Request・Merge Requestとの連携に対応しています。
他社製品であればQAフェーズの前工程やQAフェーズなど、開発工程の後半で利用することが主だった利用シーンですが、Siderの場合は最初のコミットから、差分だけを確認をして、MISRA規約違反のコードを発見、修正していくことが出来ます。そのため、他社様の製品をすでにご利用頂いている環境にSiderを導入いただいた場合、それらの製品で後工程で確認する際に、Siderが指摘した分の内容が減るため、後ろの工程での修正や対応時間などを減らすことが出来ます。

開発者は昔に書いたコードを再度確認して修正するのではなく、ついさっき書いたコードに対して、Pull Request・Merge Request単位で確認をし、迅速に修正を行うことが出来ます。それにより高い生産性でMISRA準拠のコードを書くことが出来ます。

非常に安価。1500円から利用可能。追加費用もなし

Siderは1ユーザーあたり月額1500円の利用料でご利用いただけます。クラウド版の場合、サーバーコストも掛かりませんので、非常に安価にご利用いただけます。また、インストールも数クリックと、先述の通り設定ファイルを数行書くだけで済むため、総合的に様々な面でコストは非常に低いです。

1プロジェクトあたり数百万円単位の製品が多い中、プロジェクト数は無制限、ユーザーあたり1500円(100名の場合でも月間15万円、年間180万円でプロジェクト数無制限)と非常に安価であるため、ぜひご検討を頂ければ幸いです。

Pull RequestやMerge Requestだけでなくプロジェクト全体を検査したい

MISRA C規格に準拠しているかの確認についてはおそらく、Pull RequestやMerge Request単位だけでなく、プロジェクト・リポジトリ全体を検査したいというニーズもあるかと思います。
こちらの機能は近日中に提供予定です。少々お待ち下さい。ご興味ある方がいらっしゃいましたらぜひお問い合わせください。

おわりに

Siderはユーザ様のニーズに合わせて様々な発展・機能追加や対応言語追加などを行っております。
ぜひSiderをご利用いただき、また、なにかご要望がありましたら下記製品サイトの画面右下のチャットよりお声がけください。

sider.review

今後ともSiderをどうぞよろしくお願いいたします。

2020年11月12日(木)データベースメンテナンスのお知らせ

いつもSiderをご利用いただきありがとうございます。

11月12日木曜日、メンテナンスのため sider.review は午後9時(JST)から約1時間ダウンします。

この時間、GitHub上で作成されたプルリクエストに対する解析が行われなくなるため、GitHub上でのワークフローに影響が出る恐れがあります。 メンテナンス中に作成されたプルリクエストをメンテナンス後にSiderに解析させるには、新しいコミットをpushするか、プルリクエストをリオープンするようお願いいたします。

メンテナンスの進捗は、随時ステータスページにて確認いただけます。

ご不便をおかけしますが、ご理解のほどよろしくお願いいたします。

Python 2サポートを2020年10月末に終了します

いつもSiderをご利用いただきありがとうございます。

Python 2のメンテナンス終了を受けまして、Siderは2020年10月末にPython 2サポートの終了を予定しています。もし、Flake8をお使いであれば、Flake8がPython 3でも動作することをご確認ください。また、sider.ymllinter.flake8.versionのパラメーターがセットされている場合2020年10月末までにこのパラメーターを削除するようお願いいたします。

 linter:
   flake8:
     target: src/
-    version: 2

何かご不明な点がありましたらサポートまでご連絡ください。今後ともSiderをどうぞよろしくお願いいたします。

更新: Python 2 サポートは予定通り終了しました。

最新版のBrakemanが利用可能に。その他、C/C++向け機能強化、コピペ検知のリリースなど

こんにちは。いつもSiderをご利用頂きありがとうございます。
製品のアップデートについては随時下記サイトにて案内をさせていただいております。
News in 2020 · Sider Documentation

今回は少々大きめのアップデートのため、ブログ記事として本記事を記載いたしました。

直近のリリース内容について

  • Ruby on Railsの開発者向けに、セキュリティ脆弱性解析ツールBrakemanの最新版を提供開始
  • C/C++向けに、フロー解析などを行うCppcheck 2.0のbug-hunting機能を提供開始
  • コピペを検知するPMD CPDの提供を開始

Brakemanについて

BrakemanはRuby on Rails向けのセキュリティ脆弱性スキャナとして有名なソフトウェアです。Siderはリリース当初からBrakemanをサポートをしていましたが、ソフトウェアのライセンスが変更されたため、変更前のMITライセンスのBrakemanをサポートしていました。今回Brakemanの商用利用が可能になったため、Brakemanの最新版の提供を開始しました。

Brakemanは現在Brakeman Public Use Licenseで提供されており、商用利用にはSynopsys社との契約が必要になっています。契約が無事締結できましたため、本機能の提供を開始することができました。

brakeman/LICENSE.md at main · presidentbeef/brakeman · GitHub

関連プレスリリース: prtimes.jp

Cppcheck 2.0のbug-hunting

C/C++向けにCppcheckのサポートを追加しておりましたが、今回、2.0にメジャーアップデートを行いました。
その際にbug-huntingといわれる新しい機能が追加されており、より多くの問題・複雑な問題を検知出来るようになりました。bug-huntingの内容については公式サイトを御覧ください。

cppcheck / News: Cppcheck-2.0

コピペを検知するPMD CPDの提供を開始

現在この機能はβ版として提供しており、デフォルトでは無効になっています。お試しになりたい方はリポジトリ設定から有効にしてください。
Pull Request内にDiffの内外問わず、重複したコードが合った場合に、Sider上でそれを検知してお知らせします。 コピペとみなすトークン数などは下記を参考に設定をお願いいたします。

PMD CPD · Sider Documentation

直近のSiderのアップデートと今後のお知らせ方法について

大きなアップデートについてはブログ記事やメールでご案内させていただくこともありますが、多くの場合、Intercom(サイト上のチャット)もしくは下記サイトでのご案内となります。

News in 2020 · Sider Documentation

一部こちらに抜粋させていただくと下記のとおりになります。

  • 月に1回程度デフォルトのバージョンの解析器のアップデート
  • 新しい解析器のサポート
    • PMD CPD(コピペ検知)
    • Pylint
    • CppcheckのAddonのサポート
      • bug-hunting
      • MISRA C, CERT Cなどのチェック
    • LanguageTool(文法等のチェック)
    • FxCop(Unityや.NetなどのC#のソースコードの解析)
    • remark-lint(Markdownファイルのチェック)
    • GolangCI-Lint(Golang)
    • detekt(Kotlin)
  • リポジトリ追加時のsider.ymlの雛形の作成Pull Requestの送付

今後も機能強化や新しい機能の追加などを行ってまいります。引き続きご利用いただくとともに、なにかご要望等ありましたらご遠慮無くご連絡くださいませ。どうぞよろしくお願いいたします。

2020年6月9日(火)データベースメンテナンスのお知らせ

いつもSiderをご利用いただきありがとうございます。

6月9日火曜日、メンテナンスのため sider.review は午後9時(JST)から約1時間ダウンします。 プラットフォームにおける重要なデータベースメンテナンスを実行します。この間、すべての操作が停止されます。

メンテナンスの進捗は、随時ステータスページにて確認いただけます。

ご不便をおかけしますが、ご理解のほどよろしくお願いいたします。