はじめに第一章
1.1 ソフトウェアプログラム= +ソフトウェア工学
1.1.1 ソフトウェアが理解し始めています
アルゴリズム+データ構造=プログラム。
プログラム:ここでは、ソースを指し線でのコード行です。彼らは、データ構造に基づくアルゴリズムの一部です。プログラムはまた、いくつかは動的であり、(そのようなソフトウェアのアイコン、メッセージなど)は、このデータは静的であるそのうちのいくつかのデータ、を操作(例えばプログラムによって生成された乱数、ネットワーク経由でダウンロードしたプログラムデータ、ユーザーのテキストや音声出力人、など)。
ソフトウェアのビルドプロセス:建物はちょうどccコマンドとインクではなく、ソフトウェアの複雑な部分合理的なソフトウェア・アーキテクチャ(ソフトウェアアーキテクチャ)を持って、ソフトウェアの設計と実装(ソフトウェア設計、実装とデバッグ)だけでなく 、 だけでなく、様々な文書とそうでパラメータ、リンクパラメータ、およびコンパイル、様々なプログラムファイル間の依存関係を記述するためのデータ。。
ソースコントロール(ソースコード管理)問題:また、構成管理(ソフトウェア構成管理)として知られているが、例えば、いくつかのプログラムは、あなたが別のインターフェイスを設定したい、中国語、英語や他の言語のオペレーティングシステム上で実行されている。いくつかのプログラムだけでなく、32ビット版64ビットバージョン。
品質保証(品質保証時):プログラムの正しさを確保するためのツール、プロセス、およびドキュメントのシリーズは、これらのツール(およびソフトウェア)は、プロセスが開発されたソフトウェアの品質を確保するために、高品質を達成する必要があります。
ソフトウェアのテスト(テスト):ソフトウェアテストのための具体的な検証プロセス。
ソフトウェア・パブリッシングプロセス:要求分析(要件分析)からソフトウェアチームは、適切な要件を整理し始め、その後徐々にそのような設計(ソフトウェアアーキテクチャ)として、フォローアップ作業を展開する、(書き込みデータ構造とアルゴリズム)を実装、テスト、最終的にパブリッシングソフトウェア。
プログラム理解(全体のプログラムの内包表記):スタッフのソフトウェアチームは、設計プロセスを理解するために、できるだけ早く既存のプログラムを読み取るために、新しいメンバーを流れます。
ソフトウェア保守(ソフトウェア・メンテナンス):またはサービス事業者は(サービスオペレーション)が動作中のソフトウェアは、このまたはその問題外となります、多分私達は時々一緒にするチームのサービス、新旧メンバーの多数のソフトウェアにパッチ、または保守を作るために必要があります様々な問題を解決します。
ソフトウェアのライフサイクル(ソフトウェアライフサイクル、SLC) :プロセスのこのシリーズは、ソフトウェアのライフサイクルです。
ソフトウェアプロジェクト管理(プロジェクト管理):ソフトウェアのライフサイクルでは、誰かがソフトウェアプロジェクトの管理を担当していました。
ソフトウェアのユーザーエクスペリエンス(ユーザーの好みの経験):優れたソフトウェア、でも非常に異なる機能と同じようなソフトウェアではない場合、それは、人々は非常に使いやすい感じになります。ユーザーエクスペリエンスとデータ構造、アルゴリズムは直接関係ありませんが、この点では非常に成功したソフトウェアの勝利がたくさん。
国際化とソフトウェアのローカリゼーション(グローバリゼーション&ローカライゼーション):ソフトウェアは、異なる言語、インターフェースと機能のさまざまな部分でのユーザーのさまざまなニーズに対処します。
注意:一部のソフトウェアビジネスモデルが合理的ともいくつかの正当なものであるが、いくつかは、一見合理的ではなく、どのように合法的な、いくつかの慣行が不合理が、改善された関連法の前に、関連する法律を発行しておりません、ソフトウェア業界が当たり前あり、それはITの人間の行動を制約する職業倫理を持っている必要があります
上記のこれらのソフトウェア開発活動と(管理、ソースコード管理、ソフトウェア設計、ソフトウェアテスト、プロジェクトマネジメントを構築する)関連するコンテンツは、ソフトウェアエンジニアリングの中核部分です。広い意味でのソフトウェアエンジニアリングはまた、ユーザーエクスペリエンス、ユーザーインターフェイスのデザインが含まれています。
そのため、当然の結果は次のとおりです。
ソフトウェア= プログラム+ ソフトウェア工学
推論の拡張子は次のとおりです。
ソフトウェア会社= ソフトウェア+ ビジネスモデル
1.1.2 ソフトウェア開発のさまざまなフェーズを
玩具ステージ 趣味ステージ 探査段階 成熟産業のステージ
1. 2 ソフトウェアエンジニアリングとは何ですか
|
ソフトウェア・ツール・システム:のMicrosoft Visual Studioで、GitHubの、その上のEclipse、ClearCaseのとClearQuestの、と。
1.2.1 特殊性ソフトウェア
ソフトウェア:コンピュータ・電子機器に含まれる命令とデータの順序付きコレクションを実行します。
ソフトウェアカテゴリ:
●システムソフトウェア:オペレーティングシステム、デバイスドライバ、およびその他のソフトウェアツール
●用途:ユーザーはそう記事や通信、ゲーム、Webブラウジング、ビデオ再生などを書くために、原子力発電所の管理から、作業を完了するためにそれらを使用しています。
●悪意のあるソフトウェア:ソフトウェアウイルス。
ソフトウェア(自然)特殊:
●複雑さ(複雑さ):大規模なソフトウェア(オペレーティングシステム、オフィスソフトウェア、検索エンジン)は、ソースコードの100万人以上のライン、異なるファイルの数万を持っています。ソフトウェアモジュール、およびモジュール間の明示的または暗黙的な依存関係の様々なこれらの関係の数は、多くの場合、幾何学的にレートされ、システムの成長の増加であります。
●不可視(不可視):高速動作の形でソフトウェアのマシンコード、また、いくつかのCPUコア上で実行することがあり、エラーが商用ソフトウェアを発生し、エンジニアは(左間違った瞬間にプログラムのいくつかの痕跡を見ることができますエラーコード、オブジェクトコードの位置大体、エラーメッセージ)が、何が悪かったのか、最終的に完全なプログラムを再現することはほとんど不可能。
●ボラティリティー(可変性): a)のソフトウェアは、新しいことをやらせると、b)ソフトウェアは、新しいハードウェアに適応することができます:それは、次の2つの場合に、ソフトウェアができる「変更」を期待するのが自然です。しかし同時に、ソフトウェアを変更する権利は、非常に困難なことです。
●従順(適合):ソフトウェアが存在しないことができ、それはハードウェア上で実行されるように常にある、それは、システム要件の他のコンポーネントに劣後する必要があり、ユーザーの要件にそれも対象、こうした銀行の金利の変動などの業界のシステム要件(。 )。
●不連続(不連続):多くのソフトウェア・システムは、このような継続的な特徴、時々小さな変更入力を持っていない、出力に大きな変化をもたらすことができます。
ソフトウェア(その他)特殊:
●多くの異なるプログラミング言語、ソフトウェアツールとソフトウェア開発プラットフォームがあります。
●さまざまなソフトウェア開発プロセスがあります。
●多くの異なる役割のソフトウェアチームが存在します。
●ソフトウェアはいずれかの磁気テープに保存することができ、それはまた、CD / DVDに保存することができます。
1.2.2 ソフトウェア工学とコンピュータ科学の関係は、
ソフトウェア工学「プロジェクト」という言葉も素晴らしい歴史ある、人々が活動次のプロジェクトに参照:創造的な科学的原理の使用、建物、機械、機器やプロセスの設計と実装、または練習の使用をか複数のエンティティ、またはこれらのエンティティの実装。
コンピュータ理論の進歩(このようなプログラムの正しさの分析など)のソフトウェア・エンジニアリングを支援します。ソフトウェア工学の進歩(より良いツール、より多くのアプリケーション)は、コンピュータ科学者がより効果的に実験や探査を実施するのに役立ちます。
トニー・ホール(アントニー・ホーア)の比較図のように、コンピュータサイエンスとソフトウェア工学の異なる重点を1.2.2 。
コンピュータサイエンス |
ソフトウェア工学 |
発見と長期的、客観的真実の研究 |
実際の短期的な結果(特定のソフトウェアが時代遅れになります |
理想的な |
様々な要因の妥協 |
確実性、完成度、汎用性 |
不確実性とリスク管理、十分に良い、特定のアプリケーション |
様々な分野の独立した綿密な研究では、実績をあげて |
この問題を解決するためのアプリケーションに関連する様々な分野の関心と知識、 |
統一理論 |
繁栄プラクティス |
独創性を重視 |
最高の、実証済みのプラクティス |
フォーマル追求簡潔な式 |
練習、インスピレーションや直感に設立 |
正しいこと |
可塑性 |
コンピュータ科学とソフトウェア工学の図1.2.2異なる強調 |
1.2.3 ソフトウェア・エンジニアリングの分野の知識
2014年、IEEEは、知識の以下の15の分野(知識エリア、KA)に記載されているこの質問に対する完全な答えをSWEBOKのV3.0(知識のソフトウェアエンジニアリング体)を発表しました。基本的なコンピューティング、基本的な数学と工学の基礎:15 KAでは、3つのソフトウェア工学の基礎分野の3つのカテゴリがあります。
ライフサイクル |
ソフトウェア要件、ソフトウェア設計、ソフトウェアのビルド、ソフトウェアテスト、ソフトウェアメンテナンス |
専門分野 |
ソフトウェア構成管理、ソフトウェアプロジェクト管理、ソフトウェアエンジニアリングプロセス、ソフトウェア工学モデルやソフトウェアの品質の方法 |
理論的根拠 |
コンピューティングインフラストラクチャ、基本的な数学、工学の基礎 |
1.2.4软件工程的目标——创造“足够好”的软件
●用户满意度:用户在使用时发现了软件的很多问题,影响了用户使用软件的效率。
●可靠性:某个软件经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登不上去。
●软件流程的质量:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。这也可以说是软件团队的bug。
●可维护性:某个软件太难维护了,按下葫芦起了瓢,修复了一个问题,另一个问题又出来了。也没有足够的文档,维护人员需要更多的资金和时间来维护这个软件,甚至建议推倒重写。
1.3练习与讨论 (P18)
P18-2
1)在问题后面说明哪一章节的什么内容引起了你的提问,提供一些上下文。
2)列出一些事例或资料,支持你的提供。
3)说说你提问题的原因,你是因为自己的假设和书中的不同而提问,还有不懂书中的术语,
还是对推理过程有疑问,还是对推理过程有疑问,还有书中的描述和经验(直接或间接经验)相矛盾。
答:问题一:怎样才算一个好的单元测试?
第二章个人技术和流程中的术语我没有怎么理解,单元测试应该准确、快速地保证程序基本极块的正确性。
单元测试应该在最基本的功能/参数上验证程序的正确性;单元测试必须由最熟悉代码的人(程序的作者)来写;单元测试过后,机器状态保持不变;单元测试要快(运行时间几秒);单元测试应该产生可重复、一致的结果;独立性,可以人为构造数据;单元测试应该覆盖所有代码路径。
问题二:学什么,怎么学,核心竞争力是什么?
1.学什么:第三章软件工程师的成长中我认为软件工程是培养适应计算机应用学科的发展,具备计算机软件的基础理论、基本知识和基本技能,具有用软件工程的思想、方法和技术来分析、设计和实现计算机软件系统的能力的高级软件工程技术人才。
2.怎么学:学习软件工程最好把这些基础课程打扎实,以便能理解以后一些更抽象的东西。无论有没有开始学习开发语言,都应该慢慢去接触它,实践它,积累你的想法、开发自己的软件开发思维,从小的程序开始实践它。这个时期,最好先自学理解,尽量自己想办法解决问题,不懂的也一定要请教或者百度弄懂。其次尽量一面提高自己的编程能力和发展编程思维,一面广学博文,多去接触一些跟专业有关的各种信息知识,最好关注几个专业网站,学习和浏览里面的专业技术或者专业修养、前景、最新技术发展等内容。最后要大量地实践项目,提高编程能力,要用架构师的眼光去看待软件开发,就是达到了一个专业人士的水平。这个时候不懂就要去弄懂,不要积累太多问题,学得更加踏实。
3.核心竞争力:我查找思考出了很多答案:技术、代码、天赋激情、经验、想象力等等.....我思考过这些答案,觉得答案挺好,但是还没有突出核心竞争力,没有展现软件工程师的特点。
例如技术和代码的能力,这个是属于基础能力;天赋和激情哪个行业都需要,何况天赋不是决定性的因素。经验也很重要,但不能说明太多问题,也许有三年开发经验的程序员只是把一年的经验重复了三次罢了;想象力我觉得更适合搞艺术和科研的,因为他们需要通过想象力在未知的领域去探索,而我们软件工程师是利用已有的知识去打造产品。
我觉得软件工程师的核心竞争力,不是单一能力的体现,而应该是多种能力和价值的综合体,学习能力、解决问题能力和影响力构成了软件工程师的核心竞争力。
问题三:团队模式和团队的开发模式有什么关系?
在第五章团队和流程中我查资料了解了一下,团队模式,更偏向于多人合作的那种,而且我理解的“团队”会是一种多人合作的情况下,长期磨合后的一个组织,他们是相互了解的,是拥有巨大的默契存在的。
对于团队的开发模式我并没有查到具体的解释,但对于开发模式,是有查到几种开发模式,比如瀑布开发模式、快速应用开发模式等等,我们的课本上有这些模式,所以我在这里认为开发模式是更偏向于后边的“模式”两个字的,更注重方法,用什么方法。
我个人认为他们之间的关系是:团队模式是一种组织的存在,而团队的开发模式更注重于方法,团队采用什么样的方法开开发项目。
P18-3
1)这些软件的开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户的现金么?还是别的
2)这些软件是如何到你手里的(邮购、下载、互相拷贝)?你当时上几年级?你对这个软件的感觉如何?
我的手机软件分成以下七类:
常用设备:QQ、微信、浏览器、电话、相机、联系人;
系统设备:天气、计算器、镜子、日历、闹钟、设置、手电筒、文件管理;
支付软件:美团APP、招商银行APP、中国工商银行App、云闪付APP、支付宝;
购物软件:京东App、淘宝App、小红书APP;
办公学习软件:Wps office、百度网盘、网易有道词典、考虫APP、一起学网校APP、作业帮APP、知米背单词、驾考宝典、运动世
界校园APP、番茄TODOAPP;
娱乐软件:王者荣耀APP、腾讯视频、人人视频APP、爱奇艺APP、芒果TVAPP、抖音APP、网易云音乐、QQ音乐、微博;
生活软件:高德地图、铁路12306App、美团外卖、美颜相机、最美证件照;
答:以常用设备的QQ为例子,当时这个软件是初中的时候在应用商店里下载的,安装它是为了和小伙伴们更好的联系,随着时间的推移,QQ软件实现了更多快捷的功能(远程控制电脑,发送大文件等等),使我对这款软件的黏着性更大,更喜欢这个软件。QQ的目标据我个人看来是盈利性的,他们会采用会员制的营销模式,开通黄钻、绿钻、蓝钻、紫钻、黑钻、超级会员等等花费一大笔钱在这上面,当然开通之后会和普通用户的权限不一样,会员拥有更多更好的皮肤、网速、画质等等,让消费者拥有更优秀的用户体验。