ソフトウェア工学

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

12
単語を強調表示するために、HTMLページで非標準のタグを使用する必要がありますか?
特定のカスタム目的のために、HTMLページで非標準タグを使用するのが良い習慣か合法かを知りたいです。 例えば: Lorem ipsum dolorシットアメット、consectetur adipiscing elit。Nullam consequat、felis sit amet suscipit laoreet、nisi arcu accumsan arcu、vel pulvinar odio magna suscipit mi。 「consistetur adipiscing elit」を重要として強調表示し、「nisi arcu accumsan arcu」を強調表示したい。 したがって、HTMLに次のように記述します。 Lorem ipsum dolor sit amet、<important> conectetur adipiscing elit </ important>。Nullamの結果、felisはamet suscipit laoreetに座り、<強調> nisi arcu accumsan arcu </ highlighted>、vel pulvinar odio magna suscipit mi。 …

7
新しい技術を使用すると生産性が低下しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 特定のツールセットの使用経験が増えるにつれて、新しいことを試すインセンティブが弱まるようです。 このプログラミングの仕事を始めたばかりのとき、新しいことを試したり、オンラインで調べたりして、生産性を高めました。コードフレームワークが既に導入されているタスクを簡単にする方法(またはライブラリ)を見つけたからです。そのため、私にとっても、特定のコードベースのコンテキストでも、新しいものを使用することで生産性が向上しました。 今、私はそこに与えられた問題のために、私は、より多くのインスタンスであること、気づい知っているだろうがということであると思われる- -コードを向上させる「そこ」より良い解決策は、それがでしょう見つけます。しかし、コードベースについての私の親密な知識を考えると、コードベースを新しく「より良い」および「改善する」よりも、最適ではないツールを使用してソリューション(テストを含む)を実行する方がはるかに簡単です。 そのため、「きちんとやる」対「きちんと仕事をする」という緊張があります。 これは多くの開発者に起こることですか?これは既知の特定の問題ですか?(結局それは本当の問題なのでしょうか?)それは実際に経験のレベルを上げることに関係していますか? ああ、そして注意:私はまだ私の仕事が好きで、それを維持するのが好きです。それはただのようです-常に面白いです!-私たちがアプリで直面しているコードベースと問題セットを学ぶにつれて、研究部分は小さくなります。

7
クラスとメソッドをできるだけ小さくしますか?
数日前、私はソフトウェア工学博士号の候補者と話をしていましたが、ある時点で彼女は私に言いました。 クラスとメソッドをできるだけ小さくしてください そして、これは常に良い習慣であるのだろうか。 たとえば、クラスに属性が2つしかないことは価値があるのでしょうか?たとえば、いくつかのメソッドでは、整数のペアを使用する必要があります。「PairOfIntgers」クラスを作成する必要がありますか? この考え方は、あまりにも多くの部分でコードを「壊す」ことができますか?

6
コメント作成とドキュメントのベストプラクティス
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 7年前に移行され ました。 最近のコメントはこれまで以上に簡単です。Javaには、コメントをクラスにリンクするための優れた手法がいくつかあり、Java IDEはコメントシェルの作成に適しています。Clojureなどの言語では、関数のコード自体に関数の説明を引数として追加することもできます。 しかし、私たちは今でも良い開発者によって書かれた時代遅れのコメントや劣悪なコメントが頻繁にある時代に生きています。 特にここではJava / Clojure / Pythonに興味がありますが、回答は言語固有である必要はありません。 コメントを検証し、「薄っぺらな」コメント(マジックナンバー、不完全な文などのコメントなど)または不正なコメント(スペルミスなどの検出など)を自動的に検出する新しい手法はありますか。 そしてもっと重要なことは、「コメント政策」や戦略が受け入れられているということですか?コーディング方法に関するアドバイスはたくさんありますが、「コメントの方法」についてはどうでしょうか。

