Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SonarCloudにBugだと言われているものを対処したいなぁという話。 #1504

Open
berryzplus opened this issue Jan 12, 2021 · 10 comments

Comments

@berryzplus
Copy link
Contributor

Bug だと言われているもののうち最高レベルの Blocker は43件で、内訳は以下のような形です。

特に文字列操作についてよく怒られているわけですが、適切に範囲チェックしているのに分析器がそれを検出できてないのが実態であるように見えます。
C文字列を使ってはいけない。すべて std::string にするべきだ。ということを言いたいようですが。
1万9千件もある Code Smell についての警告も大部分がそういう内容ですし、コードベース全体で審査に合格するのはきっと途方もなく大変です…。

PR などで追加・修正した部分だけ Quality Gate 適用できたらいいなあ、と思います。

Originally posted by @k-kagari in #1476 (comment)

@kengoide
Copy link
Member

特に文字列操作についてよく怒られているわけですが、適切に範囲チェックしているのに分析器がそれを検出できてないのが実態であるように見えます。

問題とされた箇所をざっと眺めて得た印象からの発言でしたが、その後 #1483 と #1489 でバッファオーバーランが2件見つかっています。
一見すると正しいようでコーナーケースを網羅できていない事例が他にもありそうだな、というのが今の印象です。

@kengoide
Copy link
Member

最終的に C++ ソース部分の Bugs と Security Hotspot は駆逐したいです。

#1506 (comment)

量が量なので複数人の参加が望ましいと思いますが、誰がどこに着手中かが分かるようにしなければ同じところで作業する事態が起きそうです
SonarCloud に Assigned 欄があるので活用したいですね。

@berryzplus
Copy link
Contributor Author

berryzplus commented Jan 17, 2021

量が量なので複数人の参加が望ましいと思いますが、誰がどこに着手中かが分かるようにしなければ同じところで作業する事態が起きそうです
SonarCloud に Assigned 欄があるので活用したいですね。

いったん Assigned でいいと思います。

  1. 自分で Assigned にする
  2. Bugs指摘に対策する
  3. 可能な範囲でテストを書く
  4. PRする。(テスト不可能な範囲が残った状態になる)
  5. マージする
  6. マージ以降30日間はQuality GateがFailedになる

当面はカバレッジはスルーしていくしかないのかなぁ・・・

別件で、現在のカバレッジを少しでも高める内容のPRを検討しています。

@kengoide
Copy link
Member

インライン関数やテンプレート関数のカバレッジが取れていないかもしれません。int2deccharcode.h の判定関数 などです。

@berryzplus
Copy link
Contributor Author

インライン関数やテンプレート関数のカバレッジが取れていないかもしれません。int2deccharcode.h の判定関数 などです

現状のOpenCppCoverageの限界かも知れません。

対策として考えられるのは

  • インライン関数を使わないようにする
  • 解析対象を x64 - Debug に変える
  • 見なかったことにする

妥当なのは「見なかったことにする」かな?
解析対象を x64 - Debug にするのも可能な対策。

インラインを使わないようにするのは少し難しいですが、おそらく「やったほうがよい」だと思います。

@berryzplus
Copy link
Contributor Author

地味な対応を続けた結果、Bugs(Blocker)レベルの警告があと10件になりました。Blockerレベルの警告は分かりづらくてレビューしづらいようなので、一律対応できそうなBugs(Critical)レベルの対応を進めて行こうと思っています。

ちなみにラベルの日本語約は以下である認識です。

  • Blockerレベル = リリースしてはマズいレベルの致命的な誤り。
  • Criticalレベル = 致命的な誤り。
  • Majorレベル = よくある誤り(いわゆる「あるある」。普通は対応する。)
  • Minorレベル = 細かい誤り(対応が必要か、怪しい。)

@beru beru added the SonarQube label Mar 21, 2021
@berryzplus
Copy link
Contributor Author

BlockerレベルのBugsが残り2件になりました。

ちょっと対処が難しそうなので、しばらくしたら個別のissueを作成してこのissue自体は閉じてしまおうと思っています。

@berryzplus
Copy link
Contributor Author

#1605 の対応で残った 6件 はこっちのissueで対応していきたいです。

@berryzplus
Copy link
Contributor Author

PRが出ていない残件(Critical以上)。

深刻度の高そうな警告の大半を潰せたので、あとはしょーもない警告が残ってるだけだと思っていましたが、何気にそうでもなさそうです。

https://sonarcloud.io/project/issues?id=sakura-editor_sakura&resolved=false&severities=MAJOR&types=BUG

  • HTMLでframeset使うな(しょーもなっ・・・
  • if文のtrue-partとfalse-partが同じです(へぇ~。。。
  • 関数呼び出しの引数が初期化されてません(えっ!
  • ポインタ値がnullptrのobjectを参照しています(マジか!
  • 否定の等価演算子の右辺値が破棄されます(いみふ・・・

このissueは、もう少しの間 keep-alive にしといたほうが良さそうです。

@berryzplus
Copy link
Contributor Author

SonarCloudのルールが変更されたことにより、
せっかく減らした警告がまた増えているようです。

variadic paramater形式の関数に CLogicInt とか CLayoutInt とかを渡している部分が Major の Bugsとして検出されるようになった模様。一応、キャストしてあげれば回避はできそう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants