ソフトウェア工学

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

4
JSON応答にHTMLマークアップを含める必要がありますか?
eコマースサイトで、カートにアイテムを追加するときに、選択可能なオプションを含むポップアップウィンドウを表示したいと思います。iPod Shuffleを注文していて、彫刻する色とテキストを選択する必要があるとします。 ウィンドウをモーダルにしたいので、Ajax呼び出しで生成されたライトボックスを使用しています。現在、2つのオプションがあります。 オプション1:データのみを送信し、JavaScriptを使用してHTMLマークアップを生成する これの良い点は、Ajaxリクエストを最小限に抑えて、データをマークアップと混合しないことです。 この点でそれほど優れていないのは、サーバー側のテンプレートエンジンを使用する代わりに、JavaScriptを使用してレンダリングを行う必要があることです。クライアント側のテンプレートソリューションを使用して、アプローチを少しクリーンアップできる場合があります。 オプション2:HTMLマークアップを送信する これの良い点は、残りのレンダリングタスク(Django)で使用しているのと同じサーバー側テンプレートエンジンを使用して、ライトボックスのレンダリングを実行できることです。JavaScriptは、HTMLフラグメントをページに挿入するためにのみ使用されます。そのため、レンダリングは明らかにレンダリングエンジンに委ねられます。私には理にかなっています。 しかし、何らかの理由で、Ajax呼び出しでデータとマークアップを混合することに不安を感じています。何が私を不安にさせているのか分かりません。つまり、すべてのWebページが提供されるのと同じ方法で、データとマークアップが正しいのですか?
13 mvc  django  templates  json 

9
GPLv2ライセンスのライブラリを会社の内部イントラネットアプリケーションで使用できますか?
契約している会社の内部アプリケーションを作成しています。このアプリケーションでは、GPLv2ライセンスライブラリを使用します。いくつかのポイント このアプリケーションは、会社の範囲内で使用されるものであり、一般に使用されることはありません。これは社内でのみ使用されます。 それは決して販売されることはありません!! 。そのため、コードの販売から直接金をmadeけることはありません。製品ではありません。 アプリケーションの使用には2つの形式があります コンソールベースのexe(GPLライブラリを使用)であるネイティブ形式。そして 実行可能ファイルを呼び出すWebインターフェイスを介した使用。 ソースコードはクローズドソースのままであり(会社での使用のみ)、適切である 私はこれについて多くの質問をしました(1つはトピックとして閉じられ、もう1つはプログラマからマークされていません)が、ライセンスの解釈が正しいかどうかを理解するのに苦労しました。 これまでの私の理解に基づいて、私はこのライブラリを問題なく使用することを許可されています。ソースコードを変更したり、アプリケーションを配布したり、アプリケーションを公開したりすることはありません。アプリケーションは販売されず、社外に配布されることもありません(ただし、当社のオフサイトDR施設で入手できます)。リリースされたバージョンのバイナリを使用する可能性が非常に高く、ソースから再コンパイルすることはできません。 GNU FAQからの次の質問は私の考えを裏付けているようです。 GPLでは、変更されたバージョンのソースコードを一般に公開する必要がありますか? GPLでは、変更されたバージョンまたはその一部をリリースする必要はありません。変更をリリースすることなく、自由に変更してプライベートに使用できます。これは組織(企業を含む)にも適用されます。組織は変更されたバージョンを作成し、組織外にリリースすることなく内部で使用できます。 ただし、何らかの方法で修正版を一般に公開する場合、GPLでは、修正されたソースコードをGPLの下でプログラムのユーザーが利用できるようにする必要があります。 したがって、GPLは変更されたプログラムを特定の方法でリリースする許可を与えますが、他の方法では許可しません。しかし、それをリリースするかどうかの決定はあなた次第です。 GPLv2ライセンスのライブラリを会社の内部イントラネットアプリケーションで使用できますか?
13 licensing  gpl 

3
標準の定義
標準をどのように定義しますか?まだ存在しない種類のプロトコルを定義しています。RFCを作成し、IANAが提供する既知のポート番号を使用します。どうやって始めますか?

