ソフトウェア工学

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

8
クライアントはソースコードを必要としますが、他のプロジェクトで再利用する多くの共有コードが含まれています
開発したアプリケーションバイナリでソースコードを配信したいクライアントがいます。元々はソースコードについては何も言わなかったが、最近は必要だと言った。契約は確定していません。彼らは作業に同意し、署名せずに、この条項とともに戻ってきました。 問題は、私が長年にわたって作成したコードベースがあり、作成するほとんどのアプリケーションのテンプレートとして使用していることです。プロジェクトの範囲よりもはるかに大きい。 また、製品に使用するつもりなので、比較的小さなプロジェクトには提供したくありません。 この業界でこれが起こったのはこれが初めてではないと思います。この問題を回避する最良の方法は何ですか?共有ライブラリのようなものが役立つと思います。

13
クラスの実装について他のプログラマに警告する方法
「特定の方法で使用しなければならない」クラスを書いています(すべてのクラスが...する必要があると思います)。 たとえば、fooManagerクラスを作成します。これには、などへの呼び出しが必要Initialize(string,string)です。そして、例をさらに進めるために、そのThisHappenedアクションをリッスンしなければクラスは役に立たないでしょう。 私のポイントは、書いているクラスにはメソッド呼び出しが必要だということです。しかし、これらのメソッドを呼び出さなければ、コンパイルは正常に終了し、空の新しいFooManagerが作成されます。ある時点で、クラスとその動作に応じて、機能しないか、クラッシュする可能性があります。私のクラスを実装するプログラマーは明らかに内部を見て、「ああ、Initializeを呼び出さなかった!」と気付くでしょう。 しかし、私はそれが好きではありません。私が理想的に望んでいるのは、メソッドが呼び出されなかった場合にコンパイルしないコードです。それは単に不可能だと思います。または、すぐに表示され、明確になるもの。 私がここで持っている現在のアプローチに悩まされているのは次のとおりです。 クラスにプライベートブール値を追加し、クラスが初期化されている場合は必要なすべての場所を確認します。そうでない場合は、「クラスが初期化されていません.Initialize(string,string)。本当に呼び出していますか?」という例外をスローします。 私はそのアプローチで少し大丈夫ですが、多くのコードがコンパイルされ、最終的にはエンドユーザーには不要になります。 また、Initiliaze呼び出すだけのメソッドよりも多くのメソッドがあると、コードがさらに増えることがあります。パブリックメソッド/アクションが多すぎないようにクラスを維持しようとしていますが、それは問題を解決するものではなく、単に合理的なものにするだけです。 私がここで探しているのは: 私のアプローチは正しいですか? より良いものはありますか? 皆さんは何をしますか/アドバイスしますか? 非問題を解決しようとしていますか?同僚から、使用する前にクラスをチェックするのはプログラマーだと言われました。私は敬意を持って同意しませんが、それは別の問題です。 簡単に言えば、そのクラスが後で、または他の人によって再利用されたときに、呼び出しを実装することを決して忘れない方法を見つけようとしています。 明確化: ここで多くの質問を明確にするために: 私は間違いなくクラスの初期化の部分について話しているだけでなく、それは一生です。同僚がメソッドを2回呼び出さないようにし、Yの前にXを呼び出すようにします。Assertsのアイデアは本当に気に入りましたが、Assertsが常に可能であるとは限らないので、他のアイデアを混ぜる必要があると確信しています。 私はC#言語を使用しています!どうして私はそれを言及しなかったのですか?!私はXamarin環境にいて、PCL、iOS、Android、およびWindowsプロジェクトを含むソリューションで通常6〜9個のプロジェクトを使用してモバイルアプリを構築しています。私は約1年半(学校と仕事を合わせて)開発者でした。そのため、時々ばかげた声明や質問があります。ここではおそらくすべては無関係ですが、情報が多すぎることは必ずしも悪いことではありません。 プラットフォームの制限と依存関係注入の使用のため、コンストラクターに必須のすべてを常に配置できるわけではありません。Interfaces以外のパラメーターはテーブル外にあります。または、私の知識が十分でない可能性があります。ほとんどの場合、初期化の問題ではありませんが、 彼がそのイベントに登録したことを確認するにはどうすればよいですか? 彼が「ある時点でプロセスを停止する」ことを忘れなかったことをどのように確認できますか ここで、私は広告取得クラスを覚えています。広告が表示されるビューが表示されている限り、クラスは毎分新しい広告を取得します。そのクラスは、Adを表示できる場所に構築するときにビューを必要とします。これは明らかにパラメーターに入れることができます。ただし、ビューが消えたら、StopFetching()を呼び出す必要があります。そうしないと、クラスは、そこにさえないビューの広告を取得し続けますが、それは悪いことです。 また、このクラスには、たとえば「AdClicked」など、リッスンする必要があるイベントがあります。聞いていない場合はすべて正常に動作しますが、タップが登録されていない場合、そこでの分析の追跡が失われます。ただし、広告は引き続き機能するため、ユーザーと開発者には違いが見られず、アナリティクスのデータは間違っています。それは避ける必要がありますが、開発者がtaoイベントに登録する必要があることを開発者がどのように知ることができるかわかりません。しかし、これは単純化された例ですが、アイデアは「彼が利用可能な公開アクションを使用することを確認する」ことであり、当然のことです!

