ソフトウェア工学

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

6
インターフェースの実装が新しく改善されたため、後方互換性をあきらめるのはいつですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は同じソフトウェア会社で10年以上働いています。その結果、さまざまなオブジェクト指向プログラミング言語を使用して大規模なコードベースを実装しました。私はキャリアを始めたばかりの初心者プログラマーであり、良いインターフェイスとクラス設計の原則についてはあまり知りませんでした。私の設計スキルは時間の経過とともに向上したと思いますが、下位互換性の問題のために、以前のコードを改善するのはますます困難になりました。私のコードは、私の会社が販売する製品の一部として多くの顧客に使用されています。 私の質問は次のとおりです。古いインターフェイスの後方互換性を維持しようとするのをやめ、真新しいデザインを実装するために弾丸を噛むのはいつですか? 後方互換性を維持することが非常に大きな負担になり、インターフェイスの便利な変更が不可能になるポイントが来ると思います。誰かが同様の懸念を経験しましたか?フィードバックを提供できる人はいますか?

5
スローアウェイ変数の慣用的な名前は何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 8年前に閉鎖されました。 Velocity Template Languageのsetディレクティブには、左側に変数が必要です。これは機能しません。 #set ( $entries.add("d") ) の戻り値は使用できませんadd("d")が、変数に割り当てる必要があります。 #set ( $x = $entries.add("d") ) 変数が必要であることを伝えたいのですが、後で使用するつもりはありません。コンパイラーをなだめるためにのみ存在する変数の命名規則はありますか?
11 naming  syntax 

6
単一責任の原則との闘い
この例を考えてみましょう: ウェブサイトを持っています。これにより、ユーザーは投稿(何でも可能)を作成し、投稿を説明するタグを追加できます。コードには、投稿とタグを表す2つのクラスがあります。これらのクラスをPostおよびと呼びましょうTag。 Post投稿の作成、投稿の削除、投稿の更新など Tagを処理します。タグの作成、タグの削除、タグの更新などを処理します。 欠落している操作が1つあります。タグと投稿のリンク。私は誰がこの手術をすべきかと格闘しています。どちらのクラスにも等しく適合する可能性があります。 一方では、PostクラスにTagaをパラメーターとして受け取り、タグのリストに格納する関数を含めることができます。一方、Tagクラスが取る関数可能性がありPost、パラメータとして及びリンクTagにしますPost。 上記は私の問題の一例です。私は実際には、すべて類似した複数のクラスでこれに直面しています。それは両方に等しく適合する可能性があります。実際に両方のクラスに機能を配置するのではなく、この問題を解決するのに役立つ規則やデザインスタイルが存在します。私は1つを選ぶだけでは足りないものがあるはずだと思いますか? たぶん両方のクラスに入れるのが正しい答えでしょうか?

4
ブログ投稿を更新する必要がありますか、それともテクノロジー(および私)の変更に合わせて書き換える必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 今年初めにプログラミングブログを始めましたが、始めてからいくつかの点が変わりました。いくつかの変更はテクノロジーの変更によるものであり、一部の変更はコードライブラリの改善によるものであり、いくつかの(おそらくほとんど)は、私が学ぶにつれて変更することによるものです。 戻って、特定のブログ投稿を完全に書き直したいと思います。投稿を書き直して古い情報を削除して新しいもので更新するのか、完全に新しい投稿を作成して古い投稿を削除するのが良いですか? 私は、コードの小さな変更や余分な数の文について話しているのではなく、新しいコード、新しい情報などで完全に書き直しています。 考慮すべき点は、投稿に対するコメント、新しい投稿が作成されたときに更新を受け取る購読者、ユーザーのブックマークです。

3
scanfがscanfと呼ばれるのはなぜですか?(printfと同じ。)
Cプログラミング言語で、フォーマットされた入力を読み取る関数が「readf」ではなく「scanf」と呼ばれたのはなぜなのでしょうか。私はそれが以前の言語から派生したと思うので、その場合、なぜ以前の言語でそのように命名されたのですか?(再帰) また、なぜ「writef」ではなく「printf」なのでしょうか?C以外の言語で、「表示」ではなく「印刷」または「書き込み」を行う理由

