ソフトウェア工学

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

6
電話番号に使用できる特殊文字は何ですか?
そのため、カナダ、米国、インド、英国などのユーザーを含むグローバルユーザーに使用されるWebページを設計しています。この電話番号フィールドに検証を適用する必要がありますが、これを実行する最善の方法はわかりません。 私が考えることができるいくつかの有効な形式は次のとおりです。 1800123456(インド) 米国の電話番号での「-」の使用 ユーザーに入力を許可する必要がある特殊文字(たとえば、- / ())について少し混乱しています。過去に他の人はこれをどのように解決しましたか?

7
ソフトウェアライセンス:オープンソース、ただし配布なし(無料または営利目的)
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 PHPでプログラムを作成しました。私は人々がコードを使用して自分のアプリから学び、さらにはビットを含めることができるようにしたいと思っていますが、それを販売する権利を維持し、他の人がコピーを無料または利益のために配布しないことを明確にしたいと思います。私は他の誰のコードも使用していないので、ライセンスの互換性について心配する必要はありません。それに適したライセンスはどれですか? 私は人々がライセンスを無視するのを止めることはできないことを知っていますが、少なくともそれがそこにあることを知って、彼らがしようとしたら間違ったことをしていることを知ってほしいです。ライセンスをわかりやすい英語で説明している場所はどこにもありません。はい、GNUおよびBSDライセンスを読み込もうとしましたが、入手できません。ありがとう。 わかりましたので、ここに他の人が求めている説明があります:私はこのプログラムを非常に安く販売するつもりです。プログラムを最初に購入し、私のコードから利益を得ない限り、人々はそれから望むだけのコードを自由に使用できます。 人々が全部を手に入れて、それをより良くしてくれたとしても気にしませんが、人々は正直ではなく、何かを追加して無料で提供し、誰も私の製品を買わないでしょう。 私はただ人々にそれを持ってもらい、寄付を求めるべきだと思います。だから多分私はそれをGPLまたはBSDするべきです。 編集:私は誰もが混乱している理由を理解しています。それは矛盾していますが、法律に関することは、すべてが黒または白に見えるということです。私は灰色の領域を達成しようとしています。人々に私からこのものを買ってもらいたいのです。コピーして他の人に渡したり、その一部を使用したりするのではありません。「部品を使用する」ことで、誰かが私に何気なく尋ねてきたなら、私が言うのは「ただ合理的」だろう。だから基本的に私のコードの大部分をあなたの仕事に使わないで、それから私がやったことを完全に打ち負かしてください。確かに、プロジェクトで私のDB接続スクリプトを使用します。私は気にしません。または...すべてのコードを使用して追加します!しかし、個人的な使用のためだけに、私はこのことからお金を稼ぐつもりであり、それが私の仕事を完全に損なうので、あなたはそれを配り始めないでください。そしてそれ dあなたの追加を見せてくれれば嬉しいです。クレジットを差し上げますが、主なことは、私が生計を立てなければならないソフトウェアを再配布しないことです。その感情を合法化するのは難しい。そして、これらすべてのライセンスを理解できません。
20 licensing 

9
「if password == XXXXXXX」は最低限のセキュリティに十分ですか?
セキュリティリスクが中〜低のアプリ(つまり、バンキングアプリなどではない)のログインを作成する場合、ユーザーが入力したパスワードを次のように入力するだけで検証できますか。 if(enteredPassword == verifiedPassword) SendToRestrictedArea(); else DisplayPasswordUnknownMessage(); 効果的であるように簡単に思えますが、それが必要なすべてであるかどうか私は確かに気にしません。ユーザー名とパスワードのコンボを簡単にチェックするだけで十分ですか? 更新:特定のプロジェクトはたまたまWebサービスであり、検証は完全にサーバー側であり、オープンソースではありません。ドメインは、これに対処する方法を変更しますか?

11
ヘッドファーストブックはどうですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 一度も読んだことがありませんが、彼らのスタイルは面白くてユニークです。彼らがお金/時間を与える価値があるかどうかわかりませんか?
20 books 

