ソフトウェア工学

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

7
求人後のコードサンプルのリクエストは一般的ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は口頭で仕事を提供され、マネージャーは次の日の翌日に面接から始めることを強く要求しました。だからインタビューの2日後。その日の後半にマネージャーから電話があったのかどうかわからなかったので、面接を辞め、その地位に就くことに同意しました。この時点で、翌日にはオファーレターが届き、翌日から始まると言われました。その夜遅くに、コードサンプルを要求されました。オファーレターをまだ受け取っていません。 私はほとんど契約していて、通常は技術的な質問に答えたり、プロセスの最初にサンプルを示したりして、この状況が少し変わっていることに気付きました。これは一般的な方法ですか?
8 hiring 

3
中央値を追跡する最良の方法は何ですか?
私は質問を読み、それを解決する方法についての入力を探しています。 数値はランダムに生成され、(拡張)配列に格納されます。中央値をどのように追跡しますか? 問題を解決できる2つのデータ構造があります。1つはバランスのとれたバイナリツリーで、もう1つは2つのヒープで、要素の最大の半分と最小の半分を追跡します。これら2つのソリューションの実行時間はと同じだと思いますO(n lg n)が、自分の判断はわかりません。 中央値を追跡する最良の方法は何ですか? 私の試み: この質問では、中央値を追跡するにはヒープが最良の方法だと思います。大きなヒープと小さなヒープの2つのヒープがあり、これらは順次である必要はありません。まず、配列の要素の平均値を計算します。要素が平均値より小さい場合は、numを小さなヒープに入れます。逆に、numを大きなヒープに入れました。大きいヒープの数が小さいヒープの数と等しい場合、小さいヒープの最大のヒープと大きいヒープの最小のヒープが中央値になります。2つのヒープのサイズが異なる場合は、大きいサイズのヒープからルート要素をポップし、小さいサイズのヒープのルートにプッシュします。大きなヒープの場合、ルート要素は最小の要素であり、小さなヒープの場合、ルート要素は最大の要素です。このようにして、2つのヒープのサイズが同じであるか、デジタル差がある場合、 このソリューションの実行時間はO(m * n)であると思います。mは、アンバランスヒープを調整する時間を意味します。 これは中央値を追跡する最良の方法ですか?

4
なぜ人々は文字列の先頭に「\ n」を置くのですか?
非常に頻繁に、printfフォーマット文字列が始まるCコードに入ります\n。 printf( "\ nHello"); 私の意見では、これは印刷に関して利点がない(むしろ多くの欠点がある)迷惑なものです"Hello\n"。 印刷された最初の行がで始まる場合'\n'、プログラム出力は(役に立たない)空の行で始まります 最後に印刷された行がで終わっていない場合'\n'、プログラム出力は新しい行で終わりません(端末で出力を読み取るときに役立ちます)。 ほとんどの端末(一般的にはラインバッファーストリーム)では、が検出されると出力がフラッシュされる'\n'ため、'\n'実際に終了してからprintf(または、ストリームがフラッシュされない場合は、おそらく)で終了しない行が画面に表示される可能性があります。 、たとえばプログラムがクラッシュした場合) それで、なぜ人々はこれを好きですか?
8 c  strings 

7
個人プロジェクト用のプライベートリポジトリを持つことの利点は何ですか?
だから私は最初のGitHubリポジトリを作成し、誰かが自分のコードを投稿してはいけない理由があるのだろうかと考え始めました。他人のIPであるコードや、その他の起こりうる法的状況など、明白な意味ではありません。私は、ひどいものではあるが独自のコードを投稿する初心者について話している。 このサイトで何度か聞いたことがありますが、採用マネージャーの一部がGithub(または同様のサイト)でその人をチェックすることです。そのため、コードが不足している場合はどうなりますか?たとえば、私が上級開発者のポジションではなく、ジュニア開発者のポジションを狙っている場合、希望するポジションは重要でしょうか?

3
TDD-短期的な利益/メリットは何ですか?
多くの場合、TDDを使用する利点は「長期的な」利益と見なされます。コード全体がより適切に構造化され、テストが容易になり、全体として顧客から報告されるバグが少なくなります。 しかし、TDDを使用することの短期的なメリットはどこにありますか?実際に弱くて簡単に測定できるものはありますか? 長期的な利益が測定可能である場合、明らかな(または定量化によっては明らかではない)短期的な利益を得ることが重要ですか?
8 agile  tdd 