2
これを暗黙的に返すJava voidメソッド
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 「this」型を返すセッターメソッドについては、SOに関するいくつかの議論があります。そして、java 7にはこれを返すvoidメソッドの提案があったようです。しかし、この提案はJava 7の機能に到達できませんでした。この提案がJava 8またはそれ以降に移行したか、完全に破棄されたかはわかりませんでした。それは...ですか? 参照リンク-/programming/31584/design-java-and-returning-self-reference-in-setter-methods
20 java 

6
定数と構成ファイルを使用して構成を維持する場合
特定のキーをweb.configに入れるか、Constants.csクラスに入れるか、またはこのようなものに入れるかについて、よく自分と戦います。 たとえば、ケースに関係なくアプリケーション固有のキーを保存する場合、カスタムキーを使用して保存し、Web構成から取得したり、定数クラスの定数を参照して使用したりできます。 いつ設定キーで定数を使用したいですか? この質問は、私が考えるあらゆる言語に本当に当てはまります。

4
複数のクラスを含むC#ファイルの命名規則は何ですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 8年前に移行され ました。 C#プロジェクトでは、小規模で密接に関連するクラスを同じ.csファイルに頻繁にグループ化します。この方法により、実際のコードにほとんど含まれない無数のファイルを処理する際の摩擦が軽減されます。それでも、複数のクラスを含むファイルに名前を付ける確立されたプラクティスはありますか?
20 c#  .net 

3
共通の機能を共有するWindowsフォームに最適な設計
過去に、アプリケーションでWindowsフォームの拡張を許可するために継承を使用しました。すべてのフォームに共通のコントロール、アートワーク、および機能がある場合、共通のコントロールと機能を実装する基本フォームを作成し、他のコントロールがその基本フォームから継承できるようにします。ただし、その設計にはいくつかの問題があります。 コントロールは一度に1つのコンテナにしか入れることができないため、静的なコントロールは扱いにくいものになります。たとえば、このクラスの他の(派生)インスタンスがすべて同じTreeViewを変更および表示できるように、保護および静的にするTreeViewを含むBaseFormというベースフォームがあるとします。TreeViewは一度に1つのコンテナにしか入れることができないため、これはBaseFormから継承する複数のクラスでは機能しません。おそらく初期化された最後のフォームにあります。すべてのインスタンスはコントロールを編集できますが、一度に1つだけ表示されます。もちろん、回避策はありますが、それらはすべていものです。(これは私にとって本当に悪い設計のようです。なぜ複数のコンテナが同じオブジェクトへのポインタを格納できないのでしょうか?とにかく、それがそうです。) フォーム間の状態、つまり、ボタンの状態、ラベルテキストなど、グローバル変数を使用して、Loadの状態をリセットする必要があります。 これは、Visual Studioのデザイナーによって実際にサポートされていません。 使用するのに優れた、それでも簡単に保守可能な設計はありますか?または、フォームの継承が依然として最善のアプローチですか? 更新 MVCからMVPに、オブザーバーパターンからイベントパターンに移動しました。ここに私が今考えているものがあります、批評してください: BaseFormクラスには、コントロールと、それらのコントロールに接続されたイベントのみが含まれます。それらを処理するために何らかのロジックが必要なすべてのイベントは、すぐにBaseFormPresenterクラスに渡されます。このクラスは、UIからのデータを処理し、論理演算を実行してから、BaseFormModelを更新します。モデルは、状態の変更時に発生するイベントをPresenterクラスに公開し、Presenterクラスはサブスクライブ(または監視)します。プレゼンターはイベント通知を受け取ると、ロジックを実行し、それに応じてビューを変更します。 メモリには各Modelクラスが1つしかありませんが、BaseFormの多くのインスタンス、したがってBaseFormPresenterが存在する可能性があります。これにより、BaseFormの各インスタンスを同じデータモデルに同期するという私の問題が解決します。 質問: どのレイヤーが最後に押されたボタンのようなものを保存する必要があるので、フォーム間でユーザーのために強調表示し続けることができます(CSSメニューのように)? このデザインを批判してください。ご協力いただきありがとうございます!

