ソフトウェア工学

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

16
ジュニア開発者にはコードレビューが必要ですか?
私は2つの会社で働いていましたが、コードレビューに関してはそれぞれが異なる方法論を持っていました。 最初の企業では、チームリーダーがコードレビューを実施し、すべてのモジュールの完了後に必要になりました。 ただし、2番目の会社では、チームリーダーはコードレビューを行う必要がなく、機能と設計の問題をチェックしました。 だから私は混乱しています。コードレビュープロセスは本当に必要ですか?もしそうなら、なぜですか?そうでない場合は、なぜですか?

24
どのように仕事に集中していますか?[閉まっている]
時々、仕事のためにやらなければならないことが面白くて魅力的です。時々、そうではありません。時々、そうではありません。 あなたの脳がやるべきこと以外のことをやるとき、特にインターネットと興味深いSlackの無限の機会が手に入れるとき、それらの鈍いストレッチに対処するための特定の戦略またはトリックがありますか?

7
すべての言語は基本的に同じですか?
最近、私は知らなかった言語で書かれた小さなプログラムの設計を理解しなければなりませんでした(知っていなければABAP)。難しすぎずに理解できました。 新しい言語を習得することは全く異なる球技であることを認識していますが、いくつかの言語を知っている場合は、任意の言語のコード(特に複雑ではない生産標準コード)の意図を純粋に理解することは簡単です(できれば1つの手続き型/ OOと1つの機能)。 これは一般的に本当ですか?すべてのプログラミング言語は、ループ、条件ステートメント、関数間のメッセージ受け渡しなどの類似の構成要素で構成されていますか?典型的なJava / Ruby / Haskellプログラマーが理解できない非難解な言語はありますか?すべての言語には共通の起源がありますか?


3
Cスタイル言語の論理NOT演算子が「~~」ではなく「!」なのはなぜですか?
二項演算子には、ビット演算子と論理演算子の両方があります。 & bitwise AND | bitwise OR && logical AND || logical OR NOT(単項演算子)の動作は異なります。ビットごとに〜があります!論理的に。 NOTはANDおよびORとは反対の単項演算であると認識していますが、デザイナーがここでシングルがビット単位であり、ダブルが論理的であるという原則から逸脱し、代わりに異なるキャラクターを選んだ理由を考えることはできません。常にオペランド値を返すダブルビット演算のように、間違って読むことができると思います。しかし、それは私にとって本当の問題ではないようです。 行方不明の理由はありますか?
39 java  c#  c++  c 

2
マイクロサービスアーキテクチャで共有の概念をどのように処理しますか?
開発中のアプリケーションのアーキテクチャパターンを調査しており、マイクロサービスアプローチが適切な選択のように思えますが、サービス間の相互作用を処理する方法はわかりません。 このアプリケーションは主に、ユーザー、ユーザーが所有するプロファイル、写真、および写真内の1つから多数のプロファイルを表すタグを扱います。ユーザーがアップロードした写真を返す方法、特定のタグ付きプロファイルを含む写真を返す方法などが考えられます。 これはマイクロサービスベースのアーキテクチャを設計する最初の試みであり、モノリシックなドメインモデルに触発された歴史から来ています。その世界では、コントローラーはこれらのドメインオブジェクトをつなぎ合わせますが、これがマイクロサービスの方法でどのように機能するかについて頭を包むのに苦労しています。

4
UMLクラス図の表記法:関連付け、集約、構成の違い
UMLクラス図の表記法のいくつかについて混乱しています。 協会が何を意味するのか、私はよく知っています。2つのクラスのインスタンス間の関係(1つのクラスのインスタンスが作業を実行するために2番目のクラスのインスタンスを知る必要がある場合)は、関連関係です。関連とは、クラスAがクラスBのインスタンスへの参照(フィールド)を持っていることを意味することがよくあります。 しかし、集計と構成の矢印の意味を理解するのに苦労しています。私の混乱の一部は、これらの表記法の異なる定義に遭遇したことが原因でした。 集計表記法の2つの定義: 定義1: 2つのクラス間の集約表記は、クラスA のインスタンスがクラスBのインスタンスのコレクション(リスト、配列など)を保持する場合に適しています。 定義2:クラスAのインスタンスがクラスBのインスタンスへの参照を保持し、BインスタンスがAインスタンスのライフサイクルに依存している場合、2つのクラス間の集約リンクが適しています。意味:クラスAのインスタンスが削除されると、クラスBのインスタンスも削除されます。クラスBのインスタンスは、クラスAのインスタンスに完全に含まれます。クラスB(通常のAssociation)。 構成表記の意味と、それが集約表記とどのように異なるかについては、わかりません。 定義を明確にして、理解してください。具体的な例を歓迎します。

