ソフトウェア工学

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

4
2つのクラス間の多対多の関係を表す良い方法は何ですか?
AとBの2つのオブジェクトタイプがあるとします。これらのオブジェクト間の関係は多対多ですが、どちらも他方の所有者ではありません。 AインスタンスとBインスタンスの両方が接続を認識する必要があります。片道だけではありません。 だから、これを行うことができます: class A { ... private: std::vector<B *> Bs; } class B { private: std::vector<A *> As; } 私の質問は次のとおりです。接続を作成および破棄する関数をどこに配置すればよいですか。 A :: Attach(B)である必要があります。これにより、A :: BsおよびB :: Asベクトルが更新されますか? または、B :: Attach(A)である必要があります。 それらのどちらも正しくないと感じています。コードの操作をやめて、1週間後に戻ってきた場合、A.Attach(B)とB.Attach(A)のどちらを実行するべきかを思い出すことができないと確信しています。 おそらくそれはこのような関数であるべきです: CreateConnection(A, B); ただし、グローバル関数を作成することは、クラスAとBのみを操作するための関数であることから、望ましくないように見えます。 別の質問:この問題/要件に頻繁に遭遇した場合、どうにかして一般的な解決策を作成できますか?おそらく、このタイプの関係を共有するクラスから派生したり、クラス内で使用できるTwoWayConnectionクラスですか? この状況に対処するための良い方法は何ですか... 1対多の「CがDを所有する」状況をうまく処理する方法を私は知っていますが、これはトリッキーです。 編集:より明確にするために、この質問には所有権の問題は含まれていません。AとBの両方が他のオブジェクトZによって所有されており、Zはすべての所有権の問題を処理します。AとBの間の多対多のリンクを作成/削除する方法にのみ興味があります。
10 c++  c++11 

