ソフトウェア工学

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

10
変数とメモリ位置の違いは何ですか?[閉まっている]
最近、フラッシュカードのように、ポインタを視覚的に説明しようとしています。 質問001:これは、コンピューターのメモリ内の場所の描画です。その住所は本当0x23452ですか?どうして? 回答:はい、0x23452コンピューターがこの場所を見つけることができる場所について説明しているためです。 質問002:文字bがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:いいえa。キャラクターは実際にその中に保存されているためです。 質問003:ポインターがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:はい、メモリロケーションのアドレスは0x34501内部に保存されているためです。 質問004:ポインターがメモリの場所に保存されているのは本当0x23452ですか?どうして? 回答:はい、別のメモリ位置のアドレスが内部に保存されているためです。 今、私が心配している部分について。ソフトウェアエンジニアは、次のように私へのポインタを説明しました。 ポインタは、値が別の変数のメモリアドレスである変数です。 すべてを紹介した4つのフラッシュカードに基づいて、少し異なる方法でポインターを定義します。 ポインタは、値が別のメモリ位置のメモリアドレスであるメモリ位置です。 変数はメモリの場所と同じだと言っても安全ですか? そうでない場合は、誰が正しいですか?変数とメモリ位置の違いは何ですか?

5
ウェブサイトのサーバー側を常にプログラムする必要がありますか?
私は友人のために音楽プロジェクトのウェブサイトの作成を開始しようとしています。現時点ではかなりシンプルなはずです。動的コンテンツ(ツアーの日付など)はなく、いくつかの埋め込みサンプルソングまたはSoundCloudリンクしかありません。レスポンシブグリッドには、バニラJavaScriptとBootstrapまたはFoundation以外のものを使用する予定はありません。 これで十分ですか?HTML、CSS、JSファイルをホストに単純にアップロードして完了できますか、それともNodeまたはPHPでバックエンドサーバーをプログラムするのに時間をかける必要がありますか?

5
ブール値を決定できない場合の対処方法
企業向けのWebアプリケーションを構築していますが、これまでは管理がExcelシートにのみ存在していました。ほぼ完了しましたが、最近、これらのシートからすべてのデータを新しいシステムにインポートするタスクを割り当てられました。システムはJavaで構築されていますが、このインポートは一度だけなので、代わりにPythonでスクリプトを記述し、SQLクエリで直接インポートすることにしました。ここに問題があります。新しいデータモデルには、既存のデータに含まれていないいくつかの新しい属性が含まれています。ほとんどの場合、これは問題ではなく、情報が見つからない場所にnullを置くだけです。しかし、その後、いくつかの属性に遭遇しました。これらの属性はブール値であり、デフォルトではNULLにはできません。最初に、データベース内のこれらのフィールドにnullを許可しようとしましたが、シニア開発者から許可しないように指示されました。将来的にシステムで問題が発生する可能性があるためです。そして今、私は何をすべきかよく分からない。明らかな解決策は、すべての不明なブール値をfalseにデフォルト設定することですが、それも間違っていると思います。 例:hasRadioパラメーターを持つエンティティCarがあるとします。ここで、このデータモデルにデータをインポートする必要がありますが、データには「Model」列と「Color」列のみがあり、無線の有無は関係ありません。設計上nullにできない場合、「hasRadio」列に何を入れますか? この状況での最善のアプローチは何ですか?不足しているデータを手動で入力するように会社に伝える必要がありますか?または、デフォルトでfalseになっていますか?

7
変数のスコープを減らすためだけにブロックを作成するのは理にかなっていますか?
私はJavaでプログラムを書いていますが、ある時点でキーストアのパスワードをロードする必要があります。ただの楽しみのために、私はこれを行うことによって、Javaでパスワードをできるだけ短くしようとしました。 //Some code .... KeyManagerFactory keyManager = KeyManagerFactory.getInstance("SunX509"); Keystore keyStore = KeyStore.getInstance("JKS"); { char[] password = getPassword(); keyStore.load(new FileInputStream(keyStoreLocation), password); keyManager.init(keyStore, password); } ... //Some more code 今、私はこのインスタンスでそれがちょっと馬鹿げていることを知っています。他にもできることがたくさんありますが、それらのほとんどは実際には改善されています(変数をまったく使用できませんでした)。 しかし、私はこれを行うことがそれほど愚かではない場合があるかどうか興味がありました。私が考えることができる他の唯一のことはcount、またはのような一般的な変数名を再利用したい場合ですtempが、良い命名規則と短いメソッドはそれが有用になる可能性が低いことです。 可変スコープを縮小するためだけにブロックを使用することが理にかなっている場合はありますか?
38 java  variables  scope 

