ソフトウェア工学

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

7
不変性を回避する
私はオブジェクト指向プログラミングに慣れていないので、把握に時間がかかっている概念の1つは不変性です。昨夜電球が消えたと思うが、確認したい: 不変オブジェクトを変更できないというステートメントに出くわすと、たとえば次のようなことができるため困惑します。 NSString *myName = @"Bob"; myName = @"Mike"; そこで、不変型NSStringのmyNameを変更しました。私の問題は、「オブジェクト」という言葉がメモリ内の物理オブジェクト、または抽象化「myName」を指すことがあるということです。前者の定義は、不変性の概念に適用されます。 変数については、不変性のより明確な(私にとって)定義は、不変オブジェクトの値は、メモリ内の位置、つまり参照(ポインタとも呼ばれる)を変更することによってのみ変更できるということです。 これは正しいですか、それとも私はまだ森の中で迷っていますか?

5
TDD、新しいテストと古いテストはまだ実装されていません
私はテスト駆動開発を実験していますが、次のような状況に陥ることが多いことがわかりました。 一部の機能Xのテストを作成します。これらのテストは失敗します。 Xを実装しようとしているときに、コードの下位層に機能Yを実装する必要があることがわかりました。そう... Yのテストを作成します。XとYの両方のテストが失敗します。 一度に異なるコードレイヤーで4つの機能を同時に使用すると、実際に実行していることに集中できなくなりました(同時に失敗するテストが多すぎます)。 テストの作成を開始する前であっても、タスクの計画にもっと力を入れることでこれを解決できると思います。しかし、いくつかのケースでは、例えば、下層のAPIをあまりよく知らなかったので、もっと深くする必要があることを知りませんでした。 そのような場合はどうすればよいですか?TDDには推​​奨事項がありますか?

8
コードに自分の名前や会社名を書く傾向がありますか?
私は自宅や職場でさまざまなプロジェクトに取り組んできましたが、長年にわたって、ほとんどすべてのAJAXベースのWebサイトで使用する2つの主要なAPIを開発してきました。これらの両方をDLLにコンパイルし、名前空間Connell.DatabaseおよびConnell.Jsonを呼び出しました。 私の上司は最近、会社のプロジェクトのソフトウェアドキュメントでこれらの名前空間を見て、コードで自分の名前を使うべきではないと言いました。(しかし、それは私のコードです!) 心に留めておくべきことの1つは、私たちはソフトウェア会社ではないということです。私たちはITサポート会社であり、私はここで唯一のフルタイムソフトウェア開発者です。そのため、会社でソフトウェアを作成する方法についての手順は実際にはありません。 もう一つ心に留めておくべきことは、いつかこれらのDLLをオープンソースプロジェクトとしてリリースするつもりだということです。 他の開発者は、社内で名前空間をどのようにグループ化していますか?個人用と仕事用のプロジェクトで同じクラスライブラリを使用している人はいますか? また、これは逆に機能しますか?完全に職場でクラスライブラリを作成する場合、そのコードの所有者は誰ですか?ライブラリを最初から最後まで見てきた場合、それを設計し、プログラムしました。それを自宅で別のプロジェクトに使用できますか? おかげで、 更新 私はこの問題について上司に話しましたが、彼はそれらが私のオブジェクトであり、彼が私にそれらをオープンソース化してもいいことに同意します。この会話の前に、とにかくオブジェクトの変更を開始しましたが、実際には非常に生産的であり、コードは以前よりもこの特定のプロジェクトに非常に適合しています。 しかし、非常に興味深い議論に関係したすべての人に感謝します。このテキストがすべて無駄にならず、誰かがそれから学ぶことを願っています。確かにした。 乾杯、

