ソフトウェア工学

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

14
本質的にランダム/非決定的アルゴリズムの単体テスト
私の現在のプロジェクトは、簡潔に「制約のあるランダムなイベント」の作成に関係しています。私は基本的に検査のスケジュールを生成しています。それらのいくつかは、厳密なスケジュールの制約に基づいています。金曜日の午前10:00に週に1回検査を行います。他の検査は「ランダム」です。「検査は週に3回行う必要がある」、「検査は午前9時から午後9時までの間に行う必要がある」、「同じ8時間内に2つの検査を行うべきではない」などの基本的な構成可能な要件がありますが、特定の検査セットに対して設定された制約の範囲内で、結果の日付と時刻は予測できません。 ユニットテストとTDD、IMOは、このシステムで大きな価値があります。これは、要件の完全なセットがまだ不完全でありながら、段階的にビルドするために使用できるためです。現在、私が必要だとは知らない。厳密なスケジュールは、TDDにとって欠かせないものでした。ただし、システムのランダムな部分のテストを作成するときに、テスト対象を実際に定義するのは難しいと感じています。スケジューラによって生成されるすべての時間は制約内に収まる必要があると断言できますが、実際の時間を非常に「ランダム」にせずにこのようなすべてのテストに合格するアルゴリズムを実装できます。実際、それはまさに起こったことです。時刻は、正確には予測できませんが、許容される日付/時刻範囲の小さなサブセットに分類される問題を発見しました。アルゴリズムは、私が合理的に行うことができると思うすべてのアサーションに合格し、そのような状況で失敗する自動テストを設計することはできませんでしたが、「よりランダムな」結果が与えられると合格します。既存のテストを再構築して何度も繰り返すことで問題が解決したことを実証し、生成された時間が完全に許容範囲内に収まったことを視覚的に確認する必要がありました。 非決定論的な動作を期待するテストを設計するためのヒントはありますか? すべての提案に感謝します。主な意見は、決定論的で、再現性があり、主張可能な結果を​​得るために、決定論的テストが必要だということです。理にかなっています。 制約プロセス(任意の長いバイト配列が最小と最大の間で長くなるプロセス)の候補アルゴリズムを含む一連の「サンドボックス」テストを作成しました。次に、そのコードをFORループで実行し、アルゴリズムにいくつかの既知のバイト配列(開始時に1から10,000,000の値)を与え、アルゴリズムにそれぞれ1009から7919の間の値に制約させます(素数を使用して、アルゴリズムは、入力範囲と出力範囲の間で偶然のGCFを通過しません)。結果の制約値がカウントされ、ヒストグラムが作成されます。「パス」するには、すべての入力をヒストグラム内に反映する必要があり(「失わない」ようにするための健全性)、ヒストグラム内の2つのバケットの差は2より大きくすることはできません(実際には<= 1でなければなりません) 、しばらくお待ちください)。勝ったアルゴリズムがあれば、それをカットして実動コードに直接貼り付け、永続的なテストを実施して回帰することができます。 コードは次のとおりです。 private void TestConstraintAlgorithm(int min, int max, Func<byte[], long, long, long> constraintAlgorithm) { var histogram = new int[max-min+1]; for (int i = 1; i <= 10000000; i++) { //This is the stand-in for the PRNG; produces a known byte array var buffer = …

10
最初のアセンブラは機械語で書かれていましたか?
私は、コンピューティングシステムの要素:First Principlesから現代のコンピューターを構築するという本を読んでいます。これには、ブールゲートから高レベルのアプリケーションまで(その順序で)コンピューターを構築するプロジェクトが含まれています。私が取り組んでいる現在のプロジェクトは、HackアセンブリコードからHackマシンコードに変換するために、選択した高水準言語を使用してアセンブラーを作成しています(Hackは前の章で構築されたハードウェアプラットフォームの名前です)。ハードウェアはすべてシミュレーターで構築されていますが、実際のプロセスのその時点で使用可能なツールのみを使用して各レベルを実際に構築しているふりをしようとしました。 とはいえ、考えさせられました。高級言語を使用してアセンブラーを作成するのは確かに便利ですが、史上初めて記述されたアセンブラー(つまり、歴史上)にとっては、マシンコードで記述する必要はありませんでした。 そして、関連する質問...今日はどうですか?新しい命令セットと新しいアセンブリ構文を備えた新しいCPUアーキテクチャが登場した場合、アセンブラはどのように構築されますか?新しいプラットフォームのアセンブリ言語と機械語の両方の構文を知っている場合、アセンブラーを記述するタスクは実際には単なるテキスト分析タスクであり、本質的にそのプラットフォームに関連していません(つまり、そのプラットフォームの機械語で記述する必要があります)。私を助けるための高水準言語。

1
機能プログラムの編成方法[終了]
重複の可能性: 関数型プログラミングとOOP 関数型プログラミングで管理可能なコードを記述する方法 OOPでは、コードの組織の基本単位はクラスです。Java、C#、および同様の言語で頻繁に使用される方法論は、クラス名の後にファイル名を付けて、各クラスに1つのファイルを持つようにコードを編成することです。 これらの各クラスは、単一の概念をグループ化する組織の単位と見なすことができます。 これらのクラスは、多くの場合、ソリューション/プロジェクト内のファイルのディレクトリ構造に従う名前空間にあります。名前空間は、組織の別のレベルです。 関数型言語の大規模プロジェクトは通常どのように編成されていますか? 関数を異なるファイルに分割する方法を決定する方法は? ファイル以外のグループ化の他の単位が使用されていますか? コードは通常、単一のファイル内でどのように編成されますか?

10
インタビュー中に一般的で非技術的な質問をされたのはなぜですか?[閉まっている]
先週Amazonで最初の電話インタビューを受けたところ、彼らはそのインタビューの間に基本的な技術的な質問をいくつかしました。 今日、私は2回目の電話インタビューを行い、別の技術面接を期待して準備をしましたが、まったく技術面ではありませんでした。 自己紹介した後、彼は次のような質問をしました。 なぜプログラミングをするのが好きですか? プログラミングで好きではないものは何ですか? 新しい仕事に何を期待していますか? 最後に取り組んだプロジェクトで、クライアントの要件に合わせてプロジェクトが実装されたことをどのように確認しましたか? 開発中にデザインが悪いと感じたプロジェクトはありましたか?もしそうなら、問題を修正するために何をしましたか? エンジニアとして、どのように新しい技術に遅れずについていくのですか? さらに、私が最近取り組んだプロジェクトについて彼に説明したとき、彼はなぜ特定の設計決定を下すことにしたのか、それが私の決定であるかどうかを尋ねました。 彼がなぜ私にこの種の質問をしたのかと思っていました。英語は私の母国語ではないので、その理由の1つは私の言語の知識をテストすることだったと思います。 そして、私が彼に与えた答えのほとんどは非常に短く、彼がもっと期待しているように感じたので、私は言うべきことを考え出そうとして、結局はたたきました。全体的に言って、彼に私のポイントを明確に伝えることができなかったため、インタビューは本当に悪くなったと思います。 なぜこの種の質問をされたのか、そしてインタビュアーはどのような答えを期待しているのか?
41 interview 

6
ワークフローエンジンを使用する場合
私は過去にいくつかのワークフローエンジンでプログラマーとして働いてきましたが、なぜワークフローエンジンを最初に選んだのかについて明確にすることはありませんでした。そして、プログラマーとして、コードを書いているときに何かをする方法が少なくとも100あることを知っていますが、最良の方法はごくわずかです! 優れたDI対応アプリケーションを設計することよりも、どのユースケースがワークフローエンジン(またはその概念)によって最もよく解決されるかはまだわかりません。ワークフローエンジンが最適なオプションの1つである、ドメインに中立なユースケースの一般的な特性を探しています。 私の質問は次のとおりです。要件の一般的な特性は、優れたワークフローエンジンを選択し、その周りにコーディングするためのシグナルと見なすことができますか?
41 workflows 

19
中小企業のプログラマーを雇っていますか?[閉まっている]
私は10年近くも会社を経営してきましたが、この間ずっと私はただのプログラマーでした。一緒に、私たちはまともなビジネスをすることができ、私たちは皆生計を立てることができましたが、私たちは今長い間拡大しようとしています。 残念ながら、いくつかの問題があります。 私たちが使用する技術は時代遅れではありませんが、PHPのような他のWeb開発オプションに比べて人気がありません 私たちは競争の激しい市場で働いており、数百万ドルの企業と競争しています 新しいプログラマーやセールスマンにあまりお金を払う余裕はありません。私たちは十分なお金を稼いでいますが、かなりの数の新規顧客を獲得しない限り、多くを支払うことはできません。 あまりお金を払えないという事実のために、私たちは少し珍しい技術を使用し、大企業と競争します。新しいプログラマーやセールスマンを見つけるのは難しいと感じています。 私たちは必然的に拡大する必要がありますが、より多くの顧客を獲得しようとすると、少数の人々でそれらをサポートすることはできません(または彼らの要求は当社の専門知識の範囲を超えて成長します)。高品質を取得しないでください、彼らは通常、当社に大きな利益を提供しません。 誰が私たちがどのように拡大できるかについての提案やヒントを持っていますか?
41 business 

8
開発マシンをVM内に配置する必要がありますか?[閉まっている]
Rob Coneryによるこの投稿(スラッグに注意)は、開発環境は仮想マシン内で実行する必要があると述べています。私は彼が言っていることを見て同意する傾向がありますが、それでも少し不安を感じます。仮想化が非常に成熟しているため、VM内で運用システムを実行する場合でも、速度はほとんど問題になりませんが、ここで何か気になる点があります。 開発マシンの仮想化についてどう思いますか?すでにそうしましたか?そうした場合、道路に落とし穴や落とし穴がありますか?

5
依存関係の逆転は、高階関数とどのように関連していますか?
今日、F#開発におけるSOLID原則の関連性を説明したこの記事を見ました。 F#および設計原則–ソリッド そして最後の1つである「依存性反転の原理」に取り組んでいる間、著者は次のように述べています。 機能的な観点から、これらのコンテナとインジェクションの概念は、単純な高次関数、または言語に直接組み込まれている中間者型パターンで解決できます。 しかし、彼はそれをさらに説明しませんでした。だから、私の質問は、依存関係の逆転は高階関数にどのように関連していますか?

3
今日のC ++の役割は何ですか?
現在、私はITの学生であり、今日のC ++で今でも重要なのは何なのか、それは何のために使用されているのでしょうか?私は大学で基本的なC ++コースを修了しましたが、どこで知識を活用でき、どの方向でC ++を学習すべきか想像できません。 言い換えれば、成功したC ++プログラマになるために何を学ぶ必要がありますか? 現在、私は、C ++が今日どの分野で役立つ可能性があるのか​​明確に分からないという理由だけでJavaを学んでいますが、Javaプログラマーとしてどのような仕事をするのかを明確に知っています。しかし、私はまだC ++が死んでいないことを願っています。
41 c++ 

13
Pythonの改行の処理は、JavaScriptの自動セミコロンとどのように異なりますか?
Javascriptには自動セミコロン挿入と呼ばれる機能があり、基本的にパーサーが無効なトークンに遭遇し、その前の最後のトークンが改行であった場合、パーサーは改行があるセミコロンを挿入します。これにより、基本的にすべてのjavascriptコードをセミコロンなしで記述できますが、主にreturnキーワードがあり、次に改行で返す値がある場合は、いくつかのエッジケースに注意する必要があります。 function test(){ // This will return 'undefined', because return is a valid statement // and "john" is a valid statement on its own. return "john" } これらの落とし穴があるため、「自動セミコロン挿入は悪」、「Javascriptでは常にセミコロンを使用」などのタイトルの記事が多数あります。 しかし、Pythonでは誰もセミコロンを使用せず、まったく同じ落とし穴があります。 def test(): # This will return 'undefined', because return is a valid statement # and "john" is a valid statement on …

3
Erlangの学習とnode.jsの学習[終了]
考えられるほぼすべてのカテゴリーで、Erlangがnode.jsのケツを蹴る方法について、たくさんのがらくたをオンラインで見ます。それで、アーランを学び、試してみたいと思いますが、ここに問題があります。node.jsを拾うよりも、Erlangを拾うのがずっと難しいことに気づきました。node.jsを使用すると、比較的複雑なプロジェクトを選択でき、1日で何かが機能しました。Erlangを使用すると、障壁にぶつかります。 だから..より多くの経験を持つ人にとって、アーランは学ぶのが複雑ですか、それとも何かが足りないのですか?Node.jsは完璧ではないかもしれませんが、私はそれで物事を成し遂げることができるようです。
41 erlang  node.js 

8
プログラマーが上級プログラマーに期待する主なものは何ですか?
最近、私は次の5種類のボスと 最悪のボスの服装を説明するそれらの対処方法を読みました。ソフトウェア開発者の小さなチームを率い始めたばかりです。 プログラマーが上級プログラマーに期待する主なものは何か、またはチームを管理する際に避けるべきものは何かを知りたい。 また、プログラマを満足させ、チームのために生産的で完全な環境を作成する方法を知りたいです。

5
CとC ++の基本的な違いは何ですか?[閉まっている]
多くの人は、「C / C ++」と同じように書く傾向があります。それらは多くの類似点を共有していますが、明らかに同じではありません。 しかし、実際にはCとC ++の根本的な違いは何ですか?C ++はCの拡張バージョンですか、それともC ++には存在しないCの機能がありますか?
41 c++  c 


13
プログラミングは、底辺への競争における職業としてですか?[閉まっている]
プログラミング業界は底を争っているように思えます。私たちが次の慣行をとる場合: ベストプラクティスの実装に時間をかけない 他の人のコードを可能な限り使用する(責任としてのカスタムコード) ますます高レベルの言語を使用して生産性を向上させる 「プログラミング」を大幅に簡素化し、コードの背後にある配管を理解する必要のないGUIベースの開発「ツール」 これらのことは、私たちが他のオフィスワーカーのようになろうとしていることを暗示しています。スキルを必要としないこと(交換がより簡単)、事前に構築されること(プロジェクト時間の短縮)が雇用主の利益になります。 ここでの私のポイントは、a)スキルと雇用主の経済的利益との間にずれがあるということです。b)存在する場合、それをどのように緩和して専門的な基準を実施しますか?

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