ソフトウェア工学

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

6
ソフトウェアの無料試用版に「自己破壊」機能を実装するにはどうすればよいですか?
潜在的な顧客やユーザーが製品をテスト実行できるようにするために、無料試用版とフリーミアムモデル(つまり、機能が制限された機能や削除されたソフトウェアの無料版)との継続的な議論があります。私の研究では、無料試用版は、ソフトウェアを使用する個人のユーザーエクスペリエンスの利点と、販売と使用の最大化の両方の面でベンダーの利益の両方を実現する方法であると結論付けることができます。無料試用版ソフトウェアには、無料試用期間の長さなど、ユーザーの使用を大幅に最大化できる多くの要素があります。 「フリーミアム」の研究で繰り返し出てくるキーワードの1つは「フラストレーション」です。多くの個人は、一部の機能が利用できないソフトウェアを使用する代わりに、ソフトウェアをアンインストールすることを選択しました。同時に、これらのユーザーは「有料」機能を使用する機会がありませんでした。彼らには知られておらず、ソフトウェアを販売している独自のベンダーに隠されているため、Proの機能がもたらすメリットを知りません。最初にそれらを使用する必要がなければ、ユーザーは自分が何かを「必要とする」感覚を持っていることを知りません。これは、無料試用モデルの次のポイントに私を連れて行きます。 無料試用版ユーザーの意見は、「Pro機能なしでこのソフトウェアを使用することは想像できません」です。これは、「ユーザーが最初に持っている感覚を理解するまで、何かが必要なことを知らない」という点に戻ります。「フル」バージョンの機能を使用するために14日間の猶予がある人は、そこに提供されている機能を持たない、または使用しないと想像できないと言いました。そのため、14日間が過ぎたとき、彼らは完全な機能を経験したことがない人よりもお金を使い果たす可能性が高くなりました。無料トライアルの期間も、ユーザーに永続的な印象を与える重要な要素です。Visual Website Optimizerが実施した実験では、14日間の無料トライアルと30日間の無料トライアルでは、サインアップとインストールの数は同じであるが、14日間のトライアルの使用率は102%増加したことがわかりました。 言及する別の非常に重要な点は、「有用で完全に機能する製品の無料バージョンを提供すること」が非常に重要であることです。完全に機能する無料試用版はメディアの報道に効果的であり、新しいソフトウェアやソフトウェアベンダーに対するこの宣伝は非常に重要です。 もう1つの関連する側面は、ユーザーがフィードバックを提供することの重要性です。完全に機能する期間限定無料トライアルでは、ユーザーがフィードバックを提供できることを考慮してください。 ソフトウェアにとって重要なもう1つの機能は、テレメトリックデータ、つまりユーザーがソフトウェアを使用する方法に関する定量的かつ包括的なデータの必要性です。法律は米国の場所と世界によって異なるため、使用統計の一部は法的な灰色の領域に分類される場合があります。この法的問題に対処する1つの方法は、匿名の使用統計を収集するためのオプトイン機能を使用することです。オプトイン機能とは、統計情報の収集をオフにするオプションをユーザーに提供することを意味します。同時に、ユーザーは匿名の使用状況情報の収集が何を行うかを十分に認識している必要があります。どのデータを収集するか、「私たち」がそれを使って何をするかをユーザーに明確にし、いつでも簡単にオフにすることが重要です。ユーザーの個々のアクティビティの追跡など、より詳細な統計情報については、法的問題につながる可能性があります。Eclipse IDEは詳細な使用統計を記録しますが、ユーザーの完全な同意によって記録します。法務チームと同意書を作成する必要がある場合があります。 Eclipse Usage Information Collectionは、次の情報を収集します。1.システムによって開始されるプラグイン。2.キーボードショートカットを介してアクセスされるコマンド、およびメニューまたはツールバーを介して呼び出されるアクション。3.エディターの「ビュー」にフォーカスが与えられたとき。4.使用されているソフトウェアのバージョン、使用されているオペレーティングシステムなどのシステム情報。5.内部エラーの説明。 緊急停止装置 ソフトウェアのキルスイッチは、初期データを記録し、ソルトで暗号化して管理できます。無効な日付になると、つまりユーザーが変更しようとすると、ソフトウェアが無効になります。別のオプションは、インストール時にインターネット認証を行い、その日付を中央のWebデータベースに記録し、アプリケーションを開くたびに日付を確認することです。 ソフトウェアを無効にすると、重要なDLLを削除できます。レポートを生成するために支払う必要があるオプションは考慮できません。 既存のソフトウェアに無料試用版を実装することに興味があります。私は最後の14日間の試用を計画しています。14日目に、私のソフトウェアはユーザーに有料版の代金を支払うか、それを使用できないという結果をもたらすように促します。無料試用版は完全にロック解除されています。つまり、すべての有料機能があります。 しかし、私のジレンマは、試行終了ソリューションのために何をすべきかを実装する「最良の」方法に関するものです。重要なDLLを削除しますか?インストールまたは使用時にユーザー認証システムを使用していますか?使用する最初の時間と日付をソルトで暗号化し、無効な日付(つまり、最初の日付を変更しようとする)である場合、ソフトウェアを無効にしますか? ソフトウェアを無効にするための効果的な手段は何かを知りたいです。

