ソフトウェア工学

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

3
[]演算子の代わりにポインター演算を介して配列要素にアクセスすることは悪いことですか?
私はCでプログラミングすることを学び始めたばかりで、ポインターと配列の理解を深めるために、ポインターをまったく作成せずに配列の要素を参照しようとしました: for(k1 = 0; k1 < ROW; k1++){ for(k2 = 0; k2 < COLUMN; k2++){ array[k1][k2] = k1*COLUMN + k2 + 1; printf("[%d][%d] = %d\n", k1, k2, *(array[k1] + k2)); } } コード全体がコンパイルされ、問題なく実行されます。 大きなソースコード内のすべての単一配列に対してポインターを作成する必要があることは、非常に非効率的であると思われます。 したがって、ポインタを使用して配列のアドレスを保存および取得するのではなく、上記のように、配列のアドレスを直接使用するのは悪いプログラミング習慣ですか?

2
行動のサブタイピングが決定できないのはなぜですか?
この分野でのリスコフの研究は、行動サブタイプに焦点を当てていました。この記事で説明した型システムの安全性に加えて、サブタイプは、一部の契約のスーパータイプによって保証されるすべての不変式を保存することも必要とします。このサブタイピングの定義は一般に決定できないため、型チェッカーでは検証できません。 From:http : //www.wikiwand.com/en/Subtyping#/Function_types

