ソフトウェア工学

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

1
バグレポートの重複を避ける
私は自宅でLinuxなどのオープンソースソフトウェアを使用しています。私はプロのコーダーではないので、自分のスキルでは自分で問題を解決するのに十分ではないため、通常は開発者にバグを報告します。 バグレポートを送信する前に、どのようなことを確認してほしいですか?つまり、Geditでバグを見つけたと思ったら、Bugzillaで同様のバグを見つけることができませんでした。しかし、私がレポートを送信した後、バグはGeditではなくGTK +にあったため、バグはすでにBugzillaにあると一部の開発者は述べました。時々、既知のバグが私が見つけた問題を解決するかどうかをアマチュアが推測するのは難しいかもしれません。


4
PHP file_put_contentsファイルのロック
セナリオ: あなたは各行に文字列(平均文の価値)を持つファイルを持っています。議論のために、このファイルのサイズが1Mb(数千行)であるとしましょう。 ファイルを読み取り、ドキュメント内の一部の文字列を変更し(追加するだけでなく、一部の行を削除および変更する)、すべてのデータを新しいデータで上書きするスクリプトがあります。 質問: 「サーバー」のPHP、OS、またはhttpdなどには、このような問題(書き込みの途中で読み取り/書き込み)を停止するためのシステムがすでにありますか? ある場合は、その仕組みを説明し、例や関連ドキュメントへのリンクを示してください。 そうでない場合、書き込みが完了するまでファイルをロックし、前のスクリプトが書き込みを完了するまで他のすべての読み取りや書き込みを失敗させるなど、有効または設定できるものはありますか? 私の仮定およびその他の情報: 問題のサーバーは、PHPとApacheまたはLighttpdを実行しています。 スクリプトが1人のユーザーによって呼び出され、ファイルへの書き込みの途中であり、別のユーザーがその瞬間にファイルを読み取る場合。まだ書かれていないため、それを読んだユーザーは完全なドキュメントを取得できません。(この仮定が間違っている場合は修正してください) 私が関心を持っているのは、テキストファイルへのPHPの書き込みと読み取り、特に関数「fopen」/「fwrite」と主に「file_put_contents」だけです。「file_put_contents」ドキュメントを確認しましたが、詳細レベルや「LOCK_EX」フラグが何であるか、または何であるかについての詳細な説明は見つかりませんでした。 このシナリオは、ファイルのサイズが大きく、データの編集方法が原因で、これらの問題が発生する可能性が高いと想定する最悪のシナリオの例です。これらの問題について詳しく知りたいのですが、「mysqlを使用する」や「なぜそうしているのか」などの回答やコメントを望まない、または必要としません。ファイルの読み書きについて知りたいだけです。 PHPでは、適切な場所/ドキュメントを調べているようには見えません。そうです、私はPHPがこの方法でファイルを操作するための完璧な言語ではないことを理解しています。

7
シンプルなiPhoneアプリは、モバイルWebサイトよりもユーザーにとって魅力的ですか?
クライアントがiPhoneアプリを実行したいのは、モバイル向けに最適化されたサイトでiPhoneアプリを使用する可能性が大幅に高いためです。iPhoneアプリは非常にシンプルです。いくつかの画像とテキストを表示するだけです。プログラマーとしては、コンテンツの単純な性質を考えると、むしろモバイルサイトを使用したいと思います。技術的な観点からは、この状況でiPhoneアプリを使用するのはやり過ぎだと思います。 ユーザーがむしろiPhoneアプリであるという理由だけで、モバイルサイトで十分なときにiPhoneアプリを構築することは理にかなっていますか?とにかく、モバイルサイトが使いやすいことをユーザーに簡単に納得させることはできますか?
9 iphone  mobile 

4
迅速なプロトタイピングとリファクタリング
小さなプロジェクト(Androidアプリなど)を開始するとき、最後にどのアプローチがうまくいくかわからないことがあるので、1つのアプローチを試してみます。しかし、このアプローチをこれまでに使用したことがない場合(ある種のアプリケーションの場合、これまでプログラムしたことがない)、それは未知の地形に足を踏み入れるようなものです。使用するライブラリがわからない(たぶん、いくつかのライブラリを試す必要があるかもしれません)非常に多くの認識されていない(例:Androidで生のオーディオデータを取得する方法) したがって、私の開発プロセスは次のようになります。 コードを記述して、アプローチにチャンスがあるかどうかを確認します。(アプローチが不確実であるほど、コードはより醜くなります) 機能する場合は、綺麗になるまでたくさんリファクタリングしてください この時点でソフトウェア設計を詳細に計画した場合、それは時間の無駄になると思います。それは、地図のない旅行を計画するようなものです。 これはアグリー開発の一部ですか?ソフトウェア開発で未知の地形にどのように対処しますか?