5
オブジェクト指向プログラムは有限状態マシンとして見ることができますか?
これは哲学的/基本的な質問かもしれませんが、ただ明確にしたいだけです。 私の理解では、有限状態マシンは、システムの出力が現在の入力だけでなく、システムの現在の状態にも依存するシステムをモデル化する方法です。さらに、名前が示唆するように、有限状態マシンは、それぞれの状態と動作を持つ有限のN個の状態にセグメント化できます。 これが正しい場合、データおよび関数メンバーを持つすべてのオブジェクトをオブジェクト指向モデルの状態にして、オブジェクト指向設計を有限状態マシンにするべきではありませんか? それがオブジェクト設計におけるFSMの解釈ではない場合、ソフトウェアでFSMを実装するとき、人々は正確に何を意味しますか?私は何かが欠けていますか? ありがとう

12
ベストプラクティスと常識の違いは?
ソフトウェア開発のベストプラクティス1に関する多くの会話があります。私は少なくとも3つの主要なポイントがSEと他の場所の両方で多くの議論を得るのを見ました: ベストプラクティスとして適格なものとその理由は何ですか? ベストプラクティスはそもそも議論する価値さえあります。プラクティスが「ベスト」プラクティスではないと断言するのが妥当だからです。 適用できないように思われる場合、またはトレードオフを非現実的にする外部の制約(時間、お金など)のために、いつベストプラクティス(またはおそらくベストプラクティス)を放棄する必要がありますか? ソフトウェア開発の常識の概念は、はるかに少ない頻度で登場するように思われますが、決してないことではありません。最近の経験により、この概念が再び頭に浮かびました。 私の最初の印象は、それがベストプラクティスとは異なる議論であるが、おそらく他の受粉を伴うということです。 一般的に常識を考えるとき、あなたが選んだか教えられたルールのセットを考えて、それがあなたに判断と判断を下すためのベースラインを与える。常識に従うことは、足全体を撃ち落とさないようにする良い方法です。しかし、かなり低いベースラインを超えて、常識は教育された決定を下す必要性に道を譲り、教育された決定は、証拠が十分に説得力があるように見えるときでも常識を無効にすることができます。私はここで定義を少し緩めているかもしれませんが、私の例を先導するのに十分だと思います。 ソフトウェア開発の常識を考えるとき、コードベースが急速に不可解な混乱に陥ることを防ぐための基本的な衛生のすべてのルールを考えます。例として、次のようなものがあります。単一のグローバル構造を使用して、重要なプログラム内で状態を維持および伝達しない。ランダムで意味不明な変数/メソッド/クラス名を使用しない。おそらく、アンチパターンと呼ばれるようになったものに非常に近いものです。ベストプラクティスを実践パターンと学習パターンに適用する場合、常識を適用することはアンチパターン学習の実践アナログと見なすことができます。 これを念頭に置いて、私は他の人の答えを見ることが私がこれを介して私の道を推論するのに役立つかもしれないいくつかの質問を提起したいと思います。 他の人は、ソフトウェア開発に常識の概念があると信じていますか?いずれにせよ、推論を知ることに興味があるでしょう。 もしそうなら、それは議論する価値がある概念ですか?時々ベストプラクティスを実行するのと同じくらい、プッシュする必要があるものですか?それをさらに難しくする価値はありますか? アンチパターンの類推が合理的であると思われる場合、一般的なルールは、アンチパターンは他の方法がない場合にのみ採用され、それでも非常に限られた状況下でのみ採用されるというものです。コードベースが常識から逸脱することを許容する上で、どれほど柔軟にすべきでしょうか?答えが「まったくない」のは不合理に思えます。なぜなら、便宜のために逸脱が必要になる場合があるからです。しかし、「ベストプラクティス」を採用する場合とは異なる種類の議論のようです。たぶんそうではありません。そう思わないなら、理由を知りたい。 これははるかに開かれた終わりであり、おそらくそれ自体の後続の質問に値する可能性がありますが、それはどのような種類の推奨事項を常識の問題のように思われますか? 他の考えも歓迎します。 1おそらく私はそれらを「一般的に繰り返されるドメインパターン」と呼ぶ方が良いでしょうが、「ベストプラクティス」という名前は、彼らがそうであることに同意しなくても、誰でも彼らが何であるかを知っているほど十分に一般的です。「最高の」部分が気になる場合は、「ベストプラクティス」を信頼性の低いサウンドに置き換えたと想像してください。