4
コミットメッセージ内のバグ/問題への言及は良い習慣と見なされていますか?
バグトラッカーにメモを自動的に書き込むようにソース管理を設定しているプロジェクトに取り組んでいます。コミットメッセージにバグの問題IDを書き込むだけで、コミットメッセージがバグトラッカーへのメモとして追加されます。 このプラクティスの欠点はほんの少ししかありません。将来、ソースコードがバグ追跡ソフトウェアから分離された場合(または報告されたバグ/問題が何らかの形で失われた場合)。または、誰かがコミットの履歴を調べているが、バグトラッカーにアクセスできない場合。 私の質問は、コミットメッセージにバグ/問題の参照を含めることをお勧めしますか?他にも欠点はありますか?

6
特定のメソッドまたは機能への変更を表示できるバージョン管理システムはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 次のようなことを言うことができると便利な場合があります。 (git|svn|hg|etc) diff Foo.c:main (git|svn|hg|etc) log log Foo.c:main 最後のコミット以降にソースファイル内の特定の関数に加えられた変更、または変更の完全な履歴を確認します。私の質問は2つあります。 これを行う何かがありますか? そのようなツールは実用的でしょうか?関数の異なるバージョンを比較するには、各リビジョンでコードの簡単な解析を行う必要があります。オーバーヘッドが大きすぎて効率的ではないでしょうか?

5
言語に依存しないユニットテストフレームワークはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は常に作業コードを書き直すことに懐疑的でした-コードの移植もこれに例外ではありません。ただし、TDDと自動テストの出現により、コードの書き直しとリファクタリングがはるかに合理的になりました。 古いコードの移植に使用できるTDDツールがあるかどうか、誰もが知っていますか?理想的には、次のことができます。 合格する(またはバグを見つけた場合は失敗する)古いコードの言語に依存しない単体テストを作成します。 失敗した他のコードベースで単体テストを実行します。 古いコードを見ずにテストに合格する新しい言語でコードを記述します。 別の方法として、ステップ1を「言語1でユニットテストを書く」と「言語2にユニットテストを移植する」に分割します。これにより、必要な労力が大幅に増加し、ポート(つまり、このコードベースでの継続的な統合の利点は得られません)。 編集:StackOverflowでこの質問に注目する価値があります。

4
「認識を超えて最適化された」計算負荷の高いコードを文書化して教える方法は?
時折、最も重い種類の低レベルの最適化を必要とする十分に計算集約的なコードの1%があります。一般的な例としては、ビデオ処理、画像処理、およびあらゆる種類の信号処理があります。 目標は、コードが保守不能になったり、新しい開発者によって削除されたりしないように、最適化手法を文書化し、教えることです。(*) (*)予測できない将来のCPUで特定の最適化が完全に役に立たない可能性があるにもかかわらず、コードは削除されます。 ソフトウェア製品(商用またはオープンソース)が最速のコードを持ち、最新のCPUアーキテクチャを使用することで競争上の優位性を保持していることを考えると、ソフトウェア作成者は特定の同じ出力を取得しながらコードを微調整する必要があることがよくあります少量の丸め誤差を許容するwhlist。 通常、ソフトウェアライターは、実行される各最適化/アルゴリズムの書き換えのドキュメントとして、関数の多くのバージョンを保持できます。これらのバージョンを他の人がどのようにして最適化手法を研究できるようにするのですか? 関連: 読みやすいコードと読みにくいコード。いつ線を越えるか?