10
プログラマとして苦労しています。アドバイスが必要[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は今何年もの間開発者です。私は自分の仕事にかなり長けており、「仕事を終わらせる」ことができます。 しかし、「仕事をやり遂げる」と「仕事をきちんと行う」には違いがあります。例を使用しましょう。 最近、ウェブサイトをゼロから開発しました。ウェブサイトは正常に動作し、問題はありませんでした。コードを見てみると、もっとうまくやれると思いました。MySQLクエリを削減できたかもしれません。MVCを使用して拡張を容易にすることもできました(現在は拡張する必要があります)。 CodeIgniterを使用してプロジェクトを書き直すことにしました。私はフレームワークが好きです。しかし、MySQLクエリを削減するために高度な結合を学習しなければならなかったため、私は脇道になりました。 そしてこれが問題です。私がきちんと仕事をするたびに、私は絶え間ない学習の輪にいます。また、高度なMySQL参加などのトピックは学習に時間がかかり、実装に時間がかかります。 私は会社に勤めていません。私はすべてを一人でやります。だから、もし私が会社のPHP開発者として働いていたら、SQLを処理する別のチームがあると想像します。 ソロであることは難しいです。そして時々、私の知識は進んでいますが、質問の後に質問をすることがあります。私はおそらく自分の仕事に大きな誇りを持っています。しかし、完全なプロジェクトを処理する会社で働かなければならないとしたら、自分のプライドを満たし、「正しい」ことを確実にするために、より多くのことを学ばなければならないので、プロジェクトに時間がかかると想像できます。 私は新しい年の後に仕事に就く予定です。仕事のセキュリティが必要です。それが、私がこの質問をしている理由です。 自己啓発と自己改善に関して、どのようなアドバイスができますか?心配する必要はありませんか?または、SQLクエリを直接処理しない場合、PHP開発者としての仕事を探していますか?

8
一般的なプログラミングに対する認識をチームメンバーに広めるにはどうすればよいですか?
私は人々が信じる環境にとどまっています: Javaジェネリックは、実際のコーディングではなく、ライブラリの書き込み専用に使用される機能です。 C ++はオブジェクト指向プログラミング言語です。templateオプションで回避可能な機能です ただし、これらの人々は、汎用プログラミング(STL、Javaコンテナーなど)を使用して作成されたライブラリーに大きく依存しています。templatesまたはを使用してコードを記述する場合generics、コードレビューアはそれを拒否する可能性が高く、「適切/理解可能/エレガント」な方法でそれを記述するようコメントします。 このような考え方は、通常のプログラマーから上級管理職まで適用できます。90%の時間、これらの人々はロビー活動をしているため、逃げ道はありません。 それらを説明する最良の方法(のどを切らない)、OOと汎用プログラミングの両方を同時に構成するコードを記述する実際的なアプローチは何ですか?
20 java  c++  templates  generics 

9
共通のコードを集中化するためだけに関数を使用するのは良い習慣ですか?
私はこの問題に頻繁に出くわします。たとえば、私は現在、読み取り関数と書き込み関数を作成していますが、どちらもbufNULLポインターであるかどうかと、mode変数が特定の境界内にあるかどうかをチェックします。 これはコードの重複です。これは、独自の機能に移動することで解決できます。しかし、私はすべきですか?これはかなり貧弱な機能であり(あまり機能しません)、むしろローカライズされているため(一般的な目的ではありません)、単独ではうまく機能しません(場所がわからなければ必要なものがわかりません)中古)。別のオプションはマクロを使用することですが、この投稿では関数についてお話したいと思います。 それで、あなたはこのような何かのために関数を使うべきですか?長所と短所は何ですか?