7
なぜ「オブジェクト参照がオブジェクトのインスタンスに設定されていない」とどのオブジェクトがわからないのですか?
私たちはシステムを立ち上げており、時々NullReferenceExceptionメッセージで有名な例外を受け取りますObject reference not set to an instance of an object。 しかし、ほぼ20個のオブジェクトがあるメソッドでは、オブジェクトがnullであると言うログを持つことは、まったく役に立ちません。あなたがセミナーの警備員であるとき、100人の出席者のうちの1人がテロリストであるとあなたに言うようなものです。それは本当にあなたにはまったく役に立ちません。どの男が脅迫的な男であるかを検出したい場合は、より多くの情報を取得する必要があります。 同様に、バグを削除する場合は、どのオブジェクトがnullであるかを知る必要があります。 今、何かが私の心を数ヶ月の間取りつづけています、そしてそれは: なぜ.NETから名前、または少なくともオブジェクト参照のタイプが提供されないのですか?。リフレクションまたは他のソースからタイプを理解できませんか? また、どのオブジェクトがnullであるかを理解するためのベストプラクティスは何ですか?これらのコンテキスト内のオブジェクトのNULL可能性を常に手動でテストし、結果をログに記録する必要がありますか?もっと良い方法はありますか? 更新: 例外The system cannot find the file specifiedは同じ性質を持っています。プロセスにアタッチしてデバッグするまで、どのファイルを見つけることができません。これらのタイプの例外はよりインテリジェントになる可能性があると思います。.NETがc:\temp.txt doesn't exist.その一般的なメッセージの代わりに私たちに伝えることができたらもっと良いと思いませんか?開発者として、私は賛成票を投じます。

9
コードの「建設的な」批判はどの時点で役に立たなくなりますか?
私は最近、ジュニア開発者として始めました。チームで最も経験の浅い人の1人であると同時に、私は女性でもあります。男性が支配的な環境で働くことには、あらゆる種類の課題が伴います。私は自分の仕事に対して不当な教訓的な批判をしすぎているように感じるので、最近問題を抱えています。最近の出来事の例を挙げましょう。 チームリーダーは忙しくて、私が作ったいくつかのブランチをプッシュすることができなかったため、週末まで彼らに連絡しませんでした。私は自分のメールをチェックしましたが、実際には作業を行うつもりはありませんでした。変数名に基づいて2つのブランチが拒否され、エラーメッセージがわかりやすくなり、いくつかの値が構成ファイルに移動しました。 これに基づいてブランチを拒否することは有用ではないと思います。週末に多くの人が働いていましたが、私が働くとは言いませんでした。事実上、変更を行って再送信する時間がなかったため、一部の人はおそらくブロックされました。私たちは非常に時間に敏感なプロジェクトに取り組んでおり、クライアントにとって透過的なものに基づいてコードを完全に拒否することは役に立たないと思われます。私は間違っているかもしれませんが、時間があればパッチタイプのコミットでこの種のことを処理する必要があるようです。 今、私はいくつかの環境ではこれが標準であることがわかります。しかし、批判は平等に分配されているようには見えず、それが私の次の問題につながるものです。これらの問題のほとんどの原因は、私が誰か他の人が書いたコードベースにいて、最小限の侵入を試みているという事実によるものでした。ファイルの他の場所で使用されている変数名を模倣していました。私がこれを述べたとき、私は「他人を真似しないで、正しいことをしてください」と率直に言われました。これはおそらく私が言われたかもしれない最も有用なものです。すでにチェックインされているコードが受け入れられない場合、何が正しいか、何が間違っているかをどのように伝えるのですか?混乱の原因が基礎となるコードに由来するものであった場合、私はそうは思わない 私はこの状況で本当に選び抜かれ、イライラしていると感じています。期待される標準に従うことについてはずっと良くなったし、たとえば、以前は行方不明だったエラーチェックを追加するためにコードの一部をリファクタリングするとき、私はそうしなかったと言われただけでイライラするエラーを十分に冗長にします(これに基づいてブランチは拒否されました)。そもそも追加したことがない場合はどうなりますか?それがとても間違っていた場合、どのようにして最初にコードに入りましたか?だからこそ、私はあまりにもひたむきだと感じています。私は常にこの既存の問題のあるコードにぶつかって、模倣したりリファクタリングしたりしています。私がそれを模倣するとき、それは「間違っている」。そして、それをリファクタリングするなら、私は十分なことをしないことを恐れる(そして、私がずっと行くなら、バグを導入するなど)。繰り返しますが、これがこのような問題である場合、コードがコードベースにどのように侵入するかわかりませんが、 とにかく、どうすればこれに対処できますか?私は女性だとトップで言ったことを覚えておいてください、そして、これらの人は他の人のコードをレビューしているとき、通常は礼儀について心配する必要はないと確信しています、そしてそれは私に生産性を低下させています。私はそれについて上司に話したら、彼は私が環境などを扱うことができないと思うだろうと心配しています。