10
セキュリティ制限により、サービスがnullを返すか、例外をスローする必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私はこの問題に関して、より経験豊富な開発者と少し意見の相違があり、他の人がそれについてどう思うか疑問に思っています。私たちの環境は、Java、EJB 3、サービスなどです。 私が書いたコードは、物を取得して物を作成するサービスを呼び出します。私が遭遇した問題は、意味をなさないヌルポインタ例外を受け取ったことです。たとえば、サービスにオブジェクトの作成を依頼すると、nullが返されます。既知の有効なIDを持つオブジェクトを検索しようとすると、nullが返されます。私は自分のコードで何が間違っていたのかを理解しようといくつかの時間を費やしました。私は経験が少ないので、私は通常、何か間違ったことをしたと思いますが、nullリターンの理由はセキュリティであることがわかります。私のサービスを使用しているユーザープリンシパルがターゲットサービスに対する適切なアクセス許可を持っていなかった場合、単にnullを返します。ここにある他のほとんどのサービスもあまり文書化されていないので、明らかにこれはあなたが知っておくべきことです。 これは、サービスと対話するコードを作成する開発者としてはかなり混乱します。サービスに例外があり、ユーザーにこの物をロードしたり、物を作成したりするための適切なアクセス許可がないことを教えてくれるなら、それは私にとってはるかに理にかなっています。そうすると、サービスが期待どおりに機能しなかった理由がすぐにわかります。 サービスを書いた経験豊富な開発者は、データの要求はエラー状態ではなく、例外はエラー状態でのみスローされるべきであり、ユーザーがデータにアクセスできないときではないと主張しました。このデータは多くの場合GUIで検索され、適切な権限のないユーザーの場合、これらは単に「存在しません」。要するに、質問は間違っていないため、例外ではありません。これらのユーザーには「存在しない」ものがあるため、getメソッドはnullを返します。ユーザーがそのモノを作成することを許可されなかった場合、Createメソッドはnullを返します。 これは正常なものですか?何が起こっているのかを知るのがずっと簡単だと思うので、例外を使うことを好みます。そのため、たとえば、nullを返すのではなく、無効なIDを持つオブジェクトを要求した場合にNotFoundExceptionをスローすることも好みます。

2
CookieベースのWeb認証のベストプラクティスは何ですか?
私はCGIとPythonを使用して小さなサイドプロジェクトに取り組んでいます(スケーラビリティは問題ではなく、非常にシンプルなシステムである必要があります)。 クッキーを使用して認証を実装することを考えていて、確立されたベストプラクティスがあるかどうか疑問に思っていました。 ユーザーが正常に認証されたら、Cookieを使用して、誰がログオンしているかを判断します。ベストプラクティスによれば、このようなCookieには何を保存する必要がありますか?

4
ソフトウェアのIP保護としてのイースターエッグ
私は組み込みソフトウェアで働いており、何らかの理由で、経営者はIP保護の手段としてイースターエッグを隠したいと考えています。彼らはそれを透かしと呼び、私たちのソフトウェアはビデオプレビューフィード(写真を撮る前に画面に表示される画像)とやり取りするため、異常なビデオ入力(ビデオコナミコード)に反応するトリガーを実装することを望んでいます暗い-明るい-暗い-明るい-何でも)。このトリガーが起動すると、奇妙なことが起こります(ソフトウェアの通常の動作の範囲外です)。 目標は、ソフトウェアがデバイスに含まれているかどうかを確認することです。それは良いアイデアのように聞こえますか?私はこの動きに反対する多くの議論を持っています: konamiコードの感度が高すぎて、ユーザーがトリガーした場合はどうなりますか? このようなものにwatermarkは法的価値がありますか? この「機能」がクライアントによって発見された場合はどうなりますか? 小さなデバイスでソフトランが実行されるため、パフォーマンスの低下は非常に小さいはずです。 私はこのトリガーを開発しています。物事がうまくいかない場合、私の責任は何ですか? この方法についてのあなたの意見は何ですか?リンクが見つかりませんが、このサイトでイースターエッグを保護目的に置くことは良いアイデアであると示唆する答えを見たことを覚えています。誰もが良い結果でそれを試しましたか?

8
最近の.NETで記述されたプログラムの市場シェアはどのくらいですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 現在、Visual Basic 6.0プログラムを.NETに移行しています。ターゲットオーディエンスは、自宅の通常のデスクトップユーザーです。これについて議論すると、.NETで記述されているように見える主流のプログラムを思い付かないことがわかりました。私たちは間違っていますか?これには正当な理由がありますか?
11 .net 