10
「テーブルから選択*」が悪い習慣と見なされる理由
昨日、私は「趣味」のプログラマーと話し合っていました(私自身はプロのプログラマーです)。私たちは彼の仕事のいくつかに出会い、彼は彼のデータベースのすべての列を(実動サーバー/コード上でも)常に照会すると言いました。 私は彼にそうしないように説得しようとしたが、まだそれほど成功していなかった。私の意見では、プログラマーは、「可愛さ」、効率、およびトラフィックのために実際に必要なものだけを照会する必要があります。私の見方に誤りがありますか?
96 database  sql  mysql  bad-code 

8
信頼できるモバイルアプリケーションのみのREST APIを保護する方法
REST APIが信頼できるクライアント、私の場合は自分のモバイルアプリケーションによって生成されたリクエストにのみ応答することを確認するにはどうすればよいですか?他のソースからの不要なリクエストを防ぎたい。ユーザーがシリアルキーなどを入力するのは望ましくありません。これは、バックグラウンドで、インストール時に、ユーザーの操作なしで発生するはずです。 私の知る限り、HTTPSは、通信相手のサーバーが本人であることを検証することのみを目的としています。もちろん、データを暗号化するためにHTTPSを使用します。 これを達成する方法はありますか? 更新: ユーザーは読み取り専用のアクションを実行できますが、ユーザーはログインする必要がありませんが、ユーザーがログインする必要がある書き込みアクションも実行できます(アクセストークンによる認証)。どちらの場合も、信頼できるモバイルアプリケーションからのみのリクエストにAPIが応答するようにします。 APIは、モバイルアプリケーションを介して新しいアカウントを登録するためにも使用されます。 更新2:これには複数の答えがあるように見えますが、正直なところ、どれに答えとしてフラグを立てるべきかわかりません。できると言う人もいれば、できないと言う人もいます。
96 security  rest  mobile 

3
プログラミング言語、特にCでは、中括弧ではなく中括弧を使用するのはなぜですか?
「Cスタイル言語」の定義は、実際には「中括弧({})を使用する」まで簡略化できます。なぜその特定の文字を使用するのですか(そして[]、少なくともUSキーボードではShiftキーを必要としないなど、より合理的な文字を使用しないのはなぜですか)。 これらの中括弧からプログラマの生産性に実際の利点はありますか、または新しい言語設計者が代替手段(つまり、Pythonの背後にいる人)を探す必要がありますか? ウィキペディアは、C が前述のブレースを使用しているが、その理由を説明していないと言っています。Cベースのプログラミング言語のリストに関するウィキペディアの記事の声明は、この構文要素がやや特別であることを示唆しています。 大まかに言って、Cファミリー言語は、Cに似たブロック構文を使用する言語です(ブロックの開始と終了のための中括弧を含む)...