14
特にプログラミング言語のキャリアをさらに伸ばすために、自然言語を学習しますか?[閉まっている]
英語は、以前のP.SEの質問に基づいたプログラミングの主要な国際言語であることが明らかなようです(ただし、非常に賛成のコメントは、英語のサイトでそのような質問をすると結果がゆがむことを正しく指摘しています)。 しかし、ソフトウェア開発のために外国語を学ぶことには利点がありますか?たとえば、中国人は完全に異なるソフトウェアツール、言語、技術などを持っていますか?日本語、ロシア語、およびその他の非ラテン語ベースの言語はどうですか?これらの他の言語にのみ存在するソフトウェア開発言語、ツールなどの世界がありますか? または、これらの言語を知っている人は、私たちが知っている愛するツールや言語を使用していますか?

16
ほぼ確実に発生する可能性のない競合状態を処理する必要がありますか?
メインスレッドがUIをほぼ瞬時に更新し、他のスレッドがネットワーク経由でデータをポーリングしているGUIアプリケーションや、ジョブの完了に5〜10秒かかることが保証されているGUIアプリケーションのようなものを考えてみましょう。 私はこれについて多くの異なる回答を受け取りましたが、統計的不可能の競合状態である場合、それをまったく心配しないと言う人もいますが、10-53%さえあればあなたは数字ではなく、これは私が聞いたものです)競合状態のために起こっているブードゥー教の魔法、常にそれを必要とするスレッドのロックを取得/解放します。 あなたの考えは何ですか?このような統計的に不可能な状況で競合状態を処理するのは、プログラミングの良い習慣ですか?または、読みやすさを妨げるためにコードの行を追加することはまったく不要であるか、逆効果になるでしょうか?

5
単一ページのWebアプリケーションを構築する利点と欠点[非公開]
私は現在取り組んでいるサイドプロジェクトのプロトタイピング/概念実証フェーズの終わりに近づいており、いくつかの大規模なアプリケーション設計の決定を決定しようとしています。このアプリは、アジャイル開発プロセス向けに調整されたプロジェクト管理システムです。私が下す必要がある決定の1つは、従来のマルチページアプリケーションとシングルページアプリケーションのどちらを使用するかです。 現在、私のプロトタイプは従来の複数ページのセットアップですが、backbone.jsを見て、Javascript(jQuery)コードに構造をクリーンアップして適用しています。Backbone.jsは複数ページのアプリケーションで使用できますが、単一ページのアプリケーションでさらに輝いているようです。単一ページのアプリケーション設計アプローチを使用することの利点と欠点のリストを考えています。これまでのところ: 長所 すべてのデータは何らかのAPIを介して利用できる必要があります。これは、アプリケーションにAPIを保持したいので、ユースケースにとって大きな利点です。現在、データの取得/更新の呼び出しの約60〜70%がREST APIを介して行われています。単一ページのアプリケーションを実行すると、アプリケーション自体がREST APIを使用するため、REST APIをより適切にテストできます。また、アプリケーションが成長するにつれて、API自体も成長することを意味します。これはアプリケーションが使用するものだからです。APIをアプリケーションのアドオンとして維持する必要はありません。 より応答性の高いアプリケーション-最初のページの後に読み込まれるすべてのデータは最小限に抑えられ、コンパクトな形式(JSONなど)で送信されるため、データ要求は一般に高速であり、サーバーの処理はわずかに少なくなります。 短所 コードの複製-たとえば、モデルコード。サーバー側(この場合はPHP)とJavascriptのクライアント側の両方でモデルを作成する必要があります。 Javascriptのビジネスロジック-これが悪い理由について具体的な例を挙げることはできませんが、だれでも読むことができるJavascriptのビジネスロジックを持っていると感じることはできません。 Javascriptのメモリリーク-ページがリロードされないため、Javascriptのメモリリークが発生する可能性があり、デバッグをどこから開始すればよいかさえわかりません。 また、両刃の剣のようなものもあります。たとえば、単一ページのアプリケーションでは、アプリケーションが特定の要求に必要な最小限のデータを要求するため、各要求で処理されるデータは大幅に少なくなりますが、サーバー。それが良いことなのか悪いことなのかはわかりません。 単一ページWebアプリケーションの長所と短所のうち、プロジェクトにどの方向に進むべきかを決定するときに留意すべきことは何ですか?

