ソフトウェア工学

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

5
MITライセンスを使用して、以前に書いたコードの一部を雇用主に提供して、自分自身を保護し、著作権を失わないようにできますか?
私の状況: 新しい仕事を始める前に、フレームワークを書きました。私は著作権を所有しています。 他のソフトウェアと同様に、その中には定型的なロジックがたくさんあります。(だよ!) 私は新しい仕事でフレームワーク全体を使いたくありませんが、新しい仕事のために構築している同様のフレームワークでその一部を再利用する必要があります。 すべてのロジックをゼロから再実装/再考することは実用的ではありません。それは多くの論理であり、論理は論理であり、あなたはそれを大きく変えることはできません。たとえば、HashMapの異なるバージョンをいくつコーディングできますか?それらは非常によく似ており、3番目のバージョンは、最初のバージョンの著作権を侵害していると主張できます。:( APIの再発明を試みることは実用的ではありません。HashMapのAPIを再発明できますか?に変更put(k,v)することもできますがadd(k,v)、それ以上ではありません。 自分自身と以前のコードを保護するための私の考え: MITライセンスの下で作成した以前のフレームワークに基づいて新しいフレームワークを構築していることを雇用主に伝えます。したがって、将来、私が以前のフレームワークを他の場所、またはその派生バージョンで使用し、現在雇用主のために構築しているこの新しいフレームワークに似たコードの一部がある場合、彼らは私が言うことはできません私が彼らのために書いたコードを使用します。 私の質問: 私は自分のコードを誰にも配布していません。著作権を所有している場合、MITライセンスコードを他の人に配布する必要はありません。つまり、MITライセンスの下にあると今主張しているコードをリリースするように誰かに要求できますか?それは世界の終わりではないだろうし、私は確かに法的脅威の下でそれを行うことに同意するだろう。 この戦略には意味がありますか?私の最終目標は、以前のコード化フレームワークの派生バージョンを、著作権を失うことなく使用できるようにすることです。同時に、このコードをオープンソースプロジェクトとして誰にも配布したくありません。私は自由に配布する他のオープンソースプロジェクトを持っていますが、これは自分の仕事に任せたいので、請負業者の仕事ではなく自分の仕事に使用したいと思います。 これは、実際に誰にも配布したり表示したりせずに、MITライセンスの下でフレームワークを所有していると主張するようなものです。無料で簡単に入手できるものであれば、私の雇用主はもう私を必要としません。彼らはコードを取得し、それを他の誰かに渡して使用することができます。 ノート: 仕事を始める前に、このフレームワークを以前の発明として挙げました。 このコードはどこにもリリースしていません。プライベートサーバーでホストするプライベートSVNリポジトリにあります。 一言で言えば私のアイデア: 私の計画は、以前のコードを保持し、雇用主のために構築しているこの新しいフレームワークでその一部を使用し、それを以前にコード化して誰にも配布していないMITライセンスフレームワークから派生した仕事であることを雇用主に伝えることです」 MITライセンスの下でコーディングしたソフトウェアを強制的に配布する必要はありませんか?後で何らかの法的請求が発生した場合(できればそうではない)、すぐにすべてのソースにライセンスを貼り付けてコードを表示/リリースできます。

5
記述的な命名と80文字の行[クローズ]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私はこれらの2つの価値あるプログラミング慣行を頻繁に耳にします。(1)コードの行は80文字以下である必要があり、(2)変数、メソッド、クラスなどにわかりやすい名前を使用します。 、彼らはしばしばお互いのトレードオフのようです。コードを80文字/行未満に保つと、よりわかりにくい名前を使用することになります(特に各インデントが4文字としてカウントされるPythonでは)が、より説明的な名前を使用すると、80文字を超える行になります。 だから、私の質問は、これらの2つのアドバイスのうち、どちらを選択する必要があるかを守ることがより重要ですか?私はこれを独立した(趣味の)プログラマーだと思っていますが、もっと重要なのは、大企業で働くソフトウェアエンジニアの観点からです。

3
IEnumerableの「ステートマシン」の検出
私はc#yield returnを使用して可愛すぎるという興味深い記事を読みました IEnumerableが実際の列挙可能なコレクションであるか、またはyieldキーワードで生成されたステートマシンであるかを検出する最良の方法は何なのかと思いました。 たとえば、(記事の)DoubleXValueを次のように変更できます。 private void DoubleXValue(IEnumerable<Point> points) { if(points is List<Point>) foreach (var point in points) point.X *= 2; else throw YouCantDoThatException(); } 質問1)これを行うより良い方法はありますか? 質問2)これは、APIを作成するときに心配する必要があるものですか?
17 c#  api-design 

4
QAと反復のジレンマ
私の会社では、アジャイルプラクティスでの作業に成功していますが、反復は使用していません。主な理由は、反復サイクルでQAに適合するクリーンな方法を見つけることができないからです。 QAは、特定のビルド(リリース候補)に対する追加の検証として、このビルドが顧客に展開される前に理解します。ポイントは、1つの悪意のあるコミットがリリース全体に損害を与えることを避けることです。あなたはそれがどれであるかを決して知らないので、QAはリリースのすべての機能/コミットがビルドに含まれるまで待つ必要があります。(有名な最後の言葉「それはほんの小さな変化でした」は許可されていません。) QAがリリース候補でバグを見つけた場合、開発者はそれぞれのリリースブランチでこれらのバグを修正します(そして、トランクにマージします)。すべてのバグが修正されると、QAが再テストするために新しいビルドが展開されます。特定のリリース候補にバグが見つからない場合にのみ、検証のために顧客に提供されます。 これには通常、リリースごとに約2〜3つの候補、約1週間かかります。通常、修正を記述する時間は、テスト作業よりもはるかに短いです。したがって、開発者を忙しくしておくために、彼らはリリースN + 1に取り組み、QAはNに取り組みます。 反復を使用しなくても、リリースNとN + 1の作業を重複させることができるため、これは問題になりません。しかし、私が理解していることから、これはスクラムやXPのような反復ベースのアプローチと互換性がありません。彼らは、すべてのテスト作業がイテレーションに組み込まれ、イテレーションが最後にリリース可能であることを要求します。 これは必然的に次の望ましくない結果のいずれかにつながることがわかります。 (A) QAはリリース候補を確認する時間が必要であり、バグ修正作業が開発者を完全に忙しくしていないため、開発者はイテレーションの終わりにアイドル状態です。 (B)最初のリリース候補の準備が整う前に、QAがすでに機能し始めています。これは、Stack Exchangeで最も推奨されるものです。しかし、テストされた特定のリリース候補がないため、それは私の会社がQAとして理解しているものではありません。そして、すべてを壊す「小さな変化」は、気付かれずに導入される可能性があります。 (C)バグは次の反復に引き継がれます。これはStack Exchangeでも推奨されます。私はそれがまったく解決策だとは思わない。基本的に、バグ修正が行われるたびに、新しい未検証のコミットが同じブランチに追加されるため、検証済みビルドが取得されないことを意味します。 このジレンマから抜け出す方法はありますか?
17 agile  teamwork  qa  sdlc 


3
Scalaでの未チェックの例外の決定
Javaプログラマーとして、私は未確認の例外に対して常に批判的でした。ほとんどのプログラマーは、後でトラブルを引き起こす場合にのみ、コーディングの容易さへの途中でそれを使用します。また、チェックされた例外を持つプログラム(乱雑ですが)は、チェックされていない対応するプログラムと比較して非常に堅牢です。 驚くべきことに、ScalaにはChecked Exceptionsと呼ばれるものはありません。Scalaでは、チェックされているJavaとチェックされていないJavaはすべてチェックされていません。 この決定の背後にある動機は何ですか?私にとっては、外部コードを使用するときにさまざまな問題が発生します。また、偶然ドキュメントの質が悪い場合は、KILLになります。

3
状態パターンは、リスコフ代替原理に違反していますか?
この画像は、ドメイン駆動のデザインとパターンの適用:C#および.NETの例を使用したものです。 これは、a がその存続期間中に異なる状態を持つことができる状態パターンのクラス図ですSalesOrder。異なる状態間では特定の遷移のみが許可されます。 これでOrderStateクラスはabstractクラスになり、そのすべてのメソッドはそのサブクラスに継承されます。Cancelled他の状態への遷移を許可しない最終状態であるサブクラスを考慮する場合override、このクラスのすべてのメソッドで例外をスローする必要があります。 サブクラスは親の振る舞いを変えてはいけないので、今ではそれはリスコフの代用原則に違反していないのですか?抽象クラスをインターフェイスに変更すると、これが修正されますか? これはどのように修正できますか?

5
独自のソフトウェアライセンスを作成するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 GNU GPL、BSDライセンス、MITライセンス、LGPLなど、あらゆる種類のソフトウェアのライセンスを見てきました。「John Doeの汎用ライセンス」など、新しいソフトウェアライセンスを作成するプロセスは何ですか?

1
Liskov Substitution Principleは、インターフェイスを実装するクラスにも適用されますか?
LSPは、クラスがその基本クラスの代わりになるべきであると述べています。つまり、派生クラスと基本クラスは意味的に同等でなければなりません。 しかし、LSPはインターフェイスを実装するクラスにも適用されますか?言い換えると、クラスによって実装されたインターフェイスメソッドが、ユーザーが期待するものと意味的に異なる場合、これはLSPの違反と見なされますか?

6
開発者を雇用する-IDEを要件としてリストしますか?
私はいくつかの求人情報を見てきましたが、それらのかなりの部分が上級職であっても「必須スキル」セクションの下にIDEをリストしていることに気付きました。これはいずれかの会社にローカライズされているのではなく、数回の投稿ごとに1回発生するものです。 私のメンターと私の人生で見た最高のコーダーの一部はVIM / Emacsの忍者だったので、この仕事の要件に困惑しています。同様に、人と仕事をするとき、チームで生産的である限り、どのツールを使用するかはあまり気にしません。 IDEを正式な職務要件とするマネージャーを採用した理由を誰かが説明していただけますか?
17 ide 

5
実行時にビューモデルを作成する際の痛みを軽減する方法
私は長い質問に謝罪します、それは少し暴言として読みますが、そうではないと約束します!私の質問を以下にまとめました MVCの世界では、物事は簡単です。モデルには状態があり、ビューにはモデルが表示され、コントローラーはモデルとのやり取り(基本的に)を行い、コントローラーには状態がありません。作業を行うために、コントローラーはWebサービス、リポジトリー、その他多くに依存しています。コントローラーをインスタンス化するとき、これらの依存関係を提供することに関心があります。アクション(コントローラーのメソッド)を実行するとき、これらの依存関係を使用してモデルを取得または更新するか、他のドメインサービスを呼び出します。一部のユーザーが特定のアイテムの詳細を表示する場合など、コンテキストがある場合、そのアイテムのIDをパラメーターとしてアクションに渡します。コントローラーのどこにも、状態への参照はありません。ここまでは順調ですね。 MVVMと入力します。WPFが大好きで、データバインディングが大好きです。ViewModelsへのデータバインディングをさらに簡単にするフレームワークが大好きです(Caliburn Micro atmを使用)。しかし、この世界では物事はそれほど簡単ではないと感じています。もう一度練習してみましょう。モデルには状態があり、ビューには ViewModel が表示され、ViewModelには(基本的に)モデルとのやり取りがあり、ViewModelには状態があります。するには、(1つ以上のモデルに、多分それ委譲し、すべてのプロパティを、それ手段は、それ自体の状態をあるモデルの1の方法または別の、への参照を持っている必要があります明確にするために)行いますViewModelには、Webサービス、リポジトリ、その他多くの依存関係があります。ViewModelをインスタンス化するとき、それらの依存関係だけでなく状態も指定する必要があります。そして、これは、紳士gentle女の皆さん、私をいらいらさせます。 あなたはインスタンス化する必要があるときProductDetailsViewModelからProductSearchViewModel(そこからあなたが呼び出されるProductSearchWebService順番に返されIEnumerable<ProductDTO>、あなたはこれらの事の1行うことができますか?私と一緒に、まだ、誰も): call new ProductDetailsViewModel(productDTO, _shoppingCartWebService /* dependcy */);、これは悪いです、さらに3つの依存関係を想像してください。これは、ProductSearchViewModelそれらの依存関係も同様に引き受ける必要があることを意味します。また、コンストラクタを変更するのは苦痛です。 call _myInjectedProductDetailsViewModelFactory.Create().Initialize(productDTO);、ファクトリは単なるFuncであり、ほとんどのIoCフレームワークによって簡単に生成されます。Initメソッドは漏れやすい抽象化であるため、これは悪いと思います。また、Initメソッドで設定されているフィールドにreadonlyキーワードを使用することもできません。他にもいくつかの理由があると思います。 call _myInjectedProductDetailsViewModelAbstractFactory.Create(productDTO);So ...これは、このタイプの問題に通常推奨されるパターン(抽象ファクトリー)です。でも、実際に使い始めるまでは、静的型付けへの渇望を満たすため、天才でした。定型コードの量は多すぎると思います(私が使用するとんでもない変数名は別として)。ランタイムパラメーターを必要とする各ViewModelについて、2つの追加ファイル(ファクトリーインターフェースと実装)を取得し、4回の追加時間などの非ランタイム依存関係を入力する必要があります。また、依存関係が変更されるたびに、ファクトリーでも依存関係を変更できます。私はもうDIコンテナさえ使用していないように感じます。(Castle Windsorにはこれに対する何らかの解決策があると思います(それ自体の欠点があるため、間違っている場合は修正してください))。 匿名型または辞書で何かをする。私は静的型付けが好きです。 ええ このように状態と動作を混在させると、MVCにはまったく存在しない問題が発生します。そして、私は現在、この問題に対して本当に適切な解決策がないと感じています。今、私はいくつかのことを観察したいと思います: 人々は実際にMVVMを使用しています。したがって、彼らは上記のすべてを気にしないか、他の素晴らしい解決策を持っています。 WPFを使用したMVVMの詳細な例は見つかりませんでした。たとえば、NDDDサンプルプロジェクトは、DDDの概念を理解するのに非常に役立ちました。誰かがMVVM / WPFの似たような方向性を教えてくれたら、とても気に入っています。 MVVMをすべて間違っているのかもしれませんが、デザインを上下逆にする必要があります。たぶん、私はこの問題を全く抱えるべきではないでしょう。他の人が同じ質問をしているのは知っているので、私だけではないと思います。 要約する ViewModelが状態と動作の両方の統合ポイントであることは、MVVMパターン全体のいくつかの問題の原因であると結論付けるのは正しいですか? 静的に型付けされた方法でViewModelをインスタンス化するための唯一/​​最良の方法は、抽象ファクトリパターンを使用していますか? 詳細なリファレンス実装のようなものはありますか? 状態/動作の両方を備えたViewModelがたくさんあるのは、デザインの匂いですか?
17 c#  design  wpf  mvvm 

2
競争力のあるプログラミングを開始するには?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私はしばらくコーディングを練習してきましたが、問題は、問題の解決策を書くのに時間がかかることです。競争力のあるプログラミングがこれを改善するのに役立つかどうか尋ねたいです。 はいの場合、どのように開始し、どのWebサイトから使用できますか(TopCoderなど)?今のところ、非常に難しい問題を解決することはできません。私は何をすべきか? いいえの場合、他に何をすべきですか? また、コーディングを学びたいという別の問題もありますが、問題は、私はそれがあまり得意ではないと感じていることです。私は何をすべきか?それは私を内側から盗聴するようなものです。 一部の人々はこの質問を有益とは思わないかもしれませんが、少なくとも答えが得られるようにしてください。

2
人々はテストスイートをどのように維持しますか?
特に、私は次の側面に興味があります。 テストケースが間違っている(または古くなっている)ため、修復(または破棄)する必要があることをどのようにして知るのですか?つまり、テストケースが無効になった場合でも、テストケースが合格し、サイレントのままになる可能性があります。これにより、ソフトウェアが正常に動作していると誤って信じることができます。それでは、テストスイートのこのような問題をどのように実現しますか? テストスイートがもはや十分ではなく、新しいテストケースを追加する必要があることをどのように知っていますか?これは要件の変更と関係があると思いますが、テストスイートの妥当性をチェックするための体系的なアプローチはありますか?

4
記事または投稿が重複しているかどうかを検出するには、どのアルゴリズムを使用できますか?
記事またはフォーラムの投稿がデータベース内の重複エントリかどうかを検出しようとしています。私はこれにいくつかの考えを与えました、コンテンツを複製する誰かが3つのうちの1つを使用してそうするという結論に達しました(検出するのが困難な降順で): 単純なコピーはテキスト全体を貼り付けます テキストの一部をコピーして貼り付け、独自のテキストとマージします 外部サイトから記事をコピーし、自分のものになりすます 分析のためのテキストの準備 基本的に異常。目標は、テキストを可能な限り「純粋」にすることです。より正確な結果を得るために、テキストは次のように「標準化」されます。 重複する空白を取り除き、先頭と末尾をトリミングします。 改行は\ nに標準化されます。 HTMLタグが削除されます。 Daring Fireball URLと呼ばれるRegExの使用は取り除かれます。 私はアプリケーションでBBコードを使用しているので、そうなります。 (ä)セント語および外国語(英語以外)は、外国語以外の形式に変換されます。 各記事に関する情報は、(1)統計表と(2)キーワード表に保存します。 (1)統計表 次の統計がテキストコンテンツについて保存されます(この投稿と同様)。 テキストの長さ 文字数 単語数 文数 文ごとの平均単語 自動可読性インデックス 霧吹きのスコア ヨーロッパ言語の場合、音節のカウントを使用しないため、コールマン・リアウおよび自動可読性インデックスを使用する必要があります。したがって、かなり正確なスコアを生成する必要があります。 (2)キーワード表 キーワードは、「the」、「a」、「of」、「to」などのストップワード(一般的な単語)の膨大なリストを除外することによって生成されます。 サンプルデータ text_length、3963 letter_count、3052 word_count、684 センテンスカウント、33 word_per_sentence、21 gunning_fog、11.5 auto_read_index、9.9 キーワード1、殺された キーワード2、役員 キーワード3、警察 記事が更新されると、上記の統計はすべて再生成され、まったく異なる値になる可能性があることに注意してください。 上記の情報を使用して、初めて公開される記事がデータベース内に既に存在するかどうかを検出するにはどうすればよいですか? 私が設計するものは完璧ではないことを知っています。最大のリスクは、(1)重複していないコンテンツに重複のフラグが立てられることです(2)システムは重複したコンテンツを許可します。 そのため、アルゴリズムは、0から重複リスクなし、5が重複可能、10が重複であるリスク評価番号を生成する必要があります。5を超えると、コンテンツが重複している可能性が高くなります。この場合、コンテンツにフラグを付け、重複する可能性のある記事にリンクし、人間が削除するか許可するかを決定できます。 前に言ったように、記事全体のキーワードを保存していますが、段落ごとに同じことができるかどうか疑問に思います。これは、DB内のデータをさらに分離することも意味しますが、最初の投稿で(2)を検出するのも簡単になります。 私は統計間の加重平均を考えていますが、どのような順序で、どのような結果になるでしょうか...
17 algorithms 

11
開発者の雇用-より効率的にするためのヒントはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は、大規模なソフトウェア開発チームを構築しているソフトウェア会社を代表しています。私たちは、誰を雇うか、本当に良い定着率を持っているかを選びます(ほとんどの開発者は平均5-6年ここにいます)。 開発者と人事に多くの時間を費やしており、採用するアプリケーションの比率は低くなっています。使用するプロセスは次のとおりです。 電話での人事面接-基本的な行動と技術の質問をすることを含みます オンラインテスト-30分間の技術テストが含まれます 技術電話インタビュー-開発者による60分のインタビュー オンサイトインタビュー-上級開発者による60〜90分のインタビュー このプロセスは機能していますが、インタビューに費やす時間が長すぎます。これをどのように異なる方法で行うことができるかについての考えはありますか?私たちの目標は、可能であれば才能の質を維持しながら、あらゆるタスクを自動化することです。 更新: 回答いただきありがとうございます。いくつかのことを明確にする必要があります。私たちの目的は、ある段階から別の段階に進む応募者の数を減らすことです。これが現在の数字です。 1000件の履歴書を受け取ります 800人の履歴書が人事面接に合格 500はオンラインテストに合格します 100は最初の電話画面を渡します 10現場を通過し、雇われる ご覧のように、プロセスの早い段階で候補者を除外するより良い仕事をする必要があります。オンラインテストで人を評価する方法で、より良い仕事をすることができますか? いくつかの回答に基づくプロセスの詳細は次のとおりです。 電話での人事面接-できるだけ多くの人を排除するために、非常に基本的な技術的な質問(CLRとは?) オンラインテスト-コーディングに関する3つの質問と10の基本的な質問があります ハイテク電話画面-さまざまなテクノロジーをカバーしています。応募者がすべてを知っていなくても、新しいテクノロジーを手に入れることができ、すぐにスピードアップできることを証明できる限り、気にしません。 オンサイト-開発者の前での質問のコーディング。より多くのアーキテクチャレベルの質問。

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