4
モデルに「FullName」や「FormattedPhoneNumber」などのゲッターを配置するのは「パターン臭」ですか?
私はASP.NET MVCアプリに取り組んでおり、便利で便利なゲッターをモデル/エンティティクラスに入れる習慣を身につけています。 例えば: public class Member { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string PhoneNumber { get; set; } public string FullName { get { return FirstName + " " + LastName; } } …

9
デザインパターン:それらを学習する必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 だから、2つの質問を連続して尋ねるのは奇妙ですが、それらはあまり関連しておらず、私はそれらを結合したくありませんでしたが、私は質問をスパムしません、私は約束します! とにかく、私は最近の大学卒業生であり、私の教育はデザインパターンにのみ触れました...私たちはいくつかの簡単なものを実装し、もっと複雑なものがあるという事実に触れ、GoF本に目を向けるように指示されましたもっと学びたかった。私の質問は、GoFの本のパターンを学ぶ価値があるかどうかです。私にとって、問題を古典的なパターンに当てはめようとすることは常に直感に反するように思えますが、明らかに本とパターンは理由があることで有名です。彼らは私がそれらを学ぶべきであるほど十分に現れますか? 再度、感謝します!

8
厳格か実用的か?
私は、ソフトウェアの開発が(とりわけ)自分自身に常に質問するプロセスであることを認識し始めています。コードの品質、懸念の分離、依存関係の最小化に関する質問... しかし、主な質問は、精神病院に行かずにどこまで行けるかということです。 私は新しい仕事に応募しています。昨日、将来の雇用主と一緒にプログラミングの能力をテストしたいと考えていました。演習の1つは、このコードの機能を説明することでした。私は、彼らが開発するアプリケーション(vb.netのwinforms)のコードをいくつか試しました(病院の管理アプリケーションです)。これは、彼らが物事にどのようにアプローチするかを実際に見る機会を与えてくれました。 いくつかの例: どこかで見ました:[ここにサブルーチンの名前を挿入]を呼び出します->私は打たれました:それはVB6からのものではありませんか? それらには、ado.netを使用する個別のデータレイヤーがありますが、調べなければならない1つのメソッドは、呼び出し元レイヤーにデータセットを返します。そのため、データ層を分離するかどうかに関係なく、アプリケーションはado.netに関連付けられます(別のデータアクセスアプローチに切り替えない場合は問題になりません)。 そのデータセットは現状のままで読み取られるため、データ中心のアプローチです(もちろん、「Patient」や「LabAnalysisRequest」などのクラスに含めることができるロジック/動作を議論することができます。 また、文字列連結によるsqlクエリの構築を見たことがあると思います。 ストアドプロシージャを使用します(私にとって、これはロジックの分散です) ビュー/コントローラーについての言及はありません:それはすべてフォーム駆動です 私が見た最もいことは: TestEnvironment.IsTestingの場合 someVar = [ハードコーディングされた値] そうしないと someVar = [動的に取得した値] 終了する場合 [ここの関数の残り] それはすべて、私が学校で学んだこととはまったく異なります:(永続性にとらわれない)ドメイン層、永続化層、プレゼンテーション層、ユニットテスト、... だから私は私の質問を言い換えます:どのように基本的または独断的である必要がありますか?プログラマーはどの程度まで自分の原則に固執するべきでしょうか、それとも仕事をするコードを書くべきでしょうか?
13 culture 

8
複合AND / OR ifステートメントのスタイル設定
読みやすくするために、複雑な複合AND / OR ifステートメントをどのようにスタイルしますか?どのようにインデントし、改行をどこに配置しますか?私の特定の状況は次のようなものです。すべてを1行に分割するよりも間違いなく優れていますが、それでも面倒です。 if ( ( x == y && a != b && p.isGood() && ( i + u == b || q >= a ) ) || k.isSomething() || m > n ) { doSomething(); }

4
HTTPSがある場合にRESTサービスセキュリティが必要な理由
この素晴らしい記事http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/を参照してください。これは、WebサービスのAmazonのようなセキュリティについて述べています。ただし、既にHTTPSを使用している場合、なぜ必要なのかという質問がチームにありました。私は答えることができませんでした。実際のところ、彼らは正しいかもしれませんが、ガットはそうではないと教えてくれます。 RESTサービスを提供するときにHTTPSが機能しない場所もありますか?サードパーティのウェブサイトが好きですか? パブリックインターウェブ経由でWebサービスをセキュリティで保護した経験がある人は、あなたの経験に光を当ててください。 前もって感謝します。 編集:明確にするために、私はユーザー認証ではなく、クライアント認証について話します。ユーザー認証は、HTTPS + RESTを介したプレーンテキストであると想定できます。 私の心配は、HTTPSを介してクライアントエンドポイントがクライアントアプリケーションなしでWebサービスを使用できるにもかかわらず、すべてがプレーンテキストであるため、クライアントがアクセスせずに誰でもWebサービスを使用できることです。
13 rest 

9
プロジェクトでどのようにスプリントに名前を付けますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 一部のスクラムソフトウェア管理ツールには、スプリントに明示的に名前を付けるためのこのオプションがあります。 スプリントに名前を付ける好ましい方法はありますか、それとも1、2、3、...などの単純なスキームを使用しますか?
13 scrum  sprint 

6
「RAIIイディオムを説明する」は、C ++スクリーニングの良い質問ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 一緒に仕事をしている会社から、候補者に電話をかけて候補者に電話をかけるときに恥ずかしい思いをさせないように、電話候補者のスクリーニングを依頼されました。 かなりの数の人がC ++開発者の役割に配置されていたことがわかります。私はC ++にあまり時間を費やしていませんが、この言語で些細なことや些細でないことをいくつか行っています。「RAIIのイディオムを説明する」は、ほとんどの深刻なC ++開発者が半分眠っている間に答えることができる素晴らしいソフトボールの質問であり、経験に関するより興味深い質問に進むことができると考えました。しかし、頭字語を「Resource Acquisition is Initialization」に拡張しても、10年以上のC ++の経験がある人はこの用語を認識していません。ある候補者は、Windows開発にこの手法を適用することは必ずしも実用的ではないと感じたとまで言いましたが、これは奇妙な感情だと思いましたが、その考えを裏付けていると思われる例がいくつかありました。)。 私の能力を判断するのに十分なほどよく知っているC ++開発者の2人でさえ、この用語を認識していないと言っていましたが、テクニックの要約を読んで、これらのことをあなたがしなければならないことだと考えていました。」Stroustrupの本の第2版の用語を覚えていますが、当時は完全な影響はありませんでした。 それで、「RAIIのイディオムを私に説明できますか?」公正なスクリーニングの質問ですか?すべての有能なC ++開発者がそれを理解することを期待するのは妥当ですか?この用語は私が考えるよりも難解ですか?候補者がその用語を知らないと仮定すると、RAIIを機能させるプラクティスを少なくとも内部化したかどうかを知るのに役立つフォローアップの質問はありますか?候補者に回答の自由度を与え、候補者がC ++開発の理解を実証するのに役立つ代替の「ウィーダー」質問がありますか? 編集して追加する:明確にするために、私は人々が流行語や頭字語を知らないために人々を失格にするようなインタビュアーではありません。ただし、経験豊富なC ++プログラマがリソース管理の優れたプラクティスを内部化したことを期待するのは合理的だと思います。また、設計や問題解決などについてのより興味深い質問に進む前に、候補者が専門知識を主張する技術に関するいくつかの「基本」を理解していることを検証することも重要だと思います。 「ハード」な質問をする前に、短い電話スクリーニングでの使用に適した自由回答形式の質問をして、C ++での優れたリソース管理の実践に関する候補者の基本的な理解を判断できます。
13 c++  interview 

8
未払いのITインターンシップの赤旗[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は次の質問を読みます:経験を積むために夏のインターンシップを探している初年度のCS学生のヒント? しかし、インターンシップを取得および/または探す方法ではなく、無料の労働者を探している企業をフィルタリングして、彼らのウェブサイトVS有給小切手を提供しないかもしれないが、メンターシップとスキルを提供する方法を懸念しています。 私は大学1年生のいとこがいて、ソフトウェア開発のインターンシップを探していますが、この時点で、彼女はIT関連のインターンシップを必死に探しています。 大きなソフトウェア名とエリートの小さなソフトウェアショップに加えて、ITメンテナンスを行っている非IT企業(大または小)の良いインターンシップと悪いメンテナンスをどのように認識していますか?実務経験がない場合、大学生がリッピングを防止するためにどのような質問をするべきですか オファーを受け入れる前に見つけることができる危険信号はありますか?
13 internship 

7
圧倒的なコードを管理可能なチャンクに分解する最良の方法は?
特定のレベルの複雑さに達すると、大規模なプロジェクトに絶えず圧倒されます。プロジェクトの特定のポイントに達すると、進行が遅くなり、絶えずステップをたどり、あらゆる種類の混乱を整理します。 私のこの弱さのために、リファクタリングが本当に上手になりました。そして、私は常にオブジェクトをより小さく管理しやすいものに分解しようとしています。この弱点のために、物事を適切に設計することにあまりにも注意を払うことになりました。 問題を小さな問題に分解できれば、スムーズに達成できると思います。頭に浮かぶ戦略の1つは、テスト駆動開発です。他に何ができますか?

6
1人のプログラマが自分でできることはどれくらいですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 ソフトウェア製品がチーム全体で開発を行う場合、1人のプログラマが自分でどれだけ達成できるでしょうか?言い換えれば、一人でPhotoshopやMS wordなどを書くことができますか?そして、できなかった場合、Web開発は1人のプログラマーが多くのことを行える領域になりますか?

6
ソフトウェア「Center of Excellence」(CoE)の特徴は何ですか?
最近、私の部署の新しいディレクターがやってきて、私たちが「優秀なセンター」になることを願っています。彼は実際にプログラミングのバックグラウンドを持っている私の最初のボスであるため、これについて何らかの説明があると期待していました。しかし、それは残されました。 過去数日間にわたってこれを反省したように、CoEが実際に製品を提供することで「効果的」であることを超えて何を意味するのかについて空虚になります。私が苦労している主なアイテムは次のとおりです。 これは、管理タイプによって投げかけられた単なる用語ですか? ソフトウェア開発者とテスターのグループが優れているのはどのような性質ですか? この文脈で卓越性をどのように評価しますか?

3
.NETデータ層を構築するためのMicrosoftの現在のベストプラクティスは?そして現実?
私が作業している開発チームはすぐに.NET 4.0に移行しますが、使用するデータアクセスクラスライブラリは、引き続きADO.NETの「クラシック」、つまりSqlDataReader、DataTableなどを使用します。一方、Microsoftのように思われ、おそらく世界の他の地域ではEntity FrameworkとWCF Data Servicesが前進しています。MSDNで、マイクロソフトがベストプラクティスと見なしているデータアクセステクノロジーを示すものは何も見つかりませんでした。 マイクロソフトには好みがありますか?現在、ほとんどの人はどのデータアクセスを使用していますか?ADO.NETクラシックにとどまり、Entity Frameworkに移行しない正当な理由はありますか?

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