2
Pythonのパワーオペレーターを右に関連付ける理由は何ですか?
数式文字列を解析するコードを書いていますが、Pythonでチェーンされたべき乗演算子が評価される順序がExcelでの順序と異なることに気付きました。 http://docs.python.org/reference/expressions.htmlから: 「したがって、括弧で囲まれていない累乗演算子と単項演算子のシーケンスでは、演算子は右から左に評価されます(これは、オペランドの評価順序を制約しません)。-1 * 2の結果は-1になります。」* つまり、Pythonでは次のよう 2**2**3に評価されます。2**(2**3) = 2**8 = 256 Excelでは、それは逆に動作します:2^2^3として評価されます(2^2)^3 = 4^3 = 64 次に、自分のパーサーの実装を選択する必要があります。Excelの順序は、乗算の評価順序を反映しているため、実装が簡単です。 事務所周辺の何人かに評価の感触を聞いてみたところ、2^2^3さまざまな反応がありました。 Pythonの実装を支持する正当な理由や考慮事項を知っている人はいますか?あなたは答えを持っていない場合や、結果としてくださいコメントあなたは腸の感じから取得する- 64または256?

1
コンピューティングのレベルを理解する
すみません、私の混乱した質問のために。ポインタを探しています。 これまで私はほとんどアプリケーション層でJavaとPythonを使用しており、オペレーティングシステムとハードウェアについては漠然とした知識しかありませんでした。コンピューティングの低レベルについてもっと理解したいのですが、どういうわけか本当に圧倒されます。大学では、マイクロプログラミング、つまりプロセッサがASMコードを実装するためにどのように配線されているかについてのクラスを受講しました。これまでは、「低レベル」について学べば、これ以上の仕事はできないといつも思っていました。 私の質問の1つは、ハードウェアが開発者からほぼ完全に隠される可能性があるのはなぜですか。オペレーティングシステムはハードウェアのソフトウェアレイヤーであると言っても正確ですか?1つの小さな例:プログラミングで、L2キャッシュまたはL3キャッシュとは何かを理解する必要に遭遇したことはありません。典型的なビジネスアプリケーション環境の場合、アセンブラーや下位レベルのコンピューティングを理解する必要はほとんどありません。現在、ほとんどすべてのテクノロジースタックが存在するためです。これらの低レベルの全体のポイントは、高レベルへのインターフェースを提供することだと思います。一方で、たとえばこのグラフィックスコンピューティング全体など、下位レベルがどの程度の影響を与える可能性があるのでしょうか。 したがって、一方で、この理論的なコンピュータサイエンスブランチがあり、抽象的なコンピューティングモデルで機能します。ただし、複雑なモデル、証明の検証などのカテゴリで役立つ考えを見つけた状況にもめったに遭遇しませんでした。私は、NPと呼ばれる複雑なクラスがあり、それらを解決するのがある程度不可能であることを知っています。多数のN。欠けているのは、これらのことを考えるためのフレームワークのリファレンスです。私には、めったに相互作用しないさまざまな種類のキャンプがあるようです。 過去数週間、私はセキュリティ問題について読んでいました。ここでは、どういうわけか、さまざまなレイヤーの多くが一緒になっています。攻撃とエクスプロイトはほとんど常に下位レベルで発生するため、この場合は、OSIレイヤーの詳細、OSの内部動作などについて知る必要があります。

3
ネイティブモバイルアプリの開発-ユーザーストーリーをどのように構成しますか?
プロトタイプのネイティブモバイルアプリ(最初はiOSとAndroid)、およびこれらのアプリが通信するためのWebベースの管理インターフェイスとAPIの開発を伴うプロジェクトに着手しようとしています。既に作成されたストーリーのリストがありますが、それらの多くは次の形式になっています。 As a mobile user I want to be able to view a login screen so that I can sign into the app これが単一のプラットフォームを対象にしている場合、問題は発生しません。ただし、複数のプラットフォームを対象としているため、これらを「Androidユーザーとして」などに複製する必要があるかどうかは不明です。これは重複のように見えますが、プラットフォームごとに個別に完了する必要がある作業です。 これは、私たちがネイティブに行った最初のモバイルプロジェクトです。以前はPhonegapで、すべてのストーリーを「モバイルユーザーとして」にまとめました。これは本質的にネイティブコードでラップされたWebベースのアプリだったので、それほど問題にはなりませんでしたが、完全にネイティブなアプリは別の球技だと私は意識しています。

