問題タブ [software-quality]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
testing - QA 部門のテスト計画を作成するにはどうすればよいですか?
現在、最新プロジェクトの新しいリリースに向けてテスト部門を準備しています。ソフトウェアをテストし、バグがリリース前に私たち (開発チーム) に確実に返されるようにするための綿密な計画に従うことを明らかに望んでいます。
このテスト計画を作成する際に従うべき適切なツールや方法論はありますか?
performance - 建築効率の評価
特定の設計の効率をどのように評価しますか?
あなたの変数は何ですか?
私は考えることができます:
- カップリング
- デザインパターンの使用
- 言語イディオムの使用.
- スケーラビリティ。
- 生存率が高い。
- コードの再利用。
- 柔軟性。
- エラーに対する堅牢性。
- テスト容易性。
- リソースの使用とメモリに対する設計の影響。
- 携帯性。
- 正しいプログラミング パラダイムの使用。
- ランタイム効率に対する設計の影響。
- カプセル化。
そのような指標をどのように計算しますか?
ツールとしてのプログラム メトリクスについて聞いたことがありますが、それが何であり、どのように計算するのかわかりません。
喜んで助けてくれる人に感謝します。
編集: これは、私の生まれたばかりのブログのテーマに関するブログ エントリです。
c - Linux の静的コード分析ツールの比較?
Linux で利用可能な静的コード分析ツールを比較した人はいますか? 次のツールの長所と短所は何ですか。
- リンティアン、
- スパース、
- スプリント、
- ラット、
- -Wall オプションを使用します。
これらのツールを 1 つだけ使用するだけで十分だと思いますか?
私は推奨事項を探しているわけではありません (それらはたくさん見つかります) が、利用可能なツール間の直接比較です。
metrics - ソフトウェア品質指標
ソフトウェアの品質を測定するために使用されるメトリックの経験がある人がいるかどうか疑問に思っていました. コードの複雑さの指標があることは知っていますが、有効期間中の実際のパフォーマンスを測定する特定の方法があるかどうか疑問に思っています。実行時のパフォーマンスではなく、品質の尺度です。これらを収集するのに役立つ提案されたツールも大歓迎です。
これらの質問に答えるための測定値はありますか:
- ソフトウェアの変更/強化がどれほど簡単か、堅牢性
- それが十分に一般的/一般的なソフトウェアである場合、それはどの程度再利用可能ですか
- コードに関連付けられた欠陥の数
- これは再設計/再コーディングする必要がありますか
- このコードはどのくらいの期間使用されていますか
- 開発者は、コードがどのように設計および実装されているかを気に入っていますか?
これらのほとんどは、CM およびバグ報告ツールと密接に結び付ける必要があるようです。
git - 継続的インテグレーション ワークフローのアイデア
私が働いているソフトウェア開発環境では、すべて同じ (Java) コードベース (現在は SVN を使用) で作業している開発者のグループがいます。「ビルドを壊す」ことなく、自分が構築したものをコミットしたいという人が多いことに気付きました。そのため、私は Git や Mercurial など、分岐、特にマージをより簡単にするツールに注目しています。
私が目にすることの 1 つは、開発者が「悪いコード」をコミットすると、そのコードはすべての人にとって壊れてしまうということです。これを回避するためのアイデアとして、その単一の新機能の変更セットを 1 つだけ持つ、単に現在の「マスター」である「中間の単一機能」リポジトリを持つ方法が必要です。このような「中間の単一機能」リポジトリは、メイン コード ベースの一部になる前に、自動的にテスト (コード品質、単体テスト、手動コード検査など) できます。
したがって、私が念頭に置いているワークフローは次のようになります。
- 開発者は新しい機能を作成し、これをローカルで毎日コミットします。
- しばらくすると、開発者は終了し、変更セット全体を送信して「メイン」リポジトリに統合します。
- 継続的インテグレーション システムは、現在の「マスター」を取得し、変更セットを適用してコードをチェックし (マージの競合、PMD、Findbugs など)、単体テストを実行し、コーディング スタイルをチェックします。
- CI システムが「悪いコード」と判断した場合、開発者には理由が通知され、開発者は言及された問題を修正する必要があります。この場合、メイン リポジトリは変更されません。
- CI システムが「十分である」と判断した場合、コードは「主任開発者」または「コード レビュー担当者」に届き、選択されたソリューションを検査して承認または却下されます。
- 承認された変更セットはメイン リポジトリに含まれ、すべての開発者がリベース/マージできるようになります。
この種のワークフローについていくつか質問があります。
- これは実際にうまくいくと思いますか (つまり、これは良いアイデアですか、それとも本当に頭がおかしいものですか)?
- 以前にこのような作業をしたことがある人はいますか? 長所と短所は何でしたか?
- そのようなワークフロー (またはこのアイデアのバリエーション) を最小限の時間で開始できるようにする「すぐに実行できる」スクリプト/手順/ツール/... はありますか?
ありがとう。
背景メモ:
私は約 13 年前に会社で開発者として働いていました。彼らは社内で同様のワークフローを構築し、2 つのナイトリー ビルドを行っていました。
- 「本番」バージョン: メイン コード ベース
- 「シニア バージョン: すべての変更されたファイルのすべての新しく送信されたバージョンを含むメイン コード ベース。
これはすべて SCCS (lock-edit-unlock モデル) ベースであったため、「頻繁にコミット」する方法がなく、コードの変更やその他すべての厄介な影響によるデッドロックが発生しました。私が探しているのは、主に、当時使用していたものの良い点と、今日のはるかに優れたツールを使用していることです。
testing - 同じバグが 2 回目に製品に侵入しないようにするにはどうすればよいですか?
それに対する簡単な答えはテストを行うことだと理解していますが、それでもこのテストをどのように行うのですか? テスト ケースを変更して、実行する追加のテスト ケースとしてバグを含めるか、古いリリースから最新のリリースまで、バグ追跡システムですべてのバグを検証するだけですか。
答えてくれてありがとう。私の質問が明確ではなかったようです。バグレポートを書き、バグを修正し、修正検証のためのテストを行う必要があることを理解しています。ただし、次のバージョンのリリース時にテストを再実行して、新しい変更によってバグが再導入されていないことを確認するには、このテストをどのテスト フェーズで実行する必要がありますか。回帰テストを行うべきか、特定のプロジェクトの統合テストを行うべきか、それともバージョン 1.0 以降のバグ追跡システムのすべてのバグをテストするべきか?
software-quality - アプリケーション開発者にとって、ソフトウェアの品質は本当に重要なのでしょうか - *実質的に*?
実際のアプリケーション開発者にとって、ソフトウェアの品質は本当に重要ですか?
私は、この質問が最もばかげた質問のように思えることを知っています。しかし、なぜ私がこの質問をしているのか、以下をご覧ください。
私はこのようなエンジニアリングの原理、パターンが好きで、これまで実装して楽しんでいました。しかし今、私はそのような原則はアプリケーション開発者にとって実際には重要ではなく、重要なのは「開発時間」、「アプリケーションが期待どおりに動作している」、「少し遅れて終わったが大丈夫」であることを認識しています.
アプリケーション開発者にとってのソフトウェア品質と原則の実際的な重要性について、私は今、本当に混乱しています。そのため、これまでのガイドがソフトウェアの品質に影響を与える組織と [設計コードの品質の重要性]について答えを出すことができなかったので、実用的な答えを探しています[2]。
ソフトウェアの品質とソフトウェア エンジニアリングに関する情報はたくさんありますが、実際にアプリケーション開発に適用されているのでしょうか?
私はアプリケーション開発者としてこの質問をしていますが、OS、言語、またはコンパイラの開発/イノベーションについて話しているのではありません。
ご回答ありがとうございます。最初にこの質問をした理由をさらに追加させてください。
私も、そのような原則を考える際にためらうべきではないと信じ、考えています。これは一種の芸術であり、何かによって戦略を切り替えることはできないと思います。
しかし、この件について何かを見たり、この投稿をしたりする場合は、「依存するもの」などのフレーズに注意してください。実際問題は、あなたの聖化、モラル、倫理でもあるあなた自身を除いて、誰がそのような品質のコードで直接恩恵を受けるかということです.
非常に一般的な例を見てみましょう。何百万ものヒットがあるウェブサイト。エンドユーザーは、サイトが魅力的に見え、注文してもらえるので満足しています。予算内で開発・拡張ができ、すべての機能が実装されているので、経営陣は満足しています。PM は満足しています。すべての異種サブシステムが期待どおりに通信し、インフラストラクチャの制約が満たされているため、Tech Lead は満足しています。25 人の開発者からなるチームは、すべてのバグが修正され、コードが実行されるようになったことに満足しています。もちろん、彼らはタイプ セーフな言語と優れた IDE を使用しているため、自信を持っています。また、try catch ブロックがどこにでもあるため、実行時エラーの行番号を見つけることができます。
ここで、たとえば、彼らはパターンやベスト プラクティスに従っていなかったとしましょう。そのため、コードが再利用できなかったり、論理レイヤーがデータ形式に依存したり、または ... しかし、次の開発では、新しい予算、新しい開発スケジュールが発生し、開発者は過去のタスクとは一致しない可能性のある新しいタスクを取得します。
それでは、時間と予算の面で追加のコストを支払うことによって、誰が直接利益を得たり、いくつかの原則に従ってこれらを排除しなければならないのでしょうか?
では、誰が実際にこれらに従うことを気にしますか? 誰もがその理論的な重要性を知っていますが、実際には、それは「ゴールデンタッチ」または「あると便利」な機能ですか、それとも「必須」の要件ですか? それが本当に重要である場合、多くの人が言っているように、なぜ予算や時間が最も重要であり、品質は 2 番目に重要なのです。
unit-testing - プログラムを装った大規模なテストの展開
誰かが (単体) テストをロジックとして使用する小さな診断用の内部 Web アプリを作成した場合、それを行う正当な理由はありますか? Nunit は、この Web サイトのどこにでも展開する必要があることに注意してください。
私は、プログラムには独自のロジックと再利用可能な部分 (利用可能な場合) を含める必要がありますが、ロジックのテストをラップするべきではないと考えています。テストは、コード ロジックの検証を目的としています。テストがコード ロジックになると言うなら、テストを検証するためにテストを書く必要があるのではないでしょうか? なぜそれが根本的に間違っているのですか?
ヒント: これらのテストをすべてつなぎ合わせて相互に関連付けているため、依存関係がなくなっている (?)。
software-quality - 開発者はテスターにどのようなインタビューの質問をする必要がありますか?
いくつかの面接が予定されており、品質保証の役割を募集しています。関与する開発者の目的は、その人が開発チームとうまく連携できるかどうかを理解することです。
開発者がQA担当者に尋ねるべき最も重要な質問は何ですか?ふわふわのオープンな質問よりも実用的な質問を探しています、あなたの考えは?