ソフトウェア工学

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

10
null値を許可する型はマジックナンバーよりも望ましいですか?
私は最近、同僚と少し議論をしています。具体的にはC#を使用していますが、これはnull許容型を持つ任意の言語に適用できます。たとえば、最大値を表す値があるとします。ただし、この最大値はオプションです。nullableな数値が望ましいと主張します。私の同僚は、先例を引用してゼロの使用を支持しています。確かに、ネットワークソケットなどでは、無制限のタイムアウトを表すためにゼロがよく使用されています。今日ソケットを処理するコードを作成する場合、タイムアウトがないという事実を表す方が良いと思うので、個人的にnull値を使用します。 どの表現が優れていますか?どちらも「なし」を意味する値の条件チェックを必要としますが、null許容型は意図を少し良く伝えると信じています。

5
インターフェイスをどのように進化させ、バージョン管理しますか?
インターフェイスがあるとしましょうIFoo: public interface IFoo { void Bar(string s); int Quux(object o); } APIのバージョン2では、Glargこのインターフェイスにメソッドを追加する必要があります。既存のAPIユーザーを破壊せず、後方互換性を維持せずに、どのように行いますか?これは主に.NETを対象としていますが、他のフレームワークと言語にも適用できます。

6
他の顧客のプロジェクトでコードを再利用することは合法ですか?
私は、モバイルアプリケーションの独立したソフトウェア開発者として働いています。顧客からモバイルアプリの開発を依頼されました。そのため、現時点では、このプロジェクトのオファーを作成する時間と労力を計算しています。 アプリ自体は、それ以降は特定のイベントに関連するため、役に立たない場合は特定の時間だけ使用されます。ただし、アプリの基本機能は、イベントに同様のアプリを使用したい他の顧客にとって再利用可能になります。 現時点では、顧客のためにアプリを開発してもいいのかと思っていますが、開発にお金を払って、別の顧客のアプリのソースコードの一部を再利用してもらえますか? それでは、このシナリオに対処する最良の方法は何でしょうか? アプリのソースコードは誰のものですか? 開発費用を支払ったときに、ソースコードを顧客に提供する必要がありますか? 必要に応じて、コピーを保持して後で再利用できますか? コードを再利用するよう顧客に依頼する必要がありますか? ここで何らかのライセンスモデルを使用する必要がありますか。そして、最初の顧客に開発の特定の部分だけを支払わせるので、心配なくコードを再利用できますか? 自分の状況を明確にしたいと思います。お返事をお待ちしております。
22 legal  code-reuse 

5
短所リストが関数型プログラミングに関連付けられているのはなぜですか?
ほとんどの関数型言語は、最も基本的なリストタイプとして、一重リンクリスト(「コン」リスト)を使用していることに気付きました。例には、Common Lisp、Haskell、およびF#が含まれます。これは、ネイティブリストタイプが配列であるメインストリーム言語とは異なります。 何故ですか? Common Lisp(動的に型指定される)の場合、短所はリスト、ツリーなどのベースにもなるほど十分に一般的であるという考えがあります。これは小さな理由かもしれません。 ただし、静的に型付けされた言語の場合、正当な理由を見つけることができず、反論さえ見つけることができます。 機能的なスタイルは不変性を促進するため、リンクリストの挿入の容易さはあまり利点ではありませんが、 機能的なスタイルは不変性を促進し、データ共有も促進します。配列はリンクリストよりも「部分的に」共有しやすいため、 同様に、通常の配列でパターンマッチングを行うこともできますし、さらに優れています(たとえば、右から左に簡単に折りたたむことができます)。 さらに、ランダムアクセスが無料で得られます。 そして(実用的な利点)言語が静的に型付けされている場合、通常のメモリレイアウトを使用して、キャッシュの速度を上げることができます。 では、なぜリンクリストを好むのでしょうか?

9
IDEのワンクリックビルドの代わりに別のビルドツールを使用するように、一人の開発者を説得する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 私の長年のJavaプログラミング、最近ではScalaで、Ant、Maven、Gradle、またはJava用のビルドツールを使用したことがありません。私が働いていたすべての場所に、そのすべてを処理するビルドマネージャーがいました-開発と単体テストのためにIDEでローカルにコンパイルし、ソースコードをチェックインし、必要なことをしたビルドマネージャーに通知しました共有環境用に全員のファイルをコンパイルします。 契約の合間に、私は自分で資金を提供するプロジェクトに取り組んでおり、実際にお金を稼ぐのに十分なレベルに達しつつあります。私も潜在的な投資家を揃えており、今後数週間以内にベータ版を見せることを計画しています。 しかし、ずっとIDEのビルドボタンをクリックするだけで、Jarファイルが作成され、正常に機能します。もちろん、従来の知識では、私は自分でAnt / Maven / Gradleスクリプトを作成し、IDEの代わりにそれを使用する必要があると示唆していますが、私の状況での具体的な利点は何ですか(単独で作業)? 私はこれらのビルドツールの使用方法について読んでいますが、IDEがワンクリックで行うこと(IDEで生成されたものプロジェクトのAnt XMLは700行を超えています)。エラーが発生しやすく、時間がかかり、私の状況では不必要に見えます。学習曲線は言うまでもありません。学習曲線は、他のすべての作業から時間を奪って、製品を人々に見せるために準備します。