15
コードが書かれていない数日間、設計上の問題を考えるのは普通ですか?[閉まっている]
ときどき空を見つめたり、アイデアをスケッチしたり、紙の上に擬似コードを書いたりします。それから私はそれをスクラッチしてやり直し、問題の正しい解決策があると思うとコードを書き始めます。 何日もコードを書かずに考えるのは普通ですか?これは、私が問題に近づいているという兆候ですか?IDEで具体的なコードを作成しないことに不安を感じます。
52 design 

18
コミュニケーション能力が低い開発者を管理する方法
私は、大企業内でライフサイクルの中間点にあるアプリケーションの小さな開発者チームを管理しています。残念ながら、これは通常、プログラミングタスクが「その他の技術的作業」に30/70分割されていることを意味します。この作業には以下が含まれます。 DBA / Unix / Network / Loadbalancerチームとのさまざまなタスクでの作業 異なる地域でのハードウェアまたはインフラストラクチャの注文と配置の管理 まだCIに移行されていないテストの実行 分析 サポート/調査 開発者はすべて、これらのより日常的なタスクを行うよりもコーディングを好むと言うのは当然です。そのため、楽しいプログラミングジョブをチーム間で均等に配布するようにします。 ほとんどのチームは、独自のコンパイラ/ゲームエンジン/高頻度取引システムなどを作成するためのエリートプログラミングスキルを持たないかもしれませんが、「物事を成し遂げる」ことができ、他のチームと協力する優れたコミュニケーターであるため、採用されました、そしてここで複雑な官僚機構をいくぶんナビゲートします。彼らは優れた開発者ですが、優れた総合的な技術スタッフでもあります。 ただし、チームの1人のメンバーはおそらく平均以上のコーディングスキルを持っていますが、平均以下のコミュニケーションスキルを持っています。従来、以前の開発マネージャーは、上記のより日常的なタスクではなく、プログラミングタスクを提供する傾向がありました。ただし、大企業のIT部門で一般的に必要とされるバランスのとれたスキルセットを開発する適性を示している他のチームにとって、これが公平だとは思いません。 この状況ではどうすればよいですか?彼にもっとプログラミングの仕事を与え続けると、それがより速く行われることを知っています(そして逆に、彼は他の仕事をより遅く完了すると期待しています)。しかし、それは私の原則に反しており、単にあなたが好きではないタスクに悪いことによって、あなた自身のために「快適なニッチ」を切り開くことができるという考えを促進します。 clarifyみが原因でこの問題に対処しようとしていないこと、または言及したように「肩に欠けている」ことを明確にしたいと思います。バランスの取れたチームを維持する方法についてのアドバイスを探しています。チームは幸せでやる気があります。この質問に対するさまざまな答えを観察することにより、これを達成する方法について多くの異なる意見があるようです。

20
オブジェクト指向プログラミングは実際に現実世界をモデル化していますか?[閉まっている]
私は、オブジェクト指向プログラミングが現実世界のモデリングに基づいていることをよく見ましたが、それは本当ですか? 私には、ビジネス層以外の何も真実ではないようです。私のGUIクラス/データアクセスクラスは、現実の世界では何もモデリングしていません。私のビジネス層にも、オブザーバー、マネージャー、工場など、現実世界のオブジェクトではないクラスがあります。カプセル化などを利用するようにクラスを設計しようとしていますが、現実の世界はカプセル化されていますか? 私が作成するオブジェクトの中には、現実世界のオブジェクトをモデリングしているものがありますが、OOP前のコードは同じことをしないでしょうか?OOは、Customerのような概念をコードベースに最初に組み込んだ人ではなかったと思います。しかし、オブジェクト指向は本当に物事をモデル化する方法に関するものであり、そのモデル化の方法は私にとって現実の世界に触発されていないようです。 では、オブジェクト指向プログラミングは実際に現実世界をモデル化していますか?

