初学《软件工程》的疑问

问题1.

软件工程与C语言之间有怎样的关系?为什么软件工程不是只掌握编程语言就足够了?

提出问题的原因:在大一时学习了C语言的语法和编程技巧,到了大二,学习软件工程专业,还是有些不清楚软件工程与编程语言的不是很强的关联性。老师说本学期学习的《软件工程》这门课程将不会讲编程基础。好奇如果不讲编程基础,这门课将会有怎样的内容。

来源:“程序设计语言的性能和编码风格在很大程序上影响着软件的质量和维护性能,即对程序的可靠性、可读性、可测试性和可维护性产生深远的影响,所以选择哪一种程序设计语言和怎样来编写代码是要认真考虑的。”——《软件工程》李爱萍 崔冬华 李东生

 

问题2.

为什么需求分析是软件开发中如此重要的一步,它与其他阶段的关系是什么?

提出问题的原因:想要了解需求分析在软件开发中的重要性以及它与其他阶段的关系。是因为了解在软件开发过程中,需求分析阶段往往被忽视或者被低估了其重要性,导致后续项目出现问题或者失败的情况。

来源:“需求分析是软件计划阶段的重要活动,也是软件生存周期中的一个重要环节,该阶段是分析系统在功能上需要“实现什么”,而不是考虑如何去“实现”。需求分析的目标是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整。清晰规范的文档,确定软件需要实现哪些功能,完成哪些工作。此外,软件的一些非功能性需求(如软件性能、可靠性、响应时间、可扩展性等),软件设计的约束条件,运行时与其他软件的关系等也是软件需求分析的目标。”

 

问题3.

为什么软件测试是软件开发过程中的重要环节?有哪些常见的软件测试方法和技术?

提出问题的原因:看书时觉得:如果做到编写程序的人员多检查几遍,是不是就能让软件测试在软件开发过程中的比重降低?但是为什么书里说“程序人员尽可能避免测试自己编写的程序”?如果测试这么重要,那一定是经过了前人的验证及经验总结,那么有那么常见的软件测试方法和技术呢,这些方法和技术都有哪些优缺点和时代局限性?是否能快速上手,是否有很高的学习门槛,是否软件测试工作人员很容易被替代?

来源:

程序人员尽可能避免测试自己编写的程序,程序开发小组也尽可能避免测试本小组开发的程序。如果条件允许,最好建立独立的软件测试小组或测试机构。其原因在于,测试工作需要严格的精神、客观的态度和冷静的情绪。做好测试工作不能凭主观的臆想和愿望。实际上,人们常常由于各种原因具有一种不愿否定自己工作的心理,认为揭露自己程序中的错误总是一件不愉快的事情。闻过则喜的要求难于让一般人做到。显然,这一心理状态会成为完成自己编写程序测试代码工作的障碍。正如工厂产品的检验工作一样,应有专职的检验人员负责。假定哪个工厂把产品质量的检验任务完全交给生产工人,其结果势必导致产品质量的大幅度下降。学术论文或著作的编写者与审阅者的关系也是类似的。

 

问题4.

选择编程语言时应该注意什么?

提出问题的原因:编程语言有很多,也有机器语言,汇编语言,高级程序设计语言,那么该如何根据软件需求确定使用哪种编程语言,在选择选择编程语言时应该注意什么?

来源:书本。7.2.1程序设计语言的发展过程

第1代语言是与机器密切相关的机器语言,用它编写的程序都是以二进制代码形式存在的机器指令,难读、难写、难记,而且出错率很高,但它突出的优点是运行效率十分高。

第2代语言是比机器语言更为直观的一些汇编语言。它的每一条助记符指令都和相应的机器指令相对应。并且增加了一些含有宏、符号地址等特殊功能的指令,可由机器分配和使用存储空间等资源。

不同的处理器系统有自己的一套汇编语言。用汇编语言书写的程序执行速度仅次于机器语言,适用于实时过程控制场合。

第3代语言是比汇编语言更贴近于人类语言的高级程序设计语言。其特点是易读、易写、易认、可移植性强。这类语言的表示如下:

(1)基础语言。如BASIG、FORTRAN,COBOL、ALGOL60等

(2)结构化语言。如C、PASCAL、PL/1和Ada等。

(3)面向对象语言。如Smalltalk、C++、Java等。

(4)专用语言。如APL、Lisp、PROLOG等。

第4代语言(4GL)将语言的抽象层次提到了一个新的高度,已不再涉及太多的算法

性细节。4GL具有如下一些特点:

(1)友好的用户界面。用户界面友好是指操作简单,使非计算机专业人员也能方便地使用它。

(2)完备的数据库。多数与数据库系统相结合,可直接对数据库进行操作,即在4GL在选择程序设计语言时,第一个需要考虑的是语言的技术特性,因为技术特性对软件工程各阶段都有一定的影响,特别是确定了软件需求之后,程序设计语言的特性就显得非常重要了,要根据项目的特性选择相应特性的语言。如Ada,Smalltalk,C++等支持抽象类型的概念;Pascal,C等允许用户自定义数据类型,并能提供链表和其他类型的数据结构,根据这些程序设计语言的不同特性,将其应用到不同的项目中。如有的要求实时处理能力强,有的要求提供复杂的数据结构,有的要求能方便地进行数据库的操作等。软件的设计质量一般与语言的技术特性关系不大(面向对象设计除外),但将软件设计转化为程序代码时,转化的质量往往受语言性能的影响,可能会影响到设计方法。例如,设计某企业的一个设备状况管理系统的软件,需要软件能够很好地和数据库后台(Oracle 或S01 Server)相连接,而且要求用网页的形式与多个用户进行沟通,考虑到运行效率、支持可视化的运行环境、开发周期要短等因素,从编程语言的特性考虑,选用C#或JAVA较适合该系统的开发。Java技术有下列优点:简单、面向对象、分布式、解释执行、健壮、安全、体系结构中立、可移植、高性能、多线程以及动态性。

 

问题5.

软件测试是不是一定就要尽力做到当下无错误?

提出问题的原因:

软件测试对于企业家来说应该是越少错误越好,这样使用者会有更好的使用体验,也会让该软件发挥更大的经济效益,看到书本里应该避免过度测试,会有些疑惑。

来源:

书本第189页

(3)程序人员尽可能避免测试自己编写的程序,程序开发小组也尽可能避免测试本小组开发的程序。如果条件允许,最好建立独立的软件测试小组或测试机构。其原因在于,测试工作需要严格的精神、客观的态度和冷静的情绪。做好测试工作不能凭主观的臆想和愿望。实际上,人们常常由于各种原因具有一种不愿否定自己工作的心理,认为揭露自己程序中的错误总是一件不愉快的事情。闻过则喜的要求难于让一般人做到。显然,这一心理状态会成为完成自己编写程序测试代码工作的障碍。正如工厂产品的检验工作一样,应有专职的检验人员负责。假定哪个工厂把产品质量的检验任务完全交给生产工人,其结果势必导致产品质量的大幅度下降。学术论文或著作的编写者与审阅者的关系也是类似的。

(4)测试用例的设计必须兼顾有效输入与无效输入。在测试程序时,人们常常只注意到合法的和想象得到的输入情况,而忽视了那些不合法的和预想不到的输入情况。实际上,一个软件在投入运行以后,一些意外的输入常常是会遇到的。最简单的例子是用户在键盘上按借了键或打人了非法命令。如果我们开发的软件遇到这种情况不能作出适当的反应,给出相应的信息或是给出了无意义的信息,都不能说这个软件可以正常工作了。显然,软件系统处理非法命令的能力也必须在测试时受到检验。在按意外的方式使用开发了的软件时,常常会发现一些问题,有时会比用合法的方式进行测试,其查错的收获还要大些。

(5)检验一个程序是否做了该做的事,仅仅是测试的一个方面,另一方面还要检验程序是否做了不该由它做的事。我们测试程序时,必须注意检查是否有多余的副作用。通常情况下,多余的工作是无意义的,而且有时还是有害的。

(6)测试时不要被开始发现的若干错误所迷惑,找到了几个错误就以为问题已经解决了,不需要继续测试了。经验表明,程序中存在错误的概率和已经发现错误的个数大致成正比关系。这个事实还可用米中含砂的情况做比喻,当我们发现手中抓到的一把米里有砂时,绝不表示米袋中混入的砂粒仅此几个。并且如果有两袋米,各抓出一把。其中多砂的一把,预示着那一袋中的含砂量要更多些。

(7)测试工作限于人力和物力条件,只能进行到一定程度,适可而止。过度测试常常是不合算的。

(8)测试完成后,应注意保存测试用例,而不要随意将其丢掉。这些测试用例无论是否发现了程序错误,都是经过精心设计的。保留已用过的测试用例,将会给重新测试带来方便,对于所编写的测试结果报告也是重要资料。

来源于《软件工程》姜楠 马蕾

 

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值