5
抗培養試験で試験を開始するにはどうすればよいですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 自白します。形式化された自動化されたテストは、私のプログラミングの背景の一部ではありませんでした。現在、私は多くの開発者(大部分は何らかの種類のWeb開発者)を抱える非常に大きな会社で働いていますが、彼らのほとんどもテストしていないことは明らかです*。(* 正式に発言し続けるつもりはありません。推測してください。) テストを開始するために組織のサポートを受けるのを待つ場合、それは決して起こりません。経営陣のテストを押して「内部から物事を変えよう」とすると、変化が起こる前に枯渇してしまいます。今すぐテストを開始する必要があります。 しかし、TDDとその同類を使用すると、実動コードと一緒に多くのテストコードを作成することになります。バージョン管理システム(すべて集中管理)は、テストコードを保存するために編成されていません。ワークステーション上ですべての場所を見つける必要があります。 価値のない、またはツールを提供しない文化の中で、ソフトウェアテストの個人的な実践を始めることは可能ですか?公式のツールと組織にテスト、フレームワーク、および自動化の場所がない場合にテストできるようにするために、どのようなテクニックとツールを使用しますか?
20 testing  tdd 

5
ユニットテストは時期尚早の一般化につながりますか(特にC ++のコンテキストで)?
予備メモ さまざまな種類のテストの違いについては説明しませんが、これらのサイトには既にいくつかの質問があります。 私はそこに何を取るだろうと、それは言う:単位は、「アプリケーションの最小単離ユニットテスト」の意味でのテストこの質問は、実際に由来します 分離の問題 プログラムの最小の分離可能な単位は何ですか。さて、私が見ているように、それは(非常に?)あなたがコーディングしている言語に依存します。 Micheal Feathersは縫い目の概念について語っています:[WEwLC、p31] シームは、その場所で編集せずにプログラムの動作を変更できる場所です。 そして、詳細に立ち入ることなく、私は、ユニットテストのコンテキストで、あなたの「テスト」があなたの「ユニット」とインターフェースできるプログラムの場所であると理解しています。 例 特にC ++の単体テストでは、テスト対象のコードから、特定の問題に対して厳密に要求される継ぎ目を追加する必要があります。 例: 非仮想実装で十分な仮想インターフェースを追加する 分割-generalizing(?)-テストを追加しやすくするための(さらに小さな)クラス 単一の実行可能プロジェクトを、一見「独立した」ライブラリに分割し、テストのためにそれらを独立してコンパイルしやすくするために「ちょうど」。 質問 同じことを願ういくつかのバージョンを試してみましょう。 ユニットテストでアプリケーションのコードを構造化する必要があるのは、ユニットテストに「のみ」有益であるか、実際にはアプリケーション構造に有益ですか。 必要とされるコードの一般化は、それがユニット・テスト可能な何のために有用にすることですが、ユニットテスト? 単体テストを追加すると、不必要に一般化されますか? シェイプユニットテストは、コードに「常に」強制することも、問題の領域から見た一般的なコードの良い形ですか。 コードを使用する2番目の場所が必要になるまで/必要になるまで一般化しないと言った経験則を覚えています。単体テストでは、コードを使用する2番目の場所、つまり単体テストが常にあります。それで、この理由は一般化するのに十分ですか?

4
ビジネスルールエンジンと制約プログラミング言語の関係
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 (おそらく古い)Droolsまたは他のルールエンジンのマニュアルを見ると、その付加価値の例の1つは、Miss Mannersパズル(Droolsのマニュアル)などのパズルを解くことです。現在、このようなパズルはPrologまたは最新のConstraint Programming言語を使用して自然に定式化および解決されており、なぜこの目的にDroolsを使用するのか疑問に思われます。この場合、PrologとCPLが提供する付加価値は、パズルを論理的な述語のセットとして自然に定式化し、ソリューションのスペースを自動的に検索できることです(この点でCPLの方が効率的です)。しかし、Droolsなどの製品の付加価値は何ですか(たとえば、Excelファイルを取得して、それを一連のルールに変換するという付加機能を意味します)。 より具体的には、Prologはバックトラック検索を実装し、CLPは制約伝播を使用したバックトラック検索を実装します。したがって、いわば、個々の変数の空間のデカルト積全体を検索する代わりに、この製品空間の大部分を取り除きます。これがそれらを効果的かつ有用にするものです。PrologとCLPの両方が文献で十分に議論されています。 一方、Reteアルゴリズムがいくつかのデータ構造の形式でルールセットをキャッシュすることは明らかであるため、(私の理解では)入力の一部が変更された場合に出力を評価する方が効果的です。このデータ構造を段階的に変更するために効果的に更新する手段を与えると、基本的な考え方を理解することは難しくなります(私にとっては)、さらにその有効性(何に比べて?残念ながら、この広いコンテキストでReteアルゴリズムを表示する適切な参照を見つけることは困難です。 Droolsのドキュメントは、残念ながらこの点に関してあまり有益ではありません。最も見つけられたのは、「Reteアルゴリズム、Leapsアルゴリズム、およびDrools 'Reteoo(およびLeaps)などの子孫は、ルールオブジェクトをドメインオブジェクトデータに一致させる非常に効率的な方法を提供します。これらは、 (ルールエンジンは過去の一致を記憶できるため)完全に変更することはできません。これらのアルゴリズムは戦闘で実証済みです。」非常に効率的-何と比較して?バトルで実証済み-現実世界のアプリケーションを指すことができますか? このテーマにもう少し光を当てるか、有効な参考文献を提供していただければ幸いです。

6
従来のチームに分散バージョン管理を使用する頭痛の種
私は個人的なプロジェクトにDVCSを使用しており、他の人からプロジェクトへの貢献を管理するのが簡単になることを完全に見ることができますが(たとえば、典型的なGithubシナリオ)、「伝統的な」チームにはいくつかの問題があるようですTFS、Perforceなどのソリューションで採用されている集中型アプローチ(「従来」とは、誰もが同じコードに触れる可能性のある、誰も「所有しない」1つのプロジェクトに取り組んでいるオフィスの開発者チームを意味します。) これらの問題のいくつかは私が自分で予見しましたが、他の考慮事項でチャイムしてください。 従来のシステムでは、サーバーに変更をチェックインしようとすると、競合する変更を他の誰かが以前にチェックインした場合、チェックインする前にマージを強制されます。DVCSモデルでは、各開発者がローカルで変更され、ある時点で他のリポジトリにプッシュされます。そのリポジトリには、そのファイルのブランチがあり、2人が変更しました。今、誰かがその状況に対処する責任を負わなければならないようです。チームの指定された人は、すべての競合のマージを処理するためにコードベース全体の十分な知識を持っていない場合があります。したがって、誰かがそれらの開発者の1人にアプローチし、プルしてマージを実行してから再度プッシュするように指示する(または、そのタスクを自動化するインフラストラクチャを構築する)必要がある追加のステップが追加されました。 さらに、DVCSはローカルでの作業を非常に便利にする傾向があるため、開発者がプッシュする前にローカルリポジトリにいくつかの変更を蓄積して、こうした競合をより一般的で複雑にする可能性があります。 チームの全員がコードの異なる領域でのみ作業する場合、これは問題ではありません。しかし、私は誰もが同じコードで作業している場合に興味があります。一元化されたモデルは、競合を迅速かつ頻繁に処理することを余儀なくし、大規模で痛みを伴うマージを行う必要性を最小限に抑えるか、誰かにメインリポジトリを「ポリシング」させるようです。 あなたのオフィスであなたのチームとDVCSを使用している人のために、あなたはそのような場合にどのように対処しますか?毎日の(またはより頻繁に、毎週の)ワークフローが悪影響を受けていると思いますか?職場でDVCSを推奨する前に注意すべきその他の考慮事項はありますか?

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