6
数字を適切にローカライズする方法は?
フロントエンドアプリケーションで番号をローカライズする際に注意する必要があるのはどの警告ですか? 例:ブラジルポルトガル語(pt-BR)では、ドットで千を分割し、コンマで小数を分割します。米国英語(en-US)ではそれは逆です。pt-BRでは、en-USと同様に、桁で区切られた桁が表示されます。しかし、今日、インド英語(en-IN)について読んで、この宝石に出会いました。 インドの番号付けシステムは、数字のグループ化に適しています。言葉で書かれたとき、または話されたとき、100,000 / 100 000未満の数字は、標準英語と同じように表現されます。100,000 / 100,000以上の数字は、インドのナンバリングシステムのサブセットで表されます。 https://en.wikipedia.org/wiki/Indian_English#Numbering_system つまり: 1000000 units in pt-BR are formatted 1.000.000 1000000 units in en-US are formatted 1,000,000 1000000 units in en-IN are formatted 10,00,000 コンマとドット、およびその他の特定の区切り記号に加えて、マスキングも有効な懸念事項のようです。 フロントエンドアプリケーションで番号をローカライズする際に注意すべき他の注意事項はありますか?特に非ラテン文字セットに数字を表示している場合はどうなりますか?

6
.csファイルをプロジェクトにリンクするよりも.dllファイルを使用する利点(独自の汎用ヘルパークラス/拡張メソッドの場合)
作成するすべてのアプリケーションで使用するヘルパープロジェクトがあります。これには、いくつかの拡張メソッドと一連の汎用ヘルパークラス、コントロールなどが含まれています。ヘルパープロジェクトは随時更新/拡張します。これらは通常、小規模で無関係なプロジェクトであり、私はそれらすべてに取り組んでいる唯一の人です。 私はそれを使用するために2つのアプローチを試しました 使用する各プロジェクトに.csファイルを直接追加(リンクとして追加) .dllとしてコンパイルし、参照として追加します これらのアプローチにはいくつかの利点と欠点があります。 最初の1つ: ヘルパークラスはexeファイルにコンパイルされるため、より簡単です。したがって、正常に機能する単一の.exeファイルを非常に簡単に提供できることがよくあります。リンクとして追加するので、ヘルパーを使用するプロジェクトをビルドするたびに、ヘルパーファイルが最新バージョンになることを確信できます。 .NET 4.0で正常に動作する拡張メソッドを.NET 4.5を必要とする拡張メソッドとは別に参照できるように、ファイルを分離できるため、さらにシンプルになります。つまり、アプリ全体が.NET 4.0で実行できることを意味します。 ブレークポイントなどのすべての利点を使用して、コードを介してデバッグすることができます... 「ベストプラクティス」ではないようです 2番目: 正しいアプローチのようですが、次のとおりです。 別の.dllファイルを提供する必要があります。何らかの理由で、ユーザーにとってははるかに困難です(.dllなしでプログラムを共有する傾向があり、その後、起動時にクラッシュします)。 単一の.dllにコンパイルされるため、最高バージョンの.NETが必要になります。多くのユーザーは.NET 4.5を持たず、ヘルパークラスの一部の要素のみがこれを必要とします。理由もなくシステムを更新する また、プログラムを更新するたびに、.dllファイルも配信することを確認する必要があります-最後のバージョン以降に変更されたかどうかはわかりませんが、同じバージョンにすることもできます)。追加の作業であるアセンブリバージョンを追跡せずに、それを判断する簡単な方法はわかりません。今のところ、プログラムを更新するときは、更新されたexeのみを配信します。 では、ここで.dllファイルを使用することの実際の利点は何ですか?すべてのアプリケーションとヘルパーファイルのコードを編集するのは私だけであることに注意してください。 また、明確にするために-通常、アプリはごくわずかですが、ヘルパークラスに含まれるコードはそれらすべてに完全に汎用的です(一部の単純な文字列比較、パス、またはXML操作など) 実際、誰かが私に今、3番目の選択肢があることを認識させました。私はseparteプロジェクトにヘルパーコードを持っているので、このプロジェクトを個々のアプリケーションのソリューションに追加できます-これは、単一のプロジェクトを追加する以外は、単一ファイルの「リンクとして追加」のように機能します... Doc Brownが気づいたように、これは基本的に.dllをプロジェクトに追加する必要があることを意味します... dllファイルを使用しないことを支持するもう1つのことは、ヘルパークラスを積極的にデバッグする機能です...
38 c#  dll 