9
国際化:何について考えるべきか?
私は、を聞いていたジョンスキートの話最後のStackOverflowのDev日で、彼は国際化に関する私の好奇心をそそりました。 ワッフル作成プログラムが完了しているか、またはまだ進行中で、他の国に配布したいとします。国際化に関してどのようなことを心配する必要がありますか?自明ではないが簡単な落とし穴は何ですか?

4
オープンソースライブラリでキーストロークロガーをチェックする方法を教えてください。
インターネット上の無作為な人から、テクノロジーは安全であり、安全に使用でき、オープンソースであるためキーロガーが含まれていないと言われました。このオープンソースアプリケーションでキーストロークロガーを簡単に検出できますが、開発者(2)は、オープンソースプロジェクトの悪質なコミッターから身を守るために何ができますか? エンベロープ脅威分析の裏側で、​​もし私が悪質な開発者なら、私はgitのブランチをforkし、Twitterのサポート(そして秘密のキーストロークロガー)があるため、ダウンロードを促進します。SVNリポジトリの場合は、新しいプロジェクトを作成するだけです。悪意のあるコードを自動更新ルーチンに入れるのがさらに良いでしょう。 (1)一度に1種類の熱狂者しか扱えないため、これについては触れません。 (2)通常のユーザーはウイルスとマルウェアの検出ソフトウェアに翻弄されています-おばあちゃんがオープンソースのワードプロセッサのソースコードのコードソースを読み取ってキーストロークロガーを見つけることを期待するのは不合理です。