6
コントローラーレイヤーに存在できるビジネスロジックの量。
アプリケーションのコントローラーコードで表されるビジネスロジックがある場合があります。これは通常、モデルから呼び出すメソッドやそれらを渡す引数を区別するロジックです。 これの別の例は、ビジネスルールのセットに従って、モデルから返されたデータをフォーマットまたはサニタイズするために機能するコントローラーに存在するユーティリティ関数のセットです。 これは機能しますが、災害といちゃつくかどうか疑問に思っています。コントローラーとモデル間で共有されるビジネスロジックがある場合、2つのレイヤーは分離できなくなり、コードを継承する人は、ビジネスロジック関連のコードの場所の不均一性によって混乱する可能性があります。 私の質問は、コントローラーでどのくらいのビジネスロジックを許可する必要があるか、また、ある場合、どのような状況ですか?

6
開発者はマイクロソフト製品の割引を受けることができますか?[閉まっている]
.NETプラットフォームに専念して自営業を開始する場合は、開発環境とテスト専用のWindows 7、Windows Server 2008、Visual Studio 2010のライセンスと、いくつかのライセンスが必要です。実稼働環境(Windows Server 2008 Web)用であり、新しいバージョンが利用可能になったときにそのアップグレードに追加されます。これはかなりの金額になります。 このような場合にマイクロソフトから入手できるバンドル割引はありますか?そして、その割引を受けることができるための要件は何ですか?

8
データベース内のデータを削除する必要がありますか?
私はデータベースが初めてで、基本的な概念を理解しようとしています。データベースのデータを削除する方法を学びました。しかし、私の友人の一人が、データベースのデータを削除してはいけないと言った。むしろ、不要になったら、単にマークするか、「使用していない」というフラグを立てることをお勧めします。 本当?もしそうなら、IBMのような大企業は100年以上にわたってどのようにデータを処理しますか?

6
競合する関数パラメーターを処理するパターンはありますか?
指定された開始日と終了日に基づいて、合計金額を月額に分割するAPI関数があります。 // JavaScript function convertToMonths(timePeriod) { // ... returns the given time period converted to months } function getPaymentBreakdown(total, startDate, endDate) { const numMonths = convertToMonths(endDate - startDate); return { numMonths, monthlyPayment: total / numMonths, }; } 最近、このAPIの消費者は、1)終了日ではなく月数を提供するか、2)毎月の支払いを提供して終了日を計算することにより、他の方法で日付範囲を指定したいと考えました。これに応じて、APIチームは機能を次のように変更しました。 // JavaScript function addMonths(date, numMonths) { // ... returns a new date …
38 api-design 

3
統合テストは設計をどのように批判しますか?
統合テストに関するJB Rainsbergerのブログ投稿を読んでいますが、どのように統合テストが私たちの設計により厳しいのでしょうか? より統合されたテストを作成します。これはより大きく、マイクロテストのように設計を厳しく批判しません。


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