4
ソフトウェアアーキテクトとして何をテーブルに持ち込むべきですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 StackOverflowおよびProgrammers SEでのソフトウェアアーキテクト(SA)の役割について、多くの質問があり、適切な回答があります。私はそれらよりも少し焦点を絞った質問をしようとしています。SAの定義は非常に広いため、この質問のためにSAを次のように定義します。 ソフトウェアアーキテクトは、プロジェクトの全体的な設計をガイドし、コーディング作業に関与し、コードレビューを実施し、使用するテクノロジを選択します。 言い換えれば、私は管理上の休息と、頂上(さらに押韻された言葉は省略された)タイプのSAについては話していない。何らかのSAポジションを追求する場合、コーディングから離れたくありません。クライアントやビジネスアナリストなどとのやり取りに時間を割くかもしれませんが、私はまだ技術的に関わっており、ミーティングで何が起こっているのかだけを知っているわけではありません。 これらの点を念頭に置いて、SAはテーブルに何をもたらすべきですか?彼らは「法を定める」(いわば)「特定のツール」の使用を「彼らのやり方」、つまりコーディングガイドライン、ソース管理、パターン、UML文書などに強制するという考え方で入るべきですか?または、彼らは最初の方向と戦略を指定してから、船の方向を修正するために必要に応じて元に戻して飛び込むべきですか? 組織によっては、これが機能しない場合があります。すべてを実施するためにTFSに依存するSAは、StarTeamのみを使用する雇用主で計画を実施するのに苦労する場合があります。同様に、SAはプロジェクトの段階に応じて柔軟である必要があります。新しいプロジェクトの場合は選択肢が多くなりますが、既存のプロジェクトでは選択肢が少なくなる可能性があります。 私の質問への回答がこれらの問題にいくらかの光を当てることを期待して、いくつかの背景を共有する方法として私が経験したいくつかのSAの物語があります: 私は、チームのすべてのコード行を文字通りコードレビューするSAと協力しました。SAは、プロジェクトだけでなく、組織内の他のプロジェクトに対してもこれを行います(これに費やされる時間を想像してください)。最初は特定の標準を実施することが有用でしたが、後にそれは不自由になりました。FxCopは、SAが問題を見つける方法でした。誤解しないでください。ジュニア開発者に教えて、選択したアプローチの結果を考えさせることは良い方法でしたが、上級開発者にとってはやや厳しいと見なされていました。 ある特定のSAは、特定のライブラリの使用に反対し、遅いと主張しました。これは、他のライブラリが多くの時間を節約するであろう一方で、物事を異なる方法で達成するために大量のコードを書くことを強制しました。プロジェクトの最終月に早送りすると、クライアントはパフォーマンスについて不満を言っていました。唯一の解決策は、開発者からの早期警告にもかかわらず、当初無視されていたアプローチを使用するように特定の機能を変更することでした。その時点までに、多くのコードが破棄され、再利用できなくなり、残業とストレスにつながりました。悲しいことに、このプロジェクトに使用された推定値は、私のプロジェクトが使用することを禁じていた古いアプローチに基づいていたため、推定の適切な指標ではありませんでした。首相が「これをやったことがある」と言うのを聞くでしょう すべてのプロジェクトでDTO、DO、BO、サービスレイヤーなどの使用を強制するSA。新しい開発者はこのアーキテクチャを学習する必要があり、SAは使用ガイドラインを徹底的に実施しました。ガイドラインに従うことが絶対に困難である場合、使用ガイドラインの例外が作成されました。SAはそのアプローチに基づいていました。DTOのクラスおよびすべてのCRUD操作はCodeSmithを介して生成され、データベーススキーマも同様のワックスボールでした。ただし、このセットアップをあらゆる場所で使用したため、SAはLINQ to SQLやEntity Frameworkなどの新しいテクノロジーに対してオープンではありませんでした。 私はこの記事を通気用のプラットフォームとして使用していません。上記のSAストーリーに関する私の経験には、プラス面とマイナス面がありました。私の質問は次のように要約されます: SAはテーブルに何をもたらすべきですか? 彼らは意思決定においてどのようにバランスを取ることができますか? 特定の基本ルールを実施しなければならないという考え方で、SAジョブ(前に定義したとおり)にアプローチする必要がありますか? 他に考慮すべきことはありますか? ありがとう!これらの仕事のタスクは、上級開発者や技術リーダーである人々に簡単に拡張できると思いますので、その能力についてもお気軽にお答えください。