5
プロジェクト管理の経験を積む方法[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 プログラマーのプロジェクト管理経験には、次のようないくつかのジョブ要件があります。 候補者は、必ずしも部下とは関係なく、プロジェクトの管理にある程度の経験が必要ですが、設計からテストに至るまでプロジェクトに取り組んだことが必要です。 私は考えていた ここで「部下」とはどういう意味ですか? 一般的なガイドラインと簡単で実用的なサンプルプロジェクトの両方が掲載された本、ウェブページ、またはその他の場所に、プロジェクトのプロセス全体に関する基本を理解するのに役立つ場合。特に、LinuxとWindowsの両方、C、C ++、Python、Javaのプロジェクトに興味があります。まだ会社を探しているのではなく、自分でプレーすることから始めることを検討しています。 私の専攻はCSではなかったので、基本を欠いているかもしれません。
8 project 

5
他の誰かのコードを逆コンパイルして、彼らが何をしたか、そしてどのようにそれを実行したかを学ぶことは許されますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 コードを盗んだり、誰かの利益のために再利用したりすることについては話していません。しかし、プログラムまたはプラグインがソースを簡単に表示できない形式で配布されている場合、それはプログラマー側の意図的なアクションであると想定しています。 学習のために、とにかく見てもいいですか。もしそうなら、その自由には限界がありますか?

7
TDDで常にユニットテストを記述していますか?
私は長い間、TDDスタイルのコードを設計および開発してきました。TDDについて私を悩ませているのは、ビジネスロジックや興味深い動作を含まないコードのテストを作成することです。TDDはテスト以上の設計アクティビティであることは知っていますが、これらのシナリオでテストを記述することは役に立たないと感じることがあります。 たとえば、「ユーザーがチェックボタンをクリックすると、ファイルの有効性をチェックする」という簡単なシナリオがあります。このシナリオでは、通常、以下のようなプレゼンター/コントローラークラスのテストの作成を開始します。 @Test public void when_user_clicks_check_it_should_check_selected_file_validity(){ MediaService service =mock(MediaService); View view =mock(View); when(view.getSelectedFile).thenReturns("c:\\Dir\\file.avi"); MediaController controller =new MediaController(service,view); controller.check(); verify(service).check("c:\\Dir\\file.avi"); } ご覧のとおり、動作を検証するための設計上の決定や興味深いコードはありません。MediaServiceに渡されたビューから値をテストしています。私はいつも書いていますが、この種のテストは好きではありません。これらの状況についてどうしますか?あなたはいつもテストを書いていますか? 更新: 苦情の後にテスト名とコードを変更しました。一部のユーザーは、このような些細なケースのテストを記述して、将来誰かが興味深い動作を追加する可能性があると述べました。しかし、「今日のコード、明日のデザイン」についてはどうでしょう。?私を含む誰かが将来さらに興味深いコードを追加した場合、そのテストを作成できます。ささいなことでなぜ今やらなければならないのですか?

7
最初に行われる受け入れテスト…これはどのように達成できますか?
ほとんどのアジャイルメソッドの基本的な要点は、機能が開発され、テストされ、多くの場合リリースされるまで、「完了」しないことです。これは、スクラムプロセスの「スプリント」など、時間の短いターンアラウンドで発生するはずです。 アジャイルの共通部分はTDDでもあり、テストが最初に行われると述べています。 私のチームは、多くの特定の描画などを行うGUIプログラムに取り組んでいます。テストを提供するために、テストチームは、少なくともテストしようとしていることを実行しようとする何かを処理できる必要があります。この問題を回避する方法は見つかりませんでした。 基本的に不可解なインターフェースをターゲットにしたソフトウェアを書こうとした場合、非常に苦労することになるので、それらがどこから来ているのか非常によくわかります。動作はかなり明確に規定されていますが、自動化に関してさまざまなUI要素を操作する正確なプロセスは、機能に固有すぎて、テスターが自動化スクリプトを記述して、存在しないものを駆動することはできません。たとえできたとしても、多くのことが後で仕様から欠落していると判明します。 私たちが行うことを検討したことの1つは、人間が「自動化」できるように、ユースケースの観点から説明した、実行する必要のある一連のステップのようなテスト「スクリプト」をテスターに​​記述させることでした。これは、開発者が機能を作成したり、他の誰かが検証したりすることで実行できます。テスターは後で機会を得たときに、主に回帰の目的で「スクリプト」を自動化します。しかし、これはチームに追いつくことにはなりませんでした。 チームのテスト部分は、実際にはかなりの差で遅れています。これが、人間が実行する「スクリプト」を開発するための明らかに余分な時間が発生しなかった理由の1つです。開発者に追いつくために危機に瀕しています。それらを待っていた場合、何も実行されません。それは本当に彼らのせいではありません、彼らはボトルネックですが、彼らは本来あるべきことをしていて、できるだけ速く働いています。プロセス自体はそれらに対して設定されているようです。 非常に多くの場合、テスターが最終的に確認したバグを修正するために行った作業を1か月以上前に戻す必要があります。私が何かをしたいのは醜い真実です。 では、この失敗のカスケードを解決するために他のチームは何をするのでしょうか?テスターを私たちの前に置いて、どのようにしてスプリントで実行する機能のテストを書いて、その間に親指をいじる必要がないようにすることができますか?現在のところ、アジャイル定義を使用して機能を「完了」させるには、開発者を1週間作業させ、次にテスターを2週間作業させ、開発者が思いついたすべてのバグを修正できるようにする必要があります。過去数日間。それが妥当な解決策であると私が同意したとしても、それは起こりません。より良いアイデアが必要です...

2
クラウドサービスとIMプロトコルのアドバイス、グループチャットモバイルアプリへのバックエンド
概要 AndroidとiOSでアプリを開発します。これにより、ユーザーはグループ「チャットルーム」をセットアップし、他のユーザーがセットアップしたチャットルームで話すことができます。このサービスは、夜間のユーザーの大幅な増加に対応できるように、非常にスケーラブルである必要があります(私たちは夢しか見ることができません)。 背景情報 以前は主にJavaとPythonを使用していましたが、このタスクに最も適切な言語を使用する必要があります。新しいスキルをたくさん学んでもかまいません。 チャット要件 チャットプロトコルは柔軟である必要があります。特定の「チャットルーム」の最初の投稿者/作成者によって決定された要素に基づいて、「チャットルーム」を表示/投稿できるユーザーを決定できるようにする必要があります。また、単純なニックネーム(後で変更される可能性があります)を指定した後に、ユーザーがアプリをインストールしてサービスの使用を開始できるようにする必要もあります。 チャットプロトコル計画 周りを見回して、XMPPプロトコルが最良の候補だと思います。特に、マルチユーザーチャット拡張機能は、私が必要とするものに似ています。これは私の要件に最も適していますか、それとも別の解決策を知っていますか? 更新:以来、同期会議のプロトコルを調査してきましたが、それは私のニーズに完全に適合しているようです。ただし、それがどれほど適切に文書化されているか、または実際にどのように実装するかはわかりません。 クラウドサービス アマゾンウェブサービス、Google App Engine、Windows Azureの間で決定しました。AWSよりも管理が容易であるため(設計のスケーラビリティの容易さが重要な要素になるため)、Azureが最適であるという結論に達しました。GAEよりも制限が少ないと考えられます。さらに、Azureも間もなく登場しますAndroidとiOSの両方の電話との簡単なインターフェースを可能にするツールキット。 更新:さらに調べると、AWSの方が安価であり、Elastic Load BalancingやAuto Scalingなどのプロビジョニングを備えているため、スケーラビリティを維持するために必要な追加の作業はほとんど無視できます。 これはあなたが行った決定ですか、それとも他のクラウドサービスを推奨/検討しますか? 一般的な要件 すべてのコンポーネントは、十分に文書化され、信頼できることが証明され、できれば高レベルであることが望まれます。たとえば、私はチャットプロトコルを実装するために自分で作成するのではなく、プラグインを使用することを好みます-したがって、より経験のある人々に任せます。 読んでいただきありがとうございます。あらゆる面についてのアドバイスをいただければ幸いです:-)