3
パラメーター化されたクエリへの依存は、SQLインジェクションから保護する唯一の方法ですか?
SQLインジェクション攻撃で私が見たすべては、パラメータ化されたクエリ、特にストアドプロシージャのクエリが、このような攻撃から保護する唯一の方法であることを示唆しているようです。私が(暗黒時代に)働いていたとき、主に保守性が低いと見られていたため、ストアドプロシージャは貧弱なプラクティスと見なされていました。テスト可能性が低い。高度な結合; システムを1つのベンダーにロックしました。(この質問は他のいくつかの理由をカバーしています)。 私が働いていたとき、プロジェクトはそのような攻撃の可能性にほとんど気づいていませんでした。さまざまな種類の破損からデータベースを保護するために、さまざまなルールが採用されました。これらのルールは次のように要約できます。 クライアント/アプリケーションは、データベーステーブルに直接アクセスできませんでした。 すべてのテーブルへのすべてのアクセスはビューを介して行われました(ベーステーブルへのすべての更新はトリガーを介して行われました)。 すべてのデータ項目にドメインが指定されていました。 データ項目をNULL可能にすることは許可されませんでした-これは、DBAが時々歯を磨くという意味がありました。しかし、強制されました。 ロールと権限が適切に設定されました-たとえば、ビューのみにデータを変更する権限を与える制限されたロール。 SQLインジェクション攻撃を防ぐために、このような(強制的な)ルールのセット(必ずしもこの特定のセットである必要はありませんが)は、パラメーター化されたクエリの適切な代替手段ですか?そうでない場合は、なぜですか?データベースは、データベース(のみ)固有の手段によって、このような攻撃から保護できますか? 編集 質問の強調は、受け取った最初の回答に照らして、わずかに変わりました。基本質問は変更されていません。 EDIT2 パラメータ化されたクエリに依存するアプローチは、システムに対する攻撃に対する防御の周辺ステップにすぎないようです。より根本的な防御が望ましいと思われ、特にインジェクション攻撃から防御する場合でも、そのようなクエリへの依存は不要であるか、それほど重要ではないようです。 私の質問に暗示されているアプローチは、データベースの「装甲」に基づいており、それが実行可能なオプションであるかどうかはわかりませんでした。さらなる研究は、そのようなアプローチがあることを示唆しています。このタイプのアプローチへのポインタを提供する以下のソースを見つけました。 http://database-programmer.blogspot.com http://thehelsinkideclaration.blogspot.com これらのソースから取得した主な機能は次のとおりです。 広範なセキュリティデータディクショナリと組み合わせた広範なデータディクショナリ データディクショナリからのトリガー、クエリ、および制約の生成 コードを最小化し、データを最大化する これまでの回答は非常に有用であり、パラメータ化されたクエリを無視することから生じる困難を指摘していますが、最終的には元の質問に回答しません(太字で強調されています)。

