ソフトウェア工学

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

5
他の誰かが私のオープンソースアルゴリズムの特許を取得できますか?[閉まっている]
より効率的にレンダリングするために、ボクセルデータ構造の境界を見つけるための再帰的な検索アルゴリズムを作成しました。私は周りを見回しましたが、それは誰もそれを特許することを気に掛けないほど単純で明白な技術であるか、それは小説であり、誰もこの方法で以前にそれをしませんでした。 GitHubで公然と「公開」され、GPLで保護されています。しかし、それを改善できるかどうかを確認するために、他の人に見せたいです... 私はそれを書いて公開したが、誰かが同じアイデアを特許しようと試みるかもしれないことを恐れています。 オープンソースソフトウェアのバナーによって保護されているのは安全ですか、それとも大きな銃やパテントトロールのように自分自身を保護する必要がありますか? ソフトウェアの特許は悪であり、最高のソフトウェアを作成するためには、多くの人がそれを見る必要があるというのが私の信念です。しかし、これはソフトウェアがどのように書かれているかについてのかなり単純な視点かもしれないと心配しています。

4
最終的に内部で例外をスローする
Fortifyのような静的コードアナライザーは、finallyブロック内で例外がスローされる可能性があるときに「文句を言う」と言いUsing a throw statement inside a finally block breaks the logical progression through the try-catch-finallyます。通常、私はこれに同意します。しかし最近、私はこのコードに出くわしました: SomeFileWriter writer = null; try { //init the writer //write into the file } catch (...) { //exception handling } finally { if (writer!= null) writer.close(); } をwriter適切に閉じることができない場合、writer.close()メソッドは例外をスローします。(ほとんどの場合)ファイルは書き込み後に保存されなかったため、例外をスローする必要があります。 追加の変数を宣言し、閉じるときにエラーが発生した場合に設定しwriter、finallyブロックの後に例外をスローできます。しかし、このコードは正常に機能し、変更するかどうかはわかりません。 finallyブロック内で例外をスローすることの欠点は何ですか?

9
代入演算子に値を返すことの利点は何ですか?
JavascriptとPHPの両方を置き換える言語を開発しています。(これで問題が発生することはありません。これらの言語のいずれにも大規模なインストールベースがあるわけではありません。) 変更したいことの1つは、代入演算子を代入コマンドに変え、戻り値を使用する機能を削除することでした。 x=1; /* Assignment. */ if (x==1) {} /* Comparison. */ x==1; /* Error or warning, I've not decided yet. */ if (x=1) {} /* Error. */ これは、Cの人々が愛している1行関数が機能しなくなることを意味します。私の個人的な経験を超える証拠はほとんどありませんでしたが、これが起こったのはほとんどの場合、実際に比較操作を目的としたものでした。 またはそれは?代入演算子の戻り値の実用的な用途は、簡単に書き直すことができませんか?(このような概念を持つ言語の場合。)


3
どの文字列検索アルゴリズムが実際に最速ですか?
私は、これが最速の文字列検索アルゴリズムであり、多くの意見を聞いてきましたが、最終的にはわかりません。 最速のアルゴリズムはボイヤー・ムーアであると言う人もいれば、Knuth-Morris-Prattが実際に速いと言う人もいます。 私はそれらの両方の複雑さを調べましたが、それらはほとんど同じに見えますO(n+m)。最悪の場合、ボイヤー・ムーアO(nm)はO(m + 2 * n)を持つクヌース・モリス・プラットに比べて複雑であることがわかりました。ここで、nはテキストの長さ、mはパターンの長さです。 私が知る限り、ボイル・ムーアはガリル規則を使用する場合、線形最悪のケースタイムを持ちます。 私の質問、実際には最速の文字列検索アルゴリズムです(この質問には、ボイヤー・ムーアとクヌース・モリス・プラットだけでなく、考えられるすべてのスティングアルゴリズムが含まれています)。 編集:この答えのため 私がまさに探しているのは: テキストを考えるTと、パターンPIは、すべての外見見つけなければならないPでをT。 また、PとTの長さはfromで[1,2 000 000]あり、プログラムは0.15秒未満で実行する必要があります。 KMPとRabin-Karpは問題について100%のスコアを得るのに十分であることは知っていますが、ボイヤー・ムーアを試して実装したいと思っていました。このタイプのパターン検索に最適なのはどれですか?

9
一時的な回避策として、メソッド名にバグ番号を含めるのは悪い習慣だと考えられていますか?
シニアの同僚である同僚が、コードのレビューで私をブロックしているのは、欠陥###の回避策であるため、メソッドに 'PerformSqlClient216147Workaround'という名前を付けてほしいからです。今、私のメソッド名の提案は、PerformRightExpressionCastのようなもので、メソッドが実際に行うことを説明する傾向があります。彼の議論は「この方法はこの場合の回避策としてのみ使用され、他のどこにも使用されない」という線に沿っています。 一時的な回避策としてメソッド名にバグ番号を含めることは悪い習慣と見なされますか?

1
ドメインイベントを使用するか、アプリケーションレイヤーにすべてを調整させるかの選択方法
ドメイン駆動設計への最初のステップを設定し、ブルーブックとすべてを購入しました。特定のソリューションを実装するための3つの方法を見ています。記録のために:私はCQRSまたはイベントソーシングを使用していません。 ユーザーリクエストがアプリケーションサービスレイヤーに入ってきたとします。その要求のビジネスロジックは(何らかの理由で)エンティティ上のメソッドとドメインサービス上のメソッドに分けられます。これらのメソッドを呼び出すにはどうすればよいですか? これまでに収集したオプションは次のとおりです。 アプリケーションサービスが両方のメソッドを呼び出すようにします メソッドインジェクション/ダブルディスパッチを使用して、ドメインサービスをエンティティにインジェクトし、エンティティに実行させてからドメインサービスのメソッドを呼び出します(または逆に、ドメインサービスがエンティティのメソッドを呼び出すようにします) エンティティメソッドでドメインイベントを発生させ、そのハンドラーがドメインサービスを呼び出します。(私が話しているドメインイベントの種類は、http://www.udidahan.com/2009/06/14/domain-events-salvation/です) これらはすべて実行可能だと思いますが、どちらかを選択することはできません。私はこれについて長い間考えていましたが、3つのセマンティックの違いがもはや見られなくなるまでになりました。何を使うべきかのガイドラインを知っていますか?

6
「コードのテスト行」に対する「コードの機能行」の通常の比率は何ですか?
私はTDDアプローチにかなり慣れており、最初の実験では、1行の機能コードを記述することは、2〜3行のテストコードを記述することを意味します。したがって、1000 LOCを記述する場合、テストを含むコードベース全体は〜3500 LOCのようなものになります。 これは正常と見なされますか?あなたが書くコードの割合は何ですか?

8
FizzBu​​zzに失敗しました。雇ってくれませんか?[閉まっている]
私はCSの学位を持つ開発者であり、ほぼ3年間、多数の言語で開発を行った実務経験があります。 今日は面接を受けましたが、全体的に非常にうまくいきました。ほとんどの質問に準備し、何に対してでも準備ができていると感じました。インタビューの終わりに、彼らは私にプログラミングの質問を1つ与えました... FizzBu​​zzのような問題(印刷なしで数字の部分)。私はあまりにも多くの間違いを犯し、それが「失敗」したと信じています。すべての希望が失われていますか? ここに私のコードがあります: void FizzBuzz() { for(int i = 0; i <= 100; i++) { bool isThree = i % 3; bool isFive = i % 5; if (isThree) { print "Fizz\n"; } else if(isFive) { print "Buzz\n"; } else { print "FizzBuzz\n"; } } } ご覧のとおり、構文i%3 == 0;を持つboolsを台無しにしました。正しい質問を覚えている場合は、isThree …
27 interview 

9
リスコフの代替原則に違反した場合、何が問題になる可能性がありますか?
私は、リスコフ代替原理の違反の可能性について、この非常に投票された質問に従っていました。Liskov Substitutionの原則が何であるかは知っていますが、開発者としてオブジェクト指向コードを書いている間にこの原則を考えないと、何が間違っているのかが私の心ではまだはっきりしていません。

11
「クラウドコンピューティング」のオファーが以前に表示されなかったのはなぜですか?
クラウドコンピューティングは、リソースをレンタルするモデルです-サーバーとデータストレージ。サーバーとデータストレージの両方は、これまで10年以上にわたって使用されてきました。しかし、クラウドコンピューティングの提供は数年前に登場したばかりです。 ここでの取引は何ですか?クラウドコンピューティングオファーの大規模な採用と大規模なマーケティングを引き起こした重要な変更は何ですか

2
Android開発でORMを使用するのは理にかなっていますか?
Android開発でORMを使用するのは理にかなっていますか、それともUIとDBレイヤー間のより緊密な結合のためにフレームワークが最適化されていますか? 背景:Androidの開発を始めたばかりで、最初の本能(.netの背景から来た)は、小さなオブジェクトリレーショナルマッパーや、ボイラープレートの負荷を減らすのに役立つ他のツール(POJO + OrmLite + Lombokなど)を探すことでした。 しかし、最初のおもちゃのアプリケーションを開発しているときに、データベースカーソルを明示的に必要とするUIクラスを見つけましたAlphabetIndexer。AndroidライブラリがUIとDBレイヤーの厳密な分離に適していないのではないかと疑問に思い、どこでもPOJOを使用しようとすると(データベースへの直接アクセスの代わりに)便利で時間を節約できる多くの機能を見逃してしまいます)。 明確化:ORM を一般的に使用する利点を非常によく知っています。AndroidクラスライブラリがORM と共にどの程度うまく機能するかに特に興味があります。

4
正規表現はプログラミング言語ですか?
学術的な意味では、正規表現はプログラミング言語として認められますか? 私の好奇心のための動機は、SOの質問尋ね、私はただ見「Xを行うとregexができますか?」そして、それらを使用する可能性のある解決策について一般的な意味で何が言えるのだろうかと思いました。 私は基本的に「正規表現チューリングは完了していますか?」

6
単体テストと統合テスト:どうすれば反射になりますか
私のチームのすべてのプログラマーは、単体テストと統合テストに精通しています。私たちは皆それで働いてきました。すべてのテストが書かれています。私たちの中には、自分のコードに対する信頼感が向上したと感じている人もいます。 ただし、何らかの理由で、ユニット/統合テストを作成することは、チームのどのメンバーにとっても反射になりませんでした。実際のコードと同時にユニットテストを書いていないとき、私たちの誰も実際に気分が悪いことはありません。その結果、私たちのコードベースはユニットテストによってほとんど発見されず、プロジェクトはテストされずに本番に入ります。 それに伴う問題は、もちろん、プロジェクトが本番環境にあり、すでに正常に動作している場合、ユニット/統合テストを追加するための時間や予算を獲得することは事実上不可能であることです。 私のチームのメンバーと私はすでにユニットテスト(の値に精通している1、2)それは私たちの自然なワークフローにユニットテストをもたらす助けていないようです。私の経験では、単体テストやターゲットカバレッジを必須にすると、テストの品質が低下し、チームメンバーの速度が低下します。これは、これらのテストを作成するための自己生成の動機がないためです。また、圧力が緩和されるとすぐに、単体テストは記述されなくなります。 私の質問は次のとおりです。チーム内でダイナミック/モメンタムを構築し、自然にそれらのテストを作成および維持したい人を導くのに役立つ実験方法はありますか?

4
アプリストアからアプリを削除する必要がありますか?(著作権侵害)[閉鎖]
アプリが使用しているサービスの使用ポリシーをアプリが侵害しているという著作権侵害通知を受け取りました。 ただし、このメールは、情報を取得するWebサイトを運営している会社から直接送信されたものではありません。このメールは、App Storeで同じカテゴリの有料アプリをいくつか持っている会社から送られてきたものです(私の場合は無料です)。 私の質問は、ウェブサイトを運営している会社から直接連絡があるまでこのメールを無視してもいいですか?彼ら(私に連絡した会社)のウェブサイトから判断すると、彼らは私が情報を取得する会社とは何の関係もありません。

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