3
アスペクト指向プログラミングは誤称ですか?
「アスペクト指向プログラミング」または「アスペクト指向ソフトウェア開発」について私が学んだすべてから、それをプログラミングのパラダイムまたは方法論として分類することは不正確であるように見えます。私が言えることから、それはプログラミングの基本的なテクニックではありません。 「パラダイム」と「方法論」の意味を明確にするために、アメリカ遺産辞典の次の定義を参照してください。「オブジェクト指向プログラミング」がどれだけ適切に適用されるか、AOPがどれほど適切に適用されるかを比較します。 パラダイム:特に知的分野において、それらを共有するコミュニティの現実を見る方法を構成する一連の仮定、概念、値、および実践。 方法論:専門分野で作業する、または調査に従事する人々が使用する一連の実践、手順、および規則。作業方法のセット。 「エビデンスに基づく医療」はパラダイムの定義を満たしますが、「子宮摘出術に基づく医療」は問題の空間が狭すぎるため、誤った名称になります。 「指向プログラミング」という接尾辞に基づいて、AOPが「オブジェクト指向プログラミング」と同じようにパラダイムと方法論の両方であると主張しているため、AOPの名前が間違っているかもしれないという印象を受けています。 これらの用語(パラダイムと方法論)はどちらも基本的な手法を示しており、アスペクトについて理解しているのは、狭い問題のスコープを解決するためのテクノロジーであり、Javaの静的変数機能に匹敵するかもしれません。 アスペクトが限られた一連の問題を解決し、AOPが誤称ではない場合は、「継承指向プログラミング」、「依存関係」など、すべてのプログラミング手法に「指向プログラミング」接尾辞を付けるべきではないのは事実です。指向プログラミング」または「スコープ指向プログラミング」

4
Tortoise SVNで大文字と小文字が区別されるのはなぜですか?
私は最近、TortoiseSVNを使用してこれに遭遇しましたが、CVSベースのプログラムでも同じだと思います(正しいですか?)。 純粋な好奇心から、CVSファイルシステムで大文字と小文字が区別される理由はありますか?つまり、次のURLは異なります。 svn://repo/branches/PROJECT svn://repo/branches/project これにはレガシーな理由がありますか?それはファイルベースでより興味深くなります。ディレクトリに2つのファイルが存在する場合、たとえばProjectOne.vbpとと言いprojectone.vbpます。一方は通常のWindowsファイルシステムで他方を上書きします(または、私が遭遇したように、不可解なTortoiseSVNデータベースエラーをスローします)が、リポジトリに平和的に共存できます。 上記のようなばかげた命名を使用しないことはユーザー次第であることは明らかですが、大文字と小文字を区別することに欠けている利点はありますか?

6
フロイドのアルゴリズム[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 インタビューで尋ねられた場合、個人がアルゴリズムを理解する(これまで見たことがない)ことは可能ですか?同様に興味深い解決策がある他の問題は何ですか? 編集:私が言及している実際のアルゴリズムの混乱のため、それは フロイドのサイクル検出アルゴリズム、別名、亀とウサギのアルゴリズムです。

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