首页 > 代码库 > Chapter 1 概论

Chapter 1 概论

其实就按着这第一章看下来,即便也有圈圈画画写写,但第一遍我觉得看的很乱,感觉都是一些的概念。
然后我就重新又看了一遍。
第一章的名字说的是概论,我觉得诚如其名,第一章就大体的给我们概括了一下软件工程是什么,干什么,以及围绕它展开的一系列工作、名词、以及一些细枝末节。

1.一些基本概念:

   程序=数据结构+算法
   软件=程序+软件工程=数据结构+算法+软件工程
   软件企业=软件+商业模式=数据结构+算法+软件工程+商业模式

   数据结构:我感觉就是数据的构成方法,eg.二叉树、链表、堆栈等
   算法:我感觉就是对数据进行一系列的有规定的套路性的计算处理方法。
   程序:书上说这里指的是源程序,就是一行行的代码。
   软件:是可以运行在计算机及电子设备中的指令和数据的有效集合。
   软件工程:相当于用这些程序去组成一个工程完成一个项目,决定了软件的质量。
   商业模式:是指软件企业所推出的软件面向用户时的一些方式,决定了一个软件企业的成败。
   还有就是软件从业人员和软件企业的道德操守也会很大程序的影响软件用户的利益。

2.软件开发的不同阶段:

①玩具阶段(我感觉就是一开始的想法阶段,有了想法才能继续往后推进)
②业余爱好阶段(就是初步实现,或者说是偶然习得,并没有刻意的去研究探索)
③探索阶段(就是进一步的终于有意识的去进行探索和创新
④成熟的产业阶段(终于把它当做一门事业一样的去发展,渐渐成熟了)

3.商用软件和爱好者写的程序的区别:

①商用软件:更具有规范性,或者说是更专业的以及它的一些措施会处理的更好,一些可能不怎么使用的功能也会阐明的很清楚:eg.会不厌其烦的告诉用户如何使用
②爱好者写的程序:更加随意一点,或者说一些不太会用的功能就根本不会去阐明

4.软件工程是什么?

①软件工程:是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
②软件工程包括的领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
③“软件开发流程”:人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。(思想+工具
④“软件开发流程”的目的:为了提高软件开发、运营、维护的效率,并提高软件的质量、用户的满意程度、可靠性和软件的可维护性。

5.软件的分类:

软件是可以运行在计算机及电子设备中的指令和数据的有效集合
可以这么分:
①系统软件:我感觉就是计算机内部的一些软件:eg.操作系统、设备驱动程序、工具软件等。
②应用软件:我感觉就是外部的用于某些实际用途的app等:eg.通信、游戏、浏览网页、播放视频等。
③恶意软件:软件病毒等。(感觉之前学到过的这样的分类中没有过这种恶意软件的说法)

6.软件开发过程中的一些难题:

①复杂性:软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。而理解运用这些复杂性的人并没有多大变化。
我感觉简而言之就是软件随着时间和时代的推移变得越来越复杂先进,但是软件工程师或是一些运用软件的人越并没有发生实质性的改变。
②不可见性:就是软件工程师是能直接看到源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时运行,工程师是看不到自己的源代码如何具体的在用户的机器上被执行。
我感觉就是说软件工程师所能看到的所谓源代码仅仅只是一些高级语言,但软件本身的话可能只是一些机器语言低级语言,因此其实是看不见软件是如何运行的。
③易变性:软件看上去很难修改。人们自然的希望软件能在下面两种情况下发生改变:a.让软件做新的事情 b.让软件适应新的硬件。但是能正确的修改软件是一件很困难的事情。
④服从性:软件不是独立存在的,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求(例如银行利率的变化)。
就是说软件不是单独存在的,而是要依赖于一些别的要素。
⑤非连续性:一般来说人们容易理解连续的系统:增加输入就能看到相应输出的增加,但是很多软件系统却没有这样的特性,有时输入上很小的变化,会引起输出上极大的变化。
我感觉就是连续的系统就是:输入增加,输出增加(相当于成正比),而非连续的系统就是:输入变化很小,但有可能输出变化会很大(有点类似于反比)。

7.软件工程和计算机科学的关系

①工程:a).创造性地运用科学原理,设计和实现建筑、机器、装置或生产过程;
           b).在实践中使用一个或多个上述实体;
           c).实现这些实体的过程;
  工程在设计和建造的过程中一定牵涉到大量的计划、计算、各类角色的协作,以及成百上千的人、动物、机械经年累月的劳作。
  我感觉这里的工程就是说比较专业化一点的,一般工程都是什么建筑啊或者经济生产方面的比较大的一些聚集性的活动。
