ソフトウェア工学

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

3
enumデータ型を使用する代わりに新しいデータベーステーブルを作成するのは無駄ですか?
私が提供する4種類のサービスがあると仮定します(それらは頻繁に変わることはほとんどありません): テスト中 設計 プログラミング その他 上記のカテゴリのいずれかに該当する実際のサービスが60〜80個あるとします。たとえば、「サービス」は「テクニックAを使用したプログラムのテスト」で、タイプは「テスト」です。 それらをデータベースにエンコードしたいです。私はいくつかのオプションを思いつきました: オプション0: VARCHAR直接使用して、サービスタイプを文字列として直接エンコードします オプション1: データベースを使用しますenum。しかし、enumは悪です オプション2: 2つのテーブルを使用します。 service_line_item (id, service_type_id INT, description VARCHAR); service_type (id, service_type VARCHAR); 参照整合性も楽しむことができます: ALTER service_line_item ADD FOREIGN KEY (service_type_id) REFERENCES service_type (id); いいですね。 しかし、私はまだ物事をエンコードし、整数を処理する必要があります。つまり、テーブルにデータを入力するときです。または、テーブルにデータを入力または処理するときに、手の込んだプログラミングまたはDB構造を作成する必要があります。つまり、データベースを直接扱うとき、またはプログラミング側で新しいオブジェクト指向エンティティを作成するときにJOINし、それらを正しく操作することを確認します。 オプション3: 使用しないでくださいenum。2つのテーブルを使用せず、整数列を使用してください。 service_line_item ( id, service_type INT, -- use 0, 1, 2, 3 (for service …

1
Apache 2.0と私の修正を含むファイル
Apache Licenseバージョン2.0の原文と説明を平易な英語で読みました。 OK、The Best Company in the Worldが配布したクラスとそのライセンスをコピーし、コードを少し変更します。 変更した元のファイル。 /* * Copyright (C) 2011 The Best Company in the World * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy …

6
長いコンパイルは過去のものですか?
コンパイルにかかる時間については、無数の戦争物語があります。xkcdでさえ言及しました。 今、私は長い間プログラミングをしておらず、ほとんどがJavaとPythonにさらされたばかりです(Pythonはインタープリター言語であり、コンパイルされた言語ではありません)。コンパイルに非常に時間がかかるプロジェクトに出会ったことがない可能性があることを認識していますが、まともなサイズのアプリであっても、瞬時に(通常はIDEによってバックグラウンドで処理されます)、または30非常に大規模なプロジェクトの場合は数秒程度です。コミックが行われるビジネス環境であっても、コードのコンパイルにそれほど時間がかかったことはありません。 コンパイル時間が長いプロジェクトにさらされたことはありませんか?これは過去の遺物であり、もはや現代では起きないことですか?コンパイルに長い時間がかかるのはなぜですか?

5
複数回適用でき、最初のアプリケーションを超えて状態を変更しない操作の言葉は何ですか?
私は単語を思い出そうとしています。それは計算理論またはデータベース理論に関連していると思います。最も近い同義語はですatomicが、それは正確ではありません。基本的に、それは、連続して複数回実行された場合でも同じ結果を生成する一種の計算です。つまり、それ自体に副作用は発生しません。 具体的には、chmodコマンド(またはその他の権限に関連する操作)に関するStack Overflowの回答でこの言葉に出くわしました。 うまくいけば、それで十分です。ウィキペディアを突っ込んでも大した助けにはなりません。


4
クラスメソッド定義を注文する最も人間に優しい方法は?
どのクラス定義でも、メソッド定義はさまざまな方法で並べられています:アルファベット順、最も一般的な使用法に基づいた時系列、可視性でアルファベット順にグループ化、ゲッターとセッターでグループ化されたアルファベット順など。新しいクラスの作成を開始すると、私はすべてを入力する傾向があり、クラス全体の記述が完了したら順序を変更します。そのメモについて、私は3つの質問を持っています: 順序は重要ですか? 「最高の」注文はありますか? 私はそうではないと思うので、異なる順序付け戦略の長所と短所は何ですか?

11
MVCの「C」は本当に必要ですか?
Model-View-Controllerパターンでのモデルとビューの役割は理解していますが、コントローラーが必要な理由を理解するのに苦労しています。 MVCアプローチを使用してチェスプログラムを作成していると仮定しましょう。ゲームの状態がモデルになり、GUIがビューになります。この場合、コントローラーは正確に何ですか? これは、たとえばタイルをクリックしたときに呼び出されるすべての関数を備えた単なる別のクラスですか?ビュー自体でモデルのすべてのロジックを実行しないのはなぜですか?

7
すべてのDBテーブルで作成日と最終更新日フィールドを含めて標準化することは意味がありますか?
私の上司は現在、いくつかの開発標準をチームに適用しようとしているので、昨日、彼女が育てるまでほとんど順調だった標準について議論する会議がありました。 すべてのDBテーブルには、トリガーによって更新されるCreatedDateおよびLastUpdatedDate列があります。 この時点で、私たちのチームは意見の分裂に苦しみました。私たちの半分は、すべてのテーブルでこれを行うと、ほとんど利益のない大量の仕事だと思います(固定予算プロジェクトに取り組んでいるので、費用は会社の利益から得られます)。後半は、プロジェクトの支援に役立つと考えています。 私は元キャンプにしっかりといます。外部のケースによっては追加の列がサポート性を向上させることはありますが、私の意見では、最初に列を追加するために必要な作業量とメンテナンスにより、より多くの時間を費やすことになります単体テストや負荷テストなどの重要なこと。また、これらの余分な列によってORMを使用するのが難しくなることはかなり確信しています-私たちは主にC#とOracleを使用していることに注意してください。 したがって、私の質問は2つあります。 私は正しいキャンプにいますか?私は世界的に有名なデータベーススキルを持っているとは主張していません。そのため、これは副作用がなく、簡単に追加できるものです。 標準に関する会議がスラグマッチに移行する状況にどのように対処しますか?この基準が長期的には私たちを助けてくれないということを、どうすれば本当に売れますか?

8
「抽象化の層」と「間接化のレベル」の違いは何ですか?
両方の用語を同じ意味で使用できるかどうかはわかりません。たぶん、日々のプログラミングに関係のないコンピューターサイエンスの学問的な違いがありますか?または、間違っていなくても両方の用語を同じ意味で使用できますか?たぶん、両方の用語を使用するコンテキストに依存しますか? 編集:両方の用語が互換性があると思う理由は、抽象化レイヤーに関するWikipediaのエントリです。そこでは、David Wheelersが「コンピュータサイエンスのすべての問題は、別のレベルの間接参照によって解決できる」という引用を見つけることができます。

4
アサーションを使用するか、例外をスローするか?
多くの場合、関数を書くときは、そのようなエラーをできるだけ早く検出するために、入力を有効にする必要があります(これらは前提条件と呼ばれます)。前提条件が失敗すると、常に例外がスローされます。しかし、これがベストプラクティスであるかどうか、そしてそうでない場合はアサーションがより適切かどうかを疑い始めています。 それで、いつアサーションを使用するのが適切であり、いつ例外をスローするのが適切であるのか、どちらを行う必要がありますか?

5
エディターのダークカラースキームはなぜそんなに人気があるのですか?[閉まっている]
最近では、ほとんどすべての人がコードエディタで暗い配色を使用しています-明るい背景の暗い背景。ほとんどのWebベースのエディター(Githubなど)でも、暗い配色が使用されています。 正直なところ、利益は見当たりません。人間の目は、明るい背景で暗いテキストを読むのがはるかに優れています。また、明るい照明の環境では、白地に黒の配色が非常に効果的です。 私は現在、窓から太陽が差し込むオフィスに座っています。エディター(白い背景に濃い色のテキストを含むgVim)でテキストを読むことはできますが、Linuxコンソールでははるかに困難です。コンソールvimでテキストを編集することはほとんど不可能です。 全体は、特定のIDE /エディターのデフォルト設定によって開始された、奇妙な誇大広告のように思えます。しかし、多分私はただ奇妙だ..;) とにかく、なぜ誰もがこれらを使用していますか?

7
アプリケーション構成を保存する好ましい方法は何ですか?
ほとんどの場合、次のように、プロジェクトのルートディレクトリに開発アプリケーションの構成を保存します。 app |-- config.json しかし、この設定はバージョン管理システムに保存され、ユーザー名、パスワード、その他の機密情報が漏洩する可能性があるため、これは最善のアプローチではないようです。 12ファクターアプリガイドでは、構成ファイルをすべて削除し、構成セットアップに環境変数を使用することをお勧めします。 ...環境変数に設定を保存します。Env変数は、コードを変更せずにデプロイ間で簡単に変更できます。構成ファイルとは異なり、誤ってコードリポジトリにチェックインされる可能性はほとんどありません。また、カスタム構成ファイルやJavaシステムプロパティなどの他の構成メカニズムとは異なり、これらは言語およびOSに依存しない標準です。 それは本当にいいように思えますが、ソース変数にチェックインせずに、前述の環境変数をどこに保存しますか?そして、これらの変数をアプリに渡すためにどのツールを使用できますか?多数の設定オプションが存在する可能性があり、アプリを起動するたびに手動で入力するのは好ましくありません。したがって、それらはどこかの種類のファイルに保存する必要があります。したがって、このファイルはソース管理になり、元の場所に戻ります。 構成オプションを処理する一般的に受け入れられている方法はありますか。ソース管理にローカル構成を保存するリスクはありませんか?

2
JavaScriptのプロミスがプロミス以外の何かを返すようにするにはどうすればよいですか?
モジュールのメソッドの実装に関するクライアントからの仕様があります: // getGenres(): // Returns a promise. When it resolves, it returns an array. ジャンルの配列が与えられた場合、 ['comedy', 'drama', 'action'] 約束のあるスケルトンメソッドを次に示します。 MovieLibrary.getGenres = function() { var promise = new Promise(function(resolve, reject) { /* missing implementation */ }); return promise; }; ジャンルで見つかったデータを返すことを約束できますか?仕様の説明を達成するためのより良い方法はありますか?
38 javascript 

7
既知の欠陥の単体テストは必要ですか?
コードに既知の欠陥が含まれていますが、修正する必要がありますが、まだ修正されておらず、現在のリリースでは修正されず、近い将来修正されない可能性がある場合、テストスイート?単体テストを追加すると、(明らかに)失敗します。失敗したテストに慣れるのは悪い考えのようです。一方、既知の欠陥であり、既知の失敗事例がある場合、ある時点で修正されるべきであり、テストはすでに利用可能であるため、テストスイートに入れないようにするのは奇妙に思えます。
37 unit-testing  tdd 


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