201771010130-王志成 实验一 软件工程准备—软件工程初学

项目 内容
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/)
这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/12369881.html)
作业学习目标 学习博客园软件开发者学习社区使用技巧和经验;了解Github的基本操作。浏览《现代软件工程—构建之法》
这个作业在哪些方面帮助我实现学习目标 通过通读构建之法来提出自己不解的问题
参考文献 邹欣.构建之法:现代软件工程[M].人民邮电出版社,2014.

按老师要求浏览了《现代软件工程—构建之法》一书,通过浏览使我对软件工程这门课程有了全新的认识,这门课程不是由代码所堆积起的一门课程,一个软件的诞生是软件 = 程序 + 软件工程结合,而这本书则主要讲述了构建管理,源代码管理,软件设计, 软件测试,项目管理这些软件工程的核心部分。以下是引用《现代软件工程—构建之法》对软件工程基本概念的解释。

程序,在这里指的是源程序,就是一行一行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法。但是光有代码还是不行的,这些一行一行的代码不会自己运行,得有人编译成机器能懂的目标代码,而编译不仅仅是 cc 和 link 命令,对于一个复杂的软件,我们不但要有合理的软件架构(Software Architecture), 软件设计和实现 (Software Design & Implementation), 我们还要用各种文件来描述各个程序文件之间的依赖关系,编译参数,链接参数,等等。这些都是软件的构建。
软件团队的各个人员每天都在不断地修改各种源代码,怎么保证软件在不断的修改中能保证质量,不至于崩溃? 有些时候,我们要为某个需求写一些特殊功能,然后不久要把这些功能再合并回主要版本。有些程序还有32 位版本, 64位版本, 等等。 这是源代码管理 (Source Code Control) 的问题 – 有时候也叫配置管理 (Software Configuration Management)。我们还有一系列的工具和程序来保证程序的正确性,这些工具和程序本身应该更正确,才能保证别的软件的质量,对么? 这质量保证的工作叫Quality Assurance, 也叫软件测试 (Testing).
一个软件要有人买,就得先找到顾客,顾客有各种需求,有些靠谱,有些不靠谱,我们要把这些靠谱的需求都实现了,一群人要从需求分析 (Requirement Analysis) 开始,忙碌各种事情, 例如设计(软件架构),实现(写数据结构和算法),测试,到最后发布软件, 软件在运行过程中还会出这样那样的问题, 也许我们要时不时给软件打一个补丁, 这叫软件的维护(Software Maintenance)。这一系列过程就是软件的生命周期 (Software Life Cycle, SLC), 有人得负责软件项目的管理 (Software Project Management)。
一个好的软件,即使功能和同类软件区别不大,但是会让人感觉到非常好用。这就是软件的“用户体验” (User Experience) 特别好。用户体验和数据结构,算法没什么关系,但是很多非常成功的软件就赢在这个方面。
--引用自《现代软件工程—构建之法》

以下是我的在浏览《现代软件工程—构建之法》时产生的三个问题,希望可以在今后的学习中得到解决。

问题一

在本书的第二章第一节单元测试

单元测试应该覆盖所有代码路径 单元测试应覆盖所测单元的所有代码路径,
包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数和方法。
要注意的一点是:100%的代码覆盖率并不等同于100%的正确性。在下面的情况下,100% 的覆盖率和100% 的正确性不是同一回事:

a) 代码中并没有处理错误情况。 例如代码打开了文件,但是并没有处理一些异常情况,例如文件不存在,权限有问题,等等
b) 代码中有效能问题,虽然代码执行了,并且也正确地返回了。但是代码执行得也许非常慢。
c) 多线程环境中的同步问题, 这个问题和本地代码执行与否关系不大。
d) 其它和外部条件相关的问题 (例如和设备相关,和网络相关的问题)

  • 最初我想问什么是代码覆盖率?

  • 通过查阅资料得 代码覆盖(英语:Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。

  • 而且100%的代码覆盖率并不等同100%的正确性,那么要怎么样才能保证100%的正确性?这是我想通过课堂解决的一个问题。

问题二

在第二章第三节个人开发流程中

  • 个人软件过程(Personal Software Process,PSP)是一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP与具体的技术(程序设计语言、工具或者设计方法)相对独立,其原则能够应用到几乎任何的软件工程任务之中。PSP能够说明个体软件过程的原则; 帮助软件工程师作出准确的计划;确定软件工程师为改善产品质量要采取的步骤;建立度量个体软件过程改善的基准;确定过程的改变对软件工程师能力的影响。

  • 对于PSP在我的理解中,PSP是在工程师开发的过程中记录自己软件的过程,就如同写博客来记录自己的学习或工作历程一样,但PSP是否只是单纯的记录自己的代码编写中的一些基本数据,还是有其他更深的作用,在网上查询相关概念后,发现细节部分写的很复杂,希望通过上课来寻求PSP的本质含义。

问题三

在第十二章第一节中用户体验中

我们大家平时都说要向某某大师或某某产品学习, 把最重要的功能做好交给用户,把那些无关紧要的功能藏起来, 做减法... 但是程序员们心里还是想把高级功能 “秀”出来。 我们都用过各种电视/DVD 播放器的遥控器,功能很强,按钮很多吧? 你有没有注意到老人家用遥控器时的困难?

  • 对于这段话和结合本书当我们需要做的产品需要面向不同的用户,让我对用户的体验重要还是完成一个功能全面的软件重要有所疑惑,基于现在大多数软件都是面向一些不懂电脑和不懂手机的用户,让这些用户可以满足某种需求,如果设计过于复杂的软件,可能会有很多好的技术,让人获得更好的体验但用户可能并不会去使用,他们可能面对那么多的功能只使用自己需要的,对很多功能不予理睬,那么在开发过程中花费那么多的精力去实现一些常人不去使用的东西是否有点浪费。但如果只是为了追求现在用户的体验,不去创新那么技术发展的步伐也就停滞不前了.

  • 所以对于注重用户体验,还是软件功能全面是我想去寻求的问题。从而也就想知道那么什么是一个好的软件工程,怎样衡量一个好的软件工程。

小结

通过完成实验一的相关任务,也算是对软件工程这门课程有了大概的认识,也对所需要的相关工具有了基本的运用如博客园,代码托管工具Github以及Markdown编辑器的运用,同时通过通读《现代软件工程—构建之法》一书让我明白软件工程所学内容的基本框架。面对自己所困惑的问题希望在今后的学习中得到解决。

原文地址:https://www.cnblogs.com/847118824wang/p/12383271.html