1
APIの維持とポートでのイディオムの使用
私はPythonからRustへの移植に取り組んでおり、RustでPythonほど自然に表現できないコードに遭遇しました。 これの1つのケースは、デフォルトのパラメーターを使用することです。 class Foo: def __init__(self, a="Hello"): self._a = a Rustでは、ビルダーを使用してこれを実装できます。 struct FooBuilder { a: &'static str, } struct Foo { _a: &'static str } impl FooBuilder { fn new() -> FooBuilder { FooBuilder { a: "Hello", } } fn change_a(self, new_a: &'static str) -> FooBuilder { FooBuilder { a: …

2
gitignoreを使用した継続的な展開
Gitで継続的な展開を行う場合、無視されたファイルをgitignoreでどのように処理しますか?これらのファイルはプライバシー上の理由で無視されます(つまり、GitHubなどの他のリモートリポジトリにプッシュされないようにします)が、無視されたファイルが継続的なデプロイメントリポジトリにプッシュされないため、アプリケーションは実行されませんソフトウェアが正しく機能するために必要です)。 人々は通常、これについてどのように対処しますか?この場合、Gitは無視されたファイルのため、継続的な展開の最適な候補ではありませんか?

2
ワークフロー、現在のタスクにないものの編集
通常、プログラムを作成するときは、明確なタスクが先にありますが、迷惑なものを見つけて、進行中にクリーンアップしたいと思います。 ここには3つのオプションがあります。 後で実行します(チケットを追加するのを忘れたり、時間を費やす必要がある場合があります) 今すぐ実行し、現在の作業と一緒にコミットします(不明) 今すぐ実行し、個別にコミットします(それを見つける必要があり、間違いを犯し、意図せずにオプション2に進む可能性があります) これはおそらくかなり基本的なことですが、svn / git / otherを使用してこれを回避する方法は何ですか?

2
Java 8 Streamインスタンスは常にclose() 'dすべきですか?
quothがJavadocを: ストリームにはBaseStream.close()メソッドがあり、AutoCloseableを実装していますが、ほとんどすべてのストリームインスタンスを実際に使用後に閉じる必要はありません。通常、ソースがIOチャネル(Files.lines(Path、Charset)によって返されるものなど)であるストリームのみを閉じる必要があります。ほとんどのストリームは、特別なリソース管理を必要としないコレクション、配列、または生成関数によって支援されます。(ストリームを閉じる必要がある場合、try-with-resourcesステートメントでリソースとして宣言できます。) 「ほぼすべて」と「一般に」はあいまいです-ライブラリを作成していて、そのストリームのユーザーからストリームのソースを抽象化している場合は、とにかく自分に質問する必要があります-「閉じる必要がありますこの?" 端末操作はを呼び出さないため、IOがサポートするストリームを閉じる必要がありますclose。そのため、事実上、ストリームの送信元を常に覚えておくか、常にストリームする必要がありますclose。 核となる選択肢は、メソッドからストリームを返さないか、ストリームパラメーターを受け入れないことです。これは、JDKチームの一部の人々によって反響されてきた感情です。Streamsの実用的な有用性を考えると、過度に制限されていることがわかります。 Streamsを閉じる際のベストプラクティスは何ですか?よく似たコミュニティの質問に通常積極的に参加しているJDKの人々から、これに対する答えをオンラインで探しましたが、関連するものは見つかりませんでした。
12 java  resources  java8 

5
最終的にデストラクタと概念的な違いは何ですか?
まず、C ++に「最終的に」コンストラクトがない理由をよく知っていますか?しかし、別の質問に関する長期にわたるコメントの議論は、別の質問を正当化するようです。 それを除けば問題から、finallyC#やJavaで基本的に一度だけ存在することができます(== 1)の範囲および単一のスコープあたりが(== n)を複数持つことができますC ++デストラクタ、私は、彼らは基本的に同じものだと思います。(技術的な違いがいくつかあります。) しかし、別のユーザーは次のように主張しました: ...私は、dtorは本質的に(リリースセマティクス)のツールであり、最終的には本質的に(コミットセマンティクス)のツールであると言っていました。理由がわからない場合は、finallyブロックで例外を互いの上にスローするのが正当である理由と、デストラクタが例外でない理由を検討してください。(ある意味、それはデータとコントロールの関係です。デストラクタはデータを解放するためのものであり、最終的にはコントロールを解放するためのものです。それらは異なります。C++がそれらを結び付けるのは残念です。) 誰かがこれを解決できますか?

1
GitHubプルリクエストでピアレビューを行う方法
BitbucketからGitHubに移行していますが、私たちが苦労しているのは、次のようにBitbucketで非常にスムーズに機能するピアコードレビューです。 著者がプルリクエストを開きました(GitHub:同じ) 著者は同僚をレビュアーとして追加しました(GitHub:?? 複数の譲受人とここで苦労しています) レビュアー: 緑のチェックマークが付いたPRを承認しました(GitHub:??) コメントを追加(GitHub:同じ) 軽量タスクを作成しました(GitHub:- [ ]PRの説明で構文が使用されている場合に似ていますが、タスクでは機能しないことが残念です) 一目で確認できるPRのリストがあり、レビューされていてマージしても問題なく、さらに注意が必要なものがあります(GitHub:??) 可能な限りサードパーティのコードレビューツールを避け、何らかの回避策を備えたバニラGitHubを使い続けたいと思います。

5
キャッシングを管理するためにクラス内のSRPに違反しないようにする方法は?
注:コードサンプルはc#で記述されていますが、それは問題ではありません。適切なものを見つけることができないため、c#をタグとして配置しました。これはコード構造についてです。 Clean Codeを読んで、より良いプログラマーになろうとしています。 私はしばしば、単一の責任原則(クラスと関数は1つのことだけを行うべきです)、特に関数に従うことに苦労しています。たぶん私の問題は、「一つのこと」が明確に定義されていないことですが、それでも... 例:データベースにFluffiesのリストがあります。Fluffyが何であるかは気にしません。クラスに綿毛を回復させたい。ただし、綿毛はいくつかのロジックに従って変化する可能性があります。いくつかのロジックに応じて、このクラスはキャッシュからデータを返すか、データベースから最新のデータを取得します。毛羽立ちを管理していると言えますが、それは一つのことです。簡単にするために、ロードされたデータが1時間有効であり、それを再ロードする必要があるとしましょう。 class FluffiesManager { private Fluffies m_Cache; private DateTime m_NextReload = DateTime.MinValue; // ... public Fluffies GetFluffies() { if (NeedsReload()) LoadFluffies(); return m_Cache; } private NeedsReload() { return (m_NextReload < DateTime.Now); } private void LoadFluffies() { GetFluffiesFromDb(); UpdateNextLoad(); } private void UpdateNextLoad() { m_NextReload = DatTime.Now …

1
サブ機能で動作するための機能ブランチからのGitブランチ
現在、次のような状況にあり、サブ機能ブランチに対して機能ブランチがブランチされています(同じ機能のバックエンドとフロントエンドの作業など)。 o | o development |\ | o feature-a | | | o | |\ | | o feature-a-sub | | | | | | | \ | o merged feature-a into feature-a-sub | / o feature-a-sub merged into development | | | o feature-a with future work on it …
12 git  branching 

3
C ++での非オプションポインターと非const参照
では他のC ++の機能、リファレンス引数のGoogleのC ++スタイルガイドでは、私は非const参照は使用してはならないことをお読みください。 参照によって渡されるすべてのパラメーターには、constというラベルを付ける必要があります。 引数として参照を使用する関数呼び出しを見ることは、Cプログラマーにとって完全に混乱することは明らかですが、CとC ++は今では異なる言語です。出力パラメーターが必要な場合、必要な出力パラメーターへのポインターを使用すると、関数本体全体がスキップされる可能性があり、関数の実装がより複雑になります(関数の循環的な複雑さと深さが正式に増加します)。 C ++コードをできるだけ簡単に理解/保守できるようにしたいので、コーディングスタイルガイドを読むことに興味があります。しかし、チームのベストプラクティスを適応させるには、スタイルガイド要素の背後にある理論的根拠を理解することが重要な要素だと思います。 非const参照は本当に悪いですか?それらを禁止するのはGoogle固有のものだけですか、それとも一般に受け入れられているルールですか?出力パラメーターをポインターとして実装するための余分な労力を正当化するものは何ですか?

2
通常、ユニットテストの属性にパブリックメソッドが必要なのはなぜですか?
最近、.NETアセンブリの保護されたメソッドに[TestInitialize]を追加することは考慮されていませんが、メソッドをパブリックにすると、ユニットテストランナー(この場合はResharper)によって呼び出されました。過去に何度かテスト方法でこれに気づきました。 技術的に言えば、パブリックメソッドと同様にプライベートメソッドについても簡単に反映できます。実際のところ、リフレクションはプライベートメソッドの単体テストに使用される方法です。 では、なぜユニットテストメソッドをすべて公開する必要があるのですか?

3
フラックスパターンを理解する
私は実際にフラックスのパターンを研究していますが、ストアに関して理解できないことがあります。 彼らは正確に何ですか? 私は多くの記事を読みましたが、それはドメインに関係しているようです。 これは、API呼び出しまたはバックエンド呼び出しに関連する「抽象的な」部分であることを意味しますか? 私にはあまりはっきりしていません。 編集:それは角度の工場と同じものでしたか?リモートデータの取得、ビジネスタスクの作成、アプリの状態の保存(現在のユーザーの接続など)

2
JREライブラリーのクラスは、外部/非JREアセンブリーからの監視可能および/または非同期読み取りをサポートしていますか?
他のプラットフォームのネイティブフロントエンドがオブジェクトを観察し、Observableパターンを利用できるように、クロスプラットフォームライブラリ(JREなど)を実装してオブジェクト参照でスレッドセーフな方法で操作するにはどうすればよいですか? 少しの背景-ほとんどのフロントエンドフレームワークで使用されるデータバインディングの概念があります。C#およびJavaでは、これは、複数のコントロールまたは「オブザーバー」がサブスクライブする可能性がある変更が発生したときにイベントを発生させる機能をクラスに与えるObservableトレイトに関連しています。このように、オブザーバーはリソースをポーリング/読み取りし続ける必要がなく、更新を比較します。 時間の経過とともにデータのリストを変更する分析エンジンで作業したいと思います。分析の実行中に、フロントエンドがこれらのリストを監視できるようになると便利です。これには、フロントエンドが、クロスプラットフォームのライブラリで書かれたオブジェクトを分析エンジンに渡し、そのオブジェクトに対してスレッドセーフな読み取りを行えることが必要だと思われます。または、ライブラリが可観測性の契約を満たします。 古いUnixスタイルのCLIエンジンでこれを処理する方法は、stdin / stdout / stderrを使用し、定期的にエンジンに更新を送信させることです。これには、標準のオーバーヘッドと、可能な場合は避けたいテキスト解析が必要です。

2
複数のデータベースタイプをサポートするために、抽象データベースインターフェイスはどのように作成されますか?
MySQL、SQLLite、MSSQLなどのいくつかのタイプのデータベースとインターフェイスできる、より大きなアプリケーションで抽象クラスをどのように設計し始めますか? このデザインパターンは何と呼ばれ、どこで正確に始まりますか? 次のメソッドを持つクラスを書く必要があるとしましょう public class Database { public DatabaseType databaseType; public Database (DatabaseType databaseType){ this.databaseType = databaseType; } public void SaveToDatabase(){ // Save some data to the db } public void ReadFromDatabase(){ // Read some data from db } } //Application public class Foo { public Database db = new …
12 c#  database 

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