20
高校のプログラマーが仕事に気付くのに最適な場所は何ですか?[閉まっている]
私は16歳の高校生で、コンピュータープログラミングに情熱を傾けています。私は11年生で、学校のシラバスの一部として約8ヶ月間それを学んでいます。私は学校で教えられていることを超えて、いくつかの(かなり良い)アプリケーションを書きました。私がプログラミングする言語は、WindowsプラットフォームのC ++です。最終的には、良い大学でCSを専攻し、プログラマーとして働きたいです。 私が持っている特定の質問は次のとおりです。 自分の仕事に気付くにはどうすればいいですか? 若いプログラマー専用のジャーナルや出版物はありますか? 出版物ではない場合、良いブログはありますか、それともあなた自身のものを始める方が良いですか? 他に何かありますか?それはプログラマーとして気づくのに役立ちますか? 私は可能な限り客観的になろうとしました。 これがすべてtl; drだった場合:若いプログラマーとして注目されるための最良の方法は何ですか 編集:私は高校からすぐに採用されるつもりはありません。目的は、プロのプログラマーとしてコミュニティを感動させることではありません。これは、他の人があなたの作品を見たり批評したりすることで、あなたのアプリケーションが改善される大学のアプリケーションを目指しています。私はこれまでに書いたものからお金を稼ぐつもりはありません。

9
COBOLを軽する理由 [閉まっている]
人々がCOBOLに言及するとき、それは通常、鼻水またはうめきに会います。COBOLについてはあまり知りませんが、COBOLで書かれたプログラムを見てきました。私はそれが言葉遣いであり、私のような理解できない未経験の目であることがわかります。しかし、実際には、すべてのプログラミング言語が一般人にとって意味のないものではありませんか? 私は、それが機能し、うまく機能し、それが設計された産業でまだ広く使用されていることを理解しています。それらは良い言語の特徴ではありませんか?COBOLの何が悪いのですか?
52 cobol 

14
関数内のパラメーターの順序に関するベストプラクティスは何ですか?
時々(まれに)、適切な量のパラメーターをとる関数を作成することが最適なルートであると思われます。しかし、そうすると、パラメーターの順序をランダムに選択することが多いように感じます。私は通常、最も重要なパラメーターを最初に使用して、「重要度の順に」進みます。 これを行うためのより良い方法はありますか?明確性を高めるパラメーターを並べる「ベストプラクティス」の方法はありますか?

10
schrödinbugとは何ですか?
このWikiページは次のことを示しています。 schrödinbugは、ソースコードを読んだり、異常な方法でプログラムを使用したりした場合に最初に動作するはずのないことに気づいた後にのみ現れるバグです。Jargonファイルには、「…これは不可能に思えますが、起こります。一部のプログラムは潜在的なシュレディンバグを長年にわたって隠していました。」 話されていることは非常にあいまいです。 誰かがschrödinbugがどのようなものであるかの例を提供できますか(架空/現実の状況のように)?
52 bug 

11
プログラマ向けの数学に関する標準的な本はありますか?[閉まっている]
私は独学のプログラマーです。私は正直、数学が苦手です。私の仲間のプログラマーの周りでそれほど不安にならないように、数学のスキルを向上させるためにどんなアドバイスをすることができますか?数学のスキルを向上させるために推奨できる手順またはガイドラインは何ですか? ベストプラクティス、設計方法論、およびプログラマ向けの数学に関するその他の有用な情報を説明するための事実上の標準である本はありますか?その本は特別なものですか?
52 math 

1
Haskellまたは他の関数型プログラミング言語でプログラムをどのように設計しますか?
私はc#やrubyなどのオブジェクト指向プログラミング言語の経験があります。オブジェクト指向スタイルでプログラムを設計する方法、クラスとオブジェクトを作成する方法、およびそれらの間の関係を定義する方法を知っています。いくつかのデザインパターンも知っています。 人々はどのように機能的なプログラムを書くのですか?どうやって始めますか?関数型言語の設計パターンはありますか?極端なプログラミングやアジャイル開発などの方法論は関数型言語に適用できますか?

13
できるだけ少ないテーブルでデータベースを作成する必要がありますか
最小数のテーブルでデータベース構造を作成する必要がありますか? すべてが1か所に収まるように設計する必要がありますか、それともテーブルを増やしても大丈夫ですか? とにかく何かに影響しますか? 私の友人がmediaWikiのデータベース構造を変更したため、この質問をしています。結局、彼は20個のテーブルの代わりに8個しか使用していなかったので、それを行うのに8か月かかりました(大学での割り当てでした)。 編集 私は答えを次のように結論付けています:ケースが例外的になるまで、テーブルのサイズは重要ではありません。この場合、非正規化が役立つ場合があります。 答えてくれてありがとう。

12
単体テストコードが「匂う」場合、それは本当に重要ですか?
通常、コピーアンドペーストおよびその他のあらゆる悪い慣行を使用して、単体テストを一緒にスローします。通常、単体テストは非常に見苦しく、「コードのにおい」に満ちていますが、これは本当に重要ですか?「本当の」コードが「良い」ものである限り、それは重要なことです。さらに、ユニットテストでは通常、スタブ機能などのさまざまな「臭いハック」が必要です。 不十分に設計された(「臭い」)単体テストについて、どの程度心配する必要がありますか?

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