3
Webのベストプラクティスが常に大企業に違反している場合、これは非常に重要ですか?
通常、ウェブサイトの最適化、新規顧客の獲得、一般的にはサーバーの負荷を軽減しながら、ユーザーエクスペリエンスを高速、スムーズ、快適にするためのルールとベストプラクティスが多数あります。 また、通常、大企業はこれらのベストプラクティスを使用することを気にしません。いくつかの企業(Googleなど)を除き、最大のWebサイトでは、次のことがわかります。 テーブルレイアウト、縮小されたJavaScriptではなく、CSSスプライトはありません、いくつかのCSSファイル、邪魔にならないことが簡単な場合でも侵入型JavaScript <head/>、などでJavaScriptファイルを呼び出します。 無意味なエラー、迷惑なポップアップ、膨大な量のフィールドを含む登録フォーム、登録上のUXの問題¹、ウェブサイトの使用を不可能にする愚かな質問や状況²、ウェブサイトの重要な部分の混乱状況³、複数のリダイレクト、遅いページなど。 一方で、これらの企業は、その成功が部分的または完全にウェブサイトに依存しているため、ウェブサイトの開発、最適化、ホストに莫大なお金を払っています。一方で、彼らは常にベストプラクティスに違反している一方で、それらのベストプラクティスを支持する人々は、それらに従うことで、より良いUXと、より少ないフットプリントでより高速なWebサイト(数千台のサーバーでホストされているWebサイトでは無視できない)を達成できると説明しています。 そのような場合、次のことを尋ねるのが論理的です。 本当に成功している大企業が、ウェブサイトと有能な従業員に多額の資金を持ち、ウェブサイトの最適化を重視する企業が常にベストプラクティスに違反している場合、それらのベストプラクティスは真実ですか? または、言い換えれば、これらのベストプラクティスが非常に重要であり、Webサイトの最適化に非常に役立つ場合、それらの企業がそれらを気にしないのはなぜですか? Dell.comの例を見てみましょう。私は彼らがホームページを作成するために最高の最高を雇うと確信しています。彼らのホームページはテーブルレイアウトを使用しています。テーブルのレイアウトが悪いと言う人は間違っているということですか?デルが採用した最高の最高の人材が無能であることを意味していますか? ¹最初の例:eBayは、登録時に両方のフィールドにメールアドレスを貼り付けることを不可能にし、迷惑なユーザー以外は理由なく登録フォームを使用することを長くします。ベストプラクティスは、コピーを禁止することですが、貼り付けを許可することです。2番目の例:Microsoft Liveは、パスワードの長さを16文字に制限していますが、明確な理由はまったくありません。 ²たとえば、非常に長い間Amazonにアクセスしていない場合、パスワードが無効であると表示され、その後、パスワードを回復するために、最後のトランザクションに関する情報が要求されます。アカウントで以前に取引を行ったことはありません。 ³たとえば、デルでは、ハードディスクなしでラックサーバーを注文することを不可能にしていますが、再利用したいハードディスクがすでにある場合、これは完全に有効です。 ⁴このような最適化には、最も重要なコンテンツをより速く送信するための部分フラッシュ、ページの読み込みを待機しているユーザーが費やした時間とWebサイトを使用して いるユーザー数との関係に関する調査などが含まれます。Dell Dell、Microsoftなど。 e eBayまたはその他のWebベースの企業について。

8
安全でないパスワードに対するユーザーの処罰[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 安全でないパスワードを選択するユーザーの権利を制限することを考えています(長さによって決定されるパスワードの安全性、使用される文字の種類(大文字/小文字、数字、記号など)、および使用できるかどうか)レインボーテーブルにあります)、侵害された場合にアカウントが受ける損害を制限します。 このアイデアのアプリケーションはまだありませんが、フォーラムなどを書いています:1234をパスワードとして使用するユーザーは、投稿する前にキャプチャを入力するか、厳格なスパム対策の対象となる場合がありますコンテンツを拒否するタイムアウトまたはベイジアンフィルターとして。このフォーラムが非常に階層的であり、モデレーターまたは何らかの手段による「昇格」を許可する場合、これは、それらが特権を獲得するのを阻止するか、特権を持っていることを伝えますが、より安全なものに変更せずにそれらを行使させませんパスワード。 もちろん、これはセキュリティの唯一の尺度となることはできませんが、それ以外の場合は適切なセキュリティプラクティスの次にうまくいくかもしれません。 どう思いますか?これは無理をして、より重要なセキュリティ慣行からフォーカスを奪い取っているのでしょうか、それともリスクを制限し、ユーザーに安全なパスワードの使用を促す良い方法ですか?

2
監査とログはソフトウェアシステムでまったく同じことをしていますか?
一部のソフトウェアシステムには監査とログの機能があることがわかりました。これらの機能は両方とも同じことをしているように見えます - 舞台裏ですべてのユーザーのアクションを記録します。データベースには監査とログのそれぞれのテーブルが存在します。彼らが本当に同じことをしているのなら、開発者がシステムで重複した機能を開発した理由は何ですか?
13 audit 