20
プロジェクトを成功させるためにUML図はどれほど重要ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 私はプロジェクトの途中で、UMLダイアグラム(ユースケース、クラスダイアグラムなど)を書くように頼まれました。プロジェクトはそれほど複雑ではありません。 これは私の時間の無駄なのだろうか?コードを書くような他の楽しいことをやるだけですか?そして、すべての概念フェーズを経ずに何かを構築することは大丈夫ではないのはいつですか?複雑さがすべてですか?もしそうなら、それを測定する方法?
22 uml  modeling 

1
GNU LGPL v3とGNU LGPL v2.1の欠点は?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 まず、これはプログラミングに関するQ&Aサイトであり、法的助言の場ではないことに気づきます。LGPLv3ライブラリを使用することのマイナス面について基本的な考えをつかもうとしています。 GNU LGPL v2.1とGNU LGPL v3の違いは何ですか? 特に、通常のGPLv3には多くの反DRMおよび反特許の条項があることを知っています。原則として、これらの条項に反対するものは何もありませんが、LGPLv3ライブラリーを使用することを選択した場合、これらは突然メインアプリケーションに適用されます。 LGPL v2.1のルールは、使用または変更するライブラリにのみ適用されるようです。メインアプリケーションについては何も述べていません。(静的リンクなどを想定しない) したがって、私が働いているニッチ市場のソフトウェアプロバイダーでは、メインアプリケーションをオープンソース化することなく、LGPLライセンスライブラリを定期的に使用しています(そして貢献しています)。 これはLGPLv3で変更されますか? 質問/programming/1108238/differences-between-gnu-lgpl-v2-1-and-gnu-lgpl-v3にはいくつかの答えがありましたが、メインアプリケーションが新しい義務に対処するものはありませんかもしれない。 明確にするために:私は単純なGPLv3ではなくLGPL v3について尋ねています。Tivoization /特許付与要件のいずれかがLGPLv3ライブラリからホストアプリケーションに「ブリードスルー」しますか?

6
Lispマクロはどれほど便利ですか?
Common Lispでは、必要なソース変換を行うマクロを作成できます。 Schemeは、変換も実行できる衛生的なパターンマッチングシステムを提供します。マクロは実際にどの程度役立ちますか?ポール・グラハムは、ビーティング・ザ・アベレージズで次のように述べています: Viawebエディターのソースコードは、おそらく20〜25%のマクロでした。 実際に人々はどのようなことをマクロでやっていますか?
22 lisp  scheme  macros 