3
例外に関する追加情報を提供するにはどうすればよいですか?
例外に関する追加情報を提供する必要があるたびに、実際にこれを行う正しい方法はどれかと思います。 この質問のために、例を作成しました。Abbreviationプロパティを更新するクラスがあると仮定しましょう。SOLIDの観点からは完全ではないかもしれませんが、DIを介してワーカーメソッドをいくつかのサービスで渡しても同じ状況が発生します-コンテキストが存在しないという例外が発生します。例に戻る... class Person { public int Id { get; set; } public string Name { get; set; } public string Abbreviation { get; set; } } 次に、クラスのインスタンスと、worker-methodが呼び出されるループがあります。それは投げることができStringTooShortExceptionます。 var persons = { new Person { Id = 1, Name = "Fo" }, new Person { Id = 2, Name = …
20 c#  exceptions 

2
gitでは、削除されたブランチと同じ名前でタグを作成することは悪い考えですか?
私は、nvieのgit-flowのモデルにほぼ従うgit分岐モデルを持つプロジェクトを持っています。 リリースブランチは、SemVer形式で名前が付けられます。たとえば、v1.5.2 リリースブランチに本番環境の青信号が与えられたら、マスターにマージしてタグを適用し、ブランチを削除してブランチを閉じます。 リリースブランチをすぐに削除するので、ブランチのタグ付けに同じ識別子を使用しました。例えば v1.5.2 リリースブランチを閉じるために使用するコマンドは次のとおりです。 $ git checkout master $ git merge v1.5.2 $ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc" $ git branch -d v1.5.2 $ git branch -dr origin/v1.5.2 $ git push origin :v1.5.2 $ git push $ git push --tags これは大部分のケースで機能するようですが、gitリポジトリの別のインスタンス(別の開発マシン、ステージング環境など)がv1.5.2ブランチのローカルチェックアウトを持つシナリオで問題を引き起こしています。 …

1
インターフェイスの実装に関するドキュメントの複製/オーバーライドの良し悪し
だから私たちはそのようなインターフェイスを持っています /// <summary> /// Interface for classes capable of creating foos /// </summary> public interface ICreatesFoo { /// <summary> /// Creates foos /// </summary> void Create(Foo foo); /// <summary> /// Does Bar stuff /// </summary> void Bar(); } 最近、私たちは、上記のようなXML文書がたくさんあることを生成し、確認することを含む文書の話をしました。しかし、これはドキュメントの多くの重複を引き起こしました。実装例: /// <summary> /// A Foo Creator which is fast /// </summary> …

4
GraphQLの代わりにSQLを使用しないのはなぜですか?
最近、RESTfulより優れていると主張するGraphQLについて学びました。しかし、なぜ単純にSQLステートメントをHTTP GETリクエストに入れないのだろうと思い始めました。 たとえば、GraphQLでは次のように記述します { Movie(id: "cixos5gtq0ogi0126tvekxo27") { id title actors { name } } } これは、対応するSQLよりもそれほど単純ではありません SELECT id, title FROM movies WHERE id = cixos5gtq0ogi0126tvekxo27; SELECT actors.name FROM actors, actors_movies WHERE actors.id == movies.actor_id AND movie.id == cixos5gtq0ogi0126tvekxo27; クエリをURLエンコードしてサーバーに送信することができます GET endpoint?q=SELECT%20id%2C%20title%20FROM%20movies%20WHERE%20id%20%3D%20cixos5gtq0ogi0126tvekxo27%3B%0ASELECT%20actors.name%20FROM%20actors%2C%20actors_movies%20WHERE%20actors.id%20%3D%3D%20movies.actor_id%20AND%20movie.id%20%3D%3D%20cixos5gtq0ogi0126tvekxo27%3B HTTP/1.1 はい、クエリURLは長すぎる可能性がありますが、RESTへの準拠を気にしない場合は、POST要求の本文に含めることができます。(ところで、RESTが意味をなすようにHTTP RFCを改訂する必要があると思います:クエリ文字列の長さを制限することは、実装を最初の段階で仕様と混合します) クライアントからSQLを直接発行することには、次の利点もあります。 GraphQLを解析するためにサーバー側のコード/ライブラリは必要ないため、開発時間が短縮されます。 GraphQLを解析するためにサーバー側のオーバーヘッドは必要ないため、実行時間が短縮されます。 SQLステートメントは、GraphQLよりもはるかに柔軟性があります。なぜなら、ほとんどの場合、後者はSQLに還元されるからです。 誰もがSQLを知っています。 それでは、GraphQLがSQLより優れている点は何ですか?

5
constが早すぎる最適化を参照するときに引数を渡しますか?
「時期尚早の最適化はすべての悪の根源です」 これは私たち全員が同意できると思います。そして、私はそれを避けるために一生懸命努力します。 しかし最近、私はValueではなくconst Referenceによってパラメーターを渡す方法について疑問に思っています。非自明な関数引数(つまり、ほとんどの非プリミティブ型)はconst参照で渡すことが望ましいことを教えられました。これまで読んだ本の中では、これを「ベストプラクティス」として推奨しているものがかなりあります。 それでも私は不思議に思わずにはいられません:現代のコンパイラーと新しい言語機能は驚異的に機能する可能性があるため、私が学んだ知識は非常に古くなっている可能性があり、 void fooByValue(SomeDataStruct data); そして void fooByReference(const SomeDataStruct& data); 私が学んだ慣習は-const参照を渡す(非自明な型のデフォルト)-早すぎる最適化ですか?

8
リリースビルドにアサーションがあるべきか
assertC ++ のデフォルトの動作は、リリースビルドでは何もしないことです。これはパフォーマンス上の理由で、おそらくユーザーが厄介なエラーメッセージを表示しないようにするために行われたものと思われます。 ただし、assert不変式が壊れているためにアプリケーションがさらに悪い方法でクラッシュする可能性があるため、が発生したが無効になった状況はさらに面倒だと主張します。 さらに、パフォーマンスに関する議論は、それが測定可能な問題である場合にのみカウントされます。assert私のコードのほとんどは、より複雑ではありません assert(ptr != nullptr); ほとんどのコードにわずかな影響しか与えません。 これは私に質問を導きます:アサーション(特定の実装ではなく概念を意味する)はリリースビルドでアクティブにする必要がありますか?何故なの)? この質問は、リリースビルドでアサートを有効にする方法ではないことに注意してください(#undef _NDEBUG自己定義のアサート実装を使用するなど)。さらに、サードパーティ/標準ライブラリコードでアサートを有効にすることではなく、私が制御するコードで有効にします。

1
定数をすべて大文字で命名するための歴史は何ですか?
すべて大文字の定数の命名規則の背後にある歴史は何ですか? 私の直感では、Cプリプロセッサから始めました。人々は、プリプロセッサマクロをすべて大文字で命名するプラクティスを開発しました。私の信念は、この慣行はその後誤解され、非プリプロセッサ定数(enums、const変数)にも適用されるように野放しにされたというものです。 プリプロセッサマクロにすべて大文字の名前を付けると、本当に便利に思えます。一般的な定数の命名は、それほどではありません(マクロ名と衝突する場合は逆効果です)。 私は基地を離れていますか?定数を大文字にする慣行はCよりも前でしたか?

2
誰が最初に非同期/待機しましたか?
Pythonは、2015年に3.5でasync / awaitコンストラクトを追加しました。Javascriptコミュニティは、数千年にわたってそれに向かって一歩を踏み出し、最終的に2017年にリリースされたES8のドラフトに非常によく似た実装を追加しました(私の理解から)。Typescriptは、2015年にバージョン1.7の非同期メソッドを追加しました。これは、訓練されていない目にはjs非同期メソッドとまったく同じように見えます。 C#2012年にasync / awaitの他のすべての実装のように見える非同期メソッドを追加し、2010年にF#2.0で導入されたF#の同様に動作するが外観の異なる非同期ワークフローに基づいていました。 -非同期/待機ペアを持つC#および非同期フローを持つF#。 言語コンストラクト(またはライブラリ)としてこのコンテキストで使用されているキーワードの以前の例はありますか?私の限られた情報から、誰もがC#実装の良い部分を模倣したように見えますが、C#は他の誰かからそれをコピーしましたか?

3
ラッパーは、同じオブジェクトをラップするときに==演算子を使用して等しいと比較する必要がありますか?
開発者がXMLから属性を簡単に解析できるようにするXML要素のラッパーを書いています。ラッパーには、ラップされるオブジェクト以外の状態はありません。 ==オペレーターのオーバーロードを含む次の実装(この例では簡略化)を検討しています。 class XmlWrapper { protected readonly XElement _element; public XmlWrapper(XElement element) { _element = element; } public string NameAttribute { get { //Get the value of the name attribute } set { //Set the value of the name attribute } } public override bool Equals(object other) { var o …
19 c#  .net  operators 

6
関数のBig O実行時間を変更するときに何と呼びますか[クローズ]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 去年閉鎖されました。 O(n^2)時間内にデータベースをソートする関数があるとしましょう。私はそれをリファクタリングしてO(n log(n))時間内に実行したいので、戻り値と入力を同等に保ちながら、操作の基本的な方法を変更します。 このリファクタリングアクティビティを何と呼びますか? 「高速化」は、アルゴリズムを実行する際の大きなO速度を変更せずにアルゴリズムを高速化できるため、あまり適切ではないようです。 「単純化」も正しくないようです。 このアクティビティを何と呼びますか? 更新 私が見つけた最良の答えは、漸近的な時間の複雑さを減らすことです。
19 complexity  big-o 

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