软件工程导论 第一、二、十六 章 随笔

第一章

通过阅读第一章,使我对软件工程有了更加深刻的认识,从软件的定义到发展,再到具体实现一个令大众满意的软件的流程和软件开发的各个阶段都有很详细的介绍,更是引用了航空产业的发展历程做了一个比较,使读者能够清晰的理解其含义。对于软件工程与计算机科学的关系和区别也通过现实中的例子给出了详尽的解读。

  关于问题

1、我通过阅读第一章的1.2.4节,我对于何为一个“足够好”的软件产生了疑问,足够好是不是就是说明并不完美,没有达到预期,是不是就说明这个软件没有达到客户的要求,不能令客户满意,使用户感到操做流畅、简单、给他们带来便利,是不是就说明这个软件并不好,既然它并不好那为什么软件工程的目标是创造“足够好”的软件?我通过百度搜查了足够好一词并没有对于它的具体的解释,但是我又认为没有任何缺陷的完美的软件是不存在,任何一个软件从产生到被人们接受再到广泛流传都需要经历时间的磨砺和不断地改进、完善变的更好,更满足用户的需求,但不可能十全十美毫无破绽,所以我是不是可以认为“足够好”的软件就是与完美差那么一点,近乎完美的意思,但差一点有时差多少呢,这应该也是仁者见仁智者见智的吧,真正的界限到底在哪里,谁有能真正的下的了这个定义呢?

2、第一章的1.2.4还有一个令我不能够真正理解就是对于‘’bug”这 一词的解释,对于书中的写法我是这样理解的,在大家把软件的缺陷叫做bug之前有不少工程用bug来统称系统中的问题,简单的说,软件的行为和用户的期望值不一样,就叫做bug,而是否是bug又取决于用户、开发者的不同角度。在阅读了以上内容后我是不是可以这样理解,只要我认为那个地方是bug那个地方就真的是bug,事实证明肯定不是这样,同一个问题不同的人肯定有不同的想法,专业人士和非专业人士肯定会有不同的观点。对于到底什么样的问题才算bug,我进行了搜索,得出了我的结论,bug一词有其自身本来的作为英文单词的本意,然而其在其他各个方面也有其含义,例如,其在程程序设计方面、游戏方面更有其惊精益的解释,

由此可以看出对于bug一词,现在已经不单单用在一个方面,它存在于生活中方方面面,对于什么是bug也就各有千秋了。

第二章

通过对第二章的阅读,让我对于一个软件的测试流程以及到底生么样的软件才是一个好的软件有了一个全新的认识,而且对于软件的效能分析的方法和个人软件开发流程也有了一定的了解,同时对于软件的设计原则也有了清晰地认知。

关于问题

1. 通过读第二章2.1节的阅读我对于“单元测试”一词并不是特别理解,对于单元和模块的概念也不是十分的清晰,我大概理解单元测试的目的是为了找出软件中的不足之处也可以说是各个模块之间配合的不尽人意的地方,但是我感觉自己对单元测试的流程以及具体的操作仍然感到很迷茫,就像是第二十三页的最后一行,我对于这时候的代码还有很多情况没有处理,例如,还没有:处理空的字符串、长度为零的字符串,都是空格的串·····   这句话就不是特别理解为什么是这样。

对于单元测试,我进行了搜索,得到了以下内容,我个人认为对于我理解单元测试一词有了助益,让我理解了单元测试的单元的具体含义有了清晰的认知。

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。

经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。

2、对于第二章的2.4节中描写软件设计原则中的开放-封闭原则中的允许扩展和不允许修改有一定的疑问,与我理解的可扩展与不可修改有一定的区别,书中是这样写的允许扩展(Open for extension):当应用需求发生改变时,我们可以对模块进行扩展,从而改变模块的功能。不允许修改(Closed for modification)对于这两句话的我个人的理解是这样的,当用户对于软件有新的要求的时候,我们可以对软件的功能在原有的基础上进行增加,而不改变原有模块所具有的功能,扩展过后该模块只是增加了一个功能而已。

以下为我在他人博客中找到的对于这一原则的解释是我对于这一原则又有了新的认识

对扩展 开放 对修改关闭

1、多使用继承的方式去修改原有行为,而不是直接修改,在子类中定义拓展的方法

2、多用多态的形式,去复用(父类用virtual定义多态方法,子类用override重写方法,实例化指向子类的父类对象,调用方法就可以实现多态)

3、一个变量 我们不要直接去修改 而是用方法的形式

第十六章

通过对第十六章的阅读使我对于创新又有了更加深刻地认识,不是只要另辟蹊径就会成功,所有的创新都是在对于这一领域有了深厚的基础下的产物,每个人都喜欢创新,想要去尝试创新,既然是创新,那就没有所谓的前车之鉴,因此最后是走向成功还是遗憾落败都是未知。对于IT行业,创新更加是必不可少的的一环,一味循规蹈矩,稳中发展终究会被时代的大潮淘汰掉,只有敢于创新,勇于创新,才会在未来的道路上走得长远,技术的创新是必不可少的,当然只有好的成功的团队才会有好的想法,有好的想法距离创新就更进一步。

 关于问题

