(一)《构建之法——现代软件工程》
第一章 概论 (计算机相关术语整理)
1.1 软件=程序+软件工程
程序在这里指源程序,程序还要对数据进行操作,这些操作有时候是静态的,有时候是动态的。但是光有代码和静态数据还不行,工程师要把它们构建成机器能懂的可执行代码。构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构(Software Architecture)、软件设计与实现(Software Design,Implementation and Debug)、还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等等,这些都是构建的过程。
怎么保证软件在修改过程中质量不断提高,至少要维持以前的质量的问题被称为源代码管理(Source Code Control)又叫 配置管理(Software Configuration Management)
用一系列高质量的工具、流程、文档来保证程序的正确性,这就是 质量保障(Quality Assurance),具体的验证过程叫做软件测试(Test)
把合适的需求梳理出来,然后逐步展开后续工作被叫做需求分析(Requirment Analysis)
团体里的新成员要尽快读懂已有的程序,了解程序的设计,这叫 程序理解(Program Conprehension)
软件运行过程中还会出现这样那样的问题,我们要时不时的给软件打一个补丁,或者维护众多的服务,团队的新老成员要一起修复各种各样的问题,这叫服务运营(Service Operation)
以上一系列的过程就是软件的生命周期(Software Life Cycle,SLC)
在这一周期中,有人得负责软件项目的管理(Project Management)、
一个好的软件,即使功能和同类软件区别不大,但却会让人感觉到非常好用,这就是用户体验(User Experience)
软件还要处理不同语言、不同地区的用户对界面和功能的不同需求,这叫软件的国际化和本土化(Globalization&Localization)
广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等
软件=程序+软件工程、
软件企业=软件+商业模式
软件开发的不同阶段:
- 玩具阶段
- 业余爱好阶段
- 探索阶段
- 成熟的产业阶段
1.2 软件工程是什么
软件工程师把系统的有序的,可量化的方法应用到软件的开发、运营和维护上的过程
软件工程包括下列领域:软件需求分析、软件设计、软件构件、软件测试、软件维护
人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系,将这些相关的技术和过程统一到一个体系中,叫做软件开发流程
软件工具:编译工具、源代码管理工具、源代码编辑工具、软件工具系统(Microsoft Visual Studio、GitHub、Eclipse、CLearCase、ClearQuest等)
1.2.1软件工程的特殊性
软件分类方法:
- 系统软件:操作系统、设备驱动程序、工具软件等
- 应用软件:用户使用他们能来完成工作、从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等
- 恶意软件:软件病毒等
软件开发过程难点:
- 复杂性(Complexity)
- 不可见性(Invisibility)
- 异变性(Changeablility)
- 服从性(Conformity)
- 非连续性(Discontinuity)
1.2.2软件工程与计算机科学的关系
- 计算机科学和软件工程的不同侧重点
计算机科学 | 软件工程 |
发现和研究长期的客观的真理 | 短期的实际结果(具体的软件会过时) |
理想化的 | 对各种因素的折衷 |
确定性、完美、通用性 | 对不确定性和风险的管理,足够好,具体的应用 |
各个学科独立深入研究,做出成果 | 关注和应用各个相关学科的知识,解决问题 |
理论的统一 | 百花齐放的实践方法 |
强调原创性 | 最好的、成熟的实践方法 |
形式化,追求简明的公式 | 在实践中建立起来的灵感和直觉 |
正确性 | 可靠性 |
1.2.3 软件工程的知识领域
生命周期:
软件需求、软件设计、软件构建、软件测试、软件维护
专门领域:
软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量
理论基础:
计算基础、数学基础、工程基础
1.2.4 软件工程的目标——创造“足够好”的软件
所谓好软件,就是没有缺陷(Bug)
所谓软件工程,就是把软件中的Bug都消灭的过程。
Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性
————————————————————————————————————————
(二)P18-2
1.在P27中有一句话,“为了保证代码覆盖率,单元测试必须测试公开的和私有的函数\方法,”对此,我有一点疑惑,对于需要进行单元测试的代码,我们应该怎样选择进行代码覆盖的方法,并且能够保证其代码覆盖率达到100%并且涵盖所有可能性?
2.书中P68中 “注释(包括所有源代码)应该只用ASCII字符,不要用中文或者其他特殊字符,否则会极大的影响程序的可移植性。”但后文中有提到“在现代编程环境中,程序编辑器可以设置各种美观得体的字体"如果用中文或其他特殊字符会影响程序的移植性,为什么现代编程环境还要允许设置各种字体?虽然极大的方便了人们的阅读和修改,但对于程序本身有影响的做法就应该提倡吗?或者在现代编程环境中可以做到忽略其影响?
3.书中P76中提到”做标记是一个不错的方法,但是如果开发者光记得做标记,最后却没有真正去研究和改正这些潜在的问题……“这里作者表达的意思是否支持做标记这一方法?我觉得是否可以通过其他的标记形式来简化标记含义,从而达到高效快速的目的,从而有时间去考虑对于潜在问题的优化和改进。
4.P77 设计规范部分中 我认为注意事项里是否可以加入“代码功能是否能够兼容各大主流平台”这一条内容,以及第五条中”因为源代码控制已经保存了原来的老代码“这句话的意思是什么?是这些被注释掉的代码在源代码中都有记录不需要在后续相关代码中展现,还是说仅仅是保留了目前有用的代码?
————————————————————————————————————————
(三)P18-3
工具软件:画图、WPS Office、应用宝、高德地图、去哪儿旅行、滴滴出行、交通银行、中国工商银行、工银e融联、中国银行、课程格子、c语言编译器、讯飞输入法、周公解梦、计算器、掌上WeGame、百度网盘、百度文库、qq邮箱、滨州掌上公交、码码通、网喵、U净、美柚、薄荷健康、知网、百度贴吧、有道翻译官
购物消费:饿了么、支付宝、手机淘宝、美团、闲鱼、省钱快报、网易考拉、
社交软件:qq、微信、微博
音乐软件:网易云音乐、喜马拉雅FM、酷狗音乐、全民K歌、唱鸭
娱乐软件:哔哩哔哩、爱奇艺、腾讯视频、芒果TV、韩剧TV、抖音、B612咔叽
学习软件:知乎、中国大学MOOC、运动世界校园、驾考精灵、考研帮、扇贝单词、网易有道词典、
阅读软件:今日头条、书旗小说、晋江小说、
游戏软件:扫雷、布林机、开心消消乐
对于微信的分析
1)界面简洁、私密性高,最开始并不以盈利为目的,仅仅为了提供一个免费的即时通讯服务
2)通过下载获得该软件,当时在上初中,使用下来感觉对于传输文件这方面还不是很方便,QQ相对而言做得更好一些,而且在登陆账号这一方面有很大限制,不过在社交通讯这一方面给人的使用感还是很不错的。
3)通过接受用户反馈意见及建议上传至后台处理,系统会自动更新应用版本。
4)通过不断更新新的功能,提高软件的实用性、便利性来提高软件的竞争力。
来源:https://www.cnblogs.com/Xyz0314777/p/11482097.html