8
ブラウザのフィンガープリントは、匿名ユーザーを識別するための実行可能な手法ですか?
ブラウザのフィンガープリントは、匿名ユーザーを一意に識別するのに十分な方法ですか?マウスジェスチャーや入力パターンなどの生体認証データを組み込むとどうなりますか? 先日、EFFがブラウザの指紋で実行しているPanopticlickの実験に遭遇しました。 もちろん、私はすぐにプライバシーへの影響と、それが悪にどのように使用されるかを考えました。しかし、一方で、これは非常に良い目的に使用することができ、少なくとも、作業するのは魅力的な問題です。 このトピックを調査しているときに、ブラウザーのフィンガープリントを使用して詐欺を攻撃している会社をいくつか見つけました。そして、いくつかの電子メールを送信した後、少なくとも1つの主要な出会い系サイトが偽のアカウントを検出するメカニズムの1つとしてブラウザーのフィンガープリントを使用していることを確認できます。(注:数百万のユーザーにスケールアップする際にアイデンティティとして機能するほどユニークではないことがわかりました。しかし、私のプログラマーの脳は彼らを信じたくありません)。 詐欺の検出と防止のためにブラウザーの指紋を使用している会社があります:http : //www.bluecava.com/ 以下は、ブラウザで一意の識別子として使用できるものの非常に包括的なリストです。http: //browserspy.dk/

14
Cプログラミング言語はまだ使用されていますか?
私はC#プログラマーであり、開発の大部分はWebサイトといくつかのWindowsアプリケーション用です。Cに関する限り、必要がないので、私は長い間使用していません。友達がC#の学習を手伝っている間に、仕事をテストするためにCを学ぶ必要があると言ったのは驚きでした。 私は、Cで開発が行われている場合にのみ、誰かがテストのためにCを学習するだろうと考えました。私の知識から、COMおよびハードウェア設計に関連するすべての開発もC ++で行われます。したがって、C ++を使用する必要がある場合、Cの学習は意味がありません。私も歴史的な重要性を信じていないので、なぜCを学ぶのに時間とお金を浪費するのですか? Cは、新しいソフトウェア開発やその他の何かでまだ使用されていますか?

25
プログラマはどのように仕事を辞めますか?[閉まっている]
私は現在の雇用主を辞め、プログラミングの世界でそのプロセスについてどう考えているのかと考えています。私たちは現在、外出先で多くのプロジェクトを抱えており、私は唯一の開発者です。4〜5つのプロジェクトがありますが、それらはかなり大きく、今後数か月以内に、さらにそれよりも数時間長く行う必要があります。 私は唯一の従業員であり、それが私に役に立たないので、私は去ります。私は若くて学びたいので、チームがいいと思います。それはあまりにも多くの仕事であり、会社は恐ろしく管理されています。 心配する契約がないので、理論的には辞めて、予告なしに戻ってくることはありません。これが通常どのように処理されるか疑問に思うだけです。 辞表を書くべきですか どのくらいの通知をする必要がありますか 去る理由を教えてください 私が去る主な理由である上司に行くべきですか、それとも上司に行くべきですか? 返信の概要 ここでのフィードバックから、2〜4週間の通知を行い、辞表を提出するのが最善のように見えます。ほとんどの場合、離れる理由を詳しく説明しないでください。橋を燃やさないでください。プロフェッショナルになりましょう。

9
なぜ依存性注入を使用する必要があるのですか?
依存性注入を使用する理由についてリソースを探すのに苦労しています。私が見るほとんどのリソースは、オブジェクトのインスタンスをオブジェクトの別のインスタンスに渡すだけであると説明していますが、なぜですか?これはアーキテクチャ/コードをきれいにするためだけですか、それとも全体としてパフォーマンスに影響しますか? なぜ次のことを行う必要があるのですか? class Profile { public function deactivateProfile(Setting $setting) { $setting->isActive = false; } } 次の代わりに? class Profile { public function deactivateProfile() { $setting = new Setting(); $setting->isActive = false; } }