4
アジャイルvsウォーターフォールの効率/有効性に関する研究はありますか[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 2年前に閉店しました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 先日の会議で、アジャイルは開発時の効率がウォーターフォールと比較してわずか60%であるという主張がなされました。私はこの主張を検証したり、反論したりするつもりはありません。2つの方法論を比較する研究があったかどうかを調べるのは興味深い。 2つを比較する研究はありますか?

11
APIドキュメントなしでプログラミングするのに本当に必要なスキルですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 今日、私はJavaプログラミング試験にほとんど合格しませんでした。スレッド化に関するいくつかの一般的な質問によく答えたので、それよりも少しだけスレッド化されたプログラムを書く必要がありました。私はラップトップをプロジェクターのスクリーンに接続し、すぐにプログラムを書く必要がありました。私の最初の試みは匿名クラスを使用することでしたが、正確な構文を忘れていました。たぶん、いくつかの興奮のためか、最後の2週間はほとんどphpでコーディングしていたためかもしれません。次に、APIドキュメントの使用を許可するかどうかを尋ねました。答えは「いいえ」でした。それで、私は別の方法を試すことにし、Runnableを実装しました。プログラムは、最後に要求されたことを実行していました。もちろん、試験官は私の最初の失敗に気付き、それが私のスコアに大きな影響を与えました。APIドキュメントの使用が許可されていないことに驚きました。 だから、私の質問は次のとおりです。APIドキュメントなしで完璧にコーディングできることは本当に重要ですか?このスキルを開発する必要がありますか?それは現実の世界と作業環境で本当に重要ですか?プログラミングコースでは、学習パターン、優れたデザインアプリケーションを作成するスキル、APIを使用して必要な情報をすばやく見つけるスキルの開発に焦点を当てました。APIドキュメントなしでプログラミングする方法を学ぼうとしていませんでした。就職の面接(API文書なしのコーディング)中に必須アイテムですか?

6
連続配信は実際にはどのように機能しますか?
継続的デリバリーは良さそうに聞こえますが、私のソフトウェア開発経験の年は、実際には機能しないことを示唆しています。 (編集:明確にするために、私は常に多くのテストを自動的に実行しています。私のチェックは、各チェックインで自信を得る方法についてです。これは完全な形式のCDであると理解しています。 。毎週(一部は正しく行われればまだCDであると考えるかもしれません)、2週間、または1か月の繰り返しです。 完全なテストカバレッジは不可能です。あなたは多くの時間を費やす必要があります-そして、時間はお金です-すべての小さなもののために。これは貴重ですが、他の方法で品質に貢献するために時間を費やすことができます。 自動的にテストするのが難しいものもあります。たとえば、GUI。Seleniumでさえ、GUIが不安定かどうかはわかりません。かさばるフィクスチャがないと、データベースアクセスをテストするのが難しく、データストレージの奇妙なコーナーケースをカバーすることさえできません。同様に、セキュリティや他の多くのもの。事実上単体テストが可能なのは、ビジネスレイヤーコードのみです。 ビジネス層でも、テスト目的で引数と戻り値を簡単に分離できる単純な関数はありません。モックオブジェクトの作成に多くの時間を費やすことができますが、これは実際の実装とは異なる場合があります。 統合/機能テストは単体テストを補完しますが、通常は各テストでシステム全体を再初期化する必要があるため、実行に時間がかかります。(再初期化しないと、テスト環境に一貫性がなくなります。) リファクタリングまたはその他の変更により、多くのテストが中断されます。それらを修正するのに多くの時間を費やします。意味のある仕様の変更を検証することであれば問題ありませんが、実際には重要な情報を提供するものではなく、意味のない低レベルの実装の詳細のためにテストが中断することがよくあります。多くの場合、微調整は、テスト対象の機能を真に確認することではなく、テストの内部構造を修正することに焦点を当てています。 バグに関するフィールドレポートは、コードの正確なマイクロバージョンと簡単には一致しません。


7
夕方のプロジェクトコードが自分のものであることを確認するにはどうすればよいですか?
私は理学士号を取得した物理学者で、ハイテク企業で博士号を取得したばかりです(応用研究を希望しています)。大規模な有限要素シミュレーションを扱います。 現在のアプローチを検討した後、根本的に異なる方法を適用する必要があると思います(非常に限られた市販のツールを使用しています)。 むしろ、オープンソースの有限要素ソルバーに基づいて研究を行い、それを利用するプログラムを作成します。夕方にこのアイデアを発展させたいと思います。なぜなら、それはプログラミング(私は読書と数学を好む日)に私にとって最も適した時間であり、私の博士課程の後期でそれを使用するからです。 私のプログラムをオープンソースとしてウェブサイト上で参照としてリリースし、将来の個人的または商業的(例:コンサルティング)使用のためにオプションを提供したいと思います。 会社がコードの所有権を主張しないようにするにはどうすればよいですか? バージョン管理システムが役立つと思いました(夕方にのみチェックアウトしてください)。これは、私が通常の営業時間中にプログラムしなかったことを文書化します(他の場所で文書化されています)。しかし、これらのデータは簡単に製造できます。他のアイデアはありますか? 私はソフトウェアの販売には興味がなく、私の会社にも興味がないことを強調したいと思います。 これまでのところ、非常に興味深い回答があります。これは明らかに私を助けます。いくつかのコメント: 私は労働契約に拘束されていません。国内法では、会社は勤務時間中に私が生産するものを何でも所有しており、特別な契約は結ばれていないと述べています(私の雇用主はソフトウェアを販売しておらず、この面で少し素朴かもしれません)。彼らは主にソフトウェアを使用し、私の同僚は真剣なプログラマーではありません。 第二に、@ Markが企業秘密について指摘した点を再考する必要があります。これは特定の業界では非常に深刻です。 第三に、私は上司/上司を怒らせないように気を配っています。しかし、これがこの質問の動機です。私の作品の革新的な部分を少し分けておくと、再利用したり、少なくとも参考作品としてデモンストレーションしたりできます。


12
コマンドインタープリター/パーサーの書き方
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 問題:コマンドを文字列の形式で実行します。 コマンド例: /user/files/ list all; に相当: /user/files/ ls -la; 別のもの: post tw fb "HOW DO YOU STOP THE TICKLE MONSTER?;" に相当: post -tf "HOW DO YOU STOP THE TICKLE MONSTER?;" 現在のソリューション: tokenize string(string, array); switch(first item in array) { case "command": if ( …

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