②软件工程和计算机科学的关系:
  软件工程:和人的行为、现实社会的需求息息相关。研究目标中(软件的开发、运营和维护)都有“人”的出现。这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。
  计算机科学:理论研究部分大多可以从形式上证明,而与实践有关的部分都和数据以及其他学科发生关系。

  结合书本上的这张图可以得到的区别
  软件工程是:短期的,折中的,对不确定性和风险的管理,用于各个相关学科的能解决问题,多样、最好、成熟的实践,灵感和直觉,可靠的。
  计算机科学是:长期的,理想化的,确定性的,对各个学科独立深入研究的能做出结果的,理论的,原创的,公式化的,正确的。
  但实际上它们又是相辅相成的。它们在一些领域也存在着一些交汇。
  
③“工程”和“科学”的关系:
   思考、发现、构建。
   工程的话偏向于“构建架构”,而科学的话偏向于“发现探索探究”。
   Build To Learn:试图发现客观规律或探究某方法的优劣。通常是一些基础工作。(我感觉字面意思就是为了学习而去构建,就是说学习发现某些方法的优劣之处,加以改进什么的)
   Bulid To Show:为了突出的展现某个技术的作用,开发一些以演示为目的的软件。但工程未必全面或实用。(我感觉字面意思是为了展示而去构建,就是特定性的针对某一需求去展示某一种技术,具有专一性)
   Build To Serve:为了服务一定范围的目标用户而构建的工具等。(我感觉字面意思是说为了服务而去构建,就是说为了服务用户或者可以与其他研发人员进行交互而创造的一些工具)
   Build To Win:以在市场上赢得用户为目标而构建的软件。(我感觉字面意思是为了赢获胜而构建,就是说为了取得用户的信任,赢取用户而构建的软件)

8.软件工程的目标:——创造“足够好”的软件

①Bug的多少能直接衡量一个软件的开发效率,用户满意度,可靠性和可维护性。
a).用户满意度:用户在使用时发现了软件的很多问题,影响用户使用软件的效率。我感觉就是说用户对这个软件的满意程度。
b).可靠性:某个软件经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登不上去。我感觉就是它出现问题的频率或者多少。
c).软件流程的质量:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付作业。说白了就是软件团队在开发软件的过程中会遇到问题从而影响了交付。
d).可维护性:简单来说就是修复了一个问题,又出现了新的问题。
②什么是Bug?——就是软件的行为和用户的期望值不一样。而是否是Bug又取决于用户和开发者的角度。
③但是我们需要思考的一个问题是:Bug有好还是没有好?
  有些人会觉得没有Bug才是完美的。
  但是我觉得很多时候有些残缺才是更美的,毕竟没有什么能是十全十美的,有了Bug再恢复,不断的改进,成长,比完全没有Bug来的更好,也就是标题上说的“足够好”而非“完美”。

9.本书的目的:

①研发出符合用户需求的软件。(需求来自于实际即用户真正的需求,即用户要干嘛
②通过一定的软件流程,在预计的时间内发布“足够好”的软件。(一定要是日积月累的经历了一段时间的磨练,通过全体团队人员的努力的而不是突击
③能证明所发生的软件是可以维护和继续发展的。(就是可以最终实现维护并且比较详细完整的留以后续的一些活动

 

 1551308 周倩倩 15计科3班

 

Chapter 1 概论