1.1 软件 = 程序 + 软件工程
构建过程,构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构, 软件设计与实现, 还要有各种文件和数据来描述各个程序文件之间的依赖关系,编译参数,链接参数等等。
有些程序要配置不同的界面, 运行在中文,英文或其他语言的操作系统上;有些程序还有32位版本,64位版本等. 这是 源代码管理的问题也叫 配置管理。
我们还有一系列的工具、流程、和文档来保证程序的正确性,这些工具,流程应该达到很高的质量,才能保证开发出来的软件的质量. 这就是 软件质量, 具体的验证过程叫做 软件测试。
读懂已有的程序,了解程序的设计,这叫程序理解。
团队的新老成员一起修复各种各样的问题,这叫软件维护,或者服务运营。这一系列过程就是软件的生命周期,在这一周期中,有人得负责软件项目的管理。
一个好的软件,即使功能和同类软件区别不大,但却会让人感觉非常好用,这就是软件的用户体验。
软件还要处理不同语言、不同地区的用户对界面和功能的不同需求,这叫软件的国际化和本地化。
1.2软件工程是什么
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫软件开发流程。
1.2.1软件的特性
·复杂性
软件可以说是人类创造的最复杂的系统类型。大型软件有超过百万行源代码,上万的不同的文件。
·不可见性
软件工程师能直接看见源代码,但是源代码不是软件本身。
·易变性
软件要不断改变,正确修改软件是一件困难的事情。
·服从性
软件不能独立存在,他总是要运行在硬件上面。
·非连续性
许多软件系统没有连续的特性,有时输入很小的变化,会引起输出上极大的变化。
1.2.2软件工程与计算机科学的关系
计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数学逻辑密切相关;计算机科学中与实践相关的部分,都和数据以及其他学科发生关系。
软件工程的研究目标中都有“人”出现,这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。
计算机科学和软件工程的不同侧重点
计算机科学 | 软件工程 |
发现和研究长期的、客观的真理 | 短期的实际结果(具体的软件会过时) |
理想化的 | 对各种因素的折衷 |
确定性,完美,通用性 | 对不确定性和风险的管理,足够好,具体的应用 |
各个学科独立深入研究,做出成果 | 关注和应用各个相关的学科的知识,解决问题 |
理论的统一 | 百花齐放的实践方法 |
强调原创性 | 最好的、成熟的实践方法 |
形式化,追求简明的公式 | 在实践中建立起来的灵感和直觉 |
正确性 | 可塑性 |
1.2.3软件工程的知识领域
生命周期 | 软件需求、软件设计、软件构建、软件测试、软件维护 |
专门领域 | 软件配置管理、软件工程管理、软件工程过程 |
理论基础 | 计算基础、数学基础、工程基础 |
1.2.4软件工程的目标----创造“足够好”的软件
用户满意度bug:用户在使用时发现了软件的很多问题,影响了用户使用软件的效率。
可靠性bug:某个软件经常会崩溃,某个操作系统会时不时死机,某个网站往往在最需要的时候登陆不上去。
软件流程的质量bug:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。
可维护性bug:某个软件太难维护,修复了一个问题,另一个问题又出来了。也没有足够的文档,维护人员表示需要更多的资金来维护这个软件,甚至建议推到重写。
1.3练习与讨论
2.
1) 通过读软件工程师的成长,一个程序需要不断更新进步,这也要求程序员需要不断学习新技术才能不被市场淘汰,有什么比较有效的方法提升我们的能力?
2)我们应如何制定自己的职业生涯规划?
3)通过读需求分析,我在实习中发现公司的客户可能会提出一些难以实现的需求,我们是否可以拒绝?
4)通过读IT行业的创新,创新就是做和以前不一样的事,能做成也是一件不容易的事,我们如何提高自己的创新能力?
5)通过读团队和流程,在团队中每个人的职责不同处理问题的方法也不同,我们怎样才能统一意见,避免吵架?
3.
主要使用的软件:Games王者荣耀,Tools有道翻译官,Operating Systems IOS
分析Games王者荣耀
通过广告,朋友推荐成为用户,目标是盈利,通过充值购买皮肤抽奖盈利
通过App Store下载,高中时接触,它的盈利目的太强。
发现bug及时维护更新,通过不断创新玩法与同类竞争。