ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

6
ハイパーリンクされ、外部化されたソースコードのドキュメント[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 別のドキュメントとしてではなく、なぜソースコードの自然言語記述(つまり、コード行が記述された理由)をソースコード内に埋め込むのですか? 現代の開発環境(高解像度モニター、デュアルモニターなど)に提供される広大な不動産を考えると、IDEは、ソースコードが視覚的に分離されているが本質的にリンクされているセミロックステップパネルを提供できます。対応するコメント。たとえば、開発者はハイパーリンクマークアップ言語(追加のソフトウェア要件へのリンク)でソースコードコメントを書くことができます。これにより、ドキュメントがソースコードを乱雑にするのを同時に防止できます。 このようなソフトウェア開発メカニズムを阻害する欠点は何ですか? 質問を明確にするためのモックアップ: カーソルがソースコードの特定の行(上記の青色の背景で表示)にある場合、カーソルのある行に対応するドキュメントが強調表示されます(他の詳細と区別されます)。質問で述べたように、カーソルがソースコード内を移動するとき、ドキュメントはソースコードとロックステップのままです。ホットキーで「ドキュメントモード」と「開発モード」を切り替えることができます。 潜在的な利点は次のとおりです。 画面上のソースコードとドキュメントの同時表示 (言語に関係なく)ソースコードとは関係なくドキュメントを編集する機能 マージの競合なしに、ドキュメントとソースコードを並行して作成する 優れたテキスト形式のリアルタイムハイパーリンクドキュメント さまざまな自然言語への準リアルタイム機械翻訳 コードのすべての行は、タスク、ビジネス要件などに明確にリンクできます。 ドキュメントは、コードの各行が記述されたときに自動的にタイムスタンプを付けることができました(メトリック) アーキテクチャ図、関係を説明する画像などを動的に含める 単一ソースのドキュメント(ユーザーが手動で含めるためのタグコードスニペットなど)。 注意: ドキュメントウィンドウは折りたたむことができます ソースファイルを表示または比較するワークフローは影響を受けません 実装がどのように行われるかは詳細です。ドキュメントは次のようになります。 ソースファイルの末尾に保持されます。 規則(filename.c、filename.c.doc)で2つのファイルに分割します。または 完全にデータベース駆動 ハイパーリンクされたドキュメントとは、外部ソース(StackOverflowやWikipediaなど)および内部ドキュメント(つまり、ビジネス要件ドキュメントを相互参照できるサブドメイン上のWiki)およびその他のソースファイル(JavaDocsに類似)へのリンクを意味します。 関連スレッド:業界のドキュメントに対する嫌悪感とは何ですか?

6
私のチームは、独自の基準として、よく評価されている一般的なコーディング標準を使用する必要がありますか?
私が参加しているR&Dチームは、コーディング標準を採用することを決定しました。私たちが最近結成したばかりであり、コードと共通のコーディング時間が少なすぎて、チームで有機的に開発されたもの、および独自のコードからの良い例などに基づいて標準/規約のドキュメントを作成できません。 今、私たち一人ひとりが過去の職場での経験を持っていますが、「ここで行うこの種の仕事にふさわしいことがわかった、この包括的なドキュメントをここで採用しましょう」と言っている人はいません(*)。さらに、一部の私(自分自身を含む)は、公式のコーディング標準がない場所、または別の設定で別の言語で作成した経験のみを持っています(より研究指向の開発作業ではなく、週ごとの高圧の本番環境)。 したがって、私が考えていたオプションの1つは、比較的よく知られていて評判の高いドキュメントを取り上げ、私たちが気にしていない/気にしていないものを切り取り、好みに基づいていくつかの変更を加えることです。 これは一般的な方法ですか?これは良いアイデアだと思いますか?もしそうなら、合理的な「ベースライン」コーディング標準とは何でしょうか(どちらが最善か教えてください、ここで宗教的対立を始めたくありません。包括的または「中立」に基づいて構築できるものを指摘してください) 。) ノート: C、C ++、OpenCL、CUDA、Pythonで動作することを期待しています。 私たちは4人のチームとマネージャーのチームで、1年程度で5〜6人に成長すると予想されています。 私たちの会社では、チームはほぼ完全に自律的であり、通常はまったく相互作用しません(お互いのコードを使用することによってさえも-作業は完全に異なるプロジェクトにあります)。そう-全社的な考慮事項はありません。 ツールに関しては、現時点ではEclipseを使用することがわかっているため、そのコードフォーマッターは少なくとも1つのツールになります。Ctrl + Shift + Fは長い間私の友人です 私がJavaを書くとき、私はBlochの効果的なJavaにできる限り厳密に従うことを採用しました。さて、それは完全なコーディング標準ではありませんが、コーディング標準のレンガ、セメント、モルタルを呼び出すことができます。そのようなものを「ミックス」の一部として含めることを考えていました(Javaは実行しないことに注意してください)。 より広い意味でのコーディング標準を意味します。たとえば、このP.SEの質問に対する回答で行われた提案を採用します。 C ++コーディング標準ドキュメントの大きなリストを見つけました。多分私は私たちのベースラインを採掘するべきです。 (*)それはまったく真実ではありませんが、私はこの質問をあまりにも多くの詳細で複雑にしたくありません。


2
アクセス制御の標準的な手法(設計パターン)
私は自分のインターフェース設計を見ていて、がアクセスしたいuserとを与えられた場合に、ロールベースのアクセス制御を実装するための最も「正しい」方法を決定するのに苦労しています。subjectuser 私が見る限り、3つのコアオプションがあります(4番目は最初の3つの粗野化、5番目は4番目の微調整です)。 がsubject持つ権限のリストを使用してをクエリしuserます-subject.allowAccess(user.getPermissionSet) に必要なuser権限のリストを使用してをクエリしsubjectます-user.hasPermissionTo(subject.getRequiredPermissions()) サードパーティにクエリを実行して、権限の共通部分を見つけます- accessController.doPermissionSetsIntersect(subject.permissionSet, user.getPermissionSet()) subject/のいずれかを照会しuser、「決定」をサードパーティのクラスに委任する 持ってuserアクセスしようとするとsubjectアクセスが許可されていない場合は、エラーをスローします 私はオプション4に傾いています- フィールドに操作を委託するための呼び出しをsubject含めるaccessControllerフィールドがありますsubject.userMayAccess(User user)。 class Subject { public function display(user) { if(!accessController.doPermissionSetsIntersect(this.permissionSet, user.getPermissionSet())) { display403(); //Or other.. eg, throw an error.. } } } ..しかし、これはさらに質問を引き起こします: accessControllerフィールド対静的クラスである必要があります。 必要がありますsubject 知っている必要とされるどのような権限は、それを表示することができますか? 召喚に関して、知識の最小の原則はここでsubject.display()どこに作用しますか?呼び出し元はsubject.display()、アクセス制御が有効であることを知っている必要がありますか?(subject.display()最終的な「テンプレートメソッド」はどこにあるか) subject.display()アクセス制御を管理し、ユーザーが必要な権限を持っていない場合に例外をスローしますか? この状況で何が「ベストプラクティス」と見なされますか?チェックを実行する責任は実際にどこで発生しますか? これはどちらかと言えば実装に進む学術的な演習であるため、設計パターンへの参照をいただければ幸いです。

1
非抽象クラスに明確な言葉はありますか?
私のプロジェクトには主に抽象クラスがあり、それらを使用/継承している他のクラスがいくつかあります。ドキュメンテーションを書いているとき、その一部がこれらの非抽象クラスの動作に関するものであると指定したいのですが、この単語をばかげて使用していることがわかりました。 それはクラスだと言えますが、抽象クラスもクラスです。だから私は非抽象クラスの明示的な単語/同義語があるのだろうかと思っていましたか? SEOの更新: 非抽象クラスの一般的な名前は何ですか?

3
Cライブラリ関数の背後にある根拠がerrnoをゼロに設定しない
C標準では、C標準ライブラリ関数errnoをゼロに設定しないことを義務付けています。なぜこれが正確なのですか? 私はそれがいくつかの関数を呼び出しerrno、最後の関数の後でのみチェックするのに役立つことを理解できました-例えば: errno = 0; double x = strtod(str1, NULL); long y = strtol(str2, NULL); if (errno) // either "strtod" or "strtol" failed else // both succeeded しかし、これは「悪い習慣」とは見なされていませんか?あなただけチェックしているので、errno非常に最後に、あなただけの機能の一つであることを知ったの失敗ではなく、どの関数が失敗しました。何かがほとんどの実用的なプログラムに対して十分に失敗したことを単に知っていますか? さまざまなC Rationaleドキュメントを探してみましたが、それらの多くにはの詳細があまりありません<errno.h>。
9 c  standards 

3
異なる依存関係に必要な同じ機能を提供する2つのコンポーネント
Zend Framework 1とDoctrine2をORMレイヤーとして使用して、PHPでアプリケーションを構築しています。すべて順調です。さて、私はたまたまZF1とDoctrine2の両方が独自のキャッシング実装に付属していて、それに依存していることに気付きました。私は両方を評価しましたが、それぞれに独自の長所と短所がありますが、どちらも私の単純なニーズに対して他のものより優れているとは言えません。どちらのライブラリも、実装ではなく、それぞれのインターフェイスに対して作成されているようです。 これが問題であると感じる理由は、アプリケーションのブートストラップ中に、2つのキャッシュドライバーを構成する必要があることです。それぞれに独自の構文があります。この方法でミスマッチが簡単に作成され、このため、キャッシュバックエンドへの2つの接続を設定するのは非効率的です。 今後の最善の方法を決定するつもりであり、あなたが提供できるかもしれないあらゆる洞察を歓迎します。 これまでに考えたのは、4つのオプションです。 何もせず、キャッシング機能を提供する2つのクラスが存在することを受け入れます。 ZendのインターフェースをDoctrineのキャッシング実装に固定するFacadeクラスを作成します。 オプション2、その逆-Fendを作成して、DoctrineのインターフェースをZend Frameworkバックエンドにマッピングします。 multiple-interface-inheritanceを使用して、すべてをルール化する1つのインターフェースを作成し、重複がないことを祈ります(つまり、両方に「save」メソッドがある場合、PHPのために同じ順序でパラメーターを受け入れる必要があります。適切な多型の欠如)。 どのオプションが最適ですか、または「上記のどれにも当てはまらない」のバリエーションがありません。

5
プロジェクト開始時に複雑なストーリーを分解する
アジャイルプロジェクト管理(Pivotal Trackerを使用)について理解しようとしていますが、プロジェクトの最初のいくつかのストーリーを定義しようとすると、壁にぶつかってしまいます。たとえば、次の非常に単純な話を見てください。 「ユーザーは製品にタグを付けることができるはずです」 私がすでに「製品」を別の場所で定義していると仮定すると、このストーリーには、多態性タグシステムを内部で記述し、そのシステムIDが完了すると、最終的に製品にタグを付ける機能を追加できるようになります。 私の問題は、このストーリーに隠されている作業量にあります。ストーリーを完成させるためのタスクを定義することはできますが、ストーリー全体は1〜2日間の作業になるはずです。私は氷山の一角を明らかにするだけの話では正しくないと思いますが、それはユーザーに関連する唯一の部分です。 このようなことをどのように克服しますか?ベストプラクティスは何ですか? 更新25/08皆様のご指導に感謝し、ストーリーを定義する方法について、私はすべてのアドバイスを船内に取り入れました。私は今、ストーリー内のタスク(割り当て、見積もりなど)と、スプリントが始まったら開発タスクの追跡をサポートするJira Grasshopperに切り替えています。
9 scrum 

5
最大の費用対効果をもたらすバグの解決[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 解決がどれほど簡単か、そしてどれだけの利益が得られるかに基づいて、バグを分類する方法を知りたいと思っていました。たとえば、解決に1時間かかる(2つのファイルを閉じるなど)バグと、1日かかる別のバグ(セグメンテーションエラー)がある場合などです。ただし、最初のバグの解決がそれほど重要でない場合は、おそらく2番目のバグに取り組みます。 費用便益または類似の指標に基づいてバグを分類する研究論文はありますか? たとえば、セキュリティの脆弱性、メモリエラー、論理エラーなど、バグの特性に基づいてバグを分類することができるとしましょう。他の次元では、難易度(簡単、中程度、難しい)などのパラメータがある場合があります。私が探しているべき他の次元はありますか?物事を単純化するために、私は2つのことを想定できます。 チーム内のすべてのプログラマーは、あらゆるバグを同等に解決することができます 締め切りはありません

2
Haskellのインメモリデータストア
HaskellのWebサービスにインメモリデータストアを実装したい。STMモナドでトランザクションを実行したい。 Haskellを使ってハッシュテーブルをスチームググリングすると、これしか得られませんData. BTree. HashTable. STM.。モジュール名と複雑さから、これはツリーとして実装されていることがわかります。可変ハッシュテーブルの場合、配列の方が効率的であると思います。 STMハッシュテーブルに配列を使用しない理由はありますか?このスチームハッシュテーブルで何かを得ますか、IntMapそれともスチームリファレンスを使用するだけですか?

4
ドッグフーディング時にツールの次のリビジョンを使い始めるのはいつが適切ですか?
具体的には、DVCSとビルドシステムを統合するツールに取り組んでいますが、「メタ」ツール(コンパイラ、VCS、ビルドシステム、テストランナーなど)を開発している人が直面する課題をイメージしています「ドッグフーディング」を通じて発展したい。 私の質問は、分岐ワークフローを使用したスクラムスタイルのリリースプロセスで、ツールの開発サイクルで新しいバージョンのツールの使用を開始するのはどの時点ですか? 私は、以下のバランスを取るプロセスを探しています。 常にdevelopツールのバージョンを使用します。変更が組み込まれると、自分の開発が中断されます。 常にmasterツールのバージョンを使用します。ドッグフーディングによって明らかになった問題は、すでにリリースされている問題です。

2
DDDを実行するときにエンティティと値オブジェクトをモックする必要がありますか?
読んだ後、いくつかの 記事についてNewableを対注射のオブジェクトとどのようにこれらの概念は、DDDのサービス、エンティティと値オブジェクトに関連し、私は特に私のユニットテストで私のコードでnewablesの使用に関するいくつかの疑問が残りました。 Newableの主な候補は、EntitiesオブジェクトとValueオブジェクトでした。つまり、これらの依存関係を他のオブジェクトに注入する代わりにnew、これらのオブジェクトのインスタンスだけを作成して、コードで直接使用する必要があります。 ただし、適切なDDDプラクティスでは、エンティティと値オブジェクトに適切であると見なされた場合に責任を割り当てることを推奨しています。そのため、エンティティと値オブジェクトには、深刻なビジネスロジックが含まれなくなります。 ここで、サービスがエンティティまたは値オブジェクトで動作する場合、エンティティまたは値オブジェクトをモックしてサービスにモックを渡す必要があります(モックには、interface推奨されているように見える値オブジェクトまたはエンティティのが必要です)? またはnew、エンティティ/値オブジェクトだけを具体的な実装をサービスに渡して、1つのユニットのみをテストするというユニットテストの原則に違反する必要がありますか?

4
「TODO自動生成メソッドスタブ」とはどういう意味ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 私はeclipseをAndroidプログラミングに使用しており、「TODO自動生成メソッドスタブ」という文が随所に見られます。 これらのメソッドは、クラスおよびその他のトリガーアクティビティの作成時にEclipseによって自動的に生成されたことを理解していますが、どこにでも言及する必要があることを理解していません。 どこでも繰り返し言及する必要性は何ですか?

3
ファイルから設定をどこにロードして保存するのですか?
この質問は、ファイルから設定をロードするほとんどのプログラムに当てはまると思います。私の質問はプログラミングの観点からです、そしてそれは実際にさまざまなクラスとアクセシビリティの観点からファイルから設定のロードを処理する方法です。例えば: プログラムに単純なsettings.iniファイルがある場合、その内容をload()クラスのメソッド、またはおそらくコンストラクタにロードする必要がありますか? 値をpublic static変数に格納する必要がありますか、それともstaticプロパティを取得および設定するメソッドが必要ですか? ファイルが存在しないか、読み取りできない場合はどうなりますか?プログラムの残りの部分に、それらのプロパティを取得できないことをどのように知らせますか? 等 私はここの正しい場所でこれを求めていることを願っています。私はできるだけ質問を言語にとらわれないようにしたかったのですが、私は主に継承のようなものを持つ言語、特にJavaとC#.NETに焦点を合わせています。

4
Listインターフェースは漏れやすい抽象化ですか?
を含む変数がある場合、その変数には、またはなどList、さまざまなタイプのオブジェクトが含まれる可能性があります。a とan の違いはかなり大きいです。メソッドのビッグO動作は大きく異なります。たとえば、をソートしてからバイナリ検索を実行することは完全に問題ありませんが、では意味がありません。ArrayListLinkedListLinkedListArrayListListArrayListLinkedList

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.