16
ソフトウェアの一部を「ばか校正」するプロセスを説明するより良い方法は何ですか?
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 8年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け付けていません。 私にとって、イディオットプルーフとは、たとえユーザーが試してみたとしてもユーザーがソフトウェアを壊さないようにすることを意味します。たとえば、値がテキストボックスから読み取られてdoubleに変換された場合、基になるソフトウェアが馬鹿な証拠であれば、ユーザーがdouble以外の値を入力しても壊れません。 私は最近、開発スケジュールを書き上げましたが、その項目の1つに「Idiot proof UI」という名前が付けられました。私がこのソフトウェアを構築している人々は、この言葉に冗談を装って冗談を言いましたが、この言葉が実際に人々を怒らせる場所はわかります。 これを言うより良い方法は何ですか?

10
モジュールの変更/追加中に別の開発者コードを再フォーマットしても大丈夫ですか?
グループ環境で開発し、一部のコードベースで機能を追加または変更しているとき。以前の開発者のコ​​ードを再フォーマットして現在のコーディング標準に合わせるのは不快または失礼と見なされますか?標準が変更され、おそらく変更され続けることを理解していますが、誰かがコードフォーマットを変更して変更した場合、あなたは気分を害するでしょうか? 明確にするために、タブやスペースなどをいじるだけで、ロジックの変更については話していません。 編集:コーディング標準のためにこれを行うだけでなく、コードを読んで最新にするので、重要なアプリケーションの変更を開始する前に実装されたロジックを完全に理解できます。

8
私が無料で提供しているソフトウェアが放棄されたソフトウェアではないことをどのように(迅速に)人々に知らせるのですか?
独立した個々のプログラマーとして: 私が書いて無料で配布したソフトウェアを放棄していないことを、どうすればすぐに人々に知らせることができますか?ソフトウェアを専門レベルに維持およびサポートするために必要な努力をしていますか? 1人または2人の開発者によって作成されたソフトウェアが無料で入手できる場合、またはオープンソースとしてマークされている場合、通常、デフォルトの仮定はそれが放棄されたソフトウェアであるということです。通常、これは安全な仮定です。疑問がある場合は、この質問に対する答えを確認してください。なぜプログラマーはクローズドソースアプリケーションを作成し、それを無料にするのでしょうか。。 ただし、放棄されていない無料またはオープンソースのツールを提供するプログラマーは多数います。 Googleのような大企業について話している場合、サポートされているライブツールとソフトウェアと、放棄または廃止されているものとの違いを伝えるのに、実際の問題はありません。 活発なgitリポジトリは高速ではありません。ユーザーはリポジトリを理解し、リポジトリを探す場所を知るのに十分な知識が必要です。一貫性のあるマーケティングとコミュニティ管理には、自分でできる以上の時間と労力がかかります。また、私のソフトウェアが人気/成功した場合、それらは自分で成長し、コミュニティのパワーユーザーによってサポートされると思います。

7
プログラミングにおけるスレッドの適切な使用とは何ですか?
多くのプログラムがプロセスごとに最大100を使用する一方で、プロセッサごとに1つのスレッドのみを使用することを推奨することを聞くのはうんざりです!例えば、いくつかの一般的なプログラムを取ります vb.net ide uses about 25 thread when not debugging System uses about 100 chrome uses about 19 Avira uses more than about 50 スレッド関連の質問を投稿するたびに、プロセッサごとに複数のスレッドを使用するべきではないことをほぼ毎回思い出し、上記のすべてのプログラムは単一プロセッサのシステムで台無しになっています。

4
オープンソースプロジェクトからアルゴリズムを学び、それをクローズドソースプロジェクトに実装しても大丈夫ですか?
参照すべてを始めた投稿 挑発的な方法で尋ねた元の質問を解決するために、この質問を提起しました。 オープンソースプロジェクトからアルゴリズムを学ぶ場合、そのアルゴリズムを別のクローズドソースプロジェクトで使用しても大丈夫ですか?そうでない場合、それはその知識を再び使用できないことを意味しますか?使用できる場合、どのような状況になりますか? 明確にするために、私はライセンスを回避しようとはしていません。

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