5
リーダーシップは、マシン構成と新しい開発者志向の標準プロセスに価値を見出さない
約3か月前に、私たちの主要なWeb開発者およびデザイナー(同じ人物)が会社を辞めました。緑の牧草地が退職の理由でした。彼らに良いと私は言う。私の問題は、彼の部門が完全に文書化されていなかったことです。リードを離れてからの状況は厳しく、私たちが新しいプロジェクトを引用するために使用する理論的な知識と、彼が去ったために失った既存の製品の技術/実装に関する知識の両方がたくさんあります。私の通常の役割は、製品マネージャー(私たちの製品自体)およびプロジェクトベースのコンサルティング業務のビジネスアナリストです。私は過去1年間、自分でコーディングすることを学び、前進し続けるために努力しました。私のラップトップを開発マシンとしてセットアップするタスクを引き受けて、より簡単な機能リクエストのいくつかを実装し、私たちのチケットシステムに送信されるいくつかの簡単なバグを修正することを期待しています。しかし、新しいWindowsマシンを使用して、本番用アプリとシームレスに動作するように構成する方法は誰にもわかりません。 私は上司に、去った開発者とまだ連絡を取り、新しい開発者、ソフトウェアのインストール、必要なパッケージ、プロダクションアプリケーションサーバーにデプロイするプロセスなどを文書化して作成するプロセスを依頼するよう依頼しました。これは存在し、コンピュータを機能開発マシンとして機能させるために、私はホイールを回転させています。しかし、彼女はそのようなプロセスが存在する必要性を理解していないようです。どうやら、去ったものを交換した新しい開発者は、私たちの環境用に事前構成されたマシンを使用していたため、新しい開発者でさえ、別の開発者を追加すると新しいマシンをセットアップできませんでした。 私の質問は2つの部分です: 私たちの開発エコシステムの一部である新しいコンピューターを搭載して構成するプロセスが存在するはずであると想定するのは間違っていますか? 私はひどい赤ちゃんですが、プロセスを理解して自分でドキュメントを作成する必要がありますか?

1
バージョン管理API
APIベースでサポートされている大規模なプロジェクトがあるとします。このプロジェクトには、エンドユーザーが使用できるパブリックAPIも含まれています。 場合によっては、プロジェクトをサポートするAPIベースに変更を加える必要があります。たとえば、APIの変更や新しいメソッドを必要とする機能を追加したり、APIとの間でやり取りされるオブジェクトの1つまたはオブジェクトの1つの形式を変更したりする必要がある機能を追加する必要があります。 パブリックAPIでこれらのオブジェクトも使用していると仮定すると、パブリックオブジェクトもこれを実行するたびに変更されます。これは、クライアントが解析コードを機能させるために同一のままであるAPIオブジェクトに依存する可能性があるため望ましくありません。(咳C ++ WSDLクライアント...) したがって、解決策の1つは、APIをバージョン管理することです。しかし、APIの "バージョン"と言うと、これは、変更されたメソッドシグネチャごとに重複したメソッド呼び出しを提供するだけでなく、APIオブジェクトをバージョン化することも意味しているように思えます。したがって、APIのバージョンごとにプレーンな古いclrオブジェクトを作成しますが、これもまた望ましくないようです。そして、たとえこれを行っても、膨大な量の重複したコードが作成されることになるため、各オブジェクトを最初から構築することはありません。むしろ、APIはベースAPIに使用しているプラ​​イベートオブジェクトを拡張する可能性が高いですが、追加のプロパティが想定されていないときにパブリックAPIでも使用できるため、同じ問題が発生します。 では、この状況に通常適用される正気とは何でしょうか?Git for Windowsなどの多くのパブリックサービスがバージョン管理されたAPIを維持していることは知っていますが、バージョン管理されたさまざまなメソッドや入出力オブジェクトをカバーする膨大な量の重複コードなしでこれをサポートするアーキテクチャを想像するのに苦労しています。 セマンティックバージョニングなどのプロセスは、パブリックAPIのブレークが発生したときに何らかの健全性を提供しようとすることを知っています。問題は、オブジェクトが分離されていない場合、多くの変更またはほとんどの変更でパブリックAPIを解除する必要があるように見えることですが、コードを複製せずにそれを行うには良い方法がありません。

8
「コードの最適化」==「データの構造化」はいつですか?
ycombinatorによる最近の記事に、優れたプログラマーの原則を伴うコメントがリストされています。 #7.良いプログラマー:コードを最適化します。優れたプログラマー:データを構造化します。最高のプログラマー:違いは何ですか? 主観的で論争のある概念を認める-これが何を意味するかについて誰かが立場を持っていますか?私はそうしますが、私は後でこの質問を自分の考えで編集して、回答の素因を作らないようにしたいと思います。


5
優れたバグデータベースを維持する手順
バグデータベースを維持することは、すべてのプロジェクトにとって重要です。バグデータベースに以下を保存するのに慣れています 発行日時 誰に割り当てられています 解決されたかどうか 解決された場合、解決された日時 十分なバグデータベースを維持するのに十分ですか?
9 bug  bug-report 

1
「汎用システム」とはJava SE Embeddedの意味を教えてください。
OracleのWebサイトでは、Java SE Embedded ライセンスについて次のように述べています。 開発は無料ですが、汎用システム以外に展開する場合はロイヤリティが必要です ここで「汎用システム」とはどういう意味ですか? 全国にセンサーネットワークがあります。インストールした各ボックスには、環境からデータを取得し、シリアルポートでARMベースの組み込みボードにデータを送信するマイクロコントローラーベースのボードがあります。このボードシステムには、JMSを使用してデータを読み取り、中央サーバーに送信するJavaプロセスがあります。これは汎用システムに分類されますか? すみません、こちらでお願いします。私たちはイランにいます、ここに尋ねるオラクルオフィスはありません。


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