6
OOP言語に偏った後、Cプログラマーとして考えるには?[閉まっている]
以前は、オブジェクト指向プログラミング言語(C ++、Ruby、Python、PHP)しか使用していませんでしたが、Cを学習しています。言語の概念のない言語で物事を行う適切な方法を見つけるのは難しいと感じています。 「オブジェクト」。CでOOPパラダイムを使用することは可能ですが、Cイディオマティックな方法を学びたいと思います。 プログラミングの問題を解決するとき、私が最初にすることは、問題を解決するオブジェクトを想像することです。非OOP命令型プログラミングパラダイムを使用する場合、これをどのステップに置き換えますか?

5
独自のメソッドまたは別のクラスを介してオブジェクトを保存しますか?
オブジェクトを保存および取得したい場合、別のクラスを作成してそれを処理する必要がありますか、それともクラス自体で行う方が良いでしょうか?それとも両方を混ぜるか? OODパラダイムに従って推奨されるのはどれですか? 例えば Class Student { public string Name {set; get;} .... public bool Save() { SqlConnection con = ... // Save the class in the db } public bool Retrieve() { // search the db for the student and fill the attributes } public List<Student> RetrieveAllStudents() { // this …

4
P対NP対NP完全対NPハードを理解しよう
私はこれらの分類とそれらが存在する理由を理解しようとしています。私の理解は正しいですか?そうでない場合、何ですか? Pは多項式の複雑さ、またはなどの非負の実数の場合です。問題がPに属する場合、多項式時間でゼロから解決できるアルゴリズムが少なくとも1つ存在します。たとえば、分割する場合、各ステップでループしてチェックすることにより、整数が素数であるかどうかを常に把握できます。O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn NPは非決定的な多項式の複雑さです。非決定論的であることの意味を私は本当に知りません。多項式時間で検証するのは簡単ですが、答えがわからない場合はゼロから解決する多項式時間である場合とそうでない場合があります。それは以来かもしれ多項式時間で解けること、すべてのP上の問題もNPの問題です。NPの例として整数因数分解が引用されていますが、試行的因数分解にはO(sqrt(n))時間がかかるため、個人的にはなぜPでないのか理解できません。 NP-Complete私はまったく理解していませんが、この例として巡回セールスマン問題が引用されています。しかし、私の意見では、TSPの問題は単にNPである可能性があります。なぜなら、前もってパスが与えられているかどうかを確認するようなものが必要だからです。O(2n n2) time to solve, but O(n) NP-Hardは未知のものでいっぱいだと思います。検証が難しく、解決が難しい。

3
APIクライアントの単体テストを実際に行う価値はありますか?
これは今しばらく私を悩ませてきたものです。APIクライアントの単体テストを実際に行う価値はありますか? petshop REST APIへの呼び出しを抽象化するための小さなクラスを作成しているとしましょう。petshopは非常に単純なAPIであり、基本的なメソッドセットがあります。 listProducts() getProductDetails(ProductID) addProduct(...) removeProduct(ProductID) これをテストするには、モックサービスを作成するか、応答をモックする必要があります。しかし、それは行き過ぎのようです。タイプミス/構文エラーによってメソッドの動作が停止しないことを確認したいのですが、リモートメソッドを呼び出す関数を作成し、それらのリモートメソッドから偽の応答を作成しているため、努力の無駄であり、実際に失敗することのない何かをテストしています。さらに悪いことに、リモートメソッドが変更された場合、本番環境の使用が失敗している間にユニットテストに合格します。 何かが足りないのか、スティックの端が間違っているのか、木の代わりに木が見えないのはかなり確かです。誰かが私を正しい軌道に乗せることができますか?
38 unit-testing  api 

2
現代の言語はまだパーサージェネレーターを使用していますか?
これが出てきたとき、私はここウィキペディアで gccコンパイラスイートについて調査していました: GCCはBisonで生成されたLALRパーサーの使用を開始しましたが、徐々に手書きの再帰パーサーに切り替えました。2004年のC ++、および2006年のCおよびObjective-Cの場合。現在、すべてのフロントエンドは手書きの再帰下降パーサーを使用しています。 最後の文で(そしてウィキペディアを信頼する限り)私は間違いなく「C(gcc)、C ++(g ++)、Objective-C、Objective-C ++、Fortran(gfortran)、Java(gcj)、 Ada(GNAT)、Go(gccgo)、Pascal(gpc)、... Mercury、Modula-2、Modula-3、PL / I、D(gdc)、およびVHDL(ghdl)」はすべてフロントエンドであり、パーサージェネレーターを長く使用します。つまり、それらはすべて手書きのパーサーを使用します。 私の質問は、このプラクティスはどこにでもあるのですか?特に、[Python、Swift、Ruby、Java、Scala、ML、Haskell]のxの「xの標準/公式実装には手書きパーサーがありますか」に対する正確な答えを探していますか?(実際、他の言語に関する情報もここで歓迎されています。)掘り下げた後、私は自分でこれを見つけることができると確信しています。しかし、これはコミュニティによって簡単に答えられると確信しています。ありがとう!

6
エラーについてどのくらいの情報をユーザーに表示する必要がありますか?
アプリケーションは常にエラーをスローできます。このようなエラーが発生した場合、ユーザーにアプリケーションに要求したことが成功しなかったため、ユーザーに通知する必要があります。 ただし、ユーザーにはどの程度の情報を提供する必要がありますか?私たちのほとんどは、スタックトレースを表示しないことに同意すると思います(スタックトレースは、ユーザーに表示されるエラーメッセージに含まれるべきですか?)ユーザー。 たとえば、例外をサポートする言語(.net、java)には、共有する例外の種類、例外が発生した場所、および例外に沿った明確なメッセージがあります。これもユーザーに非表示にする必要がありますか?または、とにかくこれを表示する必要がありますか?または、一般的なメッセージを表示する必要がありますか?または、基になる例外が何であるかに基づいて、いくつかのメッセージの1つを表示する必要がありますか?

3
参照の透明性とは何ですか?
命令型パラダイムでそれを見てきました f(x)+ f(x) 次と同じではない可能性があります。 2 * f(x) しかし、機能的なパラダイムでは同じでなければなりません。私はPythonとSchemeの両方のケースを実装しようとしましたが、私にとっては同じように見えます。 特定の関数との違いを指摘できる例は何でしょうか?

5
プログラミング言語とマークアップ言語とスクリプト言語
これまで、私はこれら3つの主要な違いを知りません。誰かにこれについて尋ねられたとき、私はC#がプログラミング言語であり、HTMLとXMLがマークアップ言語であり、JavaScriptとVBScriptがスクリプト言語であると言うだけです。しかし、それらを互いに区別する主な違いは何ですか?

14
厳しい締め切りに直面したときに他の人のコードをクリーンアップすることはどれほど重要ですか?[閉まっている]
(私は(プログラミング言語ではなく)HTML / CSSコードについて話しているが、プログラマーと同じ問題に直面していると思う。) 私はチームのシニアフロントエンドデザイナーであり、後輩の成果を厳しい締め切りで頻繁に作り直す必要があります。 私は2つの問題に直面しています: それらのコーディングスタイルは少し複雑です。 美学は良くありません。 彼らのコーディングスタイルは、適切な慣習/標準がない混合バッグです。私は、コードをクリーンアップするか、単にコードを処理する(それらがどのように動作するかをコピーする)ことで引き裂かれます。 私は悪い習慣を学ぶかもしれないと思うので、彼らのコーディングスタイルに従うのはイライラします。しかし、その後、それが期限を満たすための最速の方法です。 より多くの経験を持つ人にとって、どれがより効果的ですか?クリーンアップを後で保存する必要がありますか?または、変更の途中でクリーンアップしますか? (私は慢に聞こえたくはありませんが、それは現実です。より良いコードを書くのに何年もかかるでしょう。

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