12
最新のコンパイラーでは、関数呼び出しのコストは依然として重要ですか?
私は宗教人であり、罪を犯さないように努力しています。それが、私がきれいなコード聖書によって命じられたいくつかの戒めに従うために、小さな(それよりも小さい、ロバート・C・マーティンを言い換える)関数を書く傾向がある理由です。しかし、いくつかのものをチェックしながら、私はこの投稿に行き、その下でこのコメントを読みました: 言語によっては、メソッド呼び出しのコストがかなり高くなる可能性があることに注意してください。ほとんどの場合、読み取り可能なコードの作成とパフォーマンスコードの作成にはトレードオフがあります。 高性能の最新コンパイラーの豊富な業界を考えると、この引用文はどのような条件下でも今でも有効ですか? それが私の唯一の質問です。そして、それは長い関数を書くべきか小さな関数を書くべきかということではありません。私はあなたのフィードバックが私の態度を変えることに貢献するかもしれないし、しないかもしれないことを強調し、冒bl者の誘惑に抵抗することはできません。

13
ジュニア開発者からの「ほぼ良い」コードに対処する方法は?[閉まっている]
チームの管理について質問がありました。現在、私はコーディング工場からリモートで作業しているジュニア開発者を扱っています。その男は批判に対して寛容であり、学ぶことをいとわないが、どれだけのものをプッシュすべきか疑問を抱いた。 現在、何かがまっすぐで明白な場合、グッドプラクティスの違反です。SRP、Godオブジェクト、メソッドまたは変数の意味のない名前の違反など。私は彼が修正しなければならないことを指摘し、それが間違っている理由を説明しようとします。 私の質問は次のとおりです。間違った言語の変数名(以前のチームがスペイン語と英語を混ぜて、それを修正しようとしています)のようなコーディングスタイルのマイナーな違反がある場合、またはいくつかのマイナーな構造上の問題がある場合、私は手放します空き時間があるか、問題のあるクラスを変更する必要があります。これはチームの士気に良いと感じているので、初心者には些細なことのように見えるかもしれませんが、コードを常に押し戻そうとはしていません。何かをする方法を学ぶことから。 男を教えることと絶え間ない批判で彼を焼き払わないことの間のバランスをどのように取るのですか?後輩にとっては、目が効いているものをやり直すように言ったらイライラするかもしれません。

13
可能な場合、ローカル変数を削除する必要がありますか?
たとえば、AndroidでCPUをオンに保つには、次のようなコードを使用できます。 PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); しかし、私はローカル変数powerManagerと考えるwakeLockことができます: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); 同様のシーンがiOSアラートビューに表示されます。例:from UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } に: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil] show]; -(void)alertView:(UIAlertView *)alertView …


2
「Free Monad + Interpreter」パターンとは何ですか?
特にデータアクセスのコンテキストで、Interpreterを使用してFree Monadについて話している人々を見てきました。このパターンは何ですか?いつ使用したいですか?どのように機能し、どのように実装しますか? (このような投稿から)私はそれがモデルをデータアクセスから分離することだと理解しています。よく知られているリポジトリパターンとの違いは何ですか?彼らは同じ動機を持っているように見えます。

2
JavaScriptとは何ですか?
これはすべて、W3C HTML ValidatorのようなJavaScript準拠のWebページをテストする方法を探していたときに始まりました。まだ見つけていません。何か知っているなら教えてください... 公式のJavaScriptページを探して、ECMA Scriptを見つけました。これらの人々はスクリプト言語を標準化しており(JavaScriptをもう呼び出す気はありません!)、それをECMA-262(Wikipedia)と呼びました。彼らの最新の作品はEdition 5.1です JavaScriptはMozilla Corporationによって開発され、最新の安定バージョンは1.8.5(これを参照)で、ECMAのエディション5.1に基づいています リンクWikipediaのページには、方言に言及しています。MozillaのJavaScript 1.8.5は、JScript 9(IE)およびJavaScript(ChromeのV8 [ Wiki ])およびその他多くの方言としてリストされています。JavaScript 1.8.5はECMA-262の派生物であり、SpiderMonkey [ Wiki ]はそれを実行するエンジンであることを理解していますか?そして、Chromeには独自の方言があり、V8エンジンはそれを実行するプログラムですか? これらすべての方言がECMA-262に基づいているため、理解できないのは「JavaScriptとは何ですか?」真のクロスブラウザースクリプト言語はありますか?方言の相互互換性に同意するために、さまざまな実装者が集まっていますか?この取り組みはECMAですか?

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