热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

事实与谎言-软件工程

人(People)1)程序员的质量是软件工作中最重要的因素2)最好的程序员最多可能有28倍于最差的程序员3)延迟的项目后期加人手只能使项目

(People)

1)        程序员的质量是软件工作中最重要的因素

2)        最好的程序员最多可能有28倍于最差的程序员

3)        延迟的项目后期加人手只能使项目交付工期延迟的更多

4)        工作环境对生产力和质量有深刻的影响

工具和技术 (Tools and Techniques)

5)        工具的宣传和广告是软件公司的灾难

6)        使用新的工具和技术起初会损失一点生产力和质量

7)        软件开发人员对工具谈论的很多却实际使用的很少

项目估计 (Estimation)

8)        失败的项目的两个原因之一就是糟糕的项目估计

9)        项目估计常常在错误的时间发生

10)     项目估计常常由错误的人完成

11)     项目估计很少在项目进行中进行修正

12)     项目管理人员往往和开发人员脱节

13)     可行性研究的回答永远是‘Yes

重用 (Reuse)

14)     小规模的重用就是一个解决的问题

15)     中规模的重用主要是一个没有解决的问题

16)     大规模的重用在产品家族或相关系统中最能体现出来

17)     可重用的组件比一般组件开发难度大三倍

18)     对可重用代码的更改特别具有出错的倾向

19)     代码重用问题的解决方案是设计模式重用

需求 (Requirements)

20)     失败的项目的两个原因之一就是不确定的需求

21)     需求的理解错误是生产中修正代价最昂贵的

22)     需求错误的修正中最难修正的就是需求丢失

设计Design

23)     当模糊的需求增长的时候,相应解决方案产生的需求呈现爆炸性的增长

24)     很少有一个软件问题的最佳解决方案

25)     设计是复杂的螺旋的过程,初始的设计通常是错误的,至少肯定不是最佳的

编码Coding

26)     设计者的初衷很少和编码者的初衷相匹配

27)     COBOL是非常糟糕的语言,但其他语言更糟糕

28)     修正错误 (Error Removal)

29)     修正错误是软件生命周期中耗时最多的

测试 (Testing)

30)     软件测试通常只有55%-60%的覆盖率

31)     100%的覆盖率也远远不够

32)     测试工具是关键,但很少被使用

33)     自动化测试很少能做到,大部分测试活动不能被自动化

34)     程序员写的内嵌的调试代码是测试工具的重要补充

代码检查Reviews and Inspections

35)     严格的代码检查可以在进行测试之前去除最多90%的错误

36)     严格的代码检查不能代替测试

37)     项目交付后的Review,项目完工后的总结非常重要但很少发生

38)     检查不仅是技术上的,也有设计上的,流程上的,和项目管理上的。

维护Maintenance

39)     维护通常占到40%-80%的软件成本。这可能是软件生命周期中最重要的。

40)     功能增强(Enhancements)占到维护成本的60%

41)     维护性是整体解决方案的一部分,而不是一个后来才出现的问题

42)     对现有软件的理解是维护中最困难的部分

43)     更好的方法带来更好的维护性,而不是更麻烦

质量Quality

44)     质量是属性的集合

45)     质量不是用户满意,而是满足设计需求,符合项目计划和成本要求,以及可靠性。

可靠性Reliability

46)     很多错误是大部分程序员都会犯的

47)     很多错误很可能聚集在某处

48)     没有单个的最佳方案来解决所有问题

49)     错误永远存在。目标应该是最小化错误,或者消除严重的错误,不影响软件的正常使用。

性能Efficiency, performance

50)     高性能更多的来源于优秀的设计而不是编码

51)     高组织的高级语言代码最多能获得90%的汇编程序性能

52)     提高性能需要在时间和空间上做折中 (Tradeoffs)


推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了关于汉庭酒店价格的知识点,提供了一篇由congdi7904投稿的技术文章,希望能帮到读者解决相关技术问题。同时还提供了汉庭酒店的官方链接和转载信息。请注意,引用汉庭酒店需遵循CC 4.0 BY-SA版权协议。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
author-avatar
mobiledu2502902687
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有