《构建之法》读后感


  通过一周时间对这本书的快速阅读,我对软件工程这个专业有了一种更深刻的认识.软件工程,顾名思义,就是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

  一个人的成功不是天生的,而是慢慢积累的。当然,一个优秀的程序员也是慢慢学成的;正所谓:千里之行始于足下,我们必须从最基础的开始,不仅要学会写代码,更要学会看代码,看别人的代码,发表自己的意见;并且还要学会将代码规范化,代码看了要简洁明了,让别人看了就很舒服;当代码完成后,我们在为团队成员复查的同时,要注意观察代码编写者所遇到的问题或bug,提出自己的意见。软件的开发,需要一个团队合作,而每个团队有不同的合作模式。主治医生模式,一个人负责主要设计,其他人为他负责支持;明星模式,主治医生模式的加强版;社区模式,大家共同负责,完成自己擅长的部分等等。但每个团队最后都会演变成为功能团队,具有不同能力的人平等合作,共同完成。

  软件开发,第一步要做的,便是需求分析,我们要知道做的是什么,有什么要求,不然当我们投资了许多人力、物力,到最后做出来后却没人要,白白浪费时间。所以我们事先向用户了解需求,通过焦点小组、深入面谈、卡片分类等方法调查,对功能进行定位。然后通过初始阶段了解软件系统的大概构成,系统的风险有哪些;细化阶段分析问题领域,建立健全的体系结构基础;细化阶段,团队要开发出所有的功能集,并将其变成测试验证过的产品;交付阶段,团队要确保交付的产品符合用户的实际需求。这样,才能算是完成一个合格的产品。

此书让我认识到以下几点:

一个软件的开发需要一个团队不懈的努力;团队成员首先要有一个共同目标,相互分工,共同完成,随后团队成员完成代码后,经过测试员后期不断的测试,完善代码;最后经过效能分析,改进,再分析,逐渐提高产品的性能。这样才会产生出一个符合顾客要求的合格产品。

编程软件能力不是与生俱来的,是每个软件开发师经过不断学习,慢慢学成的;每个程序员刚开始都是一个小菜鸟,都是自己积累软件开发知识,学会将代码规范化,了解软件开发过程所遇到过的问题,并在发现问题的过程中解决它,慢慢学习,慢慢的提升自己的职业技能,成为一个程序大佬。

理论与实践相结合。这本书介绍了软件工程的一些概念:单元测试、软件开发流程、敏捷开发、软件需求、用户体验、软件测试、质量保障等。作者在介绍了这些概念的同时,也详细说明了程序员在开发软件过程中与其的联系。软件工程中软件的开发包含:需求分析、设计、编码、测试和维护等方面;只有每个方面做好了,才可能做出一个好的系统。并且,作者最后还提到了IT行业非常重要的创新,时代在进步,所以创新对于我们程序员来说也很重要,我们不能墨守成规,必须勇于创新,才能不被时代淘汰。

在读完构建之法这本书后,对软件开发的整个流程有了一定的认识。在典型的软件开发流程中,从一个项目的立项到最后项目的发布,其经过了多个步骤,以此来确保项目的顺利进行。在典型开发流程瀑布模型中,为了获取软件需求,需要用常用的获取需求的方法和步骤来。而对于竞争性需求,我们需要NABCD框架来分析和获取,即需求、做法、好处、竞争和推广。对于软件功能的定位和优先级,即杀手功能、外围功能、必要需求和辅助需求,通常采用四象限方法。为了更加深入的理解用户需求,通常需要采用典型用户和场景的方法。在软件开发过程中存在两种类型的说明书:软件功能说明书和软件技术说明书,其中软件功能说明书主要用来说明软件的外部功能和用户交互情况,而软件技术说明书则用来说明软件内部的设计规范。而为了将用户的需求变成可以直接进行的开发工作并源源不断地实现这些需求,需要功能驱动的设计。软件开发的生命周期中,在不同阶段需要使用不同的测试方法,比如在远景和计划阶段进行测试计划和测试设计说明书,同时收集用户对非功能测试的需求,在开发阶段需要单元测试,功能和场景测试,建立回归测试基准,探索式测试,集成测试,同时开展非功能性的测试,在稳定阶段需要进行验收测试。为了让整个软件开发的工作更加高效,需要设置PM职位,以此来协调软件开发工作中除了开发和测试之前的一切事情。而在软件稳定和发布阶段,可以使用软件按时发布的招数:DCR与ZBB,针对出现的不同问题,可以有不同的解决方案,以便于软件的正常发布,RTW最终发布版本。而为了保证软件的质量,需要达到一定的CMMI等级。在阅读过程中,出现了一些困惑,具体如下:

1.对于软件中相互独立的几个层次,进行单元测试时层次之间有无测试顺序的问题。

2. 在实际工作中结对编程能否实现?如何分配结对编程两个人的工作量?公司如何衡量结对编程两个人的工作量。

3. 根据瀑布模型进行开发过程的后期中,如果相邻两步之间进行回溯时,之前的步骤是否需要做出改变?

4. 最终设计文档出现在程序设计、编码和测试阶段?

5. 在敏捷开发任务认领的阶段,如果一个任务比较困难,没有团队认领,该如何解决?

6. 软件版本的发布和后续bug的修复之间应该如何取舍?

7. 在竞争性需求分析中,如果我方的辅助性优势明显弱于竞争产品,那么为了持平这方面的弱势,是参照竞争产品还是?如果参照竞争产品,会不会涉嫌抄袭?

8. PM在与开发团队交流沟通时,需要具备什么样的技能?

9. 各种测试方法。单元测试过程中如何保证所测试模块的正确性,怎么提高单元测试的正确率?单元测试用例什么数目最优?在单元测试是否需要考虑极端情况?

posted @ 2023-08-01 01:08  beiqu  阅读(4)  评论(0编辑  收藏  举报