4
応答を処理するためのデザインパターン
ほとんどの場合、特定の関数呼び出しの応答を処理するコードを書いているとき、次のコード構造が得られます。 例:これはログインシステムの認証を処理する関数です class Authentication{ function login(){ //This function is called from my Controller $result=$this->authenticate($username,$password); if($result=='wrong password'){ //increase the login trials counter //send mail to admin //store visitor ip }else if($result=='wrong username'){ //increase the login trials counter //do other stuff }else if($result=='login trials exceeded') //do some stuff }else if($result=='banned ip'){ //do …

7
コーディングの機能的なスタイルをチームに紹介するにはどうすればよいですか?
私のグループのほとんどの人が、関数型プログラミングをほとんどまたはまったく理解していないオブジェクト指向プログラミングのバックグラウンドを持っている状況にあります。クロージャーのような基本的なことすらありません。 それらを関数型コーディングスタイルに導入する良い方法とは何かについて何か提案はありますか?私たちが行う多くのコーディングは、特定のケースに対して機能的な方法を実行する場合、短縮することができます。 機能とコーディングのパラダイムについては、すでにいくつかのプレゼンテーションを行っています。残念ながら、Haskell(基本的にレガシーコードはC、C ++、Java)のような適切な関数型プログラミング言語を使用していないため、これらを使って何でもする必要があります。

9
新しいプログラマーは、熟練するまで単一のテクノロジーに集中すべきですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 わかりました、私はしばらくの間プログラムする方法を仲間に教えてきました。彼は非常に速い学習者であり、これまでのところプログラミングは非常に得意です。しかし、彼には私が修正しようとしている「問題」が1つあります。 彼は飛び込んで、基本の一部を学ぶことなく高レベルのプログラミングを始めます(本格的なWebアプリケーションを作成しましたが、ページネーションやセッション管理についてはまだ知りません)。 しかし、これは問題ではありません。彼は新しいテクノロジー(Node.js、MongoDB、EC2など)に飛び乗り続けています。MongoDBの基本を学ぶためにたくさんの時間を費やす前に(そしておそらく何か新しいものに移行する前に)、選択したRDMS(MySQL)について毎日使用するため、彼はいくつかの基本的なRDMS(MySQL)を学ぶべきだと彼に伝えようとしました。 私はここで間違っているのですか、それとも彼は一度に1つのことに集中して、それを本当に上手にしようとするべきですか?

4
現在、ソフトウェアエンジニアリングのための最新の標準化された適性テストはありますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 バックグラウンド 私はソフトウェアエンジニアとして働いており、来年かそこらの新しい契約を模索している最中です。私の検索では、本日以前に質問したこのよくある質問に示されているように、いくつかの不条理な技術面接に耐えています。 私が尋ねられた質問がほとんどいつもばかげているわけではなかったとしても、それにもかかわらず、さまざまな契約の機会のために何度もそれらに答えるのはうんざりするでしょう。 そのため、実際にソフトウェアの専門家が受けられる標準化された試験を受けることで、不合理な技術面接の質問(つまり、オタクのいじめ)の代わりに面接担当者が参照できる共通のスコアカードが提供されると考えました。 質問 働く専門家が受験できる標準化されたソフトウェアエンジニアリング適性テスト(SEAT ??)はありますか? そこにそのような試験がない場合、どの質問またはトピックをカバーする必要がありますか? 追加の考え 質問やトピックを提案する場合は、標準的な適性テストのポイントとなるため、現代の開発慣行や労働力の現実的なニーズに関連する質問やトピックに焦点を当てることに留意してください。言い換えれば、道化師横断の質問はありません。

3
スクラム:プロダクトオーナーにタスクがある場合はどうなりますか?
私はスクラムのいくつかの側面(2週間のタイムボクシング)を取り上げたチームと作業を始めたばかりです(現在、チームはすべての見積もりまたはスプリントのポイント数に同意していませんが、これを変更します製品の所有者は、ある程度の開発経験を持つ技術リソース(科学者)でもあります。 製品所有者のタスク(主に研究が関係する)をチームのタスク(いくつかは研究といくつかの開発である)と混合するのが適切ですか。
10 scrum 

1
グラフィックプログラマーは、イメージを変更しない頂点のレンダリングをどのように処理しますか?
したがって、タイトルは少し厄介です。背景を説明してから、質問をします。 背景:私はWeb GISアプリケーション開発者として働いていますが、暇なときに地図のレンダリングを試したり、データ交換フォーマットを改善したりしています。私は2D空間でのみ作業します。 私が遭遇した興味深い問題の1つは、小さなスケールでポリゴンをレンダリングしている(ズームアウトした)ときに、頂点の多くが冗長になることです。極端なケースは、1つのピクセルのみを占める500,000の頂点を持つポリゴンがある場合です。このデータをブラウザーに送信する場合は、これらの頂点の〜499,999を省略しても意味があります。これを実現する1つの方法は、サーバーで画像をレンダリングし、それをPNGとして送信することです。ただし、インタラクティブにできるように、データをブラウザに送信してSVG(またはキャンバス、またはwebgl)でレンダリングできるようにする場合もあります。 問題:最新の地理データセットを使用すると、SVGのレンダリング機能を非常に簡単にオーバーロードできることがわかります。これらの制限に対処するために、特定の縮尺とマップ範囲(および必要に応じて、既知のマップピクセルの幅と高さ)のデータセットを視覚的にロスレスで削減する方法を理解しようとしています。 Douglas-Peuckerアルゴリズムを使用しただけでデータサイズが大幅に削減され、ポリゴンを1ピクセル以内に収めることができたと思います。残念ながら、Douglas-Peuckerはトポロジを保持しないため、ポリゴン間の境界線のレンダリング方法が変更されました。他のアルゴリズムを簡単に試して目的に適応させることはできませんでしたが、CS /アルゴリズムの背景があまりなく、見た場合に認識できない可能性があります。

3
オープンソースプロジェクトにコードレビューはありますか?もしそうなら、これを行うためにどのようなツールが使用されていますか?
商用開発で​​はコードレビューが強く求められていることは知っています。しかし、コードレビューはオープンソースソフトウェアで使用されていますか、それとも信頼に基づいていますか?もしそうなら、彼らはどのように実行されますか?[遅延コミット、「プリコミット環境」ですか、パッチを別の開発者に送信できるツールはありますか?] コードレビューを使用するプロジェクトはありますか? 私の理解では、Linuxカーネルは主にコミッターの信頼に基づいています。MySQLは、主要な著者の承認とパフォーマンスへの影響に基づいていました。

2
PHPでクラスメンバーを初期化するためのベストプラクティス
私のコンストラクタには次のようなコードがたくさんあります:- function __construct($params) { $this->property = isset($params['property']) ? $params['property'] : default_val; } プロパティ定義でデフォルト値を指定するよりも、これを行う方が良いですか?すなわちpublic $property = default_val?時々、デフォルト値のロジックがあり、いくつかのデフォルト値は他のプロパティから取得されるため、コンストラクターでこれを行っていました。 デフォルト値のすべてのロジックが分離されるようにセッターを使用する必要がありますか?

1
ASP.NETで適切なサービスレイヤーを構築する方法
私はいくつかの質問、優れたサービス層を構築するための技術を調べてきましたが、これに関して私が助けを必要とするいくつかの質問があります。 最初に、私が要件について持っているもののいくつかの情報。現在、スパイダーウェブのような方法で相互に通信する多くのWebアプリケーションがあります(すべて、Webサービスとデータベースデータを介して、混乱する方法で相互に通信します)。 これを変更して、すべてのアプリケーションがサービスレイヤーを通過するようにしたいと思います。サービスレイヤーでは、キャッシュを使用して作業し、共通の機能などをカプセル化できます。 サードパーティのクライアントがサービスからの情報を利用できるように、このレイヤーにもWeb APIが必要です。 問題は、たとえばMVC4 Web APIでサービスレイヤーを構築する場合、webAPIを使用してアプリケーション間で通信する必要がないということです。つまり、URLを構築してJSON / Xmlを消費する必要があります。それはあまり効果的に聞こえません。エンティティとWCFを使用してアプリケーション間の通信を行う方が良い方法だと思いますが、Web APIの魔法を失う可能性がありますか? したがって、問題は、サービス層をWeb API(JSON / XML)とエンティティを含むよりバックエンドのサービス層の両方として利用する方法があるかどうかです。2つの異なるサービスレイヤーを使用せざるを得ない場合、一部の機能や他の悪いことを複製する必要があるかもしれません。 質問が十分に明確であることを願って、さらに情報が必要かどうか尋ねてください。

3
どのようにしてオープンソースプロジェクトの大きな貢献者になりますか?
オープンソースプロジェクトのデフォルトのアドバイスは、バグの修正を始めることです。しかし、プロジェクトのバグのテスター/フィクサーになりたいのであれば、その道を進みたいと思っています。どうすればオープンソースプロジェクトのアクティブな貢献者になれますか?[すなわち、建築のレベルで]

1
Pythonの「神クラス」をリファクタリングする方法は?
問題 私は、メインクラスが少し「神オブジェクト」であるPythonプロジェクトに取り組んでいます。そこされているので、多くの属性とメソッドのfrigginの! クラスをリファクタリングしたい。 これまでのところ… 最初のステップとして、私は比較的単純なことをしたいと思います。しかし、最も簡単な方法を試したところ、いくつかのテストと既存の例が破られました。 基本的に、クラスには属性のリストがたくさんありますが、私はそれらをはっきりと見て、「これらの5つの属性は関連しています...これらの8つの属性も関連しています...そして残りはあります」と考えることができます。 getattr 基本的に、関連する属性をdictのようなヘルパークラスにグループ化したかっただけです。__getattr__その仕事に理想的だと感じました。それで、属性を別のクラスに移動し、確かに、__getattr__その魔法は完全にうまくいきました… で、最初に。 しかし、私は例の1つを実行してみました。サンプルのサブクラスは、これらの属性の1つを直接(クラスレベルで)設定しようとします。しかし、属性が親クラスで「物理的に配置」されなくなったため、属性が存在しないというエラーが表示されました。 @property 次に、@propertyデコレータについて読みます。しかし、それが親クラスのプロパティであるself.x = blah場合に実行したいサブクラスに問題が発生することも読みましたx。 望ましい self.whatever親のwhateverプロパティがクラス(またはインスタンス)自体に「物理的に」配置されていない場合でも、すべてのクライアントコードがを使用して機能し続けるようにします。 関連する属性をdictのようなコンテナにグループ化します。 メインクラスのコードの極端なノイズを減らします。 たとえば、これを単に変更したくありません。 larry = 2 curly = 'abcd' moe = self.doh() これに: larry = something_else('larry') curly = something_else('curly') moe = yet_another_thing.moe() …それはまだうるさいからです。これにより、simple属性がデータを管理できるものにうまく変換されますが、元の変数には3つの変数があり、調整されたバージョンにはまだ3つの変数があります。 しかし、私はこのようなもので大丈夫でしょう: stooges = Stooges() そして、のルックアップがself.larry失敗した場合、何かがチェックされstooges、larryそこにあるかどうかが確認されます。(ただし、サブクラスlarry = 'blah'がクラスレベルで実行しようとした場合にも機能する必要があります。) 概要 親クラスの属性の関連グループを、他の場所にすべてのデータを格納する単一の属性に置き換えたい larry = …

1
Azureプロジェクトのcsxフォルダーの目的?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 昨年休業。 私はAzureにかなり慣れていませんが、Visual Studioが(特に)次のフォルダーを自動作成することに気付きました ... /<nameOfAzureProject>/bin /<nameOfAzureProject>/obj /<nameOfAzureProject>/csx <== ... 現在、binおよびobjフォルダーはかなり標準的です。しかし、csxフォルダーの目的は明確ではありません。何か案は?

3
私が書いたアプリケーションはマルウェアとしてリストされています。それを修正するには?
Delphiで作成したプログラムがあります。プログラムはダウンロードできますが、Nortonなどの一部のアンチウイルスはマルウェアとして検出しますが、AVGなどの他のアンチウイルスには問題がありません。 さらに、Google Chromeは、私のWebサイトからプログラムをダウンロードするときにマルウェア警告も表示します。 EXEファイルをZIPファイルに入れる以外に、これを防ぐ方法はありますか?

2
50歳の読み書きができないコンピュータをプログラミングに導入する方法[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 8年前休業。 先日、父が私に彼に期待したことのない質問をしました。 「どうすればC ++を習得できますか?」 私の父は今年56歳になり、コンピューターは彼にとって遠い概念です。彼は電話番号以外に電話の使い方をよく知らない(スピードダイヤルや連絡先はない)。彼は少しよくコンピューターを学び始めました-彼はインターネットを(Windowsで)開いて閲覧する方法を知っているところまで(そして彼は自分のオンラインで完全にいくつかの求人応募を完了しましたが、そのうち彼も役職を与えられました) )。しかし、それでも、これらは狭いウィンドウでの体験であり、実際にはあまり意味がありません。 彼はバックグラウンドを持っていないかもしれませんが、私の父は読む方法を知っています。そして、読書というのは、単なる能力ではなく、スキルとしての意味です。彼は大学教育(財政問題、家族など)をほとんどまたはまったく持っておらず、高校を卒業するのに十分幸運でしたが、それでも彼はマスター電気技師になることを学び、現在約30年間1歳です。彼はギターでも同じことをし、非常にプロフェッショナルなレベルで演奏することを学び、そのスキルで賞賛されました。高校では、彼は重量挙げの本を手に取りました。そして、当時、高校で唯一、国家基準で「アスリート」として認定された人物でした。 すべての場合において、彼は何かを読む必要がありました。彼に教える何か。彼はスポンジのように情報を吸収します。 私は父のモチベーションやこれを行う能力に疑いがないので、私の一般的な目標は単に次のとおりです。 私のお父さんをコンピューターの世界に連れて行って、彼をプログラミングの道に連れて行ってください。 私が彼に基本を理解させたら、彼の意欲と読解力が彼にこれを続けさせると強く信じています。 だから私はあなた方全員に尋ねています:これからすべてをどこから始めるべきですか?そしてそこに最高のリソースは何ですか?彼にWindowsの代わりにLinuxを起動させるべきですか?C ++は悪い考えですか? 覚えておいてください、彼は(IMO)最初にコンピューターを学び、それからプログラミングの最初の把握( "Hello world"体験)をする必要があります。 お金のために、そして優先的に、彼が読むことができる無料のオンラインリソースが欲しいのですが、印刷物またはオンラインで支払われたものでの良い提案はすべて歓迎します(後で調べ​​て購入する可能性があります)。 また、私は彼をC ++(Python、Javaなどなし)から始めるつもりです。私はそれを最もよく知っており、コードを使用して彼を助けることができるからです。(私は現在、他の言語では最小限の知識しか持っていません)。 編集:Pythonを使用するための多くの永続的な提案を受けています。私がC ++をやりたかった唯一の理由は、私がそれを知っていて、私の父が助けを必要とするときにそこにいることができるということです。私がプログラミングに初めて触れたのはJavaでした。私はJavaを学び、それで上手になりました。他の提案も歓迎しますが、あなたの提案を効果的に活用してください。 編集#2:私は私のアプローチ/思考/知識がここに欠けている可能性があることを理解しています。私は2年生レベルの学部CS専攻です。私の投稿に何も同意しない場合は、その理由を教えてください-アイデアや情報を教えてください。それが私が最初に尋ねている理由です。私の一般的な目標を特定の到達可能な目標に絞り込むこと。
10 c++ 

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