1
PHP名前空間の評価
私は、オープンソースPHPプロジェクトのプレリリース段階にいます。これは、他の開発者が自分のプロジェクトで使用することを望んでいます。このプロジェクトは現在、名前空間をサポートしていません。名前空間を使用するべきか、Dir_Subdir_ClassのPEAR命名規則を使用するべきかを評価しようとしています。正直に言うと、簡単な選択ではありません。 名前空間に対するいくつかの考慮事項: 私のプロジェクトが、他の同様のプロジェクトよりもシンプルなAPIを提供することにより、差別化を図っている方法の1つ。名前空間は新しく、PEAR命名規則よりも複雑であるため、コードベースに名前空間を導入すると、プロジェクトの使用が簡単ではなくなります。それらを実装することで、使いやすさの点で差別化を失います。 名前空間にはいくつかの利点がありますが、PEAR命名規則を使用する最新のPHP製品で解決する必要のある問題は解決しないようです。プロジェクトの使用中に名前の競合が存在しない場合は、最小限にする必要があります。 この記事では、名前空間の実装が恒星以下であるため、名前空間の採用を一時停止しました。 また、どこにも行かないかもしれない時流に飛び乗ることをためらっています。名前空間はPHPの新機能であるため、標準になるとはまだ確信していません。 互換性。これまでに記述されたほとんどすべてのPHPコードは、新しい機能であるため名前空間を使用しません。他のライブラリは、変換なしでは互換性がありません。 名前空間を使用するためのいくつかのポイント: 知覚。名前空間が標準になり、ベストプラクティスになると、私のプロジェクトはすぐに専門家ではなく、時代遅れのものと見なされるようになります。 コンペ。競合するPHPプロジェクトの中には、最新バージョンで名前空間を使用し始めているものもありますが、多くはまだ飛躍を遂げていません。これを行うと、私のプロジェクトに他のプロジェクトの足がかりを与えることができます。 プロジェクトを公開する前ではなく、公開する前に切り替えを行うと、しばらくの間2つのバージョンをサポートする必要があるため、将来の作業は容易になります。 ベストプラクティスをサポートしたいので、名前空間がPHPのベストプラクティスになった場合、プロジェクトはそれらを使用する必要があります。 私が言えることから、あなたはどちらかの方法を選ばなければなりません。両方を行うことはできません。検討していない点はありますか?PHPのプロフェッショナルな標準になるネームスペースに向かってまたは反対することを示す客観的な兆候はありますか(フレームワークはありません)。すぐに決定する必要があるので、あなたが喜んで共有してくれるであろう洞察やリソースに感謝します。
11 php  namespace 

8
アジャイルやXPなどの進化的手法で設計の行き詰まりに陥った場合はどうしますか?
Martin Fowlerの有名なブログ記事Is Design Deadを読んでいたとき 、私が得た印象的な印象の1つは、アジャイル方法論とエクストリームプログラミングでは、デザインとプログラミングが進化的であるという事実を考えれば、物事をリファクタリングする必要がある点が常にあるということです。 プログラマーのレベルが高く、設計の意味を理解し、重大な間違いを犯さない場合、コードは進化し続ける可能性があります。しかし、通常の状況では、この状況での地上の現実は何ですか? ある重要な開発が製品に組み込まれている通常の日には、要件に重大な変更が生じた場合、それがどれだけ望むかという制約ではないので、基本的な設計の側面を変更することはできませんか?(コードの大部分を捨てずに)。設計と要件のさらなる可能な改善で行き止まりに達する可能性は非常に低いですか? ここではアジャイル以外のプラクティスを提唱していませんが、実際の経験に関しては、アジャイル、反復、または進化の開発方法を実践している人々から知りたいです。 あなたはそのような行き止まりに達したことがありますか?どうやってそれを避けたり、逃れたりできましたか?または、デザインが進化してもクリーンで柔軟なままであることを保証する手段はありますか?
11 design  agile 

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