大家都停了很多创新者的故事,有些人会想,他们真了不起,第一个想出了这些美妙的想法,要是我早生几十年也第一个实现那些想法就好了,其实事实并非如斯,真正的创新者都是有深厚的对于该行业的知识基础做背景的,他们的成功并不是一蹴而就的,但也并实说要成为领域专家才可以创新,就如书中的例子,物理学家也可以完成计算机领域的的创新,有时候领域内的专家没有领域外的专家那么有创意,可能是因为领域内的专家禁锢在一个圈子里了,也许就是一个他们认为很简单的东西,就改变了世界,换一个角度,也许会有不可思议的发现。对于大部分成功的创新者都不是先行者这一观点,从本质上讲,先行者是一个垄断者。理论上,先行者可以向消费者收取高额费用,并且不用担心由于竞争产品的很快出现而降价。实际上,创新者经常是宁可牺牲收益来换取更多的用户数量,况且垄断的状态是暂时的。

原文地址:https://www.cnblogs.com/zhengcy0521/p/8588268.html

时间: 2024-08-25 12:25:31

软件工程导论 第一、二、十六 章 随笔的相关文章

算法导论_第十六章_动态规划_creatshare分享会

动态规划 注:该篇为本人原创,转载请注明出处:http://blog.csdn.net/chudongfang2015/article/details/51590817--开心 -.- 个人对动态规划的理解: 1.动态规划是一个付出额外空间来节省时间,就是所谓的空间换时间. 2.动态规划储存每个状态的最优解. 3.动态规划是用来把子问题的结果储存下来,再次用到的时候就不必再进行重复计算. 算法导论对动态规划的解释: 动态规划和分治方法相似,都是通过组合子问题的解来求解原问题,分治方法将问题划分为

算法导论笔记——第十六章 贪心算法

通常用于最优化问题,我们做出一组选择来达到最优解.每步都追求局部最优.对很多问题都能求得最优解,而且速度比动态规划方法快得多. 16.1 活动选择问题 按结束时间排序,然后选择兼容活动. 定理16.1 考虑任意非空子问题Sk,令am是Sk中结束时间最早的活动,则am在Sk的某个最大兼容活动子集中. 16.2 贪心算法原理 设计贪心算法步骤: 1>将最优化问题转化为这样的形式:对其做出一次选择后,只剩下一个子问题需要求解. 2>证明作出贪心选择后,原问题总是存在最优解,即贪心选择总是安全的. 3

构建之法第一、二、十六章

<构建之法>第一.二.十六章疑问 我通过阅读发现这是一本十分有趣的书.不同于别的书的晦涩难懂,<构建之法>利用浅显易懂的语言,贴近生活的例子向我们讲述了软件工程的内容. 第一章  概论 软件=程序+软件工程 扩展:软件企业=软件+商业模式 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营.和维护上的过程.软件的特殊性有a.复杂性 b.不可见性 c.易变性 d.服从性 e.非连续性.软件工程与计算机科学的区别:计算机科学中与实践相关的部分,都和数据以及其他学科发生关系:

《构建之法》读书笔记之:第一、二、十六章

这周看了邹欣老师<构建之法>的1,2,16章,获益匪浅.这本书写得妙趣横生,用阿超小飞几个人的生活场景和幽默的比喻帮我理解着软件工程的相关概念,让我对软件工程有了初步的了解:原来开发软件并不是我们想的那样简单:上手直接敲代码就可以了,而是会有一套详细的流程规范.下面是我看书时的一些心得笔记,和一些无法自己解答的疑惑,烦请各位老师批评指教. 第一章: 笔记: 软件=程序+软件工程,是否可以通俗地理解为,程序只是死的机器的东西,为什么做(需求分析),做什么(软件设计),做完后这东西是否可行(软件测

读《构建之法》之一,二,十六章有感

大二下学期已经过去两周了,个人感觉,课程方面压力与动力并存,相信一步一步走下去终将得到自己的一份收获. 这几天阅读了<构建之法>的第一,二,十六章,我个人的阅读速度应该属于比较慢的那种,遇到什么不确定的,不理解的概念总要停下来好久,各种百度,否则继续阅读的时候总有种急躁的感觉,老想着前面的停顿,到头来一头雾水,还是跑去理解前面的概念.作业中关于精读的part1,2,3一开始我觉得可能不适合我这种节奏慢又钻牛角尖的,但贵在尝试,以前我的阅读习惯是只读一两遍,虽然第一遍把不理解的概念都慢慢弄明白了

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false. do-while循环的通过格式: do {   statements } while condition 我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的: let finalSquare = 25 var bo

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

关于构建之法第一、第二与第十六章阅读疑惑

第一章.概论 原文的1.2.1节中有说到软件的不可见性,其中有这么一段描述:"商用软件出现了错误,工程师可以看到程序在出错的一瞬间留下的一些痕迹(错误代号.大致的目标代码位置.错误信息),但是几乎无法完整的重现到底程序出现了什么问题."言下之意就是在调试程序时我们很难知道程序到底出了什么问题,对此我有一些疑问.百度百科与搜狗搜索中并没有软件的不可见性的词条,我只能通过自己的理解来理解这句话.在我自己的编写代码经历里,当代码出现了问题时,我可以在编译器中很直观地知道问题的代码是哪些, 可

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin